FAQ-Vorschlag: steuern von fremden Programmen, Spy++-Benutzung



  • glaub mir, ich informiere mich immer vorher 😃
    wenn ich die Lösung wüsste und ich Zeit hätte würde ich gerne ne FAQ für
    diese (extrem geile) Site schreiben und keine FAQ requesten.
    Also informier mich und schreib einen, dann schiebns die mods sicher gern runter in die FAQ (LOL, kleiner Scherz meinerseits 🤡 )
    Aber mal Spass beiseite, mich würde das echt brennend interessieren und das
    was ich bis jetzt gefunden hab war irgendwie nicht allzu informativ.
    Falls jemand GUTE links usw. weiss -> NUR HER DAMIT



  • Soweit so gut...
    Ich habe nochmal ein wenig rumgeschaut und folgendes gefunden:

    CWnd* pWnd = FindWindow(NULL,"WinTV32");
    if(pWnd) 
    {
       HWND hWnd;
       pWnd->GetDlgItem(0x8011, &hWnd);
       ASSERT(IsWindow(hWnd));
       CWnd* pCtrl = (CWnd*)CWnd::FromHandle(hWnd);
    }
    

    Die ID vom Button den ich aktivieren/drücken, whatever lassen will ist 0x8011
    Wie bekomme ich es jetzt hin, dass der das elende Fiech drückt???
    Soll ich dann so weitermachen:

    ((CButton*)pCtrl)->
    


  • Kennt sich keiner damit aus?
    nen button im eigenen dialog anzusprechen und zu aktivieren hab ich ja noch
    hinbekommen, aber bei einem fremden Dialog komme ich einfach nicht mehr weiter. 😕

    Bitte, bitte!! 🙄



  • Wenn Du im Child-Dialog bist, kannst Du Funktionen so ansprechen

    ((CHauptDlg*)GetParent())->OnButtonClick();
    

    Variablen im Hauptdialog lassen sich natürlich genauso ansprechen.

    ((CHauptDlg*)GetParent())->m_strVariable = "Test";
    


  • Thx Trikor,

    aber ich habe einfach ein mfc gemacht und möchte aus dieser mfc
    bei WinTV den Button für Kanal+ aktivieren.
    Meintest du mit deiner Antwort die einzelnen Dialoge im SDI?

    vg!



  • Sorry, da hatte ich Dich wohl falsch verstanden.

    Ich denke mal, für Dein Problem musst Du die Koordinaten des Buttens ermitteln und dann ein Mausklick auf die Koordinaten simulieren.
    Hab sowas aber auch noch nicht gemacht.



  • macht ja nix, aber trotzdem danke dass du dich bemüht hast 👍 !!!

    was ich genau machen will ist, von einem Fremdprogramm die Button-ID ermitteln
    (hier 0x8010 oder 0x8011) um ihn dann anzusprechen, als ob er im eigenen Programm vorhanden wäre.



  • ich habs jetzt mal so versucht, aber der schmiert immer ab:

    CWnd *wintv;
    	HWND button;
    	CButton *derbutton;
    
    	wintv=FindWindow(NULL,"WinTV32");
    
    //////////////////////////////////////////////////////
    //Test ob der gefundene Window auch der Richtige is //
    // wintv->ShowWindow(SW_MAXIMIZE);                  //
    //////////////////////////////////////////////////////
    
    	wintv->GetDlgItem(0x8010, &button);
    
    	::SendNotifyMessage(derbutton->m_hWnd,WM_LBUTTONDOWN,0,0);
            ::SendNotifyMessage(derbutton->m_hWnd,WM_LBUTTONUP,0,0);
    

    Vielleicht weiss jetzt jemand was damit anzufangen 😉



  • Für diejenigen, die es auch mal versuchen wollen:
    Habe mal ein eigenes kleines mfc mit button erstellt, den ich drücken lassen
    will (bei Wintv funzt es irgendwie nicht).
    Hier der Code dafür:

    void CSendmessage_testDlg::OnButton3() 
    {
    	if(FindWindow(NULL, "test"))
    	{
    		CWnd *gefundenesfenster=FindWindow(NULL, "test"), *derbutton=gefundenesfenster->GetDlgItem(0x1);
    
    		gefundenesfenster->SetForegroundWindow();
    		Sleep(1);
    		::SendNotifyMessage(derbutton->m_hWnd,BM_CLICK,0,0);
    		this->SetForegroundWindow();
    	}
    	else
    	{
    		AfxMessageBox("Programm nicht geöffnet");
    	}
    
    }
    

    Das Sleep(1) hab ich eingebaut, da ohne das Drücken des Buttons hakelt.
    Nicht schön aber es funktioniert!



  • Bist du sicher, das Wintv in MFC geschrieben ist ?

    Devil



  • Ne, bin ich nicht.
    Würde mich aber trotzdem interessieren, wie man solche Progs fernsteuern kann.
    Um evtl. ne eigene IR-Software oder so zu tippeln



  • Mich würde mal interressieren wie man mit FindWindow() zugriff auf Webbrowserfenster bekommt.

    FindWindow(NULL, "Mozilla") //oder
    FindWindow(NULL, "Microsoft Internet Explorer")
    

    funktionieren da ja leider nicht weil die browser ja den Fenstertitel ändern, zB. zu

    C++Forum - Mozilla

    dann müsste man ja den Aufruf so machen:

    FindWindow(NULL, "C++Forum - Mozilla")
    

    aber das bringt ja nichts, kann man die Browser nicht irgendwie doch "zu fassen bekommen" 😕 ?

    Matthias



  • @maty

    Das geht AFAIK über die Steuerelement-ID.



  • Hi Maty,
    hab mal ein wenig rumgespielt...
    versuch das hier mal:

    CWnd* browser;
    
    	if(CWnd::FindWindow("IEFrame",NULL)!=NULL)
    	{
    		browser=CWnd::FindWindow("IEFrame",NULL);	
    
    		//nur um zu testen, ob er den Window auch gefunden hat
    		browser->SetForegroundWindow();			
    	}
    	else
    	{
    		AfxMessageBox("Internetexplorer nicht geöffnet");
    	}
    

    simultan für Mozilla:

    CWnd* browser;
    
    	if(CWnd::FindWindow("MozillaWindowClass",NULL)!=NULL)
    	{
    		browser=CWnd::FindWindow("MozillaWindowClass",NULL);	
    
    		//nur um zu testen, ob er den Window auch gefunden hat
    		browser->SetForegroundWindow();			
    	}
    	else
    	{
    		AfxMessageBox("Mozilla nicht geöffnet");
    	}
    

    VG!



  • Super, Bummsfallera 😃

    das klappt ja einwandfrei - Vielen Dank !!!!!!!!!

    ah, das heist man kann auch nach dem Klassennamen suchen - das wuste ich nicht.
    Jetzt bräuchte ich nur noch den Schreib/Lese Zugriff auf die Eingabefelder für die Urls ...

    Matthias



  • Hi,
    habe folgendes gefunden, um den text "Hallo WorkPad" in das Edit-Feld
    des Wordpad zu schreiben. Müsste also eigentlich auch beim URL-Feld funzen
    evtl. mal das kombi-element anschauen/suchen.
    Hab leider heute keine Zeit mich selbst hinzusetzen, da ich in den Klausuren
    stecke.
    Ich hoffe das hilft dir ein wenig....
    Bis denne, vg!

    CWnd* pWnd = FindWindow(NULL,"Dokument - WordPad");
    if(pWnd) {
       HWND hWnd;
       pWnd->GetDlgItem(0xE900, &hWnd);
       ASSERT(IsWindow(hWnd));
       CWnd* pCtrl = (CWnd*)CWnd::FromHandle(hWnd);
       ((CRichEditCtrl*)pCtrl)->ReplaceSel("Hallo WorPad");
    }
    


  • Danke das Du Dir die Zeit genommen hast 😉 .

    Werd mal versuchen das hinzubekommen.

    übrigens bei Netscape 4.7 klappt das nicht - Spy hatt da als Klassennamen
    "Afx:400000:b:10011:6:d02c3" und beim nächsten mal heist der "Afx:400000:b:10011:6:d02c3", der ist auch gültig aber der ändert sich eben jedesmal. Kann ich auch irgendwie das Handle des Aktiven(Focus) Fenster bekommen - vileicht klappt es damit ... ?

    Noch alles gute für Deine Klausuren, Bummsfallera 🙂



  • Du, kein Problem! Bin ja schliesslich auch froh wenn mir jemand hilft.
    Wegen Netscape weiss ich leider nicht, sowas kommt mir nicht mehr auf
    meinen Rechner.



  • naja manche haben es ja noch - ich benutze nur Mozilla.
    Man müsste an das aktuelle Fenster kommen und von ihm den Titel auslesen und vergleichen ... und sich dann das handle schnappen.

    Ich hoffe ich kann Dir auch mal helfen 🙂



  • Da bin ich mir sicher...hast 100€? 😃 😃 😃 😃
    Also viel spass und hau rein!


Anmelden zum Antworten