本帖最后由 sanmoking 于 2010-7-31 19:06 编辑
求简单的更换系统鼠标方案的方法,
在更换前先保存原始方案,程序退出后还原为原始的方案。
意思就是程序在运行时用自己的方案。
HotKeySet("{F3}","getcur")
HotKeySet("{F4}","exitt")
#include <StructureConstants.au3>
#include <WinAPI.au3>
;我菜鸟一个,下面的注释是我的理解
$mousehide = 1
FileInstall("mouse1.ani",@TempDir&"\mouse1.ani",0);自定义光标文件
$hPrev = _WinAPI_DuplicateCursor(_WinAPI_LoadCursor(0, 32512)) ;记录系统当前的光标状态
$hCursor = _WinAPI_DuplicateCursor(_WinAPI_LoadCursorFromFile(@TempDir&"\mouse1.ani"));导入自定义的光标文件
While 1
Sleep(10)
WEnd
Func getcur()
if $mousehide = 1 then
_WinAPI_SetSystemCursor($hCursor, 32512);加载自定义的光标文件
$mousehide = 0
Elseif $mousehide = 0 then
_WinAPI_SetSystemCursor($hPrev, 32512) ;还原之前纪录的光标状态,操作这一步的时候,会把之前记录的状态清除,所以后面要重新再来一遍
$hPrev = _WinAPI_DuplicateCursor(_WinAPI_LoadCursor(0, 32512)) ;记录系统当前的光标状态
$hCursor = _WinAPI_DuplicateCursor(_WinAPI_LoadCursorFromFile(@TempDir&"\mouse1.ani"));;导入自定义的光标文件
$mousehide = 1
EndIf
EndFunc
Func exitt()
exit
EndFunc
;下面这些部分是我从winapiex.au3中提取出来的有关替换鼠标的函数
Func _WinAPI_LoadCursor($hInstance, $sName)
Local $TypeOfName = 'long'
If IsString($sName) Then
$TypeOfName = 'str'
EndIf
Local $Ret = DllCall('user32.dll', 'ptr', 'LoadCursor', 'ptr', $hInstance, $TypeOfName, $sName)
If (@error) Or ($Ret[0] = 0) Then
Return SetError(1, 0, 0)
EndIf
Return $Ret[0]
EndFunc ;==>_WinAPI_LoadCursor
Func _WinAPI_LoadCursorFromFile($sFile)
Local $Ret = DllCall('user32.dll', 'ptr', 'LoadCursorFromFileW', 'wstr', $sFile)
If (@error) Or ($Ret[0] = 0) Then
Return SetError(1, 0, 0)
EndIf
Return $Ret[0]
EndFunc ;==>_WinAPI_LoadCursorFromFile
Func _WinAPI_DuplicateCursor($hIcon)
Local $Ret = DllCall('user32.dll', 'ptr', 'CopyIcon', 'ptr', $hIcon)
If (@error) Or ($Ret[0] = 0) Or ($Ret[0] = Ptr(0)) Then
Return SetError(1, 0, 0)
EndIf
Return $Ret[0]
EndFunc ;==>_WinAPI_DuplicateCursor
Func _WinAPI_SetSystemCursor($hCursor, $ID, $fDuplicate = 0)
If $fDuplicate Then
$hCursor = _WinAPI_DuplicateCursor($hCursor)
EndIf
Local $Ret = DllCall('user32.dll', 'int', 'SetSystemCursor', 'ptr', $hCursor, 'dword', $ID)
If (@error) Or ($Ret[0] = 0) Then
Return SetError(1, 0, 0)
EndIf
Return 1
EndFunc ;==>_WinAPI_SetSystemCursor
|