Hallo Leute,
gibt es eine Möglichkeit Windows Icons abzufangen?
Also hier z.B. das rote Kreuzchen.
Hallo Leute,
gibt es eine Möglichkeit Windows Icons abzufangen?
Also hier z.B. das rote Kreuzchen.
Ähm, willst du einfach wissen wo es herkommt? oder erkennen das da ein Dialog mit einem roten Kreuz ist?
Ich möchte erkennen , ob ein Fenster mit einem roten Kreuz exisitiert (bzw. mit einem Fragezeichen,Ausrufezeichen,usw...)
Das wäre dann eine OCR Variante .... da gibt es hier glaube ich nichts - da würdest du "drüben" bei den bösen bösen Bot-Programmieren fündig, ich meine die haben so etwas.
Was änderes wäre es wenn es um MsgBox Fenster ginge.
Willst du es nur allgemein wissen oder hast du ein konkretes Problem? Normalerweise stürze ich mich auf den Text der da noch steht
Es geht nur um "Messageboxen"
Probiers doch mal mit der ImageSearch.au3
Geht das nicht i-wie anders
So Bildersuche überzeugt mich nicht wirklich... :wacko:
Jemand ne Idee , probiere schon mit Pixelsearch und ImageSearch rum aber bekomm`s nicht hin -.-
Hab mal was gebastelt, sollte besser sein als Pixelsearch.
[autoit]#Include <WinAPI.au3>
[/autoit][autoit][/autoit][autoit]$sIcon = _GetIconFromMsgBox("Titel oder Handle der MsgBox")
ConsoleWrite($sIcon & @CR)
Func _GetIconFromMsgBox($hMsgBox)
Local $sRet
Local Const $STM_GETICON = 369
Local $hCtrl = ControlGetHandle($hMsgBox, "", "Static1")
Local $hIcon = _SendMessage($hCtrl, $STM_GETICON, 0, 0, 0, "wparam", "lparam", "hwnd")
Switch $hIcon
Case _WinAPI_LoadIcon(0, 32513) ;$IDI_ERROR
Return "Stop-sign icon"
Case _WinAPI_LoadIcon(0, 32514) ;$IDI_QUESTION
Return "Question-mark icon"
Case _WinAPI_LoadIcon(0, 32515) ;$IDI_EXCLAMATION
Return "Exclamation-point icon"
Case _WinAPI_LoadIcon(0, 32516) ;$IDI_INFORMATION
Return "Information-sign icon"
EndSwitch
Return "icon not found"
EndFunc
Func _WinAPI_LoadIcon($hInstance, $icon)
Local $aIcon = DllCall("user32.dll", "hwnd", "LoadIcon", "hwnd", $hInstance, "int", $icon)
Return $aIcon[0]
EndFunc
Hallo funkey,
genau so habe ich mir die Funktion vorgestellt!
Nur leider bekomme ich immer "icon not found" zurück
Funzt es bei dir? Habe Win7 Prof. 64 Bit
Hast du mal debugged was er in der $hIcon zurückgibt? ob überhaupt etwas drin steht?
Eventuell Zwischenprüfungen einbauen ob das vorher mit dem Handle auf das Fenster etc überhaupt geklappt hat (Zeile 11, danach auf @error prüfen)
BLinz
Ja das hatte ich schon überprüft, $hIcon gibt ein Handle zurück und controlgethandle klappt auch einwandfrei, nur leider gibt er trotzdem immer "no icon found" zurück.
Habe die Icons mal angehängt , wahrscheinlich werden die in der Funktion einfach nicht abgefragt
Ähm, das sind nicht die Windows-Message-Box Icons - das ist etwas eigenes.
Die funkey-Lösung stürzen sich auf die in Windows eingebauten, in den DLL enthaltenen Icons.
Da musst du dann doch Pixelsearch nehmen - gibt es keinen Text den du auswerten kannst?
BLinz
Meine Funktion scheint nur bis WinXP zu funktionieren. Ab Vista wurden die MsgBoxen anscheinend umgebaut, so dass die Icons immer neu geladen werden.
Den nächsten Lösungsvorschlag (immer noch nicht mit Pixelsearch!) hätte ich mit der Funktion _WinAPI_GetIconInfoEx aus der WinAPIEx-UDF.
Da wird ein Array zurückgegeben, und das 6. Element ([5]) gibt die ID des geladenen Icons in dem jeweiligen Modul zurück. Da kannst du die 4 Zahlen dann wieder unterscheiden.
Vielen Dank funkey!! Hat super funktioniert
Danke auch alle anderen
Hier die Funktion:
Func _GetIconFromMsgBox($hMsgBox)
Local Const $STM_GETICON = 369
Local $hCtrl = ControlGetHandle($hMsgBox, "", "Static1")
If Not @error Then
Local $hIcon = _SendMessage($hCtrl, $STM_GETICON, 0, 0, 0, "wparam", "lparam", "hwnd")
$aInfo = _WinAPI_GetIconInfoEx($hIcon)
If IsArray($aInfo) Then
Switch $aInfo[5]
Case 81
Return "Info"
Case 84
Return "Error"
Case 99
Return "Question"
EndSwitch
For $i = 3 To 4
_WinAPI_DestroyIcon($aInfo[$i])
Next
EndIf
EndIf
Return 0
EndFunc
Freut mich, das du es geschafft hast!!
Das 4. Icon brauchst du anscheinend nicht.