klaus.s Posted February 17, 2008 Share Posted February 17, 2008 Hi,for changing the system-cursor I found several examples using LoadCursorFromFile. Searching for LoadCursor the only hit was here:http://www.autoitscript.com/forum/index.ph...p;hl=loadcursor(This magnifier is a very nice tool by the way.)syscursor can change the system-cursor to another built-in cursor or to one stored locally in a cur-file. Only one flaw so far: a built-in cursor has to be sacrified if a custom-cursor is used. Maybe someone has further ideas about that.--Klaussyscursor.au3 Link to comment Share on other sites More sharing options...
klaus.s Posted February 17, 2008 Author Share Posted February 17, 2008 Updated version, flaws removed by using CopyIcon (CopyCursor does not work, XP/SP2), attached zip-file includes two cur-files. expandcollapse popup#include <GUIConstants.au3> menu() func menu() local $msg, $gc[99], $n, $i, $t, $m GuiCreate( "syscursor", 155, 490, -1, -1) $n= 0 $gc_roe= GUICtrlCreateCheckbox( "restore on exit", 3, 0, 150, 24) GUICtrlSetState( $gc_roe, $GUI_CHECKED) $n+= 1 $gc[$n]= GUICtrlCreateButton( "000 default", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "101 selectGreen", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "102 selectRed", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "512 select", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "513 insert", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "514 wait", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "515 cross", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "516 arrowUp", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "641 select", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "642 stretchDiagonalBack", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "643 stretchDiagonalForward", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "644 stretchHorizontal", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "645 stretchVertical", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "646 move", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "648 avoid", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "649 hand", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "650 selectWait", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "651 selectQuestion", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateButton( "663 selectCD", 3, $n*24, 150, 24) GUISetState( @SW_SHOW) while true $msg = GUIGetMsg() if $msg = $GUI_EVENT_CLOSE then exitloop for $i= 1 to $n if $gc[$i] == $msg then syscursor( stringleft( guictrlread( $msg), 3) *1) exitloop endif next wend if GUICtrlRead( $gc_roe) = $GUI_CHECKED then syscursor( 0) ; reset to default endif endfunc func syscursor( $i) global $syscursor_save global $syscursor_saved local $a, $k, $file if $syscursor_saved then $a= $syscursor_save DllCall( "user32.dll", "int", "SetSystemCursor", "int", $a[0], "int", 32512) endif $a= DllCall( "user32.dll", "int", "LoadCursor", "int", 0, "int", 32512) $a= DllCall( "user32.dll", "int", "CopyIcon", "int", $a[0]) $syscursor_save= $a $syscursor_saved= true if $i > 500 then $k= 32000 +$i $a= DllCall( "user32.dll", "int", "LoadCursor", "int", 0, "int", $k) $a= DllCall( "user32.dll", "int", "CopyIcon", "int", $a[0]) DllCall( "user32.dll", "int", "SetSystemCursor", "int", $a[0], "int", 32512) elseif $i then $file= @scriptdir & "\" & $i & ".cur" $a= DllCall( "user32.dll", "int", "LoadCursorFromFile", "str", $file) DllCall( "user32.dll", "int", "SetSystemCursor", "int", $a[0], "int", 32512) endif endfuncsyscursor20080217.zip Link to comment Share on other sites More sharing options...
James Posted February 17, 2008 Share Posted February 17, 2008 Ahh cool! Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ Link to comment Share on other sites More sharing options...
Darth Posted February 17, 2008 Share Posted February 17, 2008 interesting program, nice job Link to comment Share on other sites More sharing options...
therks Posted February 18, 2008 Share Posted February 18, 2008 (edited) Fails with animated cursors. Clarification: By "fails" I don't mean errors, but animated cursors do not work (they are not animated, only still pictures). Edited February 18, 2008 by Saunders My AutoIt Stuff | My Github Link to comment Share on other sites More sharing options...
James Posted February 18, 2008 Share Posted February 18, 2008 Fails with animated cursors.Clarification: By "fails" I don't mean errors, but animated cursors do not work (they are not animated, only still pictures).I think you will know how to convert this. It's a delphi example using Animated Cursors http://www.delphi3000.com/articles/article_2642.asp?SK= Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ Link to comment Share on other sites More sharing options...
klaus.s Posted February 18, 2008 Author Share Posted February 18, 2008 Thanks to all for your comments and feedback. Until now I did not consider these animated cursors and maybe a solution will come up. Because I like this swapping functionality of LoadCursor/SetSystemCursor as already shown in my first version, I added this in my newest version, along with some cleanup. expandcollapse popup#include <GUIConstants.au3> menu() func menu() local $msg, $gc[99], $gc_roe, $gc_swap, $n, $i, $j GuiCreate( @ScriptName, 230, 520, -1, -1) $gc_roe= GUICtrlCreateCheckbox( "restore on exit", 3, 0) GUICtrlSetState( $gc_roe, $GUI_CHECKED) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "000 default", 3, $n*24, 150, 24, $WS_GROUP) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "101 selectGreen", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "102 selectRed", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "512 select (default)", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "513 insert", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "514 wait", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "515 cross", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "516 arrowUp", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "641 select (default)", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "642 stretchDiagonalBack", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "643 stretchDiagonalForward", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "644 stretchHorizontal", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "645 stretchVertical", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "646 move", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "648 avoid", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "649 hand", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "650 selectWait", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "651 selectQuestion", 3, $n*24, 150, 24) $n+= 1 $gc[$n]= GUICtrlCreateRadio( "663 selectCD", 3, $n*24, 150, 24) $gc_swap= GUICtrlCreateButton( "swap cursor assignments of 512 and 513", _ 3, $n*24 +30) GUISetState( @SW_SHOW) while true $msg = GUIGetMsg() if $msg == $GUI_EVENT_CLOSE then exitloop if $msg == $gc_swap then $j= 1513 syscursor( $j) msgbox( 0, @ScriptName, "Check cursor assignments " & _ "(here and in editor), then press Ok to undo.") syscursor( $j) continueloop endif for $i= 1 to $n if $gc[$i] == $msg then $j= stringleft( guictrlread( $msg, 1), 3) *1 syscursor( $j) exitloop endif next wend if GUICtrlRead( $gc_roe) = $GUI_CHECKED then syscursor( 0) ; reset to default endif endfunc func syscursor( $j) global $syscursor_save local $a, $k, $file if $j > 1500 then $k= 31000 +$j $a= DllCall( "user32.dll", "int", "LoadCursor", "int", 0, "int", $k) DllCall( "user32.dll", "int", "SetSystemCursor", "int", $a[0], "int", 32512) return endif if $syscursor_save <> "" then $a= $syscursor_save DllCall( "user32.dll", "int", "SetSystemCursor", "int", $a[0], "int", 32512) endif $a= DllCall( "user32.dll", "int", "LoadCursor", "int", 0, "int", 32512) $a= DllCall( "user32.dll", "int", "CopyIcon", "int", $a[0]) $syscursor_save= $a if $j > 500 then $k= 32000 +$j $a= DllCall( "user32.dll", "int", "LoadCursor", "int", 0, "int", $k) $a= DllCall( "user32.dll", "int", "CopyIcon", "int", $a[0]) DllCall( "user32.dll", "int", "SetSystemCursor", "int", $a[0], "int", 32512) elseif $j then $file= @scriptdir & "\" & $j & ".cur" $a= DllCall( "user32.dll", "int", "LoadCursorFromFile", "str", $file) DllCall( "user32.dll", "int", "SetSystemCursor", "int", $a[0], "int", 32512) endif endfuncsyscursor20080218.zip Link to comment Share on other sites More sharing options...
cherdeg Posted November 17, 2008 Share Posted November 17, 2008 (edited) Thanks to all for your comments and feedback. Until now I did not consider these animated cursors and maybe a solution will come up. Because I like this swapping functionality of LoadCursor/SetSystemCursor as already shown in my first version, I added this in my newest version, along with some cleanup. expandcollapse popupfunc syscursor( $j) global $syscursor_save local $a, $k, $file if $j > 1500 then $k= 31000 +$j $a= DllCall( "user32.dll", "int", "LoadCursor", "int", 0, "int", $k) DllCall( "user32.dll", "int", "SetSystemCursor", "int", $a[0], "int", 32512) return endif if $syscursor_save <> "" then $a= $syscursor_save DllCall( "user32.dll", "int", "SetSystemCursor", "int", $a[0], "int", 32512) endif $a= DllCall( "user32.dll", "int", "LoadCursor", "int", 0, "int", 32512) $a= DllCall( "user32.dll", "int", "CopyIcon", "int", $a[0]) $syscursor_save= $a if $j > 500 then $k= 32000 +$j $a= DllCall( "user32.dll", "int", "LoadCursor", "int", 0, "int", $k) $a= DllCall( "user32.dll", "int", "CopyIcon", "int", $a[0]) DllCall( "user32.dll", "int", "SetSystemCursor", "int", $a[0], "int", 32512) elseif $j then $file= @scriptdir & "\" & $j & ".cur" $a= DllCall( "user32.dll", "int", "LoadCursorFromFile", "str", $file) DllCall( "user32.dll", "int", "SetSystemCursor", "int", $a[0], "int", 32512) endif endfuncoÝ÷ Ûú®¢×©ZºÂ"ëÊ«~éܶ*'¢uÏHýâµö¢Ëhn¸§Ø^uçÚº[[iÉ,ÊÇ.®Ê+Ò̬rê좽4ÒìÊÇ.®Ê+ç]¡j÷§¡çßyËHßÛÞm¢·¬¶Þ¶º»(®ø¶¢{k¢ZZéZ¦^¶«¨´Ê.±ê®¢Õ²Ø^æ©à{#÷EèÛ¸¬2N¢YhÂ)à¢w°¢¹,jëh×6Global Const $OCR_NORMAL = 32512 Global Const $OCR_IBEAM = 32513 Global Const $OCR_WAIT = 32514 $GUI = GuiCreate("test") GUISetState() Local $hWaitCur $hWaitCur = _LoadCursor($OCR_WAIT) _SetSystemCursor($hWaitCur,$OCR_NORMAL) While 1 If GUIGetMsg() = -3 Then ExitLoop sleep(10) WEnd _SetSystemCursor($hWaitCur,$OCR_NORMAL) $hWaitCur = 0 Func _LoadCursor($iCursor) Return SetError(@error,@extended ,_API(DllCall("user32.dll", "int", "LoadCursorA", "hwnd", 0, "int", $iCursor))) EndFunc ;==>_LoadCursor Func _SetSystemCursor($hCursor,$iCursor) Return SetError(@error,@extended ,_API(DllCall("user32.dll", "int" ,"SetSystemCursor","int",$hCursor,"int",$iCursor))) EndFunc Func _API($v_ret) Local $err = @error Local $ext = @extended If Not $err Then If IsArray($v_ret) Then Return $v_ret[0] Else Return $v_ret EndIf EndIf Return SetError($err, $ext, 0) EndFunc ;==>_API Edited November 17, 2008 by cherdeg Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now