Entwickler-Ecke

Windows API - Tastenkombination Strg+C an Konsolenanwendung senden


galagher - So 14.12.14 20:59
Titel: Tastenkombination Strg+C an Konsolenanwendung senden
Hallo!

Wie kann ich aus meinem Delphi-Programm die Tastenkombination Strg+C an ein Konsolenprogramm, von der ich das Fensterhandle habe, senden, so dass sie sich beendet?
Ich komme weder mit SendMessage noch mit PostMessage weiter, bestenfalls erreiche ich damit, dass der Buchstabe "c" an das Konsolenprogramm gesendet wird!

lg
galagher


Palladin007 - So 14.12.14 23:08

Würde es nicht schon helfen, einfach den Prozess zu killen?
Wenn du sowieso das erreichen willst, warum dann dieser Umweg?


galagher - Mo 15.12.14 17:10

user profile iconPalladin007 hat folgendes geschrieben Zum zitierten Posting springen:
Würde es nicht schon helfen, einfach den Prozess zu killen?
Wenn du sowieso das erreichen willst, warum dann dieser Umweg?

Ich will es "sauber" beenden, also nicht zB. einfach abschiessen. Kannst du mir sagen, ob das hier ein ordnungsgemässes Beenden des Programms bewirkt?

Delphi-Quelltext
1:
PostMessage(aHWND, WM_QUIT, 00);                    

Damit funktioniert es jedenfalls!


Narses - Mo 15.12.14 17:40

Moin!

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Kannst du mir sagen, ob das hier ein ordnungsgemässes Beenden des Programms bewirkt?

Delphi-Quelltext
1:
PostMessage(aHWND, WM_QUIT, 00);                    
Eine Konsolenanwendung, die eine MessageQueue hat und auswertet? :shock: Was es nicht alles gibt... ;)

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Damit funktioniert es jedenfalls!
Dann ist das auch "sauber". :zustimm:

cu
Narses


Gerd Kayser - Mo 15.12.14 18:58

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich aus meinem Delphi-Programm die Tastenkombination Strg+C an ein Konsolenprogramm, von der ich das Fensterhandle habe, senden, so dass sie sich beendet?

Man kann die Konsole auch mit dem Parameter "/c" starten. Dadurch wird die Konsole beendet, wenn das Konsolenprogramm endet. Beispiel:

Delphi-Quelltext
1:
cmd /c dir c:\*.* /s                    


galagher - Mo 15.12.14 19:26

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Dann ist das auch "sauber". :zustimm:

Leider musste ich feststellen, dass WM_QUIT so wie auch WM_CLOSE das Programmfenster lediglich versteckt, aber das Programm ist weiterhin im Taskmanager aufgelistet! Zur Erklärung: Es ist eSpeak.exe, ich starte es als verstecktes Fenster, da ich nur die Sprachausgabe benötige, das Fenster selbst aber nicht.
http://www.heise.de/download/990bb9d9708af461315eee3e7a369df2-1418407930-22138066.html

user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
Man kann die Konsole auch mit dem Parameter "/c" starten. Dadurch wird die Konsole beendet, wenn das Konsolenprogramm endet. Beispiel:

Delphi-Quelltext
1:
cmd /c dir c:\*.* /s                    

Ich übergebe noch andere Parameter, /c wird da enweder als "c" ausgegeben, ignoriert oder aber das Programm beendet sich sofort wieder.

Ich habe aber eine Funktion TerminateEXE hier: http://www.delphipraxis.net/64864-programm-durch-delphi-programm-beenden-2.html gefunden, so funktionert es, aber ist das auch sauber? :nixweiss: Ganz verstehe ich das nicht!