Jump to content

Recommended Posts

Hi everybody,

I have troubles using the function "GUISetCursor" properly.

My script generates a small GUI and opens an image in IrfanView. If the user hits the button "$p_coord" on the GUI, the GUI shall be hidden, IrfanView shall become active and the mousepointer shall turn into a cross (as long hovering over IrfanView). Once clicked into IrfanView, the cursor shall turn into a nordinary mousepointer again.

Unfortunately, the cross doesn't appear until the user clicks into IrfanView manually. Then the mousepointer changes for the duration of the click into the cross. Can anybody tell why this is happening?

Here is the relevant code:

GUISetState(@SW_SHOW, $hGUI)                                        ;the autoit gui is hidden

; Loop until the user exits:
    While 1
        Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE
                ExitLoop
         Case $p_coord
                WinSetState("Bicon Coordinator","",@SW_HIDE)        ;the autoit gui is hidden
                $Handle = WinActivate ( "IrfanView")                ; IrfanView is activated
                GUISetCursor (15,1,$Handle)                         ;Cursor should be turned into a cross - this is what fails :-(
                While 1                                         
                    If _IsPressed ("01", $hDLL) Then                ;Once a mousclick by the user is performed... 
                        GUISetCursor (2) 
                    EndIf
        EndSwitch
    WEnd

 

dejhost

 

 

 

 

 

Link to post
Share on other sites

I believe that GUI* functions work only on the AutoIt GUIs created in the same script that they're used in.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to post
Share on other sites

WinActivate returns a proper handle.  So obviously you're right:  GUISetCursor() only works on the autoit GUI. I see two options to solve this:

  1. Replace IrfanView with GUICtrlCreatePic()
  2. Change the windows registry entry: HKEY_CURRENT_USER\Control Panel\Cursors  and C:\Windows\Cursors respectively.

Thanks for your input. It is very much appreciated.

dejhost

 

Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Mbee
      I've been researching this topic for about three weeks, but I'm still very confused. What I'm trying to do is to add a menu item to an arbitrary, third- party applications title bar system menu and process user events relating to it. The main problem I'm having is that there appears to be  a wealth of UDFs and other techniques to accomplish this, and I can't figure out which to concentrate on as a good solution.  For example, I've looked closely at @BrewManNHB 's  GUIRegisterMsg replacement for GUICtrlSetOnEvent and GUIGetMsg, and @LarsJJ 's stunning product GUIRegisterMsg20 UDF, as well as standard build- in AutoIt functions and WinAPI functions, But before I ask for recommendations, I'll elaborate my needs in more detail...

      I'm nearing completion of my muilt-monitor UDF and AutoWinSwitch stand-alone application, but one tricky issue remains. The purpose of the application is to automatically move newly arisen windows and context menus and the like from a monitor which is being used for some other purpose (like playing a game or watching videos) to the other monitor so that the user can see them and act upon them.
      The feature I need all this for is to allow the user to prevent a user-designated window from being moved, even though it exists on the "blocked" or used monitor so that it would normally require moving. In my testing, I've run into this situation often enough that a solution is necessary.
      So what I've done so far is to call _GUICtrlMenu_GetSystemMenu() for the window in question, then called  _GUICtrlMenu_AddMenuItem() to add a new menu item named "Pinned". This is working perfectly, but of course that's far from sufficient. Because obviously I need to establish some kind of event handler so that when the user selects that item, I can then toggle or alter the state and style of that item to show whether it's pinned or not.
      I've tried simply adding an on-event handler when I created the menu item, but even with the proper "Opt" value for On Event mode, the handler is never invoked.
      I also tried BrewmanNH's UDF and then LarsJ's, but even though I get no errors, again the handlers are never invoked.
      Finally, before I post the code of my last try using -- probably erroneously -- LarsJ's GUIRegisterMsg20 UDF, may I please ask for each of your recommendations and advice as to what approach you would favor? It's clear I don't know the most apt solution. Thanks!
      When you examine my code snippets, please overlook the mistakes and false starts that still remain there until I'm in the final stages of cleanup. Note also that the code depends vitally on Maps, so it will only run properly on the latest Beta version of AutoIt. But I guess that's actually irrelevant, since the posted code won't pass syntax checking...
       
      #AutoIt3Wrapper_Res_Fileversion=1.3 #AutoIt3Wrapper_icon=iPulse.ico #AutoIt3Wrapper_UseX64=Y #AutoIt3Wrapper_Run_After=copy "%out%" AutoWinSwitch.exe #include <WinAPIGdi.au3> #include <APIGdiConstants.au3> #include <GUIConstants.au3> #include <Misc.au3> #include <MsgBoxConstants.au3> #include <Process.au3> #include <String.au3> #include <StringConstants.au3> #include <Timers.au3> #include <WinAPIProc.au3> #include <GUIConstantsEx.au3> #include <GuiMenu.au3> ;~ #include <TrayConstants.au3> #include "LocalIncludes\GetMonitorTables_v1.1.au3" #include "LocalIncludes\_GetHwndFromPID.au3" #include "LocalIncludes\GUIRegisterMsg20.au3" AutoItSetOption("MustDeclareVars", 1) ; Variables must be declared before use AutoItSetOption("GUIOnEventMode", 1) ; We will temporarily disable this later for StateChange GUI AutoItSetOption("WinTitleMatchMode", 1) ; 1 = Matches partial titles from the start AutoItSetOption("MouseCoordMode", 0) ; 0 = Coords are relative to window (not screen) AutoItSetOption("GUICloseOnESC", 1 ) ; Close if user presses ESC AutoItSetOption("TrayOnEventMode", 0) ; We will enable this later ; ; Const $C_ThisAppName = "AutoWinSwitch" Const $C_VersionStr = "v1.3 Beta" Global Const $C_Title = $C_ThisAppName & " " & $C_VersionStr ; ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Const $C_AutoSwitchRegRootKey = "HKCU\Environment" Const $C_AutoSwitchRegValName = "AUTOWINSWITCHSTATE" Const $C_PathToTestApp = "B:\AutoIt Scripts\!ISN My Folder\My Projects\NFS Mounter\NFS_Mounter.exe" Const $C_StateDisabled=1, $C_StateBlockPrimary=2, $C_StateBlockSecondary=3, $C_StateUnset=4, $C_NumStateStrs=8 Const $C_ValidStateStrAra[$C_NumStateStrs] = [ "DIS", "TOP", "TOS", "DISABL", "BLOCKN", "BLOCKS", "BLOCKP", "NOTSET" ] Const $C_MoveTblNumCols=8 Global Enum $C_MoveTblHdlIx, $C_MoveTblMonIxIx, $C_MoveTblTitleIx, $C_MoveTblClassIx, $C_MoveTblProcIx, _ $C_MoveTblTypeIx, $C_MoveTblWinLocIx, $C_MoveTblDimsIx Const $C_NumDimCols=6 Global Enum $C_DimsWidthIx, $C_DimsHeightIx, $C_DimsLeftIx, $C_DimsTopIx, $C_DimsRightIx, $C_DimsBottomIx Const $C_CalcAbsLeft=1, $C_CalcAbsRight=2, $C_CalcAbsTop=3, $C_CalcAbsBot=4 Const $C_WinTypeMain=1, $C_WinTypePopup=2 Const $C_OnOpenMon = 1, $C_OnBlockedMon = 2, $C_SpansMon = 3 Const $C_TitlesToIgnoreAraCount = 7 Const $C_TitlesToIgnoreAra[$C_TitlesToIgnoreAraCount] = [ "Microsoft Text Input", _ "Program Manager", _ "*AutoIt", _ "Settings", _ "WorkerW", _ "*Debugger", _ "*DBUG" ] ;- - - - - - Global $G_GenMonTbl[$Gc_GMTblNumCols], $G_MMonitorTbl[1][$Gc_MMTblNumCols] Global $G_CurWinMap[], $G_PrevWinMap[], $G_PinnedMap[], $L_EmptyMap[] Global $G_MoveTimerAra[1][2], $G_MoveTimerAraIdx=-1, $G_AWS_HidWinHdl = -1 Global $G_MutexHdl, $G_WeOwnMutex, $G_Gid_PriRadioBtn, $G_Gid_SecRadioBtn, $G_Gid_DisabledRadioBtn Global $G_MonIxToShowGUI = 0 Global $G_SwitchStateStr, $G_SwitchStateCode, $G_SwitchStateChanged = False Global $G_NumValidMons=0, $G_TestAppPID, $G_TestAppWinHdl, $G_TestAppTitle="NFS_Mounter", $G_TestAppPosAra[2] ;~ $WM_CLOSE = 0x0010 ;~ $WM_MENUCOMMAND = 0x0126 ;~ $WM_MENUSELECT = 0x011F ;~ $WM_MOVE = 0x0003 ;~ $WM_MOVING = 0x0216 Global Enum $C_UseExtWinHdl, $C_UseExtCtrlHdl Global $G_SysWinMsgCodesRegAraCount = 5 Global $G_SysWinMsgCodesRegAra[$G_SysWinMsgCodesRegAraCount][3] = [ _ [ $C_UseExtWinHdl, $WM_CLOSE, __ExtCloseCmdHandler ], _ [ $C_UseExtWinHdl, $WM_MOVE, __ExtMoveWinHandler ], _ [ $C_UseExtWinHdl, $WM_MOVING, __ExtMovIngWinHandler ], _ [ $C_UseExtCtrlHdl, $WM_MENUCOMMAND, __ExtMenuCmdHandler ], _ [ $C_UseExtCtrlHdl, $WM_MENUSELECT, __ExtMenuSelectHandler ] ] ; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Local $L_WorkDir = "B:\ISN AutoIt Studio\Projects\AutoWinSwitch\AutoWinSwitch Release 1.3 Beta" $L_RptPath = _UniqueOutFilePath( "WinReport", "txt", $L_WorkDir, 99 ) If @error <> 0 Then MsgBox($MB_OK, $C_Title, "Error: Unable to generate unique output filepath -- Exiting...") Exit 0 EndIf Global $G_RptFileHdl = FileOpen( $L_RptPath, $FO_OVERWRITE + $FO_UTF8_NOBOM ) If $G_RptFileHdl = -1 Then MsgBox($MB_OK, $C_Title, "ERROR - Unable to open report file -- Exiting...") Exit EndIf OnAutoItExitRegister("_ExitCapture") FileWriteLine( $G_RptFileHdl, "-- Begin run --" & @CRLF ) ; ;=================================================================================================================== ; ; ; The following code ensures that no other instance of AutoWinSwitch is running. ; ;~ $G_RptFileHdl = FileOpen( $L_RptPath, "About to check Mutex") ;~ $G_MutexHdl = _Singleton( "Global\AutoWinSwitchMUTEX", 3 ) ;~ If $G_MutexHdl = 0 Then ;~ FileWriteLine( $G_RptFileHdl, "We do NOT own the Mutex -- Exiting" ) ;~ MsgBox($MB_OK + $MB_TOPMOST, $C_Title, "Another copy of this tool is already running -- This copy will now exit") ;~ Exit 47 ;~ EndIf $G_WeOwnMutex = True ; ; Setup all the information about whatever monitors are present in this system ; ;~ <snip> <snip> <snip> ; ;=================================================================================================================== ; $G_SwitchStateStr = RegRead( $C_AutoSwitchRegRootKey, $C_AutoSwitchRegValName ) If @error <> 0 Then FileWriteLine( $G_RptFileHdl, "Error reading Switch State -- Setting Reg to DIS for now" ) $L_Stat = RegWrite( $C_AutoSwitchRegRootKey, $C_AutoSwitchRegValName, "REG_SZ", "DIS" ) ; Set registry to disabled $G_SwitchStateStr = "NOTSET" $G_SwitchStateCode = $C_StateUnset Else FileWriteLine( $G_RptFileHdl, "Switch State read from Registry is: " & $G_SwitchStateStr ) EndIf $G_SwitchStateCode = _StateStrToCode( $G_SwitchStateStr ) If @error <> 0 Then FileWriteLine( $G_RptFileHdl, "_StateStrToCode() Returned @error = " & @error & " -- Exiting") MsgBox($MB_OK + $MB_TOPMOST, $C_Title, "AutoWinSwitch - ERROR: Unrecognizable State in Registry - Exiting") Exit 6 EndIf $L_VerboseStateStr = _StateCodeToStr( $G_SwitchStateCode, "Verbose" ) If @error <> 0 Then FileWriteLine( $G_RptFileHdl, "_StateCodeToStr() Returned @error = " & @error & " -- Exiting") MsgBox($MB_OK + $MB_TOPMOST, $C_Title, "_StateCodeToStr() Returned @error = " & @error & " -- Exiting") Exit 7 EndIf $L_SpashMonIdx = $L_PrimaryMonTblIdx If $G_SwitchStateCode = $C_StateBlockPrimary Then $L_SpashMonIdx = $L_SecondaryMonTblIdx EndIf $L_SplashStr = "Initial State: " & $L_VerboseStateStr $L_SplashStrLen = StringLen( $L_SplashStr ) $L_SplashX = $G_MMonitorTbl[$L_SpashMonIdx][$Gc_MMTblCenterXIx] - Floor($L_SplashStrLen / 2) $L_SplashY = $G_MMonitorTbl[$L_SpashMonIdx][$Gc_MMTblTopIx] + 4 ;~ For $i = 1 To 2 $L_SplashHdl = SplashTextOn( "AutoWinSwitch Current State", $L_SplashStr, 400, 40, $L_SplashX, $L_SplashY, _ $DLG_CENTERONTOP + $DLG_MOVEABLE, "Lucida Sans Unicode", 11, $FW_SEMIBOLD ) Sleep( 1000 ) SplashOff() ;~ Sleep( 500 ) ;~ Next $L_OrigStateCode = $G_SwitchStateCode If ($L_OrigStateCode = $C_StateDisabled) Or ($L_OrigStateCode = $C_StateUnset) Then $G_SwitchStateCode = _ShowSwitchStateChangeGUI() If $G_SwitchStateChanged Then If $G_SwitchStateCode = $C_StateDisabled Then FileWriteLine( $G_RptFileHdl, "The GUI told us to disable and exit. Code = " & $G_SwitchStateCode ) MsgBox($MB_OK + $MB_TOPMOST, $C_Title, "The GUI told us to disable and exit!") Exit 5 EndIf EndIf $G_SwitchStateChanged = False EndIf Switch $G_SwitchStateCode Case $C_StateBlockPrimary $L_BlockedMonIdx = $L_PrimaryMonTblIdx $L_OpenMonIdx = $L_SecondaryMonTblIdx $L_CurMonTblIdx = $L_SecondaryMonTblIdx $G_MonIxToShowGUI = $L_OpenMonIdx Case $C_StateBlockSecondary $L_BlockedMonIdx = $L_SecondaryMonTblIdx $L_OpenMonIdx = $L_PrimaryMonTblIdx $L_CurMonTblIdx = $L_PrimaryMonTblIdx $G_MonIxToShowGUI = $L_OpenMonIdx EndSwitch $L_MoveTblCount = -1 ; We'll increment this when we want to add new windows to be moved $L_NumPrevWins = 0 $L_NumPrevPopups = 0 ; ; Begin Primary Operations... ; $G_TestAppWinHdl = WinGetHandle( $G_TestAppTitle ) If $G_TestAppWinHdl = 0 Then $G_TestAppPID = ShellExecute( $C_PathToTestApp ) ; This launches the test app asynchronously If $G_TestAppPID = 0 Then ; If the launch failed... MsgBox($MB_OK, $C_Title, "Fatal Error: Unable to launch test app -- Exiting") Exit 12121 EndIf $G_TestAppWinHdl = _GetHwndFromPID( $G_TestAppPID ) $G_TestAppTitle = WinGetTitle( $G_TestAppWinHdl ) Else $G_TestAppPID = WinGetProcess( $G_TestAppWinHdl ) EndIf $L_Stat = _AddPinMenuItem( $G_TestAppWinHdl ) ;~ <snip> <snip> <snip> $L_Stat = HotKeySet( "+!a", "_ShowSwitchStateGUIWrapper" ) ; Shift-Alt-A brings up the State Change GUI While True Local $L_CurTopWinAra = _WinAPI_EnumWindowsTop() $L_NumCurWins = $L_CurTopWinAra[0][0] If $L_NumPrevWins = 0 Then ; If this is the first time through this watch loop... For $i = 1 To $L_NumCurWins ; Build the Map of all top-level wins, to provide a basis for later comparison $L_CurWinHdl = $L_CurTopWinAra[$i][0] If WinExists( $L_CurWinHdl ) <> 1 Then ; This window may have been closed by this time ContinueLoop EndIf If ($L_CurWinHdl <> 0) And (IsHWnd($L_CurWinHdl) = 1) Then $L_ThisClass = $L_CurTopWinAra[$i][1] EndIf Next $L_NumPrevWins = $L_NumCurWins Else ; If we've been through this loop more than once, we'll have something to compare against $G_PrevWinMap = $G_CurWinMap ; Move the contents of the "current" Map (from from the previous pass) here. $G_CurWinMap = $L_EmptyMap ; We must empty that old Map so that we can load it up with ONLY the current windows $L_NumPrevWins = $L_NumCurWins ; That count now represents the number of top-level windows from previous pass For $i = 1 To $L_NumCurWins ; Re-build the current window Map $L_CurWinHdl = $L_CurTopWinAra[$i][0] If WinExists( $L_CurWinHdl ) <> 1 Then ; This window may have been closed by this time ContinueLoop EndIf If ($L_CurWinHdl <> 0) And (IsHWnd($L_CurWinHdl) = 1) Then $L_ThisClass = $L_CurTopWinAra[$i][1] ;~ If MapExists( $G_PinnedMap, $L_CurWinHdl ) Then ; If we're supposed to leave this win where it is ;~ ContinueLoop ;~ EndIf ;~ _Add2Map( $L_CurSpclMap, $L_CurWinHdl, $L_ThisClass ) ;~ If @error <> 0 Then ;~ FileWriteLine( $G_RptFileHdl, "ERROR - _Add2Map( #2 = " & Hex($L_CurWinHdl) * " ) Failed -- Aborting") ;~ MsgBox($MB_OK, $C_Title, "ERROR - _Add2Map( #2 = " & Hex($L_CurWinHdl) * " ) Failed -- Aborting") ;~ Exit 6 ;~ EndIf EndIf Next ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - For $i = 1 To $L_NumCurWins ; Now that we have the NEW Cur Map built, we can compare it to Previous Map $L_CurWinHdl = $L_CurTopWinAra[$i][0] If ($L_CurWinHdl <> 0) And (IsHWnd($L_CurWinHdl) = 1) Then If WinExists( $L_CurWinHdl ) <> 1 Then ; This window may have been closed by this time ContinueLoop EndIf If MapExists( $G_PinnedMap, $L_CurWinHdl ) Then ; If we're supposed to leave this win where it is ContinueLoop EndIf $L_ThisClass = $L_CurTopWinAra[$i][1] If Not MapExists( $G_PrevWinMap, $L_CurWinHdl ) Then ; If this window wasn't in the prev list, i'ts new $L_Stat = _AnalyzeNewWin( $G_PrevWinMap, $L_CurWinHdl, $L_ThisClass ) If $L_Stat <> 0 Then ; If this window is new & has been added to the table of wins to be moved $L_ThisClass = $G_PrevWinMap[$L_CurWinHdl] MapRemove( $G_CurWinMap, $L_CurWinHdl ) ; Ensure that this win doesn't look like a fresh one MapRemove( $G_PrevWinMap, $L_CurWinHdl ) ; ... either past or present EndIf EndIf EndIf Next EndIf ; ; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ; If $L_MoveTblCount >= 0 Then ; IF we need to move at least 1 win (valid indices/count start at 0) $L_Stat = _RelocateWins( ) $L_MoveTblCount = -1 EndIf ;;~ <snip> <snip> <snip> Sleep( 1000 ) WEnd Exit 12 ; ;=================================================================================================================== ; ; This function was kindly contributed by jchd ; See: https://www.autoitscript.com/forum/topic/204187-please-review-my-usage-of-scripting-dictionaries/?do=findComment&comment=1467804 ; Func _Add2Map(ByRef $map, $key, $value) If MapExists($map, $key) Then ; same as If $m[$key] = Null Then If IsMap($map[$key]) Then MapAppend($map[$key], $value) Else Local $m2[] ; an empty map $m2[1] = $map[$key] $m2[2] = $value $map[$key] = $m2 EndIf Else $map[$key] = $value EndIf EndFunc ;==>_Add2Map ; ;=================================================================================================================== ; ; _AnalyzeNewWin -- Analyze a newly discovered window to see if it should be moved to the other monitor. ; ; Return code: 0 = Ignore this window. ; 1 = This is an intruding window entirely on a blocked monitor, so it must be moved ; 2 = This is an intruding window partially on a blocked monitor, so it might need to be moved ; -1 = An error occurred during processing ; Func _AnalyzeNewWin( ByRef $arg_Map, $arg_WinHdl, $arg_Class ) ;~ <snip> <snip> <snip> Return 2 EndFunc ;==>_AnalyzeNewWin ; ;=================================================================================================================== ; ; We now know that there's at least one window (normal or popup) that needs to be relocated to a ; different monitor. ; ; Currently, there's no need to distinguish between the two window types (normal or popup), but ; there might need to be in the future, so I've decided to prepare for this eventuality. ; Func _RelocateWins() Const $Lfc_MoveFull = 1, $Lfc_MovePartial = 2 ;~ <snip> <snip> <snip> Return 1 EndFunc ;==>_RelocateWins ; ;= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ; Func _AddIfUnseenWin( ByRef $arg_Map, ByRef $arg_MoveTblWinInfoRow ) ; ; This function determines if we've seen this window before, and if NOT, then it ; gets added to the appropriate Map. ; ;~ <snip> <snip> <snip> Return 1 EndFunc ;==>_AddIfUnseenWin ; ;= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ; Func _AddPinMenuItem( $arg_ExtWinHdl ) Local $Lf_Stat, $Lf_ExtPID, $Lf_ExtSysMenuHdl, $Lf_ExtPinMenuHdl, $Lf_PinMenuItemIndex, $Lf_PinMenuItemID Local $Lf_InPinnedMap, $Lf_PinMenuItemExists, $Lf_SysMsgCodeMin, $Lf_SysMsgCodeMax If MapExists( $G_PinnedMap, $arg_ExtWinHdl ) Then $Lf_InPinnedMap = True Else $Lf_InPinnedMap = False EndIf $Lf_ExtPID = WinGetProcess( $arg_ExtWinHdl ) $Lf_ExtSysMenuHdl = _GUICtrlMenu_GetSystemMenu( $arg_ExtWinHdl, False ) $Lf_PinMenuItemIndex = _GUICtrlMenu_FindItem( $Lf_ExtSysMenuHdl, "Pinned", True ) If $Lf_PinMenuItemIndex = -1 Then $Lf_PinMenuItemExists = False Else $Lf_PinMenuItemExists = True $Lf_PinMenuItemID = _GUICtrlMenu_GetItemID( $Lf_ExtSysMenuHdl, $Lf_PinMenuItemIndex, True ) EndIf If Not $Lf_PinMenuItemExists Then If $Lf_InPinnedMap Then MapRemove( $G_PinnedMap, $arg_ExtWinHdl ) Return SetError( 0, 0, 2 ) EndIf $Lf_PinMenuItemIndex = _GUICtrlMenu_AddMenuItem( $Lf_ExtSysMenuHdl, "Pinned", 47 ) If $Lf_PinMenuItemIndex = -1 Then Return SetError( 17226, 0, 0 ) EndIf $Lf_PinMenuItemID = _GUICtrlMenu_GetItemID( $Lf_ExtSysMenuHdl, $Lf_PinMenuItemIndex, True ) _Add2Map( $G_PinnedMap, $arg_ExtWinHdl, $Lf_PinMenuItemID) $Lf_ExtPinMenuHdl = GUICtrlGetHandle( $Lf_PinMenuItemID ) $Lf_Stat = _SetupExtWinMsgRegs( $arg_ExtWinHdl, $Lf_ExtPinMenuHdl ) Return SetError( @error, 0, $Lf_Stat ) EndIf Return SetError( 0, 0, 1 ) EndFunc Func __PinMenuCmdHandler() Local $Lf_ControlID, $Lf_SendingWinHdl, $Lf_ControlHdl, $Lf_ExtSysMenuHdl Local $Lf_Enabled, $Lf_Highlighted $Lf_ControlID = @GUI_CtrlId $Lf_SendingWinHdl = @GUI_WinHandle $Lf_ControlHdl = @GUI_CtrlHandle $Lf_ExtSysMenuHdl = _GUICtrlMenu_GetSystemMenu( $Lf_SendingWinHdl, False ) $Lf_Enabled = _GUICtrlMenu_GetItemDisabled( $Lf_ExtSysMenuHdl, $Lf_ControlID, False ) $Lf_Highlighted = _GUICtrlMenu_GetItemHighlighted( $Lf_ExtSysMenuHdl, $Lf_ControlID, False ) If $Lf_Enabled Or $Lf_Highlighted Then _GUICtrlMenu_SetItemEnabled( $Lf_ExtSysMenuHdl, $Lf_ControlID, False, False ) _GUICtrlMenu_SetItemHighlighted( $Lf_ExtSysMenuHdl, $Lf_ControlID, False, False ) _GUICtrlMenu_EnableMenuItem( $Lf_ExtSysMenuHdl, $Lf_ControlID, 2, False ) If MapExists( $G_PinnedMap, $Lf_ExtSysMenuHdl) Then MapRemove( $G_PinnedMap, $Lf_ExtSysMenuHdl ) EndIf Else _GUICtrlMenu_SetItemEnabled( $Lf_ExtSysMenuHdl, $Lf_ControlID, True, False ) _GUICtrlMenu_SetItemHighlighted( $Lf_ExtSysMenuHdl, $Lf_ControlID, True, False ) _GUICtrlMenu_EnableMenuItem( $Lf_ExtSysMenuHdl, $Lf_ControlID, 0, False ) _GUICtrlMenu_DrawMenuBar( $Lf_ExtSysMenuHdl ) _Add2Map( $G_PinnedMap, $Lf_ExtSysMenuHdl, $Lf_ControlID ) EndIf _GUICtrlMenu_DrawMenuBar( $Lf_ExtSysMenuHdl ) Return EndFunc ; ;= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ; Func _IsMonitorBlocked( ByRef $arg_MoveTblWinInfoRow ) ; ; This func determines if the passed window is currently presented on a "blocked" monitor ; ; Returns: $C_OnOpenMon (=1) If the window in the passed Move Table Window Info Row is on an Open monitor ; $C_OnBlockedMon (=2) If ... on Blocked mon ; $C_SpansMon (=3) If the window spans across both open and blocked mon ; ;~ <snip> <snip> <snip> EndFunc ;==>_IsMonitorBlocked ; ; = = = = = = = = = = = = = = = = = = = ; Func _SetupExtWinMsgRegs( $arg_ExtWinHdl, $arg_ExtControlHdl ) Local $Lf_Stat For $i = 0 To $G_SysWinMsgCodesRegAraCount -1 If $G_SysWinMsgCodesRegAra[$i][0] = $C_UseExtWinHdl Then $Lf_Stat = GUIRegisterMsg20( $arg_ExtWinHdl, $G_SysWinMsgCodesRegAra[$i][1], $G_SysWinMsgCodesRegAra[$i][2] ) Else $Lf_Stat = GUIRegisterMsg20( $arg_ExtControlHdl, $G_SysWinMsgCodesRegAra[$i][1], $G_SysWinMsgCodesRegAra[$i][2] ) EndIf If $Lf_Stat <> 1 Then Return SetError( @error, 0, 1 ) EndIf Next Return SetError( 0, 0, 0 ) EndFunc ; ; = = = = = = = = = = = = = = = = = = = ; Func __ExtCloseCmdHandler( $arg_hWnd, $arg_Msg, $arg_wParam, $arg_lParam ) #forceref $arg_hWnd, $arg_Msg, $arg_wParam, $arg_lParam Return $GUI_RUNDEFMSG EndFunc ; ; - - - - - - - - - - - - - - - - - - - ; Func __ExtMoveWinHandler( $arg_hWnd, $arg_Msg, $arg_wParam, $arg_lParam ) #forceref $arg_hWnd, $arg_Msg, $arg_wParam, $arg_lParam FileWriteLine( $G_RptFileHdl, "In __ExtMoveWinHandler()" ) Return $GUI_RUNDEFMSG EndFunc ; ; - - - - - - - - - - - - - - - - - - - ; Func __ExtMovIngWinHandler( $arg_hWnd, $arg_Msg, $arg_wParam, $arg_lParam ) #forceref $arg_hWnd, $arg_Msg, $arg_wParam, $arg_lParam FileWriteLine( $G_RptFileHdl, "In __ExtMovIngWinHandler()" ) Return $GUI_RUNDEFMSG EndFunc ; ; - - - - - - - - - - - - - - - - - - - ; Func __ExtMenuCmdHandler( $arg_hWnd, $arg_Msg, $arg_wParam, $arg_lParam ) #forceref $arg_hWnd, $arg_Msg, $arg_wParam, $arg_lParam FileWriteLine( $G_RptFileHdl, "In __ExtMenuCmdHandler()" ) Return $GUI_RUNDEFMSG EndFunc ; ; - - - - - - - - - - - - - - - - - - - ; Func __ExtMenuSelectHandler( $arg_hWnd, $arg_Msg, $arg_wParam, $arg_lParam ) #forceref $arg_hWnd, $arg_Msg, $arg_wParam, $arg_lParam FileWriteLine( $G_RptFileHdl, "In __ExtMenuSelectHandler()" ) Return $GUI_RUNDEFMSG EndFunc  
    • By Jamestay97
      Hello! Thanks you for looking at my post
      **No source code I'm sorry work related can't copy information**
      I've been using autoit for about 1 year. 
      I'm having trouble automating a click on an internet explorer web page and I've tried a lot of examples from help pages and forums already. The object I'm trying to click on isnt always in the same spot so I can't use mouse click or control click, I have tried to use the different get collection options and clickbyname, or index or get object. I'm just struggling. 
      Description of object I'm trying to click -- 
      HTML Code looks like <a ng-click.. "Click Here" it appears it's just a click able object named "click here" that opens a hidden window by running a script inside the web page. I'm not able to grab the information from the window unless it's open so I have to automate this click somehow. 
       
      I understand it's difficult to assist without having something to look at, I apologize for that sincerely and appreciate and assistance and suggestions. 
    • By littleboy62
      Hello.
       
      For a project of a tool, I have to launch a program.
      This one: Display Properties control (run desk.cpl)
      I have to resize it, so we can see what's necessary.

      I'm getting there.
      The problem is that there is a drop-down menu: so I want to disable it.
      How to do this?

      I already did a test with the notepad. By deactivating the "close" button.
      Here is the code:
       
      Run("Notepad.exe") WinWait("[CLASS:Notepad]") $Hwnd = WinGetHandle("[CLASS:Notepad]") $menu = DllCall("user32.dll","hwnd","GetSystemMenu","hwnd", $Hwnd, "int",0) DllCall("user32.dll", "int", "RemoveMenu", "hwnd", $menu[0] , "int", 0xF060, "int", 0x0);SC_CLOSE MsgBox(0,'',1) $menu = DllCall("user32.dll","hwnd","GetSystemMenu","hwnd", $Hwnd, "int",1) DllCall("user32.dll", "int", "RemoveMenu", "hwnd", $menu[0] , "int", 0xF060, "int", 0x0);SC_CLOSE
      I would like to do the same, but with the drop-down menu (with DllCall).
      Is it possible to disable / block (or other) the drop-down menu of a program?

      Thank you for your answers.
      Sincerely,
      Thomas.
    • By nacerbaaziz
      good morning all.
      first lit me give you all a thinks to your help
      you're help me allot thank you all.
      sirs today i've a new problem
      it's not a problem but thing i want to add it to blind accessability.
      the ListBox can send a notification when the user send a double click on it items
      but as we know that the blind users can't use the mouse for that they use the keybord to navigate.
      as we know that the enter replace the double click on the keybord
      for that i need when the user send a inter above any listBox item the list send a double click notification.
      i know some of you tell me that i can use the  GUISetAccelerators function
      but the enter has a other tasks such as leav a blanc line on edits and activate the defaultButton and other tasks.
      that what i need and i hope that you can help me
      this is a simple example.
      #include <GUIConstantsEx.au3> #include <StructureConstants.au3> #include <MsgBoxConstants.au3> #include <WindowsConstants.au3> #include <ListBoxConstants.au3> Example() Func Example() Local $sMESSAGE = "The following buttons have been clicked" GUICreate("My GUI list") ; will create a dialog box that when displayed is centered Local $idButton_Add = GUICtrlCreateButton("Add", 64, 32, 75, 25) Local $idButton_Clear = GUICtrlCreateButton("Clear", 64, 72, 75, 25) global $idMylist = GUICtrlCreateList("buttons that have been clicked", 176, 32, 121, 97) GUICtrlSetLimit(-1, 200) ; to limit horizontal scrolling GUICtrlSetData(-1, $sMESSAGE) global $DummyList = GUICtrlCreateDummy() GUICtrlSendToDummy($DummyList, 1) Local $idButton_Close = GUICtrlCreateButton("my closing button", 64, 160, 175, 25) GUIRegisterMsg($WM_command, "WM_command") GUISetState(@SW_SHOW) ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $idButton_Add GUICtrlSetData($idMylist, "You clicked button No1|") Case $idButton_Clear GUICtrlSetData($idMylist, "") Case $idButton_Close MsgBox($MB_SYSTEMMODAL, "", "the closing button has been clicked", 2) Exit case $DummyList $g_iTemp = GUICtrlRead($DummyList) if $g_iTemp = $LBN_DBLCLK then ;$LBN_DBLCLK then msgBox(64, "", "") endIf GUICtrlSendToDummy($DummyList, 0) EndSwitch WEnd EndFunc ;==>Example Func WM_command($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hWndFrom = $lParam $iCode = BitShift($wParam, 16) ; Hi Word Switch $hWndFrom Case GUICtrlGetHandle($idMylist) Switch $iCode Case $LBN_SELCHANGE, $LBN_DBLCLK, $LBN_SELCANCEL, $LBN_SETFOCUS GUICtrlSendToDummy($DummyList, $iCode) case else ;GUICtrlSendToDummy($DummyTreeview, 1) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc  
    • By _leo_
      Hey there!
      I am having a problem with clicking a button in IE. As you can see in the code, there would be a class name to click it, but since this button exists several times with exactly the same code, I can only use the "Noch nicht veröffentlicht" to separate it from the others. But this part is just pure text without any classification. 
      "<div class="checkmark" data-v-1e5b1f70=""><svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 16 16" data-v-1e5b1f70=""><circle cx="8" cy="8" r="8" data-v-1e5b1f70="" /></svg></div>Noch nicht veröffentlicht"
      I was trying to click it with:
      #include <IE.au3> local $oNNVs = _IEFormGetCollection($oIE2) For $oNNV in $oNNVs If String($oNNV.innertext) = "Noch nicht veröffentlicht" Then _IEAction($oNNV, "click") EndIf Next and:
      $inputs = $oIE2.document.getElementsByTagName("div") For $input In $inputs If $input.innertext == "Noch nicht veröffentlicht" then $input.click() EndIf Next But nothing seems to work. Thanks for the help!
×
×
  • Create New...