Czy istnieje sposób, aby wskaźnik myszy zniknął, gdy komputer stanie się bezczynny? Gdyby rozwiązanie mogło działać zarówno w systemie Windows XP, jak i Windows 7, byłoby świetnie.
6
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ąć.
źródło
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
iMouseGetPos, ix, iy
w sekcji autoexec iMouseGetPos, ix, iy
ponownie, gdy idziesz do bezczynności.MouseGetPos, cx, cy
zostaje ustawiony na każdyCheckIdle
a zmienne są porównywane przy ruchu myszyif (cx != ix or cy != iy)
.źródło