Problem beim Zugriff auf fremde Controls



  • Morgen zusammen,

    ich versuche gerade auf die Controls in einer anderen Applikation zuzugreifen, um dort u.a. den Text von bestimmten Elementen auszulesen, dabei habe ich allerdings noch ein Problem. Ich nutze aus Kompatibilitätsgründen Visual C++ 6.0 (MFC 4), aber das sollte ja keinen großen Unterschied machen.

    Wenn ich mein Testprogramm laufen lasse und daneben ein weiteres, eigenes Programm, von dem ich die Control-ID's weiß (also z.B. IDC_STATIC1 bzw. 101 als int), dann klappt alles. Ich ermittle das Fenster über CWnd::FindWindow und benutze dann z.B. SetDlgItemText mit der ID des Controls in der anderen App.

    Um die ID des richtigen Controls in einer fremden Anwendung herauszufinden, habe ich mit Spy++ und der Fenstersuche versucht, die ID herauszufinden, beispielsweise die ID des "Displays" von calc.exe (Windows 7 64bit). In Spy++ fand ich die Zugriffsnummer (000404FA), die bezieht sich anscheinend auf das Dialogfenster selbst. In dem Baum fand ich dann unterhalb des o.g. Knotens die ID für das Display (96), aber darüber liess sich das Controls auch nicht ansprechen.

    Hat jemand einen Tipp oder eine kurze Beschreibung wie ich es hinbekomme, ein Control wie z.B. ein Label oder einen Button in einer fremden Anwendung zu identifizieren und (bspw. mit SetDlgItemText) zu ändern oder auszulesen?

    Danke für eure Tipps!

    PS:

    CWnd *pCalc
    	pCalc=CWnd::FindWindow(NULL,"Rechner");
    	pCalc->SetWindowPos(&CWnd::wndTopMost,10,10,300,300,SWP_SHOWWINDOW);
    	pCalc->SetDlgItemText(150,"1");
    

    In o.g. Beispiel funktioniert die Positionierung und Größenänderung problemlos, der Handle auf das Calc-Fenster stimmt also, aber die SetDlgItemText-Geschichte will wohl nicht wegen der falschen ID.


  • Mod

    Über Prozessgrenzen hinweg geht GetDlgItemText nicht. Du musst direkt WM_GETTEXT nutzen.

    Wie immer ist das korrekt in der MSDN dokumentiert:
    http://msdn.microsoft.com/en-us/library/ms632627(VS.85).aspx


Anmelden zum Antworten