Nachrichten abfangen wie Winspector

  • Hi, ich frage mich ob es IRGENDWIE denkbar wäre WM_ Nachrichten eines Fensters anzuzeigen.Mit Autoit wird das vermutlich garnicht gehen,deswegen wollte ich einfach mal in die Runde fragen ob mir jemand irgendwelche Hinweise geben kann, bevor ich mich in irgendwas hineinsteigere,was garnicht machbar ist...

    Probiert habe ich es bisher mit einer CallWndProc-Hook. Dazu fehlt mir aber leider das korrekte ModuleHandle,da es eine fremde Anwendung ist,die ich überwachen will. In der MSDN habe ich dann nachgelesen, dass man mit GetModuleHandle scheinbar sowieso nur auf solche Module Zugriff hat, die im selben Speicherbereich gemappt sind (oder so ähnlich) wie die eigene Anwendung. Also lade ich das Modul mittels LoadLibrary (MSDN,kernel32.dll) und erhalte so auch ein gültiges Handle. So will das scheinbar nicht funktionieren...Denn beim Aufruf der Hook hängt sich das System auf und man muss den explorer per Hand neustarten..Also den Code NICHT AUSFÜHREN:

    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include<WINAPI.au3>
    #include <StructureConstants.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    global $PID = Run("notepad.exe")
    global $hWnd = 0
    global $MSGF_SCROLLBAR=5

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    global $hMessageProc = DllCallbackRegister("CallWndProc", "LRESULT", "int;wparam;lparam")
    DllCall("kernel32.dll","handle","LoadLibrary","str","notepad.exe")

    [/autoit][autoit][/autoit][autoit]

    global $hmod = _WinAPI_GetModuleHandle("Notepad.exe")
    global $hHook = _WinAPI_SetWindowsHookEx(12, DllCallbackGetPtr($hMessageProc), $hmod)
    ConsoleWrite($hHook)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Opt("GUIOnEventMode", 1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    While 1

    [/autoit][autoit][/autoit][autoit]

    Sleep(300)
    WEnd
    func CLOSEClicked()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hMessageProc)
    Exit
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    func CallWndProc($nCode, $wParam, $lParam)
    ConsoleWrite("BLA")
    If $nCode < 0 Then
    Return _WinAPI_CallNextHookEx(0, $nCode, $wParam, $lParam)
    EndIf
    if $nCode=0 Then ;HC_ACTION

    local $CWPSTRUCT=DllStructCreate("LPARAM lparam;WPARAM wparam;UINT msg;HWND hwnd",$lParam)
    local $msgid=DllStructGetData($CWPSTRUCT,"msg")
    consoleWrite($msgID)

    [/autoit][autoit][/autoit][autoit]

    endif

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Return _WinAPI_CallNextHookEx(0, $nCode, $wParam, $lParam)
    endfunc

    [/autoit][autoit][/autoit][autoit][/autoit]

    Einmal editiert, zuletzt von taugenix (14. September 2012 um 19:47)