aktuelles handle herausfinden



  • wo muss ich die funktion implementieren und wie rufe ich das auf?



  • wo muss ich die funktion implementieren

    Weiss ich nicht, kenne dein Programm nicht

    und wie rufe ich das auf?

    Steht da

    EnumWindows((WNDENUMPROC)ShowAllWindows, 0);



  • ja das habe ich mir auch gedacht. aber dann ist die funktion ausserhalb der klasse deklariert.

    MakeScreenShot(hwnd, Image1);
    

    das muss ich aber ausführen und dazu brauche ich den handle. und Image1 ist ja bekanntlich in der FormKlasse ....



  • void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    
    		HWND hwnd;
    		//handle herausfinden
    		hier müßte dann der aufruf etc kommen oder so
    		MakeScreenShot(hwnd, Image1);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::MakeScreenShot(HWND handle, TImage* image)
    {
    		TCanvas* canvas = new TCanvas();
    		canvas->Handle = GetWindowDC(handle);
    
    		TRect Dest   = Image1->ClientRect;
    		TRect Source;
    		GetWindowRect(handle, (LPRECT)&Source);
    		Source = Rect(0, 0, Source.Right - Source.Left, Source.Bottom - Source.Top);
    
    		image->Canvas->CopyRect(Dest, canvas, Source);
    		delete canvas;
    }
    //---------------------------------------------------------------------------
    


  • Das sit nun mal mit Funktionen der WIN 32 API so

    EnumWindows((WNDENUMPROC)ShowAllWindows, 0);
    MakeScreenShot(Image1);

    DIe CallBack-Funktion (ShowAllWindows) schreibt entweder das gefundene Handle in eine globale Variable oder nutzt eine extra Funktion der Klasse (SetHandle) um das gefundene Handle in der Klasse bekannt zu machen.



  • hmm. ok. funzt.
    habe ein globales hwnd window gemacht. und da wo du in deinem quelltext hast stehe://hier was damit machen habe ich geschrieben
    window = hwnd

    BOOL CALLBACK ShowAllWindows(HWND hwnd,LPARAM lParam)
    {
    char pcWinTitle[256];
    if(!GetWindow(hwnd, GW_OWNER))
    {
    		GetWindowText(hwnd, pcWinTitle, 255);
    		window = hwnd;
    }
    return true;
    }
    

    jetzt macht er einen screenshot vom kompletten screen 😞
    und nu



  • Mache mir eigentlich viel Mühe:

    Entweder ist es nicht verständlich oder du hast nicht gelesen

    Grundlage ist irgendein Teil aus dem Fenstertitel den man wissen sollte. Die Funktion GetWindowText holt den Fenstertitel, den man dann durchsuchen sollte. Das HWND wird der Funktion übergeben und steht, wenn man das richtigte Fenster gefunden hat, zur Verfügung.

    Die Funktion geht alle Fenster in System durch. Für jedes Fenster wird ShowAllWindows mit den Parametern des gefundenen Fenster. Mit der Funktion GetWindowText(hwnd, pcWinTitle, 255); erhälst du den Fenstertitel. Nun muss du nur vergleichen, ob es das von dir gesuchte Fenster ist. Mit was du das vergleichen musst weiss ich nicht- kann ich auch nicht sagen, da es x-Möglichkeiten gibt einen Fenstertitel zu haben



  • nein. wir verstehen uns ncht. ich habe den fenstertitel NICHT!

    dewegen will ich ja wissen wie man den kriegt



  • Es gibt in der API Funktionen die das Fenster über das Maus u.a. ermitteln musst du mal suchen. Auswendig weiss ich die nicht



  • mit Winspector kannst du die Handles und Namen auch rausfinden.

    http://www.windows-spy.com/



  • Und was soll ihn das nützen??

    Bei jedem Neustart des Programmes erst mit dem Tool das Handle/Namen finden und dann in eine Dialogbox eingeben?

    Das Handle wird vom bS jedes mal neu vergeben. Und der Name kann auch immer was anderes sein bei einen Screenshot



  • Hallo

    nein die Control-Namen von kompilierten Programen beliebn immmer dieselben.

    bis bald
    akari



  • Ähhh, hast du den Thread gelesen??

    Es geht um das herausfinden von FensterHandles/Fensternamen von fremden Programmen. Die Handles sind meines Wissen mitnichten immer gleich.



  • Hallo,

    GetForegroundWindow liefert das Handle des Vordergrund befindlichen Windows. Vielleicht hilft das ja. Ansonsten kann man auch die Z-Order mit GetNextWindow durchgehen.



  • ich gehe jetzt zu mir rüber und probiere eure tipps mal aus.
    vielen dank dafür, das ihr eim immer helft 😛


Anmelden zum Antworten