AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

key an console senden 2

Offene Frage von "moin339"
Ein Thema von moin339 · begonnen am 4. Aug 2003 · letzter Beitrag vom 7. Okt 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#1

key an console senden 2

  Alt 4. Aug 2003, 19:49
Moin!

Ich möchte einen Taste an ein consolen programm senden. Zuerst wollte ich das ganze über das inputHandle der console machen aber das hat leider nicht funktioniert. Dann habe ich den Author des consolen-programms gefragt ob er die tasten vielleicht anders einließt. Er meinte er ließt die tasten mittels kbhit() und getch() ein. Wie kann ich dem consolen programm also tasten senden?

Ich habe es mal so probiert:

Delphi-Quellcode:
function enum(handle: THandle): Boolean; StdCall;
var Title : Array[0..255] of Char;
    ProcessId : HWND;
    absatz : string;
begin
  GetWindowText(handle, Title, 255);
  GetWindowThreadProcessId(handle, @ProcessId);
  absatz := char($0D) + char($0A);
  if ProcessId = ProcIdBuffer then // ProcIdBuffer ist die ProcessId der mit
  begin // CreateProcess gestarteten consolen-applikation
    ShowMessage(
    'ProccessId: ' + inttostr(ProcessId) + absatz +
    'Title: ' + title + absatz +
    'Handle: ' + inttostr(handle)
    );

    SendMessage(handle, WM_KEYDOWN, $4E, 0); //4E = Virtual-Key Code für 'N'
    SendMessage(handle, WM_KEYUP , $4E, 0);
  end;
  result := true;
end;

procedure TMainForm.Button2Click(Sender: TObject);
begin
  EnumWindows(@enum,0);
end;
Aber es passiert leider auch nichts

Kennt ihr eine andere (funktionierende) Lösung?

ciao, moin339
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: key an console senden 2

  Alt 4. Aug 2003, 21:47
Hallo,

anbei ein Testprogramm von Peter Below (TeamB), Du mußt nur
EnumChildren(FindWindow(NIL, pchar('C:\windows\system32\cmd.exe'))); anpassen.
Und natürlich den zu sendenden Text:
SendText('Test '+wclass); // Hier kannst Du schreiben!
Angehängte Dateien
Dateityp: zip sendkeytoconsole.zip (2,5 KB, 34x aufgerufen)
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#3

Re: key an console senden 2

  Alt 4. Aug 2003, 22:39
Hi

Danke für die schnelle antwort. Aber leider kann das prog bei mir nicht funktionieren. So wie ich das verstanden habe wird erst mit SetForegroundWindow() die console in den Vordergrung geholt und dann die tasten gesendet. Ich möchte aber eine Oberfläche für ein Consolen Programm schreiben, also is die console versteckt (SW_HIDE). Es würde auch nicht gerade gut aussehen wenn man sie dann zwischendurch wieder für eine sekunde sehen kann.

Hat noch jemand eine Idee oder einen Tip?

ciao, moin339
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: key an console senden 2

  Alt 5. Aug 2003, 12:30
Hallo moin339,
darf ich fragen, ob Du mein gepostetes Testprogramm auch ausprobiert hast

Wenn ich eine Konsole mit SW_HIDE aufmache, funktioniert das Programm trotzdem!

2 Buttons hinzugefügt:
Delphi-Quellcode:
PROCEDURE TForm1.Button2Click(Sender: TObject);
BEGIN
  ShellExecute(Handle, 'open', 'cmd.exe', '', '', SW_HIDE); // erzeugt eine versteckte Konsole
END;

PROCEDURE TForm1.Button3Click(Sender: TObject);
BEGIN
  ShowWindow(FindWindow(NIL, pchar('C:\windows\system32\cmd.exe')), SW_SHOW); // zeigt die Konsole UND DEN GESENDETEN TEXT an
END;
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#5

Re: key an console senden 2

  Alt 5. Aug 2003, 12:34
*versteck*

ok werde ich gleich noch mal probieren.

ciao, moin339
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#6

Re: key an console senden 2

  Alt 5. Aug 2003, 13:00
Moin!

Ok, das ganze funktioniert wirklich, aber leider verschwindet der fokus meines fensters für ca. eine halbe sekunde. Gibt es noch eine andere Möglichkeit? Der Benutzer sollte es eigentlich nicht mitbekommen wenn tasten an die console gesendet werden.

ciao, moin339
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: key an console senden 2

  Alt 5. Aug 2003, 14:02
Hallo

Du könntest
Delphi-Quellcode:
IF indent = 0 THEN
BEGIN
  Setforegroundwindow(aWnd);
  sleep(200);
END;
durch ersetzen

Delphi-Quellcode:
IF indent = 0 THEN
WHILE NOT Setforegroundwindow(aWnd) DO
BEGIN
  Application.ProcessMessages;
END;
allerdings muß das Fenster natürlich gefunden werden, sonst
gibt es eine Endlosschleife. Als eleganten Zusatz
(und zur Sicherheit!) kannst Du z.B. die Schleife ja nach
ca. 750ms oder so abbrechen ...

Bedenke, der Fokus Deiner App verschwindet trotzdem solange,
bis das Fenster durch Setforegroundwindow gesetzt wurde.

Auszug aus dem PSDK:
Zitat:
The SetForegroundWindow function puts the thread that created the specified window into the foreground and activates the window. Keyboard input is directed to the window, and various visual cues are changed for the user. The system assigns a slightly higher priority to the thread that created the foreground window than it does to other threads.

Syntax

BOOL SetForegroundWindow( HWND hWnd
);
Parameters

hWnd
[in] Handle to the window that should be activated and brought to the foreground.
Return Value

If the window was brought to the foreground, the return value is nonzero.

If the window was not brought to the foreground, the return value is zero.
...
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#8

Re: key an console senden 2

  Alt 5. Aug 2003, 14:37
Ein (wenn auch kurzes) blinken kann ich also nicht verhindern. Habe es gerade mal ausprobiert.
Zur not nehme ich das in Kauf aber das sieht nich gerade schön aus.
Kennt noch jemand anders eine Lösung tasten an eine Console zu senden

ciao, moin339
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#9

Re: key an console senden 2

  Alt 13. Aug 2003, 12:39
... ich weiss nicht,ob es für deine Zwecke geeignet ist, aber guck dir mal die Komponente fpiette an....
...damit kann man sogar ganze Befehle zur Konsole schicken...

P.S.; ...es ist auch Freeware, such mal in Google "fpiette"...

Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#10

Re: key an console senden 2

  Alt 13. Aug 2003, 13:10
Moin!

Hast du einen link? Ich habe unter google nur einige Netzwerkkomponenten gefunden.

ciao, moin339
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz