"Escondendo" Cursor do Sistema
FUNDO:Eu estou tentando criar um aplicativo "esconder o mouse" que esconde o mouse do usuário da tela após um determinado período de tempo.Eu tentei muitas coisas e usandoSetCursor só esconde o mouse do aplicativo atual, o meu deve ser capaz de se sentar na bandeja (por exemplo) e ainda funcionar.Eu acho que encontrei uma solução com SetSystemCursor, exceto por um problema.MEU PROBLEMA:Eu preciso ser capaz de capturar qualquer tipo de cursor do mouse e substituir exatamente o mesmo tipo de cursor do mouse.Ao substituir o mouse, eu preciso fornecer o id do tipo de mouse que eu gostaria de substituir com o mouse referenciado pelo identificador, mas nenhuma das funções que estou usando me fornece o id (ou tipo) do mouse copiado .MINHA PERGUNTA:Seria suficiente continuar assim, mas mova o mouse para 0,0 primeiro, escondendo-o e movendo-o de volta para seu local original após a ocultação? (Unhiding é realizado simplesmente movendo o mouse)Um mouse em 0,0 sempre seria um mouse OCR_NORMAL? (A seta padrão.)Se não, como o tipo de mouse / id pode ser encontrado para permitir que eu substitua o mouse correto pelo identificador apropriado?FONTE:
<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>