FAQ-Vorschlag: steuern von fremden Programmen, Spy++-Benutzung
-
Hallo,
wie wäre es mit nem FAQ-Beitrag zur Steuerung von fremden Programmen (z.B.Winamp).
Wie benutzt man dazu Spy++ und wie verwendet man die dort erhaltenen Informationen?
Ich habe das Ganze mal probiert und mir ein wenig die Zähne ausgebissen. Ich
hatte es nur mittels Tastendruck-Simulation hinbekommen und dann auch nur wenn
kein Ctrl-Key drin war. Wenn ich den verwendet hatte blieb der auch nach Been-
digung des Progs noch aktiv und man musste Win neu starten.
Interessant wäre der Zugriff auf die programmfremden Buttons, usw.
Als Beispiel wäre Winamp sehr interessant.
Wäre spitze wenn sích jemand dessen annehmen oder einen passenden Thread, den
ich nicht gefunden habe in die FAQ setzen würde.Fettes Merci!!!
-
Hallo,
wie wäre es mit nem FAQ-Beitrag zur Steuerung von fremden Programmen (z.B.Winamp).
informier dich und schreib einen, dann schiebns die mods sicher gern runter in die FAQ
:p
-
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
-
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
