FindWindowEx Problem



  • Hallo,

    ich habe das Problem, dass ich zwar mit FindWindow() den HWND des Fensters bekomme, aber den HWND der EditBox nicht..

    ausprobiert habe ich es mal mit AIM, Spy++ zeigt mit die Classnames an.. hWindow hat auch den richtigen HWND, was man mit zB FlashWindow() auch überprüfen kann, aber hText bleibt leer..

    HWND hWindow = FindWindowEx(NULL, NULL, "AIM_IMessage", NULL);
    HWND hText = FindWindowEx(hWindow,NULL,"Ate32Class",NULL);
    

    Ate32Class ist der Klassenname der Editobox.
    was mache ich hier falsch?

    Danke für eure Hilfe!



  • Im Code hast keinen Fehler.

    Also entweder ist hWindow 0 oder Ate32Class ist kein Child von hWindow.

    Ist Ate32Class vlt. ein Child vom Child von AIM_IMessage?



  • mir ist aufgefallen das es 2 Ate32Class gibt.. hWindow hat aber einen Wert .. und ich kann es wie gesagt auch aufflashen (zum testen).

    GetWindowRect(hWindow,&r);
    p.x = r.left + 20;
    p.y = r.bottom - 85;
    HWND hText = WindowFromPoint(p);
    

    so sieht mein neuer versuch aus.. scheint auch zu klappen.. + 20 und - 85 kann ich nehmen, auch beim resizen diese Werte immer stimmen (sollten). Wenn ich nun ShowWindow(hText, SW_HIDE) mache klappt es sogar.. nur kann ich kein Text setzen SetWindowText.. und ganz weit entfernt bin ich vom subclassen..

    wobei das doch gehen sollte (ist nur ein Bsp, deklariert ist es überall Richtig), es sei denn irgendwas ist "schreibgeschützt":

    PrevWndProcAIM = SetWindowLongPtr(hText, GWLP_WNDPROC, (LONG_PTR)AIMWndProc);
    
    LRESULT CALLBACK AIMWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
      switch (message)
      {
        default:
          return CallWindowProc((WNDPROC) PrevWndProcAIM, hwnd, message, wParam, lParam);
      }
      return 0;
    }
    

    Darf man sowas überhaupt??

    [ Dieser Beitrag wurde am 28.11.2002 um 14:38 Uhr von personenkult editiert. ]



    1. SetWindowText() funktioniert nicht, wenn das Fenster in einer anderen Anwendung sitzt. Versuch es mal mit WM_SETTEXT.

    2. Der Code, der das SubClassing ausführen soll, muß sich im Adressraum des anderen Processes befinden. Dazu kannst Du beispielsweise HOOKs verwenden. So, wie Du es machst, wird es von Windows abgefangen; die WndProc bleibt unverändert.



  • ok hab mir das in der MSDN nun durchgelesen und es ist komplizierter als ich angenommen habe 🙂

    da steht nun ich muss meine "global hook procedure" in eine DLL packen, kann mir jemand dafür ein Bsp geben, wie ich diese DLL erstelle?



  • ahoi ,

    wenn ich den handle vom internetexplorer haben will kann ich da einfach

    HWND hWindow = FindWindowEx(NULL, NULL, "IEXplore", NULL);

    machen ?
    wenn nicht , woher bekomm ich die einzelnen namen der classnames der programme ?

    mfg , arno 🙂



  • spy++.. ein kleines Programm das dir das alles sagen kann 🙂

    [ Dieser Beitrag wurde am 29.11.2002 um 12:01 Uhr von personenkult editiert. ]


Anmelden zum Antworten