themaster Geschrieben 26. Juli 2002 Geschrieben 26. Juli 2002 Hallo, ich habe ein verdammt schwieriges Problemm zu lösen. Problembeschreibung: In einer Fremdanwendung gibt es eine Listbox mit x-tausend Einträgen. Wenn man einen Button drückt und in dem dann erscheindnen Dialog zwei Knöpfe sind, dann soll der Eintrag gelöscht werden. Wenn dort drei Knöpfe sind, dann soll nicht passieren. Wie kann ich dies automatisieren? Ich habe gehört. dass man mit C (WinAPI) mit den Fensterhandels der Anwendung arbeiten kann. Und auf diese Weise Nachrichten absetzten, die z.B. einen Button drücken. Weiß hier irgendwer, wie genau ich das realisieren kann? Mir geht es häuptsächlich darum, wie ich Nachrichten an Fenster von Fremdenprogrammen versenden kann und sie auf diese Weise fernsteuern kann. Zitieren
themaster Geschrieben 27. Juli 2002 Autor Geschrieben 27. Juli 2002 OK, ich bins noch mal. Ich bin selbst etwas weitergekommen. Ich werde es häupsächlich mit SendMessage(), FindWindow(), GetWindow() und sofort. Aber ein neues Problem habe ich: Wie bekomme ich heraus, von welcher Art ein Control ist. Das müßte gehen, wenn ich die Fensterklasse herausfinde, aber wie zum Geier geht das. Ich finde einfach nicht die richige Funktion dafür. Kann mir da jemand helfen.... Zitieren
Crush Geschrieben 27. Juli 2002 Geschrieben 27. Juli 2002 Ist aber ohne Gewähr! Die Art des Fenster-Objekts findet sich im ersten long normalerweise wieder. Bei einer abgeleiteten Klasse wird dieser Typ durch eine neue eindeutige Zahl ersetzt. Man kann durch Dummy-Objekte herausfinden ob der Klassentyp gleich ist: CWnd w1; CWnd w12; CButton w2; CListBox w3; CFrameWnd w4; CButton w22; if(*(long*)(void*)&w12==*(long*)(void*)&w1) TRACE("CWnd"); if(*(long*)(void*)&w2==*(long*)(void*)&w1) TRACE("CWnd"); if(*(long*)(void*)&w22==*(long*)(void*)&w2) TRACE("CButton"); if(*(long*)(void*)&w3==*(long*)(void*)&w2) TRACE("CButton"); Ist aber ohne Gewähr! Jedenfalls habe ich das mal so gemacht und es hat geklappt. Ich habe leider selber keine eindeutige Funktion dafür ausfindig machen können. Lediglich mit RTTI könnte man noch relativ umständlich über CRuntimeClass-Objekte, bzw. die TypeID das gleiche erreichen. Aber das bremst ja das Laufzeitverhalten unnötig aus. Zitieren
Klotzkopp Geschrieben 27. Juli 2002 Geschrieben 27. Juli 2002 @Crush: Ich denke, es ging eher um Windows-Fensterklassen (die mit RegisterClassEx usw.) als um die Steuerelementklassen der MFC. @themaster: int GetClassName( HWND hWnd, LPTSTR lpClassName, int nMaxCount ); Zitieren
Crush Geschrieben 27. Juli 2002 Geschrieben 27. Juli 2002 Ups! Den Satz mit dem Gewähr hab ich ja doppelt gemoppelt... Achja: Wegen "SendMessage(), FindWindow(), GetWindow(), usw." - Ich würde das auch nicht anders machen. Zitieren
Crush Geschrieben 27. Juli 2002 Geschrieben 27. Juli 2002 @Klotzkopp Deine Methode ist natürlich die Einzige wenn ich versuche übers Fenster-Handle zu gehen - habe ich eine Referenz auf das entsprechende Objekt ist meine Methode dran (natürlich nur MFC). Bei einer reinen Struct wäre das sicherlich auch so möglich - man müßte nur wissen an welchem Offset sich die entscheidene Information versteckt. Zitieren
themaster Geschrieben 28. Juli 2002 Autor Geschrieben 28. Juli 2002 Wie ich an die Information komme, von welcher Art ein Fenster ist, ist mir eigentlich egal. Aber ich kann nicht garantieren, dass die Zielanwendung MFC benutzt. Deshalb werde ich wohl mit Klotzkopps Methode arbeiten. Danke für die Hilfe und die Bestätigung, dass ich wenigstens auf dem richtigen Weg bin. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.