Tastendruck an TProcess?
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Tastendruck an TProcess?
Hallo!
Ich habe eine (vermutlich) recht einfache frage:
Wie kann ich einen Tastendruck an ein TProcess senden??
Gruß Teekeks
Ich habe eine (vermutlich) recht einfache frage:
Wie kann ich einen Tastendruck an ein TProcess senden??
Gruß Teekeks
-
- Beiträge: 512
- Registriert: Mo 25. Aug 2008, 18:17
- OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
- CPU-Target: x86
- Wohnort: Chemnitz
Re: Tastendruck an TProcess?
"Prozesse" kriegen keine Tastenanschläge .... du kannst Daten an STDIN schicken und Tastenanschläge an Fenster. Was genau willst du denn machen? Und unter welchem Betriebssystem und Widgetset?
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Re: Tastendruck an TProcess?
Ich will an ein TProcess auf dem mplayer läuft diverse Tasten Senden um diesen (mplayer) zu navigieren.
Ich will eigentlich nur Sound ausgeben.
Ich habe SUSE 11.0 und Lazarus 0.9.26b.
Ich will eigentlich nur Sound ausgeben.
Ich habe SUSE 11.0 und Lazarus 0.9.26b.
-
- Beiträge: 957
- Registriert: Mo 11. Sep 2006, 22:56
-
- Lazarusforum e. V.
- Beiträge: 7180
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Tastendruck an TProcess?
Du könntest auch meine XINE Unit nutzen. Wenn dein Programm nur unter Linux laufen soll, und wenn du die Dev Packte von xine installiert hast:
viewtopic.php?t=2431&p=27704#p27704
viewtopic.php?t=2431&p=27704#p27704
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Re: Tastendruck an TProcess?
Über Process.Input sollte das gehen, so macht es Cactus auch, siehe die wichtigen beiden Zeilen dazu aus der mplayer-Anbindung:
Code: Alles auswählen
MPlayerProcess: TProcess;
//...
procedure SendCommand(cmd: string);
begin
cmd:=cmd+#10; //MPLayer always needs #10 as Lineending, no matter if win32 or linux
//wenn Process läuft:
MPlayerProcess.Input.write(cmd[1], length(cmd));
end;
Johannes
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Re: Tastendruck an TProcess?
Hi!
Danke für eure reichliche Beteiligung...
Ich habe jetzt die varriante von monta genommen.
Gruß Teekeks
Danke für eure reichliche Beteiligung...
Ich habe jetzt die varriante von monta genommen.
Gruß Teekeks
-
- Beiträge: 250
- Registriert: Di 16. Dez 2008, 20:13
- OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
- CPU-Target: 32/64Bit
Re: Tastendruck an TProcess?
Es hat schon jemand eine MPlayer-Unit gebastelt: http://cactus.hey-you-freaks.de/index.php
Die Unit habe ich auch noch mal im Anhang.
mfg _X_
Edit:// Aus der hat monta glaube ich, auch seinen Code-Schnipsel
Edit2:// Hat er gesagt, hab ich überlesen.
Die Unit habe ich auch noch mal im Anhang.
mfg _X_
Edit:// Aus der hat monta glaube ich, auch seinen Code-Schnipsel
Edit2:// Hat er gesagt, hab ich überlesen.
- Dateianhänge
-
- mplayer.pas
- Die Cactus-Jukebox mplayer Unit
- (12.89 KiB) 96-mal heruntergeladen
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Re: Tastendruck an TProcess?
@_X_: Ich werd mir das mal anschauen...
@all:
Könnt ihr mir bei folgendem Problem helfen?
Wenn ich jetzt auf Play, dann auf Pause und dann wieder auf Play drücke (oder zwischen den zwei Plays auf Stop) kriege ich einen External: SIGPIPE error...
Ich weis aber noch nicht warum...
Wisst ihr warum?
Gruß Teekeks
ps.: Tolles Forum!!!!!einseinself
@all:
Könnt ihr mir bei folgendem Problem helfen?
Code: Alles auswählen
procedure TFrmMain.BtnPlayClick(Sender: TObject);
begin
if not is_Paused then
begin
ap.Active:=false;
// ap.Options:=ap.Options+[poUsePipes];
ap.CommandLine:='mplayer "4LYN - Kisses Of A Strobelight.mp3"';
ap.Active:=true;
end else
begin
is_Paused:=false;
SendCommand('p');
end;
end;
procedure TFrmMain.BtnPauseClick(Sender: TObject);
begin
if ap.Active then
if (not is_Paused) then
begin
SendCommand('p');
is_Paused:=true;
end else
begin
SendCommand('p');
is_Paused:=false;
end;
end;
procedure TFrmMain.BtnStopClick(Sender: TObject);
begin
if ap.Active then
SendCommand('q');
// ap.Active:=false;
end;
procedure TFrmMain.FormCreate(Sender: TObject);
begin
ap:=TProcess.Create(self);
ap.Options:=ap.Options+[poUsePipes];
end;
procedure TFrmMain.FormDestroy(Sender: TObject);
begin
ap.Free;
end;
procedure TFrmMain.SendCommand(cmd: string);
begin
cmd:='p'+#13; // wenn hier #10 steht passiert das gleiche...
ap.Input.Write(cmd[1],Length(cmd));
end;
Wenn ich jetzt auf Play, dann auf Pause und dann wieder auf Play drücke (oder zwischen den zwei Plays auf Stop) kriege ich einen External: SIGPIPE error...
Ich weis aber noch nicht warum...
Wisst ihr warum?
Gruß Teekeks
ps.: Tolles Forum!!!!!einseinself
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Re: Tastendruck an TProcess?
Ich habe den Fehler gefunden:
es fehlte ein "-slave" bei den Optionen (und es muss natürlich #10 heißen...)
Gruß Teekeks
es fehlte ein "-slave" bei den Optionen (und es muss natürlich #10 heißen...)
Gruß Teekeks
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Re: Tastendruck an TProcess?
Siehe Edit unten!
Und nocheinmal habe ich eine Frage:
Cactus hat bei sich folgendes stehen:
Also bei mir wird da sonstawie dolle Rumgemeckert, auch wenn ich alles genauso habe wie er (von den Parametern usw her...).
Was mache ich hier falsch?
Wäre schön wenn ihr mir helfen könntet...
Gruß Teekeks
Edit:
Argggg! gefunden. Der Process solte laufen befor man Kommandos sendet ^^
Aber was sagt mir die Zahl 205000 bei einem 3:25 langen Titel???
Und nocheinmal habe ich eine Frage:
Cactus hat bei sich folgendes stehen:
Code: Alles auswählen
SendCommand('get_time_length');
Also bei mir wird da sonstawie dolle Rumgemeckert, auch wenn ich alles genauso habe wie er (von den Parametern usw her...).
Was mache ich hier falsch?
Code: Alles auswählen
function TFrmMain.Get_TrackLength: longint;
var tmps: string;
i:integer;
time: real;
begin
repeat begin
SendCommand('get_time_length'); // hier kriege ich eine External SIGSEGV... Ich weis aber nicht warum...
sleep(5);
tmps:=GetProcessOutput;
end;
until pos('LENGTH', tmps)>0;
i:=LastDelimiter('=', tmps);
if i > 0 then begin
time:= StrToFloat(Copy(tmps, i+1, Length(tmps)));
time:=time*1000;
result:=round(time);
end;
end;
Wäre schön wenn ihr mir helfen könntet...
Gruß Teekeks
Edit:
Argggg! gefunden. Der Process solte laufen befor man Kommandos sendet ^^
Aber was sagt mir die Zahl 205000 bei einem 3:25 langen Titel???
-
- Beiträge: 512
- Registriert: Mo 25. Aug 2008, 18:17
- OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
- CPU-Target: x86
- Wohnort: Chemnitz
Re: Tastendruck an TProcess?
Teekeks hat geschrieben:Argggg! gefunden. Der Process solte laufen befor man Kommandos sendet ^^
Aber was sagt mir die Zahl 205000 bei einem 3:25 langen Titel???
Hmm ... wie wärs mit (60 * 3 + 25) * 1000 ?
Oder anders gesagt: Millisekunden.
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Re: Tastendruck an TProcess?
ähhh. Stimmt! Das war zu einfach, darauf bin ich nicht gekommen.
DANKE!
DANKE!