2017-11-19 2 views
1

Wie kann ich das Symbol aus dem Mauszeiger ändern.So ändern Sie das Symbol Mauszeiger, wenn ich einen Koordinatenbereich schweben

Ich möchte dies:, wenn ich mit meiner Maus-Gerät eine spezielle x Hover, y Bereich koordinieren, dass es wird die automatische Änderung das Symbol des Mauszeigers (wenn ich erreichen diesen Bereich), und wenn ich outsite diesem Bereich gehen es muss es zurück zum Standardsymbol ändern.

Ich habe versucht, den Code mit Autohotkey-Sprachen zu machen.

Aber das funktioniert nicht.

1 - Ich muss die F7-Taste auf meiner Tastatur drücken.

2 - Und ich muss meinen Computer neu starten, um das Symbol meines Mauszeigers zu ändern.

f7:: 
RegWrite, REG_SZ, HKEY_CURRENT_USER, Control Panel\Cursors\,Arrow,%SystemRoot%\cursors\aero_link.cur 
return 

(Wenn Sie ein Code-Beispiel, die in anderen Skriptsprachen wie Python oder Msdos schreibt, die für mich in Ordnung ist.)

Antwort

1

AutoHotkey - Der folgende Code zeigt, dass Sie den Cursor ändern an einem festen Ort, in diesem Fall die Mitte des Bildschirms. Wie dies erreicht wurde, wurde durch die Verwendung der gebauten Variablen A_screenHeight und A_screenWidth zur Definition der oberen/unteren und rechten/linken Grenzen. Dann verwenden Sie einen Timer und überprüfen, ob sich unser Cursor innerhalb dieser Grenzen befand, indem Sie den Befehl GetMousePos verwenden. Wenn die Maus innerhalb der Grenzen ist, wird die Funktion SetSystemCursor(), die von Serenity in AutoHotkey-Foren codiert wird, aufgerufen. Diese Funktion verwendet verschiedene DllCalls, um den Cursor zu ändern.

#Persistent 
#SingleInstance Force 

CoordMode, Mouse, Screen 

Left := Round((A_screenWidth/2)/2) 
Right := Left * 3 
Up := Round((A_screenHeight/2)/2) 
Down := Up * 3 

SetTimer, WatchCursor, 100 
OnExit, CleanUp 
return 

WatchCursor: 
MouseGetPos, x, y 
If (x >= Left && y >= Up && x <= Right && y <= Down) 
    applied ?: SetSystemCursor("IDC_CROSS"), applied := true 
else 
    (!applied) ?: RestoreCursors(), applied := false 
return 

cleanUp: 
RestoreCursors() 
ExitApp 
Return 

esc::GoSub, CleanUp 



