Odpowiedzi:
Na podstawie tego, co znalazłem tutaj , Udało mi się wykonać następujące czynności AutoHotkey kod:
SystemCursor("Init")
SetTimer, CheckIdle, 250
return
CheckIdle:
TimeIdle := A_TimeIdlePhysical // 1000
if TimeIdle >= 3
{
SystemCursor("Off")
}
else
{
SystemCursor("On")
}
return
#Persistent
OnExit, ShowCursor ; Ensure the cursor is made visible when the script exits.
return
ShowCursor:
SystemCursor("On")
ExitApp
SystemCursor(OnOff=1) ; INIT = "I","Init"; OFF = 0,"Off"; TOGGLE = -1,"T","Toggle"; ON = others
{
static AndMask, XorMask, $, h_cursor
,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13 ; system cursors
, b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13 ; blank cursors
, h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13 ; handles of default cursors
if (OnOff = "Init" or OnOff = "I" or $ = "") ; init when requested or at first call
{
$ = h ; active default cursors
VarSetCapacity( h_cursor,4444, 1 )
VarSetCapacity( AndMask, 32*4, 0xFF )
VarSetCapacity( XorMask, 32*4, 0 )
system_cursors = 32512,32513,32514,32515,32516,32642,32643,32644,32645,32646,32648,32649,32650
StringSplit c, system_cursors, `,
Loop %c0%
{
h_cursor := DllCall( "LoadCursor", "uint",0, "uint",c%A_Index% )
h%A_Index% := DllCall( "CopyImage", "uint",h_cursor, "uint",2, "int",0, "int",0, "uint",0 )
b%A_Index% := DllCall("CreateCursor","uint",0, "int",0, "int",0
, "int",32, "int",32, "uint",&AndMask, "uint",&XorMask )
}
}
if (OnOff = 0 or OnOff = "Off" or $ = "h" and (OnOff < 0 or OnOff = "Toggle" or OnOff = "T"))
$ = b ; use blank cursors
else
$ = h ; use the saved cursors
Loop %c0%
{
h_cursor := DllCall( "CopyImage", "uint",%$%%A_Index%, "uint",2, "int",0, "int",0, "uint",0 )
DllCall( "SetSystemCursor", "uint",h_cursor, "uint",c%A_Index% )
}
}
Jeśli nie masz nic przeciwko temu, że małe kodowanie będzie prawdopodobnie konieczne, możesz użyć AutoHotkey . Widzieć to post na forum, aby uzyskać więcej informacji na temat tego, co chcesz osiągnąć.
8 lat i Józefa odpowiedź jest nadal dobra i działa w AHK! ALE zrobiłem to jeszcze lepiej .. moim zdaniem przyczyny.
Dodałem czek myszy, aby kursor pokazywał się ponownie dopiero po przeniesieniu. Prawda, że mogłem dodać inne zdarzenia myszy, takie jak kliknięcia, ale ponieważ kursor jest ukryty, myślę, że to zbyt trudne, by się tym przejmować. Możesz dodać go sam, jeśli chcesz :)
To, co zmieniłem, to ruch #Persistent
do góry, ponieważ jest globalny i obecny dla całego skryptu bez względu na to, czy jest.
Dodany CoordMode, Mouse, Screen
i MouseGetPos, ix, iy
w sekcji autoexec i MouseGetPos, ix, iy
ponownie, gdy idziesz do bezczynności. MouseGetPos, cx, cy
zostaje ustawiony na każdy CheckIdle
a zmienne są porównywane przy ruchu myszy if (cx != ix or cy != iy)
.
#Persistent
CoordMode, Mouse, Screen
MouseGetPos, ix, iy
SystemCursor("Init")
SetTimer, CheckIdle, 250
return
CheckIdle:
MouseGetPos, cx, cy
TimeIdle := A_TimeIdlePhysical // 1000
if (TimeIdle >= 3)
{
MouseGetPos, ix, iy
SystemCursor("Off")
}
else if (cx != ix or cy != iy)
{
SystemCursor("On")
}
return
OnExit, ShowCursor ; Ensure the cursor is made visible when the script exits.
return
ShowCursor:
SystemCursor("On")
ExitApp
SystemCursor(OnOff=1) ; INIT = "I","Init"; OFF = 0,"Off"; TOGGLE = -1,"T","Toggle"; ON = others
{
static AndMask, XorMask, $, h_cursor
,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13 ; system cursors
, b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13 ; blank cursors
, h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13 ; handles of default cursors
if (OnOff = "Init" or OnOff = "I" or $ = "") ; init when requested or at first call
{
$ = h ; active default cursors
VarSetCapacity( h_cursor,4444, 1 )
VarSetCapacity( AndMask, 32*4, 0xFF )
VarSetCapacity( XorMask, 32*4, 0 )
system_cursors = 32512,32513,32514,32515,32516,32642,32643,32644,32645,32646,32648,32649,32650
StringSplit c, system_cursors, `,
Loop %c0%
{
h_cursor := DllCall( "LoadCursor", "uint",0, "uint",c%A_Index% )
h%A_Index% := DllCall( "CopyImage", "uint",h_cursor, "uint",2, "int",0, "int",0, "uint",0 )
b%A_Index% := DllCall("CreateCursor","uint",0, "int",0, "int",0
, "int",32, "int",32, "uint",&AndMask, "uint",&XorMask )
}
}
if (OnOff = 0 or OnOff = "Off" or $ = "h" and (OnOff < 0 or OnOff = "Toggle" or OnOff = "T"))
$ = b ; use blank cursors
else
$ = h ; use the saved cursors
Loop %c0%
{
h_cursor := DllCall( "CopyImage", "uint",%$%%A_Index%, "uint",2, "int",0, "int",0, "uint",0 )
DllCall( "SetSystemCursor", "uint",h_cursor, "uint",c%A_Index% )
}
}