public bool OpenInput()
{
// make sure object isnt disposed.
CheckDisposed();
// close the open desktop.
if (DesktopHandle != IntPtr.Zero)
{
// attempt to close the desktop.
if (!Close()) return false;
}
// open the desktop.
DesktopHandle = OpenInputDesktop(0, true, AccessRights);
// something went wrong.
if (DesktopHandle == IntPtr.Zero) return false;
// get the desktop name.
DesktopName = GetDesktopName(DesktopHandle);
return true;
}