„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>