Jump to content

Recommended Posts

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
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

  • 2 years later...
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.

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.
×
×
  • Create New...