fremdes programm



  • hi,
    also ich werd irre: Möchte einen Button in einem fremden Dialog drücken.

    den Zugriff auf denDialog hab ich, da das ändern des Dialogtitels funzt. und laut spy++ und winspector hat der button die ID 4774

    Hab schon einiges Probiert mit BM_CLICK etc. aber irgendwie haut das nicht hin..

    weiß nicht weiter



  • Hy ,

    was ist mit sendMessage() oder PostMassage() , du musst dann ein enter simulieren..
    Weist du zufälligerweise ob die ID durch Spy++ bei jedem Programmstart gleichbleiben ?



  • Ja die ID bleibt gleich.
    Habs so probiert:

    if(FindWindow(NULL, "Progg"))
    {
    	CWnd *gefundenesfenster=FindWindow(NULL, "Progg");
    	gefundenesfenster->SetForegroundWindow();
    	//gefundenesfenster->SetWindowText("commander rules"); //das funzt :)
    	gefundenesfenster->SendMessage(BM_CLICK,4774,0);	
    	this->SetForegroundWindow();
    }
    else
    {
    	AfxMessageBox("Nicht gefunden");
    }
    

    Hatte was gelesen von das man die CLICKED Msg an das parent schicken muss und nicht an dne button selbst?

    und wie sieht das aus, kann sich ein fenster dagegen shcützen von ausserhalb verändert zu werden? (ich mein den titel kann ich ja schlisslich ändern)



  • hat es denn jetzt gefunzt?
    ich meine mich zu erinnern ,dass ich auch sowas mal gemacht habe und mit
    SendMessage oder PostMessage ein problem bekommen habe.
    Ich weiss leider auch im moment nicht so genau, ob nun der button an sein parent die nachricht sendet oder umgekehrt ..



  • aber sende es mal an den button ..



  • nein das funzt leider nicht.
    der dialog bleibt da wo er ist 🙂 reagiert nicht drauf.
    wiedrrum wenn ich dne titel änderen will macht er das brav... 😕



  • hy , naja du schickt dein ereignis ja immer noch aufs fenster und nicht auf den button .. ich glaube es gibt da so was wie getDlgItem() oder so ähnlich ..
    du brauchst erstmal zugriff auf den butten ..



  • habs auch schon probiert.. funzt net..

    HWND fenster = ::FindWindow(NULL, "Progg");
    CWnd *button;
    button->GetDlgItem(4774,&fenster);
    
    button->SendMessage(BM_CLICK,0,0);
    

    das gibt nen Absturz

    oder wie löst du das?



  • CWnd evtl. mal nach CDialog casten, wenns ne MFC Dialog ist.

    Ansonsten kannst du den Mausklick auch simulieren.
    Musst du mal nach suchen, hab ich jetzt nicht gerade hier rumfliegen.

    Devil



  • JAU habs 😃

    CWnd *fenster = FindWindow(NULL, "Progg");
    CWnd *button  = fenster->GetDlgItem(4774);
    
    button->SendMessage(BM_CLICK,0,0);
    

    Kein Plan was ich da gerade verzapft habe 🙂 aber aufeinmal sah ich das ich ja immer auf den Button selbst ging, aber ich muss ja via GetDlgItem über ID vom Fenster holen...

    egal wer mich versteht weiß was ich meine, an allen anderen der Code funzt nu 🙂 *g*



  • Funzt ja soweit, prob ist jetzt nur, das wenn ichs aus nem thread herraus mache ich nen error bekomme sobald ich probier auf den button zu zugreifen..??

    wo liegt der fehler? seh nix



  • Ist ja klar.

    CWnd *button;
    button->GetDlgItem(4774,&fenster);

    Wo zeigt button hin?
    Zeigt nichtmal auf NULL. (Gut vielleicht im Debug aber sicher nicht im Release)



  • &fenster ist aber von CWnd und nicht von HWND!!

    CWnd *fenster,*button;
    fenster->FindWindow(NULL, "Progg");
    button->GetDlgItem(4774,&fenster);
    

    ergibt folgenden Error:
    void __thiscall CWnd::GetDlgItem(int,struct HWND__ ** ) const' : Konvertierung des Parameters 2 von 'class CWnd ** ' in 'struct HWND__ ** ' nicht moeglich

    😕



  • hy ,

    versuch mal:
    [cpp]
    button->GetDlgItem(4774,&fenster->m_hWnd);
    // weil HWND ja nue ein engetter teil von CWnd ist
    //vllt auch casten ..glaub ich aber eher weniger ..
    [/cpp]



  • Lässt sich compilieren!
    Aber stürzt ab sobald das Fenster kommt und er probiert sich den Handel auf den Button zu holen



  • Ich versteh sowieso nicht, wieso das direkt in der Anwendung funzt und wenns im Thread läuft nicht??



  • hy , ist es ein eigestädiges fenster ? oder musst du noch ein parent pointer übergeben?(modal oder nicht modal?)



  • Du meinst das Fenster das ich anspreche oder?

    Es wird aus einer anderen Anwendung herraus gestartet.
    Ich versteh bloß nicht wieso es funzt, wenn ich es in meiner normalen Dialoganwendung laufen lasse, aber nicht sobaldich das in einen Thread auslager!?



  • Oh man ich dreh ab, ich checks heute einfach nicht mehr:
    wenn ichs so mache

    CWnd *fenster = fenster->FindWindow(NULL, "Progg");
    CWnd *button  = fenster->GetDlgItem(4774);
    

    und laufen lasse und dann den dialog aufrufe, wird dieser solange nicht ngezeigt, bis ich die andere prozedur beende..?!



  • modales fenster(also das im thread ausgelagerte)?
    da muss man normaler warten bis ein button click erfolgt ist ..



  • Also das Fenster was ich anspreche gehört komplett nicht mir!!!
    Der Code um es anzusprechen läuft nur im thread.
    möchte nämlich die ganze zeit überwachen und wenns aufploopt solls beklickt werden 🙂

    Aber leider stürzt er entweder ab oder wartet mit dme anzeigen bis meine Routine geschlossen wird mpfh


Anmelden zum Antworten