fremdes programm
-
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 macheCWnd *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 werdenAber leider stürzt er entweder ab oder wartet mit dme anzeigen bis meine Routine geschlossen wird mpfh
-
Nochmal so ne frage , was sind denn genau deine intentionen ? wofür willst du nen zusätzlichen thread starten .. sind nicht eh alle Dialoge neue threads?
willst du einzelne fkt in nen neuen thread packen und diese von mehreren dialogen aus steuern?
-
ok.. ich glaub jetzt verstehe ich was du willst ..
du hast jetzt eine Hauptklasse + eine threadklasse in der threadklasse
muss du mittels ener while(true) schleife checken ob dein fenster schon aufgepoppt ist .. direkt nach dem check musst du den thread schlafen legen mittels Sleep(500) //halbe sekunde zb .. dabei wird der prozessor an nen anderen thread abgegeben ..
-
Also noch mal:
Ich habe eine Dialoganwendung + eine Threadklasse.
In der Threadklasse läuft ne Schleife die guckt ob ein bestimmer (externer) Dialog schon da ist.
Wenn ja soll er sich das Handel für den Button holen und klicken.Der Dialog der abgefragt wird, stammt aus einer anderen Anwendung.
Es funzt auch wenn ich es manuel auf einen Button in meiner Dlg Klasse lege,jedoch nicht wenn ich es in die Thread Klasse packe
-
Habs Problem eingerenzen können.
Scheint nicht der zugriff direkt zu sein sondern eher die schleife..Gibts ne Windows Message die man abfangen kann wenn ein neus Fenster aufgeht?
-
da ich selber mal dieses problem hatte(habe mit borland c++ zu dem zeitpunkt gearbeitet) sollte doch mein vorheriger vorschlag reichen
main{ while(true) { //checken ob fenster handle ungleich null .. // dann schlafen legen Sleep(500); //und ggf. programmm beenden // if( fenster handle gefunden ) break; } }
-
Gut und bei dir hats hingehauen??
Bei mir nicht ganz so wie es soll...Mhhh
while(true) { CWnd *fenster = fenster->FindWindow(NULL,"Progg"); if(fenster != NULL) { Sleep(500); CWnd *button = fenster->GetDlgItem(4774); if(button != NULL) { button->SendMessage(BM_CLICK,0,0); } } }
so?
auch hier wieder. Fenster Titel oder so kann geändert werden. nur wieder das prob mit dem button zu griff.
(p.s: das fenster wiederholt sich hintereinander mehrere male)
ich geh noch kaputt daran
Hab gerade mal getestet, edn Titel des Buttons kann ich änderen von daher ist der Handel richtig
-
hm..
wiegesagt hatte das mal unter borland c++ so gemacht ..was mir aufgefallen ist ..
1.)du solltest CWnd *fenster , *button aus der while schleife ziehen..
2.)woher sollen denn button wissen das er ein button ist und nicht ein CWnd*?[cpp]
CWnd *button = **(*button)**fenster->GetDlgItem(4774);
[/cpp]
-
DAs Merkwürdige ist ja das diese Code funzt :
CWnd *button,*fenster; fenster = fenster->FindWindow(NULL,"Progg"); if(fenster != NULL) { Sleep(500); button = fenster->GetDlgItem(4774); if(button != NULL) { button->SendMessage(BM_CLICK,0,0); } }
Nur sobald das Ding in einer Schleife läuft eben nicht...
Ich vermute start das es damit zusammen hängt das der Dialog der beklickt werden soll, nach dem schliessen nochmals aufgerufen wird...