Hi,
ich weiß, dass die Frage so ne Mischung aus "WinAPI", "Native/UnmanagedCode" und "Pfui, das macht man nicht" als Antwort ergeben wird, aber ich frag's trotzdem mal hier. Die Lösung für das Problem mit der WinAPI allein (also pures Delphi) wäre zwar auch ausreichend, da es aber für ein C#-Programm verwendet werden soll, ist das glaube der kürzere Weg.
Aber gut, zum Thema: Für ein Projekt, für das das Unreal Developement Kit verwendet wird, ist es wünschenswert, innerhalb des UDK-Editors eine Reihe von Kommandos auszuführen, für die Kismet (Untertool des Editors) gestartet werden muss. Problematisch hieran ist, dass die reine Verwendung von SendKeys nicht ohne Weiteres möglich ist, da einige Modifier je nach Kontext eine unterschiedliche Bedeutung haben und man daher nicht in jedem Fall mit Alt+Irgendwas ins Menü kommt. Der benötigte Menüeintrag im Menü hat allerdings leider auch keinen Shortcut.
Wir haben auch schon fieberhaft in der Doku des UDKs nach Ausweich-Möglichkeiten gesucht, aber bisher als einzig gangbaren Weg die Nutzung von FindWindow(Ex) in Verbindung mit SendKeys identifizieren können: Also weder Kommandozeilen-Optionen, noch irgendwo andere Schnittstellen zum Fernsteuern (COM/DCOM/XPCOM/ActiveX).
Was ich daher bräuchte, wären folgende Infos:
1. Ich hatte im WinAPI-Forum für Delphi letztens mal ne "Start&Wait"-Funktion geschrieben. Eine Übersetzung für C# wäre klasse (Brauchen wir für den Fall das UDK läuft nicht).
2. Jemand ne Idee, wie man in einer Fremdanwendung anhand des Handles eines Menüitems (oder dessen Command) diesen auslöst?
Alternativ: Generischer Weg, das Menü zu aktivieren, so dass man SendKeys nutzen kann.
3. Ein wenig Code, wie man recht günstig Fenster-Hierarchien abklappern kann um Unterfenster zu finden. Soviel ich gesehen hab, kann man da ja mit FindWindow(Ex) recht gut operieren:
www.pinvoke.net/defa...px/user32.findwindow
Hauptpunkt hier ist aber weniger das reine FindWindow/SendKeys (das ist weitestgehend klar), sondern der Punkt bzgl. der Menüzeile und dem Ausführen des Menü-Befehls.
P.S.: Ich bin derzeit auf der Suche nach dem Accessibility Explorer, der in früheren Versionen des Platform SDKs (Microsoft) mit enthalten war. Der konnte Menü-Strukturen auslesen und die nötigen Commands mit anzeigen. Ein wenig Code, wie ich mit den so gewonnenen Menu-CommandIDs den Item auslösen könnte, wäre recht hilfreich.
P.P.S.: Ich weiß, die Nutzung von Native Code widerstrebt .NET irgendwie etwas. Geht hier aber AFAIK nicht anders. Wenn doch UND es für den gewünschten Zweck funktioniert, nehm ich aber auch Managed-Lösungen.
Vielen Dank im Voraus!
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.