Hallo
ich muß mich als völliger Nurmi was Hooks bzw. deren Verständnis angeht, outen.
AutoIt
#include <MsgBoxConstants.au3>
Local Const $HCBT_ACTIVATE = 5
; Local Const $STM_SETIMAGE = 370
; Local Const $IMAGE_ICON = 1
; Local Const $LR_LOADFROMFILE = 16
; $IconFile = @ScriptDir & "\crapper.ico"
; MsgBox(66,"MsgBox","Regular MsgBox Information")
$hProc = DllCallbackRegister("Hook_Proc", "int", "int;int;int")
$TID = DllCall("Kernel32.dll", "int", "GetCurrentThreadId")
$hHook = DllCall("user32.dll", "hwnd", "SetWindowsHookExA", "int", $HCBT_ACTIVATE, _
"ptr", DllCallbackGetPtr($hProc), _
"hwnd", 0, _
"int", $TID[0])
consolewrite(@CRLF & MsgBox(bitor($MB_ICONQUESTION, $MB_ABORTRETRYIGNORE, $MB_APPLMODAL), "Stammdaten - Auswahl", "Auswahl für Nr. xxxxxx" & " treffen") & @CRLF & @CRLF)
DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hHook[0])
DllCallbackFree($hProc)
Exit
;
; Hook auf die MsgBox
;
Func Hook_Proc($nCode, $wParam, $lParam)
Switch $nCode
Case $HCBT_ACTIVATE
#cs
Local $hIcon = DllCall("user32.dll", "hwnd", "LoadImage", "hwnd", 0, _
"str", $IconFile, _
"int", $IMAGE_ICON, _
"int", 0, _
"int", 0, _
"int", $LR_LOADFROMFILE)
DllCall("user32.dll", "int", "SendDlgItemMessage", "hwnd", hWnd($wParam), _
"int", 20, _
"int", $STM_SETIMAGE, _
"int", $IMAGE_ICON, _
"int", $hIcon[0])
#ce
ControlSetText(hWnd($wParam), "", 3, "Doku öffnen")
ControlSetText(hWnd($wParam), "", 4, "Nr.-Druck")
ControlSetText(hWnd($wParam), "", 5, "ERP suchen")
Case Else
$RET = DllCall("user32.dll", "int", "CallNextHookEx", "hwnd", $hHook[0], _
"int", $nCode, _
"int", $wParam, _
"int", $lParam)
Return $RET[0]
EndSwitch
Return
EndFunc
Alles anzeigen
Soweit funktioniert obige Funktion, ich schaffe es aber nicht das rote Messagebox-Schließkreuz zu aktivieren bzw. den Abbruch-Wert zurückzugeben. Aus unterschiedlichen Gründen MUSS ich die MsgBox() verwenden - klappt ja auch - bis auf eine Abbruchbedingung .
Für einen Hinweis bin ich dankbar.
GML