Sign in to follow this  
Followers 0

SOLVED: Detect (Hook?) New Windows

5 posts in this topic

#1 ·  Posted (edited)

I want to be able to detect when a new application window appears and get information about it (Handle, Titlebar text, etc). I presume this has to be done with hooks or windows messages since it is outside the control of my code.

Help much welcome, Thanks.

Edited by adamski

Share this post


Link to post
Share on other sites



#2 ·  Posted

#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global $hForm

$hForm = GUICreate('')
GUIRegisterMsg(_WinAPI_RegisterWindowMessage('SHELLHOOK'), '_ShellHookProc')
_WinAPI_RegisterShellHookWindow($hForm)

While 1
    Sleep(100)
WEnd

Func _ShellHookProc($hWnd, $iMsg, $wParam, $lParam)
    Switch $hWnd
        Case $hForm
            Switch $wParam
                Case $HSHELL_WINDOWCREATED

                    Local $Title = WinGetTitle($lParam)

                    If IsString($Title) Then
                        ConsoleWrite('Activated: ' & $Title & @CR)
                    EndIf
            EndSwitch
    EndSwitch
EndFunc   ;==>_ShellHookProc

Func OnAutoItExit()
    _WinAPI_DeregisterShellHookWindow($hForm)
EndFunc   ;==>OnAutoItExit

WinAPIEx.au3

Share this post


Link to post
Share on other sites

#3 ·  Posted

Perfect, thanks!

Share this post


Link to post
Share on other sites

#4 ·  Posted

This is not working when the autoit is running as "SYSTEM" and not as logged in User. Any idea anybody whats missing here ?


[font="Book Antiqua"]Thanks`A[/font]

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

This could also help - Basically a Process Monitor

ConsoleWrite(@CR)
ObjEvent("AutoIt.Error", "_DeBug"); capture any com errors just in case, this way the app wont crash.
Local $Obj = ObjGet("winmgmts:{impersonationLevel=impersonate}!" & @ComputerName & "rootcimv2")
Local $hObj = ObjCreate("WbemScripting.SWbemSink")

If IsObj($Obj) And IsObj($hObj) Then
ObjEvent($hObj, "SINK_")
$Obj.ExecNotificationQueryAsync($hObj, "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'")
$Obj.ExecNotificationQueryAsync($hObj, "SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'")
Else
ConsoleWrite('! Failed to Create the Object')
EndIf

While 1
Sleep(10)
WEnd

Func SINK_OnObjectReady($OB)
Switch $OB.Path_.Class
Case "__InstanceCreationEvent"
ConsoleWrite("+ P_ID> " & $OB.TargetInstance.ProcessID & @CR)
ConsoleWrite("+ P_Name> " & $OB.TargetInstance.Name & @CR)
ConsoleWrite("+ P_Path> " & $OB.TargetInstance.ExecutablePath & @CR&'>---------------'&@CR)
Case "__InstanceDeletionEvent"
ConsoleWrite("- P_ID> " & $OB.TargetInstance.ProcessID & @CR)
ConsoleWrite("- P_Name> " & $OB.TargetInstance.Name & @CR)
ConsoleWrite("- P_Path> " & $OB.TargetInstance.ExecutablePath & @CR&'>---------------'&@CR)
EndSwitch
Return 1
EndFunc ;==>SINK_OnObjectReady

Func _Debug($oError)
ConsoleWrite( _
"!>##################### AUTOIT OBJECT ERROR ######################################" & @CRLF & _
"->err.number is : " & @TAB & $oError.number & @CRLF & _
"err.scriptline is : " & @TAB & $oError.scriptline & @CRLF & _
">err.retcode is : " & @TAB & $oError.retcode & @CRLF & _
"!>################################################################################" & @CRLF _
)
Return 0
EndFunc ;==>_Debug

Edited by PhoenixXL

My code:

PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.

Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners.

MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. 

Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.

Share this post


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
Sign in to follow this  
Followers 0