Dim ist deprecated (veraltet) und sollte nicht mehr benutzt werden... verwende besser Local oder Global.
Hier mal ein Beispiel, wie ich mir Infos zu einem Program/Window besorge... dass kann man natürlich noch endlos weiter treiben... z. B. kann man nun mit _WinAPI_EnumChildWindows() die Controls des Windows holen.
GetInfo
AutoIt
;-- TIME_STAMP 2018-01-06 22:42:39 v 0.1
#Region ;************ Includes ************
#Include <WindowsConstants.au3>
;~ #include <Array.au3>;~~~
#include <WinAPIProc.au3>
#include <WinAPI.au3>
;~ #include <WinAPIInternals.au3>;~~~
#EndRegion ;************ Includes ************
Local $aWinInfo
ConsoleWrite('- ------------------------------------' & @CRLF)
$aWinInfo = _GetInfo('[CLASS:SunAwtDialog; TITLE:Ressourcensteuerung]')
_PrintInfo($aWinInfo)
$aWinInfo = _GetInfo('[CLASS:wxWindowNR; TITLE:sftp]') ; FileZilla
_PrintInfo($aWinInfo)
$aWinInfo = _GetInfo('Firefox.exe') ; Firefox - mit dem Namen der Exe...
_PrintInfo($aWinInfo)
_PrintInfo(_GetInfo('[CLASS:Progman]'))
_PrintInfo(_GetInfo('[ACTIVE]')) ; das aktive Fenster... sollte SciTE sein
Func _GetInfo($sTitle)
Local $hWnd, $hAncestor, $sClassName, $iPID, $iIsWow64, $aResult[5]
ConsoleWrite(StringFormat('> Suche Infos für $sTitle : "%s"\r', $sTitle))
$hWnd = WinGetHandle($sTitle)
If @error Then
$iPID = ProcessExists($sTitle)
If $iPID Then
Local $aProcessWindows = _WinAPI_EnumProcessWindows($iPID, True) ; nur sichtbare Fenster!
If UBound($aProcessWindows) Then
For $i = 1 To $aProcessWindows[0][0] Step 1
$hAncestor = _WinAPI_GetAncestor($aProcessWindows[$i][0], $GA_ROOTOWNER)
If $hAncestor = $aProcessWindows[$i][0] Then
$hWnd = $hAncestor
$sClassName = $aProcessWindows[$i][1]
ExitLoop
EndIf
Next
EndIf
EndIf
Else
$iPID = WinGetProcess($hWnd)
$sClassName = _WinAPI_GetClassName($hWnd)
EndIf
If Not $hWnd Then Return SetError(1, 0, False)
$sTitle = WinGetTitle($hWnd)
If $iPID Then $iIsWow64 = _WinAPI_IsWow64Process($iPID)
$aResult[0] = $hWnd
$aResult[1] = $sTitle
$aResult[2] = $sClassName
$aResult[3] = $iPID
$aResult[4] = $iIsWow64
Return $aResult
EndFunc ;==>_GetInfo
Func _PrintInfo($aWinInfo, $iError = @error)
If $iError = 0 And UBound($aWinInfo) Then
ConsoleWrite('+ hWnd : ' & $aWinInfo[0] & @CRLF)
ConsoleWrite('+ sTitle : ' & $aWinInfo[1] & @CRLF)
ConsoleWrite('+ sClassName : ' & $aWinInfo[2] & @CRLF)
ConsoleWrite('+ iPID : ' & $aWinInfo[3] & @CRLF)
ConsoleWrite('+ iIsWow64 : ' & $aWinInfo[4] & ($aWinInfo[4] ? ' (x86)' : ' (x64)') & @CRLF)
Else
ConsoleWrite('! Ops... kein Handle - keine Info! ;-)' & @CRLF)
EndIf
ConsoleWrite('- ------------------------------------' & @CRLF)
EndFunc ;==>_PrintInfo
Alles anzeigen