„Ukrywanie” kursora systemowego

TŁO:Próbuję utworzyć aplikację „ukrywanie myszy”, która ukrywa mysz użytkownika przed ekranem po upływie określonego czasu.Próbowałem wielu rzeczy i używałemSetCursor ukrywa tylko mysz przed bieżącą aplikacją, moja musi być w stanie usiąść na tacy (na przykład) i nadal działać.Myślę, że znalazłem rozwiązanie z SetSystemCursor z wyjątkiem jednego problemu.MÓJ PROBLEM:Muszę być w stanie przechwycić dowolny rodzaj kursora myszy i zastąpić dokładnie ten sam rodzaj kursora myszy.Podczas wymiany myszy muszę podać identyfikator typu myszy, który chciałbym zastąpić myszą, do której odwołuje się uchwyt, ale żadna z używanych przeze mnie funkcji nie dostarcza skopiowanego identyfikatora myszy (lub typu) .MOJE PYTANIE:Czy byłoby wystarczające, aby kontynuować to w ten sposób, ale najpierw przesuń mysz na 0,0, ukrywając ją i przesuwając ją z powrotem do pierwotnej lokalizacji podczas ukrywania? (Odsłanianie odbywa się po prostu przez przesunięcie myszy)Czy mysz o 0,0 zawsze będzie myszą OCR_NORMAL? (Standardowa strzałka.)Jeśli nie, w jaki sposób można znaleźć typ / identyfikator myszy, aby umożliwić mi zastąpienie właściwej myszy odpowiednim uchwytem?ŹRÓDŁO:
<code>[DllImport("user32.dll")]
public static extern IntPtr LoadCursorFromFile(string lpFileName);
[DllImport("user32.dll")]
public static extern bool SetSystemCursor(IntPtr hcur, uint id);
[DllImport("user32.dll")]
static extern bool GetCursorInfo(out CURSORINFO pci);

[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public Int32 x;
public Int32 y;
}

[StructLayout(LayoutKind.Sequential)]
struct CURSORINFO
{
public Int32 cbSize;        // Specifies the size, in bytes, of the structure. 
// The caller must set this to Marshal.SizeOf(typeof(CURSORINFO)).
public Int32 flags;         // Specifies the cursor state. This parameter can be one of the following values:
//    0             The cursor is hidden.
//    CURSOR_SHOWING    The cursor is showing.
public IntPtr hCursor;          // Handle to the cursor. 
public POINT ptScreenPos;       // A POINT structure that receives the screen coordinates of the cursor. 
}

private POINT cursorPosition;
private IntPtr cursorHandle;
private bool mouseVisible = false;
private const uint OCR_NORMAL = 32512;

//Get the current mouse, so we can replace it once we want to show the mouse again.
CURSORINFO pci;
pci.cbSize = Marshal.SizeOf(typeof(CURSORINFO));
GetCursorInfo(out pci);
cursorPosition = pci.ptScreenPos;
cursorHandle = CopyIcon(pci.hCursor);

//Overwrite the current normal cursor with a blank cursor to "hide" it.
IntPtr cursor = LoadCursorFromFile(@"./Resources/Cursors/blank.cur");
SetSystemCursor(cursor, OCR_NORMAL);
mouseVisible = false;

//PROCESSING...

//Show the mouse with the mouse handle we copied earlier.
bool retval = SetSystemCursor(cursorHandle, OCR_NORMAL);
mouseVisible = true;
</code>

questionAnswers(2)

yourAnswerToTheQuestion