; https://autohotkey.com/board/topic/32608-changing-the-system-cursor/ 
SetSystemCursor(Cursor = "", cx = 0, cy = 0) 
{ 
    BlankCursor := 0, SystemCursor := 0, FileCursor := 0 ; init 

    SystemCursors = 32512IDC_ARROW,32513IDC_IBEAM,32514IDC_WAIT,32515IDC_CROSS 
    ,32516IDC_UPARROW,32640IDC_SIZE,32641IDC_ICON,32642IDC_SIZENWSE 
    ,32643IDC_SIZENESW,32644IDC_SIZEWE,32645IDC_SIZENS,32646IDC_SIZEALL 
    ,32648IDC_NO,32649IDC_HAND,32650IDC_APPSTARTING,32651IDC_HELP 

    If Cursor = ; empty, so create blank cursor 
    { 
     VarSetCapacity(AndMask, 32*4, 0xFF), VarSetCapacity(XorMask, 32*4, 0) 
     BlankCursor = 1 ; flag for later 
    } 
    Else If SubStr(Cursor,1,4) = "IDC_" ; load system cursor 
    { 
     Loop, Parse, SystemCursors, `, 
     { 
      CursorName := SubStr(A_Loopfield, 6, 15) ; get the cursor name, no trailing space with substr 
      CursorID := SubStr(A_Loopfield, 1, 5) ; get the cursor id 
      SystemCursor = 1 
      If (CursorName = Cursor) 
      { 
       CursorHandle := DllCall("LoadCursor", Uint,0, Int,CursorID) 
       Break     
      } 
     } 
     If CursorHandle = ; invalid cursor name given 
     { 
      Msgbox,, SetCursor, Error: Invalid cursor name 
      CursorHandle = Error 
     } 
    } 
    Else If FileExist(Cursor) 
    { 
     SplitPath, Cursor,,, Ext ; auto-detect type 
     If Ext = ico 
      uType := 0x1  
     Else If Ext in cur,ani 
      uType := 0x2   
     Else ; invalid file ext 
     { 
      Msgbox,, SetCursor, Error: Invalid file type 
      CursorHandle = Error 
     }  
     FileCursor = 1 
    } 
    Else 
    { 
     Msgbox,, SetCursor, Error: Invalid file path or cursor name 
     CursorHandle = Error ; raise for later 
    } 
    If CursorHandle != Error 
    { 
     Loop, Parse, SystemCursors, `, 
     { 
      If BlankCursor = 1 
      { 
       Type = BlankCursor 
       %Type%%A_Index% := DllCall("CreateCursor" 
       , Uint,0, Int,0, Int,0, Int,32, Int,32, Uint,&AndMask, Uint,&XorMask) 
       CursorHandle := DllCall("CopyImage", Uint,%Type%%A_Index%, Uint,0x2, Int,0, Int,0, Int,0) 
       DllCall("SetSystemCursor", Uint,CursorHandle, Int,SubStr(A_Loopfield, 1, 5)) 
      }   
      Else If SystemCursor = 1 
      { 
       Type = SystemCursor 
       CursorHandle := DllCall("LoadCursor", Uint,0, Int,CursorID) 
       %Type%%A_Index% := DllCall("CopyImage" 
       , Uint,CursorHandle, Uint,0x2, Int,cx, Int,cy, Uint,0)  
       CursorHandle := DllCall("CopyImage", Uint,%Type%%A_Index%, Uint,0x2, Int,0, Int,0, Int,0) 
       DllCall("SetSystemCursor", Uint,CursorHandle, Int,SubStr(A_Loopfield, 1, 5)) 
      } 
      Else If FileCursor = 1 
      { 
       Type = FileCursor 
       %Type%%A_Index% := DllCall("LoadImageA" 
       , UInt,0, Str,Cursor, UInt,uType, Int,cx, Int,cy, UInt,0x10) 
       DllCall("SetSystemCursor", Uint,%Type%%A_Index%, Int,SubStr(A_Loopfield, 1, 5))   
      }   
     } 
    } 
} 

RestoreCursors() 
{ 
    SPI_SETCURSORS := 0x57 
    DllCall("SystemParametersInfo", UInt,SPI_SETCURSORS, UInt,0, UInt,0, UInt,0) 
} 
+0

@ahkcoderDas ist genau was ich gesucht habe, ich habe es getestet - und es funktioniert. Ich habe es in meiner Win Registry verglichen. (wenn ich diesen Bereich erreichen) IDC_CROSS ist das Symbol, das in cross_r.cur HKEY_CURRENT_USER \ Control Panel \ Cursors \ Fadenkreuz \% SystemRoot% \ Cursors geändert werden \ cross_r.cur und wenn ich möchte, dass die sich ändern Symbol. dann i IDC_CROSS in IDC_HAND in Kodierzeilen ersetzen: angewendet: SetSystemCursor ("IDC_CROSS"), angewendet: = true IDC_HAND das Symbol ist, das in aero_link.cur geändert HKEY_CURRENT_USER \ Control Panel \ Cursors wird dann \ Hand \% SystemRoot% \ cursors \ aero_link.cur – stevecody

+0

Ja, ändern Sie einfach den in SetSystemCursor() übergebenen Wert zu SetSystemCursor ("IDC_HAND"). Eine Liste von System-Icons: IDC_ARROW IDC_IBEAM IDC_WAIT IDC_CROSS IDC_UPARROW IDC_SIZE IDC_ICON IDC_SIZENWSE IDC_SIZENESW IDC_SIZEWE IDC_SIZENS IDC_SIZEALL IDC_NO IDC_HAND IDC_APPSTARTING IDC_HELP Können Sie das bitte akzeptieren, wie Beantwortet ? – errorseven

+0

Zusätzlicher Code zum Reduzieren von Funktionsaufrufen zu restorecursors und eine onexit-Unterroutine hinzugefügt, um sicherzustellen, dass der Cursor wiederhergestellt wird. – errorseven

Verwandte Themen