Jump to content

Help pls getting Handle of Control Button in App


Recommended Posts

G'day, 

As the handle changes every time the app launches I am trying to get the current handle of a button on an app that I am trying to automatically hold in when a key is held on ( in this example when Ctrl is held down). Can someone pls assist me in using ControlGetHandle correctly? I have searched, read, tried but to no avail. Here is the Info of the button I am trying to hold down :

>>>> Control <<<<
Class:    WindowsForms10.BUTTON.app.0.3fbab22
Instance:    21
ClassnameNN:    WindowsForms10.BUTTON.app.0.3fbab2221
Name:    buttonTalk
Advanced (Class):    [NAME:buttonTalk]
ID:    197828
Text:    Push to Talk
Position:    616, 88
Size:    120, 70
ControlClick Coords:    61, 37
Style:    0x5601000B
ExStyle:    0x00000000
Handle:    0x00000000000304C4

>>>> Mouse <<<<
Position:    1353, 155
Cursor ID:    0
Color:    0x9D9D75

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
VU
Mic   Spk
Disconnect All
Background All
Foreground All
Fast Select
State Air Desk             Air Intel  CH 369
Off
 

 

 

When I set the variable Local $hWndControl to the handle of the button it works perfectly. Of course this changes so I need to update the handle automatically each time.

Here is the au3 that works if I enter the handle   (It is a bit of a mess as I have been chopping and changing bits to try and get the handle)

 


Local $hDLL = DllOpen("user32.dll")

#include <SendMessage.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <Misc.au3>
#include <AutoItConstants.au3>


Local $hWndControl = 0x00000000000304C4 ; Set to handle of the control
;MsgBox($MB_SYSTEMMODAL, "title", $hWndControl)
Local $x = 69 ; X coord for Mouse click
Local $y = 31 ; Y coord for Mouse click
Local $wParam = 0
Local $lParam = BitRotate($x,16,"D")
$lParam = BitXOR($lParam,$y)

HotKeySet("{F10}", "StartIPR") ;;;Sets F10 as a hotkey to start the macro
; Note - F12 will stop the macro


Call ("StartIPR")

 Func StartIPR()

While 1
   If _IsPressed("11", $hDLL) Then
      

_SendMessage($hWndControl, $WM_LBUTTONDOWN,$wParam,$lParam)

        While _IsPressed("11", $hDLL)
            Sleep(100)
         WEnd
_SendMessage($hWndControl, $WM_LBUTTONUP,$wParam,$lParam)

 EndIf


 If _IsPressed("7B", $hDLL) Then
    Exit 0

EndIf
    Sleep(250)
WEnd

EndFunc
 

 

 

 

I have tried using various methods to get the handle but get the result 0x000000 which I assume is an error code (reading the help files).


#include <MsgBoxConstants.au3>

    Local $hWnd = WinActivate("[CLASS:WindowsForms10.Window.8.app.0.3fbab22]", "")

                       ;  Local $hWnd = WinActivate("[CLASS:WindowsForms10.Window.8.app.0.3fbab2221]", "")

    Local $hControl = ControlGetHandle($hWnd, "", "buttonTalk")

                      ; Local $hControl = ControlGetHandle($hWnd, "", "197828")

                      ; Local $hControl = ControlGetHandle($hWnd, "", "[ClassnameNN:WindowsForms10.BUTTON.app.0.3fbab2221]")

 

    MsgBox($MB_SYSTEMMODAL, "", "The handle of the button is: " & $hControl)

      WinClose($hWnd)

 

 

I have tried getting to it with ControlFocus and a few other methods but my eyes are spinning and I think I need a fresh set to see the forest for the trees!!

 

 

I was hoping for something like : 

Local $hDLL = DllOpen("user32.dll")

#include <SendMessage.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <Misc.au3>
#include <AutoItConstants.au3>

Local $hWnd = WinWait("[CLASS:WindowsForms10.Window.8.app.0.3fbab22]", "", 10)

Local $hWindControl = ControlGetHandle($hWnd, "", "buttonTalk")


Local $x = 69 ; X coord for Mouse click
Local $y = 31 ; Y coord for Mouse click
Local $wParam = 0
Local $lParam = BitRotate($x,16,"D")
$lParam = BitXOR($lParam,$y)

HotKeySet("{F10}", "StartIPR") ;;;Sets F10 as a hotkey to start the macro - just there as a test in case the function doesn't start from the Call
; Note - F12 will stop the macro


Call ("StartIPR")

 Func StartIPR()


While 1
   If _IsPressed("11", $hDLL) Then
      

_SendMessage($hWndControl, $WM_LBUTTONDOWN,$wParam,$lParam)

        While _IsPressed("11", $hDLL)
            Sleep(100)
         WEnd
_SendMessage($hWndControl, $WM_LBUTTONUP,$wParam,$lParam)

 EndIf


 If _IsPressed("7B", $hDLL) Then
    Exit 0

EndIf
    Sleep(250)
WEnd

EndFunc
 

 

 

Thanks

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...