DonationCoder.com Software > Finished Programs
SOLVED: autohotkey makes cursor slide - i want mouse movement to halt the slide
nudone:
i mentioned above that i might try and adapt the script so that it will make the cursor travel around corners - moving from a lower corner screen to the upper middle screen (and vice versa).
but it appears the the script allows for this already, in a buggy kind of way. so that is fortunate.
skwire:
yes, they are what i saw - and became no less confused after reading them. i will try to understand it, maybe it's very simple.-nudone (May 06, 2010, 07:35 PM)
--- End quote ---
It is rather simple since Serenity wrapped the functions nicely. Simply add the following function definitions to the BOTTOM of your script:
--- Code: AutoIt ---RestoreCursors(){ SPI_SETCURSORS := 0x57 DllCall( "SystemParametersInfo", UInt,SPI_SETCURSORS, UInt,0, UInt,0, UInt,0 )} 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 ) ) } } } }
Then, to change the cursor, do the following:
--- Code: AutoIt ---Cursor := "C:\path\to\my\cursor.cur"SetSystemCursor( Cursor )
Or:
--- Code: AutoIt ---SetSystemCursor( "C:\path\to\my\cursor.cur" )
To restore the cursor, simply do:
--- Code: AutoIt ---RestoreCursors()
nudone:
thank you very much for explaining that, skwire. i might have understood it after a (few) rereads, i just couldn't figure out what was important and what was noise in the thread.
i'll go and implement it now...
Navigation
[0] Message Index
[*] Previous page
Go to full version