Code:
FUNC _WINAPI_GETMOUSEPOS ( $FTOCLIENT = FALSE , $HWND = 0 )
LOCAL $IMODE = OPT ( "MouseCoordMode" , 1 )
LOCAL $APOS = MOUSEGETPOS ( )
OPT ( "MouseCoordMode" , $IMODE )
LOCAL $TPOINT = DLLSTRUCTCREATE ( $TAGPOINT )
DLLSTRUCTSETDATA ( $TPOINT , "X" , $APOS [ 0 ] )
DLLSTRUCTSETDATA ( $TPOINT , "Y" , $APOS [ 1 ] )
IF $FTOCLIENT THEN
_WINAPI_SCREENTOCLIENT ( $HWND , $TPOINT )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
ENDIF
RETURN $TPOINT
ENDFUNC
FUNC _WINAPI_GETMOUSEPOSX ( $FTOCLIENT = FALSE , $HWND = 0 )
LOCAL $TPOINT = _WINAPI_GETMOUSEPOS ( $FTOCLIENT , $HWND )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN DLLSTRUCTGETDATA ( $TPOINT , "X" )
ENDFUNC
FUNC _WINAPI_GETMOUSEPOSY ( $FTOCLIENT = FALSE , $HWND = 0 )
LOCAL $TPOINT = _WINAPI_GETMOUSEPOS ( $FTOCLIENT , $HWND )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN DLLSTRUCTGETDATA ( $TPOINT , "Y" )
ENDFUNC
FUNC _WINAPI_GETOBJECT ( $HOBJECT , $ISIZE , $POBJECT )
LOCAL $ARESULT = DLLCALL ( "gdi32.dll" , "int" , "GetObjectW" , "handle" , $HOBJECT , "int" , $ISIZE , "ptr" , $POBJECT )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_GETOPENFILENAME ( $STITLE = "" , $SFILTER = "All files (*.*)" , $SINITALDIR = "." , $SDEFAULTFILE = "" , $SDEFAULTEXT = "" , $IFILTERINDEX = 1 , $IFLAGS = 0 , $IFLAGSEX = 0 , $HWNDOWNER = 0 )
LOCAL $IPATHLEN = 4096
LOCAL $INULLS = 0
LOCAL $TOFN = DLLSTRUCTCREATE ( $TAGOPENFILENAME )
LOCAL $AFILES [ 1 ] = [ 0 ]
LOCAL $IFLAG = $IFLAGS
LOCAL $ASFLINES = STRINGSPLIT ( $SFILTER , "|" )
LOCAL $ASFILTER [ $ASFLINES [ 0 ] * 2 + 1 ]
LOCAL $ISTART , $IFINAL , $STFILTER
$ASFILTER [ 0 ] = $ASFLINES [ 0 ] * 2
FOR $I = 1 TO $ASFLINES [ 0 ]
$ISTART = STRINGINSTR ( $ASFLINES [ $I ] , "(" , 0 , 1 )
$IFINAL = STRINGINSTR ( $ASFLINES [ $I ] , ")" , 0 , - 1 )
$ASFILTER [ $I * 2 - 1 ] = STRINGSTRIPWS ( STRINGLEFT ( $ASFLINES [ $I ] , $ISTART - 1 ) , 3 )
$ASFILTER [ $I * 2 ] = STRINGSTRIPWS ( STRINGTRIMRIGHT ( STRINGTRIMLEFT ( $ASFLINES [ $I ] , $ISTART ) , STRINGLEN ( $ASFLINES [ $I ] ) - $IFINAL + 1 ) , 3 )
$STFILTER &= "wchar[" & STRINGLEN ( $ASFILTER [ $I * 2 - 1 ] ) + 1 & "];wchar[" & STRINGLEN ( $ASFILTER [ $I * 2 ] ) + 1 & "];"
NEXT
LOCAL $TTITLE = DLLSTRUCTCREATE ( "wchar Title[" & STRINGLEN ( $STITLE ) + 1 & "]" )
LOCAL $TINITIALDIR = DLLSTRUCTCREATE ( "wchar InitDir[" & STRINGLEN ( $SINITALDIR ) + 1 & "]" )
LOCAL $TFILTER = DLLSTRUCTCREATE ( $STFILTER & "wchar" )
LOCAL $TPATH = DLLSTRUCTCREATE ( "wchar Path[" & $IPATHLEN & "]" )
LOCAL $TEXTN = DLLSTRUCTCREATE ( "wchar Extension[" & STRINGLEN ( $SDEFAULTEXT ) + 1 & "]" )
FOR $I = 1 TO $ASFILTER [ 0 ]
DLLSTRUCTSETDATA ( $TFILTER , $I , $ASFILTER [ $I ] )
NEXT
DLLSTRUCTSETDATA ( $TTITLE , "Title" , $STITLE )
DLLSTRUCTSETDATA ( $TINITIALDIR , "InitDir" , $SINITALDIR )
DLLSTRUCTSETDATA ( $TPATH , "Path" , $SDEFAULTFILE )
DLLSTRUCTSETDATA ( $TEXTN , "Extension" , $SDEFAULTEXT )
DLLSTRUCTSETDATA ( $TOFN , "StructSize" , DLLSTRUCTGETSIZE ( $TOFN ) )
DLLSTRUCTSETDATA ( $TOFN , "hwndOwner" , $HWNDOWNER )
DLLSTRUCTSETDATA ( $TOFN , "lpstrFilter" , DLLSTRUCTGETPTR ( $TFILTER ) )
DLLSTRUCTSETDATA ( $TOFN , "nFilterIndex" , $IFILTERINDEX )
DLLSTRUCTSETDATA ( $TOFN , "lpstrFile" , DLLSTRUCTGETPTR ( $TPATH ) )
DLLSTRUCTSETDATA ( $TOFN , "nMaxFile" , $IPATHLEN )
DLLSTRUCTSETDATA ( $TOFN , "lpstrInitialDir" , DLLSTRUCTGETPTR ( $TINITIALDIR ) )
DLLSTRUCTSETDATA ( $TOFN , "lpstrTitle" , DLLSTRUCTGETPTR ( $TTITLE ) )
DLLSTRUCTSETDATA ( $TOFN , "Flags" , $IFLAG )
DLLSTRUCTSETDATA ( $TOFN , "lpstrDefExt" , DLLSTRUCTGETPTR ( $TEXTN ) )
DLLSTRUCTSETDATA ( $TOFN , "FlagsEx" , $IFLAGSEX )
DLLCALL ( "comdlg32.dll" , "bool" , "GetOpenFileNameW" , "struct*" , $TOFN )
IF @error THEN RETURN SETERROR ( @error , @extendED , $AFILES )
IF BITAND ( $IFLAGS , $OFN_ALLOWMULTISELECT ) = $OFN_ALLOWMULTISELECT AND BITAND ( $IFLAGS , $OFN_EXPLORER ) = $OFN_EXPLORER THEN
FOR $X = 1 TO $IPATHLEN
IF DLLSTRUCTGETDATA ( $TPATH , "Path" , $X ) = CHR ( 0 ) THEN
DLLSTRUCTSETDATA ( $TPATH , "Path" , "|" , $X )
$INULLS += 1
ELSE
$INULLS = 0
ENDIF
IF $INULLS = 2 THEN EXITLOOP
NEXT
DLLSTRUCTSETDATA ( $TPATH , "Path" , CHR ( 0 ) , $X - 1 )
$AFILES = STRINGSPLIT ( DLLSTRUCTGETDATA ( $TPATH , "Path" ) , "|" )
IF $AFILES [ 0 ] = 1 THEN RETURN __WINAPI_PARSEFILEDIALOGPATH ( DLLSTRUCTGETDATA ( $TPATH , "Path" ) )
RETURN STRINGSPLIT ( DLLSTRUCTGETDATA ( $TPATH , "Path" ) , "|" )
ELSEIF BITAND ( $IFLAGS , $OFN_ALLOWMULTISELECT ) = $OFN_ALLOWMULTISELECT THEN
$AFILES = STRINGSPLIT ( DLLSTRUCTGETDATA ( $TPATH , "Path" ) , " " )
IF $AFILES [ 0 ] = 1 THEN RETURN __WINAPI_PARSEFILEDIALOGPATH ( DLLSTRUCTGETDATA ( $TPATH , "Path" ) )
RETURN STRINGSPLIT ( STRINGREPLACE ( DLLSTRUCTGETDATA ( $TPATH , "Path" ) , " " , "|" ) , "|" )
ELSE
RETURN __WINAPI_PARSEFILEDIALOGPATH ( DLLSTRUCTGETDATA ( $TPATH , "Path" ) )
ENDIF
ENDFUNC
FUNC _WINAPI_GETOVERLAPPEDRESULT ( $HFILE , $POVERLAPPED , BYREF $IBYTES , $FWAIT = FALSE )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "bool" , "GetOverlappedResult" , "handle" , $HFILE , "ptr" , $POVERLAPPED , "dword*" , 0 , "bool" , $FWAIT )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
$IBYTES = $ARESULT [ 3 ]
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_GETPARENT ( $HWND )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "hwnd" , "GetParent" , "hwnd" , $HWND )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_GETPROCESSAFFINITYMASK ( $HPROCESS )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "bool" , "GetProcessAffinityMask" , "handle" , $HPROCESS , "dword_ptr*" , 0 , "dword_ptr*" , 0 )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
LOCAL $AMASK [ 3 ]
$AMASK [ 0 ] = TRUE
$AMASK [ 1 ] = $ARESULT [ 2 ]
$AMASK [ 2 ] = $ARESULT [ 3 ]
RETURN $AMASK
ENDFUNC
FUNC _WINAPI_GETSAVEFILENAME ( $STITLE = "" , $SFILTER = "All files (*.*)" , $SINITALDIR = "." , $SDEFAULTFILE = "" , $SDEFAULTEXT = "" , $IFILTERINDEX = 1 , $IFLAGS = 0 , $IFLAGSEX = 0 , $HWNDOWNER = 0 )
LOCAL $IPATHLEN = 4096
LOCAL $TOFN = DLLSTRUCTCREATE ( $TAGOPENFILENAME )
LOCAL $AFILES [ 1 ] = [ 0 ]
LOCAL $IFLAG = $IFLAGS
LOCAL $ASFLINES = STRINGSPLIT ( $SFILTER , "|" )
LOCAL $ASFILTER [ $ASFLINES [ 0 ] * 2 + 1 ]
LOCAL $ISTART , $IFINAL , $STFILTER
$ASFILTER [ 0 ] = $ASFLINES [ 0 ] * 2
FOR $I = 1 TO $ASFLINES [ 0 ]
$ISTART = STRINGINSTR ( $ASFLINES [ $I ] , "(" , 0 , 1 )
$IFINAL = STRINGINSTR ( $ASFLINES [ $I ] , ")" , 0 , - 1 )
$ASFILTER [ $I * 2 - 1 ] = STRINGSTRIPWS ( STRINGLEFT ( $ASFLINES [ $I ] , $ISTART - 1 ) , 3 )
$ASFILTER [ $I * 2 ] = STRINGSTRIPWS ( STRINGTRIMRIGHT ( STRINGTRIMLEFT ( $ASFLINES [ $I ] , $ISTART ) , STRINGLEN ( $ASFLINES [ $I ] ) - $IFINAL + 1 ) , 3 )
$STFILTER &= "wchar[" & STRINGLEN ( $ASFILTER [ $I * 2 - 1 ] ) + 1 & "];wchar[" & STRINGLEN ( $ASFILTER [ $I * 2 ] ) + 1 & "];"
NEXT
LOCAL $TTITLE = DLLSTRUCTCREATE ( "wchar Title[" & STRINGLEN ( $STITLE ) + 1 & "]" )
LOCAL $TINITIALDIR = DLLSTRUCTCREATE ( "wchar InitDir[" & STRINGLEN ( $SINITALDIR ) + 1 & "]" )
LOCAL $TFILTER = DLLSTRUCTCREATE ( $STFILTER & "wchar" )
LOCAL $TPATH = DLLSTRUCTCREATE ( "wchar Path[" & $IPATHLEN & "]" )
LOCAL $TEXTN = DLLSTRUCTCREATE ( "wchar Extension[" & STRINGLEN ( $SDEFAULTEXT ) + 1 & "]" )
FOR $I = 1 TO $ASFILTER [ 0 ]
DLLSTRUCTSETDATA ( $TFILTER , $I , $ASFILTER [ $I ] )
NEXT
DLLSTRUCTSETDATA ( $TTITLE , "Title" , $STITLE )
DLLSTRUCTSETDATA ( $TINITIALDIR , "InitDir" , $SINITALDIR )
DLLSTRUCTSETDATA ( $TPATH , "Path" , $SDEFAULTFILE )
DLLSTRUCTSETDATA ( $TEXTN , "Extension" , $SDEFAULTEXT )
DLLSTRUCTSETDATA ( $TOFN , "StructSize" , DLLSTRUCTGETSIZE ( $TOFN ) )
DLLSTRUCTSETDATA ( $TOFN , "hwndOwner" , $HWNDOWNER )
DLLSTRUCTSETDATA ( $TOFN , "lpstrFilter" , DLLSTRUCTGETPTR ( $TFILTER ) )
DLLSTRUCTSETDATA ( $TOFN , "nFilterIndex" , $IFILTERINDEX )
DLLSTRUCTSETDATA ( $TOFN , "lpstrFile" , DLLSTRUCTGETPTR ( $TPATH ) )
DLLSTRUCTSETDATA ( $TOFN , "nMaxFile" , $IPATHLEN )
DLLSTRUCTSETDATA ( $TOFN , "lpstrInitialDir" , DLLSTRUCTGETPTR ( $TINITIALDIR ) )
DLLSTRUCTSETDATA ( $TOFN , "lpstrTitle" , DLLSTRUCTGETPTR ( $TTITLE ) )
DLLSTRUCTSETDATA ( $TOFN , "Flags" , $IFLAG )
DLLSTRUCTSETDATA ( $TOFN , "lpstrDefExt" , DLLSTRUCTGETPTR ( $TEXTN ) )
DLLSTRUCTSETDATA ( $TOFN , "FlagsEx" , $IFLAGSEX )
DLLCALL ( "comdlg32.dll" , "bool" , "GetSaveFileNameW" , "struct*" , $TOFN )
IF @error THEN RETURN SETERROR ( @error , @extendED , $AFILES )
RETURN __WINAPI_PARSEFILEDIALOGPATH ( DLLSTRUCTGETDATA ( $TPATH , "Path" ) )
ENDFUNC
FUNC _WINAPI_GETSTOCKOBJECT ( $IOBJECT )
LOCAL $ARESULT = DLLCALL ( "gdi32.dll" , "handle" , "GetStockObject" , "int" , $IOBJECT )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_GETSTDHANDLE ( $ISTDHANDLE )
IF $ISTDHANDLE < 0 OR $ISTDHANDLE > 2 THEN RETURN SETERROR ( 2 , 0 , - 1 )
LOCAL CONST $AHANDLE [ 3 ] = [ - 10 , - 11 , - 12 ]
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "handle" , "GetStdHandle" , "dword" , $AHANDLE [ $ISTDHANDLE ] )
IF @error THEN RETURN SETERROR ( @error , @extendED , - 1 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_GETSYSCOLOR ( $IINDEX )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "dword" , "GetSysColor" , "int" , $IINDEX )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_GETSYSCOLORBRUSH ( $IINDEX )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "handle" , "GetSysColorBrush" , "int" , $IINDEX )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_GETSYSTEMMETRICS ( $IINDEX )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "int" , "GetSystemMetrics" , "int" , $IINDEX )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_GETTEXTEXTENTPOINT32 ( $HDC , $STEXT )
LOCAL $TSIZE = DLLSTRUCTCREATE ( $TAGSIZE )
LOCAL $ISIZE = STRINGLEN ( $STEXT )
DLLCALL ( "gdi32.dll" , "bool" , "GetTextExtentPoint32W" , "handle" , $HDC , "wstr" , $STEXT , "int" , $ISIZE , "struct*" , $TSIZE )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $TSIZE
ENDFUNC
FUNC _WINAPI_GETTEXTMETRICS ( $HDC )
LOCAL $TTEXTMETRIC = DLLSTRUCTCREATE ( $TAGTEXTMETRIC )
LOCAL $RET = DLLCALL ( "gdi32.dll" , "bool" , "GetTextMetricsW" , "handle" , $HDC , "struct*" , $TTEXTMETRIC )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
IF NOT $RET [ 0 ] THEN RETURN SETERROR ( - 1 , 0 , 0 )
RETURN $TTEXTMETRIC
ENDFUNC
FUNC _WINAPI_GETWINDOW ( $HWND , $ICMD )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "hwnd" , "GetWindow" , "hwnd" , $HWND , "uint" , $ICMD )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_GETWINDOWDC ( $HWND )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "handle" , "GetWindowDC" , "hwnd" , $HWND )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_GETWINDOWHEIGHT ( $HWND )
LOCAL $TRECT = _WINAPI_GETWINDOWRECT ( $HWND )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN DLLSTRUCTGETDATA ( $TRECT , "Bottom" ) - DLLSTRUCTGETDATA ( $TRECT , "Top" )
ENDFUNC
FUNC _WINAPI_GETWINDOWLONG ( $HWND , $IINDEX )
LOCAL $SFUNCNAME = "GetWindowLongW"
IF @autoITX64 THEN $SFUNCNAME = "GetWindowLongPtrW"
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "long_ptr" , $SFUNCNAME , "hwnd" , $HWND , "int" , $IINDEX )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_GETWINDOWPLACEMENT ( $HWND )
LOCAL $TWINDOWPLACEMENT = DLLSTRUCTCREATE ( $TAGWINDOWPLACEMENT )
DLLSTRUCTSETDATA ( $TWINDOWPLACEMENT , "length" , DLLSTRUCTGETSIZE ( $TWINDOWPLACEMENT ) )
DLLCALL ( "user32.dll" , "bool" , "GetWindowPlacement" , "hwnd" , $HWND , "struct*" , $TWINDOWPLACEMENT )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $TWINDOWPLACEMENT
ENDFUNC
FUNC _WINAPI_GETWINDOWRECT ( $HWND )
LOCAL $TRECT = DLLSTRUCTCREATE ( $TAGRECT )
DLLCALL ( "user32.dll" , "bool" , "GetWindowRect" , "hwnd" , $HWND , "struct*" , $TRECT )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $TRECT
ENDFUNC
FUNC _WINAPI_GETWINDOWRGN ( $HWND , $HRGN )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "int" , "GetWindowRgn" , "hwnd" , $HWND , "handle" , $HRGN )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_GETWINDOWTEXT ( $HWND )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "int" , "GetWindowTextW" , "hwnd" , $HWND , "wstr" , "" , "int" , 4096 )
IF @error THEN RETURN SETERROR ( @error , @extendED , "" )
RETURN SETEXTENDED ( $ARESULT [ 0 ] , $ARESULT [ 2 ] )
ENDFUNC
FUNC _WINAPI_GETWINDOWTHREADPROCESSID ( $HWND , BYREF $IPID )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "dword" , "GetWindowThreadProcessId" , "hwnd" , $HWND , "dword*" , 0 )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
$IPID = $ARESULT [ 2 ]
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_GETWINDOWWIDTH ( $HWND )
LOCAL $TRECT = _WINAPI_GETWINDOWRECT ( $HWND )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN DLLSTRUCTGETDATA ( $TRECT , "Right" ) - DLLSTRUCTGETDATA ( $TRECT , "Left" )
ENDFUNC
FUNC _WINAPI_GETXYFROMPOINT ( BYREF $TPOINT , BYREF $IX , BYREF $IY )
$IX = DLLSTRUCTGETDATA ( $TPOINT , "X" )
$IY = DLLSTRUCTGETDATA ( $TPOINT , "Y" )
ENDFUNC
FUNC _WINAPI_GLOBALMEMORYSTATUS ( )
LOCAL $TMEM = DLLSTRUCTCREATE ( $TAGMEMORYSTATUSEX )
LOCAL $IMEM = DLLSTRUCTGETSIZE ( $TMEM )
DLLSTRUCTSETDATA ( $TMEM , 1 , $IMEM )
DLLCALL ( "kernel32.dll" , "none" , "GlobalMemoryStatusEx" , "ptr" , $TMEM )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
LOCAL $AMEM [ 7 ]
$AMEM [ 0 ] = DLLSTRUCTGETDATA ( $TMEM , 2 )
$AMEM [ 1 ] = DLLSTRUCTGETDATA ( $TMEM , 3 )
$AMEM [ 2 ] = DLLSTRUCTGETDATA ( $TMEM , 4 )
$AMEM [ 3 ] = DLLSTRUCTGETDATA ( $TMEM , 5 )
$AMEM [ 4 ] = DLLSTRUCTGETDATA ( $TMEM , 6 )
$AMEM [ 5 ] = DLLSTRUCTGETDATA ( $TMEM , 7 )
$AMEM [ 6 ] = DLLSTRUCTGETDATA ( $TMEM , 8 )
RETURN $AMEM
ENDFUNC
FUNC _WINAPI_GUIDFROMSTRING ( $SGUID )
LOCAL $TGUID = DLLSTRUCTCREATE ( $TAGGUID )
_WINAPI_GUIDFROMSTRINGEX ( $SGUID , $TGUID )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $TGUID
ENDFUNC
FUNC _WINAPI_GUIDFROMSTRINGEX ( $SGUID , $PGUID )
LOCAL $ARESULT = DLLCALL ( "ole32.dll" , "long" , "CLSIDFromString" , "wstr" , $SGUID , "struct*" , $PGUID )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_HIWORD ( $ILONG )
RETURN BITSHIFT ( $ILONG , 16 )
ENDFUNC
FUNC _WINAPI_INPROCESS ( $HWND , BYREF $HLASTWND )
IF $HWND = $HLASTWND THEN RETURN TRUE
FOR $II = $__GAINPROCESS_WINAPI [ 0 ] [ 0 ] TO 1 STEP - 1
IF $HWND = $__GAINPROCESS_WINAPI [ $II ] [ 0 ] THEN
IF $__GAINPROCESS_WINAPI [ $II ] [ 1 ] THEN
$HLASTWND = $HWND
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ENDIF
NEXT
LOCAL $IPROCESSID
_WINAPI_GETWINDOWTHREADPROCESSID ( $HWND , $IPROCESSID )
LOCAL $ICOUNT = $__GAINPROCESS_WINAPI [ 0 ] [ 0 ] + 1
IF $ICOUNT >= 64 THEN $ICOUNT = 1
$__GAINPROCESS_WINAPI [ 0 ] [ 0 ] = $ICOUNT
$__GAINPROCESS_WINAPI [ $ICOUNT ] [ 0 ] = $HWND
$__GAINPROCESS_WINAPI [ $ICOUNT ] [ 1 ] = ( $IPROCESSID = @autoITPID )
RETURN $__GAINPROCESS_WINAPI [ $ICOUNT ] [ 1 ]
ENDFUNC
FUNC _WINAPI_INTTOFLOAT ( $IINT )
LOCAL $TINT = DLLSTRUCTCREATE ( "int" )
LOCAL $TFLOAT = DLLSTRUCTCREATE ( "float" , DLLSTRUCTGETPTR ( $TINT ) )
DLLSTRUCTSETDATA ( $TINT , 1 , $IINT )
RETURN DLLSTRUCTGETDATA ( $TFLOAT , 1 )
ENDFUNC
FUNC _WINAPI_ISCLASSNAME ( $HWND , $SCLASSNAME )
LOCAL $SSEPARATOR = OPT ( "GUIDataSeparatorChar" )
LOCAL $ACLASSNAME = STRINGSPLIT ( $SCLASSNAME , $SSEPARATOR )
IF NOT ISHWND ( $HWND ) THEN $HWND = GUICTRLGETHANDLE ( $HWND )
LOCAL $SCLASSCHECK = _WINAPI_GETCLASSNAME ( $HWND )
FOR $X = 1 TO UBOUND ( $ACLASSNAME ) - 1
IF STRINGUPPER ( STRINGMID ( $SCLASSCHECK , 1 , STRINGLEN ( $ACLASSNAME [ $X ] ) ) ) = STRINGUPPER ( $ACLASSNAME [ $X ] ) THEN RETURN TRUE
NEXT
RETURN FALSE
ENDFUNC
FUNC _WINAPI_ISWINDOW ( $HWND )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "IsWindow" , "hwnd" , $HWND )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_ISWINDOWVISIBLE ( $HWND )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "IsWindowVisible" , "hwnd" , $HWND )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_INVALIDATERECT ( $HWND , $TRECT = 0 , $FERASE = TRUE )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "InvalidateRect" , "hwnd" , $HWND , "struct*" , $TRECT , "bool" , $FERASE )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_LINETO ( $HDC , $IX , $IY )
LOCAL $ARESULT = DLLCALL ( "gdi32.dll" , "bool" , "LineTo" , "handle" , $HDC , "int" , $IX , "int" , $IY )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_LOADBITMAP ( $HINSTANCE , $SBITMAP )
LOCAL $SBITMAPTYPE = "int"
IF ISSTRING ( $SBITMAP ) THEN $SBITMAPTYPE = "wstr"
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "handle" , "LoadBitmapW" , "handle" , $HINSTANCE , $SBITMAPTYPE , $SBITMAP )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_LOADIMAGE ( $HINSTANCE , $SIMAGE , $ITYPE , $IXDESIRED , $IYDESIRED , $ILOAD )
LOCAL $ARESULT , $SIMAGETYPE = "int"
IF ISSTRING ( $SIMAGE ) THEN $SIMAGETYPE = "wstr"
$ARESULT = DLLCALL ( "user32.dll" , "handle" , "LoadImageW" , "handle" , $HINSTANCE , $SIMAGETYPE , $SIMAGE , "uint" , $ITYPE , "int" , $IXDESIRED , "int" , $IYDESIRED , "uint" , $ILOAD )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_LOADLIBRARY ( $SFILENAME )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "handle" , "LoadLibraryW" , "wstr" , $SFILENAME )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_LOADLIBRARYEX ( $SFILENAME , $IFLAGS = 0 )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "handle" , "LoadLibraryExW" , "wstr" , $SFILENAME , "ptr" , 0 , "dword" , $IFLAGS )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_LOADSHELL32ICON ( $IICONID )
LOCAL $TICONS = DLLSTRUCTCREATE ( "ptr Data" )
LOCAL $IICONS = _WINAPI_EXTRACTICONEX ( "shell32.dll" , $IICONID , 0 , $TICONS , 1 )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
IF $IICONS <= 0 THEN RETURN SETERROR ( 1 , 0 , 0 )
RETURN DLLSTRUCTGETDATA ( $TICONS , "Data" )
ENDFUNC
FUNC _WINAPI_LOADSTRING ( $HINSTANCE , $ISTRINGID )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "int" , "LoadStringW" , "handle" , $HINSTANCE , "uint" , $ISTRINGID , "wstr" , "" , "int" , 4096 )
IF @error THEN RETURN SETERROR ( @error , @extendED , "" )
RETURN SETEXTENDED ( $ARESULT [ 0 ] , $ARESULT [ 3 ] )
ENDFUNC
FUNC _WINAPI_LOCALFREE ( $HMEM )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "handle" , "LocalFree" , "handle" , $HMEM )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_LOWORD ( $ILONG )
RETURN BITAND ( $ILONG , 65535 )
ENDFUNC
FUNC _WINAPI_MAKELANGID ( $LGIDPRIMARY , $LGIDSUB )
RETURN BITOR ( BITSHIFT ( $LGIDSUB , - 10 ) , $LGIDPRIMARY )
ENDFUNC
FUNC _WINAPI_MAKELCID ( $LGID , $SRTID )
RETURN BITOR ( BITSHIFT ( $SRTID , - 16 ) , $LGID )
ENDFUNC
FUNC _WINAPI_MAKELONG ( $ILO , $IHI )
RETURN BITOR ( BITSHIFT ( $IHI , - 16 ) , BITAND ( $ILO , 65535 ) )
ENDFUNC
FUNC _WINAPI_MAKEQWORD ( $LODWORD , $HIDWORD )
LOCAL $TINT64 = DLLSTRUCTCREATE ( "uint64" )
LOCAL $TDWORDS = DLLSTRUCTCREATE ( "dword;dword" , DLLSTRUCTGETPTR ( $TINT64 ) )
DLLSTRUCTSETDATA ( $TDWORDS , 1 , $LODWORD )
DLLSTRUCTSETDATA ( $TDWORDS , 2 , $HIDWORD )
RETURN DLLSTRUCTGETDATA ( $TINT64 , 1 )
ENDFUNC
FUNC _WINAPI_MESSAGEBEEP ( $ITYPE = 1 )
LOCAL $ISOUND
SWITCH $ITYPE
CASE 1
$ISOUND = 0
CASE 2
$ISOUND = 16
CASE 3
$ISOUND = 32
CASE 4
$ISOUND = 48
CASE 5
$ISOUND = 64
CASE ELSE
$ISOUND = - 1
ENDSWITCH
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "MessageBeep" , "uint" , $ISOUND )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_MSGBOX ( $IFLAGS , $STITLE , $STEXT )
BLOCKINPUT ( 0 )
MSGBOX ( $IFLAGS , $STITLE , $STEXT & " " )
ENDFUNC
FUNC _WINAPI_MOUSE_EVENT ( $IFLAGS , $IX = 0 , $IY = 0 , $IDATA = 0 , $IEXTRAINFO = 0 )
DLLCALL ( "user32.dll" , "none" , "mouse_event" , "dword" , $IFLAGS , "dword" , $IX , "dword" , $IY , "dword" , $IDATA , "ulong_ptr" , $IEXTRAINFO )
IF @error THEN RETURN SETERROR ( @error , @extendED )
ENDFUNC
FUNC _WINAPI_MOVETO ( $HDC , $IX , $IY )
LOCAL $ARESULT = DLLCALL ( "gdi32.dll" , "bool" , "MoveToEx" , "handle" , $HDC , "int" , $IX , "int" , $IY , "ptr" , 0 )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_MOVEWINDOW ( $HWND , $IX , $IY , $IWIDTH , $IHEIGHT , $FREPAINT = TRUE )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "MoveWindow" , "hwnd" , $HWND , "int" , $IX , "int" , $IY , "int" , $IWIDTH , "int" , $IHEIGHT , "bool" , $FREPAINT )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_MULDIV ( $INUMBER , $INUMERATOR , $IDENOMINATOR )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "int" , "MulDiv" , "int" , $INUMBER , "int" , $INUMERATOR , "int" , $IDENOMINATOR )
IF @error THEN RETURN SETERROR ( @error , @extendED , - 1 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_MULTIBYTETOWIDECHAR ( $STEXT , $ICODEPAGE = 0 , $IFLAGS = 0 , $BRETSTRING = FALSE )
LOCAL $STEXTTYPE = "str"
IF NOT ISSTRING ( $STEXT ) THEN $STEXTTYPE = "struct*"
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "int" , "MultiByteToWideChar" , "uint" , $ICODEPAGE , "dword" , $IFLAGS , $STEXTTYPE , $STEXT , "int" , - 1 , "ptr" , 0 , "int" , 0 )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
LOCAL $IOUT = $ARESULT [ 0 ]
LOCAL $TOUT = DLLSTRUCTCREATE ( "wchar[" & $IOUT & "]" )
$ARESULT = DLLCALL ( "kernel32.dll" , "int" , "MultiByteToWideChar" , "uint" , $ICODEPAGE , "dword" , $IFLAGS , $STEXTTYPE , $STEXT , "int" , - 1 , "struct*" , $TOUT , "int" , $IOUT )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
IF $BRETSTRING THEN RETURN DLLSTRUCTGETDATA ( $TOUT , 1 )
RETURN $TOUT
ENDFUNC
FUNC _WINAPI_MULTIBYTETOWIDECHAREX ( $STEXT , $PTEXT , $ICODEPAGE = 0 , $IFLAGS = 0 )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "int" , "MultiByteToWideChar" , "uint" , $ICODEPAGE , "dword" , $IFLAGS , "STR" , $STEXT , "int" , - 1 , "struct*" , $PTEXT , "int" , ( STRINGLEN ( $STEXT ) + 1 ) * 2 )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_OPENPROCESS ( $IACCESS , $FINHERIT , $IPROCESSID , $FDEBUGPRIV = FALSE )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "handle" , "OpenProcess" , "dword" , $IACCESS , "bool" , $FINHERIT , "dword" , $IPROCESSID )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
IF $ARESULT [ 0 ] THEN RETURN $ARESULT [ 0 ]
IF NOT $FDEBUGPRIV THEN RETURN 0
LOCAL $HTOKEN = _SECURITY__OPENTHREADTOKENEX ( BITOR ( $TOKEN_ADJUST_PRIVILEGES , $TOKEN_QUERY ) )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
_SECURITY__SETPRIVILEGE ( $HTOKEN , "SeDebugPrivilege" , TRUE )
LOCAL $IERROR = @error
LOCAL $ILASTERROR = @extendED
LOCAL $IRET = 0
IF NOT @error THEN
$ARESULT = DLLCALL ( "kernel32.dll" , "handle" , "OpenProcess" , "dword" , $IACCESS , "bool" , $FINHERIT , "dword" , $IPROCESSID )
$IERROR = @error
$ILASTERROR = @extendED
IF $ARESULT [ 0 ] THEN $IRET = $ARESULT [ 0 ]
_SECURITY__SETPRIVILEGE ( $HTOKEN , "SeDebugPrivilege" , FALSE )
IF @error THEN
$IERROR = @error
$ILASTERROR = @extendED
ENDIF
ENDIF
_WINAPI_CLOSEHANDLE ( $HTOKEN )
RETURN SETERROR ( $IERROR , $ILASTERROR , $IRET )
ENDFUNC
FUNC __WINAPI_PARSEFILEDIALOGPATH ( $SPATH )
LOCAL $AFILES [ 3 ]
$AFILES [ 0 ] = 2
LOCAL $STEMP = STRINGMID ( $SPATH , 1 , STRINGINSTR ( $SPATH , "\" , 0 , - 1 ) - 1 )
$AFILES [ 1 ] = $STEMP
$AFILES [ 2 ] = STRINGMID ( $SPATH , STRINGINSTR ( $SPATH , "\" , 0 , - 1 ) + 1 )
RETURN $AFILES
ENDFUNC
FUNC _WINAPI_PATHFINDONPATH ( CONST $SZFILE , $AEXTRAPATHS = "" , CONST $SZPATHDELIMITER = @LF )
LOCAL $IEXTRACOUNT = 0
IF ISSTRING ( $AEXTRAPATHS ) THEN
IF STRINGLEN ( $AEXTRAPATHS ) THEN
$AEXTRAPATHS = STRINGSPLIT ( $AEXTRAPATHS , $SZPATHDELIMITER , 1 + 2 )
$IEXTRACOUNT = UBOUND ( $AEXTRAPATHS , 1 )
ENDIF
ELSEIF ISARRAY ( $AEXTRAPATHS ) THEN
$IEXTRACOUNT = UBOUND ( $AEXTRAPATHS )
ENDIF
LOCAL $TPATHS , $TPATHPTRS
IF $IEXTRACOUNT THEN
LOCAL $SZSTRUCT = ""
FOR $PATH IN $AEXTRAPATHS
$SZSTRUCT &= "wchar[" & STRINGLEN ( $PATH ) + 1 & "];"
NEXT
$TPATHS = DLLSTRUCTCREATE ( $SZSTRUCT )
$TPATHPTRS = DLLSTRUCTCREATE ( "ptr[" & $IEXTRACOUNT + 1 & "]" )
FOR $I = 1 TO $IEXTRACOUNT
DLLSTRUCTSETDATA ( $TPATHS , $I , $AEXTRAPATHS [ $I - 1 ] )
DLLSTRUCTSETDATA ( $TPATHPTRS , 1 , DLLSTRUCTGETPTR ( $TPATHS , $I ) , $I )
NEXT
DLLSTRUCTSETDATA ( $TPATHPTRS , 1 , PTR ( 0 ) , $IEXTRACOUNT + 1 )
ENDIF
LOCAL $ARESULT = DLLCALL ( "shlwapi.dll" , "bool" , "PathFindOnPathW" , "wstr" , $SZFILE , "struct*" , $TPATHPTRS )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
IF $ARESULT [ 0 ] = 0 THEN RETURN SETERROR ( 1 , 0 , $SZFILE )
RETURN $ARESULT [ 1 ]
ENDFUNC
FUNC _WINAPI_POINTFROMRECT ( BYREF $TRECT , $FCENTER = TRUE )
LOCAL $IX1 = DLLSTRUCTGETDATA ( $TRECT , "Left" )
LOCAL $IY1 = DLLSTRUCTGETDATA ( $TRECT , "Top" )
LOCAL $IX2 = DLLSTRUCTGETDATA ( $TRECT , "Right" )
LOCAL $IY2 = DLLSTRUCTGETDATA ( $TRECT , "Bottom" )
IF $FCENTER THEN
$IX1 = $IX1 + ( ( $IX2 - $IX1 ) / 2 )
$IY1 = $IY1 + ( ( $IY2 - $IY1 ) / 2 )
ENDIF
LOCAL $TPOINT = DLLSTRUCTCREATE ( $TAGPOINT )
DLLSTRUCTSETDATA ( $TPOINT , "X" , $IX1 )
DLLSTRUCTSETDATA ( $TPOINT , "Y" , $IY1 )
RETURN $TPOINT
ENDFUNC
FUNC _WINAPI_POSTMESSAGE ( $HWND , $IMSG , $IWPARAM , $ILPARAM )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "PostMessage" , "hwnd" , $HWND , "uint" , $IMSG , "wparam" , $IWPARAM , "lparam" , $ILPARAM )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_PRIMARYLANGID ( $LGID )
RETURN BITAND ( $LGID , 1023 )
ENDFUNC
FUNC _WINAPI_PTINRECT ( BYREF $TRECT , BYREF $TPOINT )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "PtInRect" , "struct*" , $TRECT , "struct" , $TPOINT )
IF @error THEN RETURN SETERROR ( 1 , @extendED , FALSE )
RETURN NOT ( $ARESULT [ 0 ] = 0 )
ENDFUNC
FUNC _WINAPI_READFILE ( $HFILE , $PBUFFER , $ITOREAD , BYREF $IREAD , $POVERLAPPED = 0 )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "bool" , "ReadFile" , "handle" , $HFILE , "ptr" , $PBUFFER , "dword" , $ITOREAD , "dword*" , 0 , "ptr" , $POVERLAPPED )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
$IREAD = $ARESULT [ 4 ]
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_READPROCESSMEMORY ( $HPROCESS , $PBASEADDRESS , $PBUFFER , $ISIZE , BYREF $IREAD )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "bool" , "ReadProcessMemory" , "handle" , $HPROCESS , "ptr" , $PBASEADDRESS , "ptr" , $PBUFFER , "ulong_ptr" , $ISIZE , "ulong_ptr*" , 0 )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
$IREAD = $ARESULT [ 5 ]
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_RECTISEMPTY ( BYREF $TRECT )
RETURN ( DLLSTRUCTGETDATA ( $TRECT , "Left" ) = 0 ) AND ( DLLSTRUCTGETDATA ( $TRECT , "Top" ) = 0 ) AND ( DLLSTRUCTGETDATA ( $TRECT , "Right" ) = 0 ) AND ( DLLSTRUCTGETDATA ( $TRECT , "Bottom" ) = 0 )
ENDFUNC
FUNC _WINAPI_REDRAWWINDOW ( $HWND , $TRECT = 0 , $HREGION = 0 , $IFLAGS = 5 )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "RedrawWindow" , "hwnd" , $HWND , "struct*" , $TRECT , "handle" , $HREGION , "uint" , $IFLAGS )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_REGISTERWINDOWMESSAGE ( $SMESSAGE )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "uint" , "RegisterWindowMessageW" , "wstr" , $SMESSAGE )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_RELEASECAPTURE ( )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "ReleaseCapture" )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_RELEASEDC ( $HWND , $HDC )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "int" , "ReleaseDC" , "hwnd" , $HWND , "handle" , $HDC )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SCREENTOCLIENT ( $HWND , BYREF $TPOINT )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "ScreenToClient" , "hwnd" , $HWND , "struct*" , $TPOINT )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SELECTOBJECT ( $HDC , $HGDIOBJ )
LOCAL $ARESULT = DLLCALL ( "gdi32.dll" , "handle" , "SelectObject" , "handle" , $HDC , "handle" , $HGDIOBJ )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETBKCOLOR ( $HDC , $ICOLOR )
LOCAL $ARESULT = DLLCALL ( "gdi32.dll" , "INT" , "SetBkColor" , "handle" , $HDC , "dword" , $ICOLOR )
IF @error THEN RETURN SETERROR ( @error , @extendED , - 1 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETBKMODE ( $HDC , $IBKMODE )
LOCAL $ARESULT = DLLCALL ( "gdi32.dll" , "int" , "SetBkMode" , "handle" , $HDC , "int" , $IBKMODE )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETCAPTURE ( $HWND )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "hwnd" , "SetCapture" , "hwnd" , $HWND )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETCURSOR ( $HCURSOR )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "handle" , "SetCursor" , "handle" , $HCURSOR )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETDEFAULTPRINTER ( $SPRINTER )
LOCAL $ARESULT = DLLCALL ( "winspool.drv" , "bool" , "SetDefaultPrinterW" , "wstr" , $SPRINTER )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETDIBITS ( $HDC , $HBMP , $ISTARTSCAN , $ISCANLINES , $PBITS , $PBMI , $ICOLORUSE = 0 )
LOCAL $ARESULT = DLLCALL ( "gdi32.dll" , "int" , "SetDIBits" , "handle" , $HDC , "handle" , $HBMP , "uint" , $ISTARTSCAN , "uint" , $ISCANLINES , "ptr" , $PBITS , "ptr" , $PBMI , "uint" , $ICOLORUSE )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETENDOFFILE ( $HFILE )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "bool" , "SetEndOfFile" , "handle" , $HFILE )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETEVENT ( $HEVENT )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "bool" , "SetEvent" , "handle" , $HEVENT )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETFILEPOINTER ( $HFILE , $IPOS , $IMETHOD = 0 )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "INT" , "SetFilePointer" , "handle" , $HFILE , "long" , $IPOS , "ptr" , 0 , "long" , $IMETHOD )
IF @error THEN RETURN SETERROR ( @error , @extendED , - 1 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETFOCUS ( $HWND )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "hwnd" , "SetFocus" , "hwnd" , $HWND )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETFONT ( $HWND , $HFONT , $FREDRAW = TRUE )
_SENDMESSAGE ( $HWND , $__WINAPICONSTANT_WM_SETFONT , $HFONT , $FREDRAW , 0 , "hwnd" )
ENDFUNC
FUNC _WINAPI_SETHANDLEINFORMATION ( $HOBJECT , $IMASK , $IFLAGS )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "bool" , "SetHandleInformation" , "handle" , $HOBJECT , "dword" , $IMASK , "dword" , $IFLAGS )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETLAYEREDWINDOWATTRIBUTES ( $HWND , $I_TRANSCOLOR , $TRANSPARENCY = 255 , $DWFLAGS = 3 , $ISCOLORREF = FALSE )
IF $DWFLAGS = DEFAULT OR $DWFLAGS = "" OR $DWFLAGS < 0 THEN $DWFLAGS = 3
IF NOT $ISCOLORREF THEN
$I_TRANSCOLOR = INT ( BINARYMID ( $I_TRANSCOLOR , 3 , 1 ) & BINARYMID ( $I_TRANSCOLOR , 2 , 1 ) & BINARYMID ( $I_TRANSCOLOR , 1 , 1 ) )
ENDIF
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "SetLayeredWindowAttributes" , "hwnd" , $HWND , "dword" , $I_TRANSCOLOR , "byte" , $TRANSPARENCY , "dword" , $DWFLAGS )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETPARENT ( $HWNDCHILD , $HWNDPARENT )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "hwnd" , "SetParent" , "hwnd" , $HWNDCHILD , "hwnd" , $HWNDPARENT )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETPROCESSAFFINITYMASK ( $HPROCESS , $IMASK )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "bool" , "SetProcessAffinityMask" , "handle" , $HPROCESS , "ulong_ptr" , $IMASK )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETSYSCOLORS ( $VELEMENTS , $VCOLORS )
LOCAL $ISEARRAY = ISARRAY ( $VELEMENTS ) , $ISCARRAY = ISARRAY ( $VCOLORS )
LOCAL $IELEMENTNUM
IF NOT $ISCARRAY AND NOT $ISEARRAY THEN
$IELEMENTNUM = 1
ELSEIF $ISCARRAY OR $ISEARRAY THEN
IF NOT $ISCARRAY OR NOT $ISEARRAY THEN RETURN SETERROR ( - 1 , - 1 , FALSE )
IF UBOUND ( $VELEMENTS ) <> UBOUND ( $VCOLORS ) THEN RETURN SETERROR ( - 1 , - 1 , FALSE )
$IELEMENTNUM = UBOUND ( $VELEMENTS )
ENDIF
LOCAL $TELEMENTS = DLLSTRUCTCREATE ( "int Element[" & $IELEMENTNUM & "]" )
LOCAL $TCOLORS = DLLSTRUCTCREATE ( "dword NewColor[" & $IELEMENTNUM & "]" )
IF NOT $ISEARRAY THEN
DLLSTRUCTSETDATA ( $TELEMENTS , "Element" , $VELEMENTS , 1 )
ELSE
FOR $X = 0 TO $IELEMENTNUM - 1
DLLSTRUCTSETDATA ( $TELEMENTS , "Element" , $VELEMENTS [ $X ] , $X + 1 )
NEXT
ENDIF
IF NOT $ISCARRAY THEN
DLLSTRUCTSETDATA ( $TCOLORS , "NewColor" , $VCOLORS , 1 )
ELSE
FOR $X = 0 TO $IELEMENTNUM - 1
DLLSTRUCTSETDATA ( $TCOLORS , "NewColor" , $VCOLORS [ $X ] , $X + 1 )
NEXT
ENDIF
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "SetSysColors" , "int" , $IELEMENTNUM , "struct*" , $TELEMENTS , "struct*" , $TCOLORS )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETTEXTCOLOR ( $HDC , $ICOLOR )
LOCAL $ARESULT = DLLCALL ( "gdi32.dll" , "INT" , "SetTextColor" , "handle" , $HDC , "dword" , $ICOLOR )
IF @error THEN RETURN SETERROR ( @error , @extendED , - 1 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETWINDOWLONG ( $HWND , $IINDEX , $IVALUE )
_WINAPI_SETLASTERROR ( 0 )
LOCAL $SFUNCNAME = "SetWindowLongW"
IF @autoITX64 THEN $SFUNCNAME = "SetWindowLongPtrW"
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "long_ptr" , $SFUNCNAME , "hwnd" , $HWND , "int" , $IINDEX , "long_ptr" , $IVALUE )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETWINDOWPLACEMENT ( $HWND , $PWINDOWPLACEMENT )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "SetWindowPlacement" , "hwnd" , $HWND , "ptr" , $PWINDOWPLACEMENT )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETWINDOWPOS ( $HWND , $HAFTER , $IX , $IY , $ICX , $ICY , $IFLAGS )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "SetWindowPos" , "hwnd" , $HWND , "hwnd" , $HAFTER , "int" , $IX , "int" , $IY , "int" , $ICX , "int" , $ICY , "uint" , $IFLAGS )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETWINDOWRGN ( $HWND , $HRGN , $BREDRAW = TRUE )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "int" , "SetWindowRgn" , "hwnd" , $HWND , "handle" , $HRGN , "bool" , $BREDRAW )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETWINDOWSHOOKEX ( $IDHOOK , $LPFN , $HMOD , $DWTHREADID = 0 )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "handle" , "SetWindowsHookEx" , "int" , $IDHOOK , "ptr" , $LPFN , "handle" , $HMOD , "dword" , $DWTHREADID )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SETWINDOWTEXT ( $HWND , $STEXT )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "SetWindowTextW" , "hwnd" , $HWND , "wstr" , $STEXT )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SHOWCURSOR ( $FSHOW )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "int" , "ShowCursor" , "bool" , $FSHOW )
IF @error THEN RETURN SETERROR ( @error , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_SHOWERROR ( $STEXT , $FEXIT = TRUE )
_WINAPI_MSGBOX ( 266256 , "Error" , $STEXT )
IF $FEXIT THEN EXIT
ENDFUNC
FUNC _WINAPI_SHOWMSG ( $STEXT )
_WINAPI_MSGBOX ( 64 + 4096 , "Information" , $STEXT )
ENDFUNC
FUNC _WINAPI_SHOWWINDOW ( $HWND , $ICMDSHOW = 5 )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "ShowWindow" , "hwnd" , $HWND , "int" , $ICMDSHOW )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_STRINGFROMGUID ( $PGUID )
LOCAL $ARESULT = DLLCALL ( "ole32.dll" , "int" , "StringFromGUID2" , "struct*" , $PGUID , "wstr" , "" , "int" , 40 )
IF @error THEN RETURN SETERROR ( @error , @extendED , "" )
RETURN SETEXTENDED ( $ARESULT [ 0 ] , $ARESULT [ 2 ] )
ENDFUNC
FUNC _WINAPI_STRINGLENA ( $VSTRING )
LOCAL $ACALL = DLLCALL ( "kernel32.dll" , "int" , "lstrlenA" , "struct*" , $VSTRING )
IF @error THEN RETURN SETERROR ( 1 , @extendED , 0 )
RETURN $ACALL [ 0 ]
ENDFUNC
FUNC _WINAPI_STRINGLENW ( $VSTRING )
LOCAL $ACALL = DLLCALL ( "kernel32.dll" , "int" , "lstrlenW" , "struct*" , $VSTRING )
IF @error THEN RETURN SETERROR ( 1 , @extendED , 0 )
RETURN $ACALL [ 0 ]
ENDFUNC
FUNC _WINAPI_SUBLANGID ( $LGID )
RETURN BITSHIFT ( $LGID , 10 )
ENDFUNC
FUNC _WINAPI_SYSTEMPARAMETERSINFO ( $IACTION , $IPARAM = 0 , $VPARAM = 0 , $IWININI = 0 )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "SystemParametersInfoW" , "uint" , $IACTION , "uint" , $IPARAM , "ptr" , $VPARAM , "uint" , $IWININI )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_TWIPSPERPIXELX ( )
LOCAL $LNGDC , $TWIPSPERPIXELX
$LNGDC = _WINAPI_GETDC ( 0 )
$TWIPSPERPIXELX = 1440 / _WINAPI_GETDEVICECAPS ( $LNGDC , $__WINAPICONSTANT_LOGPIXELSX )
_WINAPI_RELEASEDC ( 0 , $LNGDC )
RETURN $TWIPSPERPIXELX
ENDFUNC
FUNC _WINAPI_TWIPSPERPIXELY ( )
LOCAL $LNGDC , $TWIPSPERPIXELY
$LNGDC = _WINAPI_GETDC ( 0 )
$TWIPSPERPIXELY = 1440 / _WINAPI_GETDEVICECAPS ( $LNGDC , $__WINAPICONSTANT_LOGPIXELSY )
_WINAPI_RELEASEDC ( 0 , $LNGDC )
RETURN $TWIPSPERPIXELY
ENDFUNC
FUNC _WINAPI_UNHOOKWINDOWSHOOKEX ( $HHK )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "UnhookWindowsHookEx" , "handle" , $HHK )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_UPDATELAYEREDWINDOW ( $HWND , $HDCDEST , $PPTDEST , $PSIZE , $HDCSRCE , $PPTSRCE , $IRGB , $PBLEND , $IFLAGS )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "UpdateLayeredWindow" , "hwnd" , $HWND , "handle" , $HDCDEST , "ptr" , $PPTDEST , "ptr" , $PSIZE , "handle" , $HDCSRCE , "ptr" , $PPTSRCE , "dword" , $IRGB , "ptr" , $PBLEND , "dword" , $IFLAGS )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_UPDATEWINDOW ( $HWND )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "bool" , "UpdateWindow" , "hwnd" , $HWND )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_WAITFORINPUTIDLE ( $HPROCESS , $ITIMEOUT = - 1 )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "dword" , "WaitForInputIdle" , "handle" , $HPROCESS , "dword" , $ITIMEOUT )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_WAITFORMULTIPLEOBJECTS ( $ICOUNT , $PHANDLES , $FWAITALL = FALSE , $ITIMEOUT = - 1 )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "INT" , "WaitForMultipleObjects" , "dword" , $ICOUNT , "ptr" , $PHANDLES , "bool" , $FWAITALL , "dword" , $ITIMEOUT )
IF @error THEN RETURN SETERROR ( @error , @extendED , - 1 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_WAITFORSINGLEOBJECT ( $HHANDLE , $ITIMEOUT = - 1 )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "INT" , "WaitForSingleObject" , "handle" , $HHANDLE , "dword" , $ITIMEOUT )
IF @error THEN RETURN SETERROR ( @error , @extendED , - 1 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_WIDECHARTOMULTIBYTE ( $PUNICODE , $ICODEPAGE = 0 , $BRETSTRING = TRUE )
LOCAL $SUNICODETYPE = "wstr"
IF NOT ISSTRING ( $PUNICODE ) THEN $SUNICODETYPE = "struct*"
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "int" , "WideCharToMultiByte" , "uint" , $ICODEPAGE , "dword" , 0 , $SUNICODETYPE , $PUNICODE , "int" , - 1 , "ptr" , 0 , "int" , 0 , "ptr" , 0 , "ptr" , 0 )
IF @error THEN RETURN SETERROR ( @error , @extendED , "" )
LOCAL $TMULTIBYTE = DLLSTRUCTCREATE ( "char[" & $ARESULT [ 0 ] & "]" )
$ARESULT = DLLCALL ( "kernel32.dll" , "int" , "WideCharToMultiByte" , "uint" , $ICODEPAGE , "dword" , 0 , $SUNICODETYPE , $PUNICODE , "int" , - 1 , "struct*" , $TMULTIBYTE , "int" , $ARESULT [ 0 ] , "ptr" , 0 , "ptr" , 0 )
IF @error THEN RETURN SETERROR ( @error , @extendED , "" )
IF $BRETSTRING THEN RETURN DLLSTRUCTGETDATA ( $TMULTIBYTE , 1 )
RETURN $TMULTIBYTE
ENDFUNC
FUNC _WINAPI_WINDOWFROMPOINT ( BYREF $TPOINT )
LOCAL $ARESULT = DLLCALL ( "user32.dll" , "hwnd" , "WindowFromPoint" , "struct" , $TPOINT )
IF @error THEN RETURN SETERROR ( 1 , @extendED , 0 )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_WRITECONSOLE ( $HCONSOLE , $STEXT )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "bool" , "WriteConsoleW" , "handle" , $HCONSOLE , "wstr" , $STEXT , "dword" , STRINGLEN ( $STEXT ) , "dword*" , 0 , "ptr" , 0 )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_WRITEFILE ( $HFILE , $PBUFFER , $ITOWRITE , BYREF $IWRITTEN , $POVERLAPPED = 0 )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "bool" , "WriteFile" , "handle" , $HFILE , "ptr" , $PBUFFER , "dword" , $ITOWRITE , "dword*" , 0 , "ptr" , $POVERLAPPED )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
$IWRITTEN = $ARESULT [ 4 ]
RETURN $ARESULT [ 0 ]
ENDFUNC
FUNC _WINAPI_WRITEPROCESSMEMORY ( $HPROCESS , $PBASEADDRESS , $PBUFFER , $ISIZE , BYREF $IWRITTEN , $SBUFFER = "ptr" )
LOCAL $ARESULT = DLLCALL ( "kernel32.dll" , "bool" , "WriteProcessMemory" , "handle" , $HPROCESS , "ptr" , $PBASEADDRESS , $SBUFFER , $PBUFFER , "ulong_ptr" , $ISIZE , "ulong_ptr*" , 0 )
IF @error THEN RETURN SETERROR ( @error , @extendED , FALSE )
$IWRITTEN = $ARESULT [ 5 ]
RETURN $ARESULT [ 0 ]
ENDFUNC
GLOBAL ENUM $XH_LEFT_GUI , $XH_RIGHT_GUI , $XH_BOTTOM_GUI , $XH_TOP_GUI
GLOBAL ENUM $XH_HGUI , $XH_XADJ , $XH_YADJ
GLOBAL $XH_AGUIS [ $XH_TOP_GUI + 1 ] [ $XH_YADJ + 1 ]
GLOBAL $XH_BINIT = FALSE , $XH_BSETONEVENT = FALSE , $XH_ITHICKNESS , $XH_ISELECTBOX , $XH_IXHAIRCOLOR , $XH_IPREVEVENTMODE , $XH_ALASTPOS [ 2 ]
GLOBAL $XH_CTRLCLICKED = 0 , $XH_WINCLICKED = 0
FUNC _XH_GUICLICKED ( )
FOR $I = 0 TO $XH_TOP_GUI
IF @gui_WINHANDLE = $XH_AGUIS [ $I ] [ 0 ] THEN
$XH_WINCLICKED = $I
$XH_CTRLCLICKED = @gui_CTRLID
EXITLOOP
ENDIF
NEXT
RETURN "GUI_RUNDEFMSG"
ENDFUNC
FUNC _XHAIRINIT ( $ITHICKNESS = 3 , $ISELECTBOX = 7 , $ICROSSHAIRCOLOR = 8421504 , $ITRANSPARENCY = 150 , $BSETONEVENT = FALSE )
IF $XH_BINIT THEN RETURN TRUE
FOR $I = 0 TO $XH_TOP_GUI
$XH_AGUIS [ $I ] [ 0 ] = GUICREATE ( "" , 0 , 0 , 0 , 0 , -2080374784 , 134217864 )
NEXT
_XHAIRSETDISPLAYPROPS ( $ITHICKNESS , $ISELECTBOX , $ICROSSHAIRCOLOR , 0 , $BSETONEVENT , TRUE )
FOR $I = 0 TO $XH_TOP_GUI
GUISETSTATE ( @SW_SHOWNOACTIVATE , $XH_AGUIS [ $I ] [ 0 ] )
NEXT
_XHAIRHIDE ( )
FOR $I = 0 TO $XH_TOP_GUI
WINSETTRANS ( $XH_AGUIS [ $I ] [ 0 ] , "" , $ITRANSPARENCY )
NEXT
RETURN TRUE
ENDFUNC
FUNC _XHAIRUNINIT ( )
IF NOT $XH_BINIT THEN RETURN
IF $XH_BSETONEVENT THEN
AUTOITSETOPTION ( "GUIOnEventMode" , $XH_IPREVEVENTMODE )
$XH_BSETONEVENT = FALSE
ENDIF
FOR $I = 0 TO $XH_TOP_GUI
GUIDELETE ( $XH_AGUIS [ $I ] [ 0 ] )
$XH_AGUIS [ $I ] [ 0 ] = 0
NEXT
$XH_BINIT = FALSE
ENDFUNC
FUNC _XHAIRSETDISPLAYPROPS ( $ITHICKNESS = - 1 , $ISELECTBOX = - 1 , $ICROSSHAIRCOLOR = - 1 , $ITRANSPARENCY = 150 , $BSETONEVENT = FALSE , $BINITIALIZING = FALSE )
IF NOT $BINITIALIZING AND NOT $XH_BINIT THEN RETURN SETERROR ( 2 , 0 , FALSE )
IF $BINITIALIZING AND NOT ISHWND ( $XH_AGUIS [ $XH_TOP_GUI ] [ 0 ] ) THEN RETURN SETERROR ( 1 , 0 , FALSE )
LOCAL $ILINEOFFSET , $IBOXOFFSET , $IVSCRWIDTH , $IVSCRHEIGHT , $IX , $IY , $ASIZES [ $XH_TOP_GUI + 1 ] [ 2 ]
IF $ITHICKNESS < 0 THEN $ITHICKNESS = $XH_ITHICKNESS
IF $ISELECTBOX < 0 THEN $ISELECTBOX = $XH_ISELECTBOX
IF $ICROSSHAIRCOLOR < 0 THEN $ICROSSHAIRCOLOR = $XH_IXHAIRCOLOR
IF BITAND ( $ITHICKNESS , 1 ) = 0 THEN $ITHICKNESS += 1
$ILINEOFFSET = BITSHIFT ( $ITHICKNESS , 1 )
$IBOXOFFSET = BITSHIFT ( $ISELECTBOX , 1 )
$IVSCRWIDTH = _WINAPI_GETSYSTEMMETRICS ( 78 )
IF $IVSCRWIDTH = 0 THEN $IVSCRWIDTH = @desktopWIDTH
$IVSCRHEIGHT = _WINAPI_GETSYSTEMMETRICS ( 79 )
IF $IVSCRHEIGHT = 0 THEN $IVSCRHEIGHT = @desktopHEIGHT
$XH_ITHICKNESS = $ITHICKNESS
$XH_ISELECTBOX = $ISELECTBOX
$XH_IXHAIRCOLOR = $ICROSSHAIRCOLOR
$IX = $XH_ALASTPOS [ 0 ]
$IY = $XH_ALASTPOS [ 1 ]
$XH_AGUIS [ $XH_LEFT_GUI ] [ $XH_XADJ ] = - ( $IVSCRWIDTH - 1 + $IBOXOFFSET )
$XH_AGUIS [ $XH_LEFT_GUI ] [ $XH_YADJ ] = - $ILINEOFFSET
$ASIZES [ $XH_LEFT_GUI ] [ 0 ] = $IVSCRWIDTH - 1
$ASIZES [ $XH_LEFT_GUI ] [ 1 ] = $ITHICKNESS
$ASIZES [ $XH_RIGHT_GUI ] [ 0 ] = $IVSCRWIDTH - 1
$ASIZES [ $XH_RIGHT_GUI ] [ 1 ] = $ITHICKNESS
$XH_AGUIS [ $XH_RIGHT_GUI ] [ $XH_XADJ ] = $IBOXOFFSET + 1
$XH_AGUIS [ $XH_RIGHT_GUI ] [ $XH_YADJ ] = - $ILINEOFFSET
$ASIZES [ $XH_BOTTOM_GUI ] [ 0 ] = $ITHICKNESS
$ASIZES [ $XH_BOTTOM_GUI ] [ 1 ] = $IVSCRHEIGHT - 1
$XH_AGUIS [ $XH_BOTTOM_GUI ] [ $XH_XADJ ] = - $ILINEOFFSET
$XH_AGUIS [ $XH_BOTTOM_GUI ] [ $XH_YADJ ] = $IBOXOFFSET + 1
$ASIZES [ $XH_TOP_GUI ] [ 0 ] = $ITHICKNESS
$ASIZES [ $XH_TOP_GUI ] [ 1 ] = $IVSCRHEIGHT - 1
$XH_AGUIS [ $XH_TOP_GUI ] [ $XH_XADJ ] = - $ILINEOFFSET
$XH_AGUIS [ $XH_TOP_GUI ] [ $XH_YADJ ] = - ( $IVSCRHEIGHT - 1 + $IBOXOFFSET )
IF $BSETONEVENT THEN
IF $XH_BSETONEVENT THEN
$BSETONEVENT = FALSE
ELSE
$XH_BSETONEVENT = TRUE
$XH_IPREVEVENTMODE = AUTOITSETOPTION ( "GUIOnEventMode" , 1 )
ENDIF
ENDIF
FOR $I = 0 TO $XH_TOP_GUI
IF @numpARAMS > 2 THEN GUISETBKCOLOR ( $ICROSSHAIRCOLOR , $XH_AGUIS [ $I ] [ 0 ] )
IF @numpARAMS > 3 THEN WINSETTRANS ( $XH_AGUIS [ $I ] [ 0 ] , "" , 0 )
IF $BSETONEVENT THEN
GUISETONEVENT ( - 7 , "_XH_GUIClicked" , $XH_AGUIS [ $I ] [ 0 ] )
GUISETONEVENT ( - 9 , "_XH_GUIClicked" , $XH_AGUIS [ $I ] [ 0 ] )
ENDIF
IF $BINITIALIZING THEN
WINMOVE ( $XH_AGUIS [ $I ] [ 0 ] , "" , 0 , 0 , $ASIZES [ $I ] [ 0 ] , $ASIZES [ $I ] [ 1 ] )
ELSE
WINMOVE ( $XH_AGUIS [ $I ] [ 0 ] , "" , $IX + $XH_AGUIS [ $I ] [ $XH_XADJ ] , $IY + $XH_AGUIS [ $I ] [ $XH_YADJ ] , $ASIZES [ $I ] [ 0 ] , $ASIZES [ $I ] [ 1 ] )
ENDIF
NEXT
IF $BINITIALIZING THEN $XH_BINIT = TRUE
RETURN TRUE
ENDFUNC
FUNC _XHAIRSHOW ( $IXPOS , $IYPOS )
IF NOT $XH_BINIT THEN RETURN SETERROR ( 2 , 0 , FALSE )
IF $XH_ALASTPOS [ 0 ] = $IXPOS AND $XH_ALASTPOS [ 1 ] = $IYPOS THEN RETURN TRUE
$XH_ALASTPOS [ 0 ] = $IXPOS
$XH_ALASTPOS [ 1 ] = $IYPOS
FOR $I = 0 TO $XH_TOP_GUI
WINMOVE ( $XH_AGUIS [ $I ] [ 0 ] , "" , $IXPOS + $XH_AGUIS [ $I ] [ $XH_XADJ ] , $IYPOS + $XH_AGUIS [ $I ] [ $XH_YADJ ] )
WINSETONTOP ( $XH_AGUIS [ $I ] [ 0 ] , "" , 1 )
NEXT
RETURN TRUE
ENDFUNC
FUNC _XHAIRHIDE ( )
IF NOT $XH_BINIT THEN RETURN SETERROR ( 2 , 0 , FALSE )
WINMOVE ( $XH_AGUIS [ $XH_LEFT_GUI ] [ 0 ] , "" , 0 , - $XH_ITHICKNESS )
WINMOVE ( $XH_AGUIS [ $XH_RIGHT_GUI ] [ 0 ] , "" , 0 , - $XH_ITHICKNESS )
WINMOVE ( $XH_AGUIS [ $XH_BOTTOM_GUI ] [ 0 ] , "" , - $XH_ITHICKNESS , 0 )
WINMOVE ( $XH_AGUIS [ $XH_TOP_GUI ] [ 0 ] , "" , - $XH_ITHICKNESS , 0 )
$XH_ALASTPOS [ 0 ] = - 2000
$XH_ALASTPOS [ 1 ] = - 2000
RETURN TRUE
ENDFUNC
FUNC _MOUSEGETCURSOR ( )
LOCAL $ARET = DLLCALL ( "user32.dll" , "ptr" , "GetCursor" )
IF @error THEN RETURN SETERROR ( 2 , @error , FALSE )
RETURN $ARET [ 0 ]
ENDFUNC
FUNC _MOUSELOADCURSOR ( $HMODULE , $SCURSORNAME )
IF NOT ISPTR ( $HMODULE ) THEN RETURN SETERROR ( 1 , 0 , FALSE )
LOCAL $ARET = DLLCALL ( "user32.dll" , "ptr" , "LoadCursor" , "ptr" , $HMODULE , "ulong_ptr" , $SCURSORNAME )
IF @error THEN RETURN SETERROR ( 2 , @error , FALSE )
RETURN $ARET [ 0 ]
ENDFUNC
FUNC _MOUSELOADCURSORX ( $HMODULE , $SCURSORNAME )
IF NOT ISPTR ( $HMODULE ) THEN RETURN SETERROR ( 1 , 0 , FALSE )
LOCAL $ARET = DLLCALL ( "user32.dll" , "ptr" , "LoadImageW" , "ptr" , $HMODULE , "wstr" , $SCURSORNAME , "dword" , 2 , "int" , 0 , "int" , 0 , "dword" , 16 )
IF @error THEN RETURN SETERROR ( 2 , @error , FALSE )
RETURN $ARET [ 0 ]
ENDFUNC
FUNC _MOUSEDESTROYCURSOR ( $HCURSOR )
IF NOT ISPTR ( $HCURSOR ) OR $HCURSOR = 0 THEN RETURN SETERROR ( 1 , 0 , FALSE )
LOCAL $ARET = DLLCALL ( "user32.dll" , "int" , "DestroyCursor" , "ptr" , $HCURSOR )
IF @error THEN SETERROR ( 2 , @error , FALSE )
RETURN $ARET [ 0 ]
ENDFUNC
FUNC _MOUSESETCURSOR ( $HCURSOR )
IF NOT ISPTR ( $HCURSOR ) THEN RETURN SETERROR ( 1 , 0 , FALSE )
LOCAL $ARET = DLLCALL ( "user32.dll" , "ptr" , "SetCursor" , "ptr" , $HCURSOR )
IF @error THEN RETURN SETERROR ( 2 , @error , FALSE )
RETURN $ARET [ 0 ]
ENDFUNC
FUNC _MOUSESETCURSORVISIBILITY ( $BSHOW )
LOCAL $ARET = DLLCALL ( "user32.dll" , "int" , "ShowCursor" , "int" , $BSHOW )
IF @error THEN RETURN SETERROR ( 2 , @error , FALSE )
RETURN $ARET [ 0 ]
ENDFUNC
GLOBAL $MCF_ASYSCURSORS [ 16 ] [ 2 ] = [ [ 32512 , 0 ] , [ 32513 , 0 ] , [ 32514 , 0 ] , [ 32515 , 0 ] , [ 32516 , 0 ] , [ 32640 , 0 ] , [ 32641 , 0 ] , [ 32642 , 0 ] , [ 32643 , 0 ] , [ 32644 , 0 ] , [ 32645 , 0 ] , [ 32646 , 0 ] , [ 32647 , 0 ] , [ 32648 , 0 ] , [ 32649 , 0 ] , [ 32650 , 0 ] ]
GLOBAL $MCF_BCURSORSREPLACED = FALSE
FUNC _MOUSEREPLACEALLCURSORS ( )
IF $MCF_BCURSORSREPLACED THEN RETURN TRUE
LOCAL $I , $IERRCOUNT = 0 , $HCROSSHAIR , $HTEMPCOPY , $STCURSOR , $ARET
$STCURSOR = DLLSTRUCTCREATE ( "ubyte[128];ubyte[128]" )
DLLSTRUCTSETDATA ( $STCURSOR , 1 , "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" )
DLLSTRUCTSETDATA ( $STCURSOR , 2 , "0x01000000010000000100000001000000010000000100000001000000FEFE0000010000000100000001000000010000000100000001000000010000000000" )
$HCROSSHAIR = DLLCALL ( "user32.dll" , "ptr" , "CreateCursor" , "ptr" , 0 , "int" , 7 , "int" , 7 , "int" , 32 , "int" , 32 , "ptr" , DLLSTRUCTGETPTR ( $STCURSOR , 1 ) , "ptr" , DLLSTRUCTGETPTR ( $STCURSOR , 2 ) )
IF @error THEN RETURN SETERROR ( 2 , @error , FALSE )
$HCROSSHAIR = $HCROSSHAIR [ 0 ]
FOR $I = 0 TO UBOUND ( $MCF_ASYSCURSORS ) - 1
$HTEMPCOPY = DLLCALL ( "user32.dll" , "ptr" , "CopyIcon" , "ptr" , $HCROSSHAIR )
IF @error THEN
$IERRCOUNT += 1
CONTINUELOOP
ENDIF
$MCF_ASYSCURSORS [ $I ] [ 1 ] = $HTEMPCOPY [ 0 ]
$ARET = DLLCALL ( "user32.dll" , "int" , "SetSystemCursor" , "ptr" , $HTEMPCOPY [ 0 ] , "dword" , $MCF_ASYSCURSORS [ $I ] [ 0 ] )
IF @error THEN
$IERRCOUNT += 1
ENDIF
NEXT
DLLCALL ( "user32.dll" , "int" , "DestroyCursor" , "ptr" , $HCROSSHAIR )
IF $IERRCOUNT = 16 THEN RETURN SETERROR ( 2 , - 1 , FALSE )
$MCF_BCURSORSREPLACED = TRUE
ENDFUNC
FUNC _MOUSEHIDEALLCURSORS ( )
IF $MCF_BCURSORSREPLACED THEN RETURN TRUE
LOCAL $I , $IERRCOUNT = 0 , $HTEMPCOPY , $ARET , $STCURSOR , $HCURSOR
$STCURSOR = DLLSTRUCTCREATE ( "ubyte[128];ubyte[128]" )
DLLSTRUCTSETDATA ( $STCURSOR , 1 , "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" )
DLLSTRUCTSETDATA ( $STCURSOR , 2 , 0 )
$HCURSOR = DLLCALL ( "user32.dll" , "ptr" , "CreateCursor" , "ptr" , 0 , "int" , 0 , "int" , 0 , "int" , 32 , "int" , 32 , "ptr" , DLLSTRUCTGETPTR ( $STCURSOR , 1 ) , "ptr" , DLLSTRUCTGETPTR ( $STCURSOR , 2 ) )
IF @error THEN RETURN SETERROR ( 2 , @error , FALSE )
$HCURSOR = $HCURSOR [ 0 ]
FOR $I = 0 TO UBOUND ( $MCF_ASYSCURSORS ) - 1
$HTEMPCOPY = DLLCALL ( "user32.dll" , "ptr" , "CopyIcon" , "ptr" , $HCURSOR )
IF @error THEN
$IERRCOUNT += 1
CONTINUELOOP
ENDIF
$MCF_ASYSCURSORS [ $I ] [ 1 ] = $HTEMPCOPY [ 0 ]
$ARET = DLLCALL ( "user32.dll" , "int" , "SetSystemCursor" , "ptr" , $HTEMPCOPY [ 0 ] , "dword" , $MCF_ASYSCURSORS [ $I ] [ 0 ] )
IF @error THEN $IERRCOUNT += 1
NEXT
DLLCALL ( "user32.dll" , "int" , "DestroyCursor" , "ptr" , $HCURSOR )
IF $IERRCOUNT = 16 THEN RETURN SETERROR ( 2 , - 1 , FALSE )
$MCF_BCURSORSREPLACED = TRUE
ENDFUNC
FUNC _MOUSERESTOREALLCURSORS ( )
IF NOT $MCF_BCURSORSREPLACED THEN RETURN TRUE
LOCAL $I , $IERRCOUNT = 0 , $ARET
$ARET = DLLCALL ( "user32.dll" , "int" , "SystemParametersInfoW" , "dword" , 87 , "dword" , 0 , "ptr" , 0 , "dword" , 0 )
FOR $I = 0 TO UBOUND ( $MCF_ASYSCURSORS ) - 1
$ARET = DLLCALL ( "user32.dll" , "int" , "DestroyCursor" , "ptr" , $MCF_ASYSCURSORS [ $I ] [ 1 ] )
IF @error THEN
$IERRCOUNT += 1
CONTINUELOOP
ENDIF
$MCF_ASYSCURSORS [ $I ] [ 1 ] = 0
NEXT
IF $IERRCOUNT = 16 THEN RETURN SETERROR ( 2 , - 1 , FALSE )
$MCF_BCURSORSREPLACED = FALSE
ENDFUNC
AUTOITSETOPTION ( "TrayAutoPause" , 0 )
GLOBAL $BHKPRESSED = FALSE , $BPROPERTYHKPRESSED = FALSE , $IRESOLUTIONCHANGEMSG = 0
FUNC _HOTKEYPRESSED ( )
$BHKPRESSED = TRUE
ENDFUNC
FUNC _CHANGEXHAIRPROPERTIES ( )
IF NOT $BPROPERTYHKPRESSED THEN
_XHAIRSETDISPLAYPROPS ( 1 , 1 , 16711680 )
ELSE
_XHAIRSETDISPLAYPROPS ( 1 , 1 , 65280 )
ENDIF
$BPROPERTYHKPRESSED = NOT $BPROPERTYHKPRESSED
ENDFUNC
FUNC _RESOLUTIONCHANGED ( $HWND , $IMSG , $WPARAM , $LPARAM )
$IRESOLUTIONCHANGEMSG += 1
RETURN "GUI_RUNDEFMSG"
ENDFUNC
DIM $ANEWMOUSEPOS
_XHAIRINIT ( 1 , 1 )
HOTKEYSET ( "{END}" , "_HotKeyPressed" )
HOTKEYSET ( "{HOME}" , "_ChangeXHairProperties" )
GUIREGISTERMSG ( 126 , "_ResolutionChanged" )
_MOUSEHIDEALLCURSORS ( )
WHILE NOT $BHKPRESSED
IF $IRESOLUTIONCHANGEMSG >= 4 THEN
_XHAIRSETDISPLAYPROPS ( )
$IRESOLUTIONCHANGEMSG = 0
ENDIF
$ANEWMOUSEPOS = MOUSEGETPOS ( )
_XHAIRSHOW ( $ANEWMOUSEPOS [ 0 ] , $ANEWMOUSEPOS [ 1 ] )
SLEEP ( 5 )
WEND
GUIREGISTERMSG ( 126 , "" )
_XHAIRUNINIT ( )
_MOUSERESTOREALLCURSORS ( )