Autor Beitrag
SignsOfCore
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Di 19.05.09 17:07 
Huhu,

Ich habe ein kleines Programm geschrieben, für meine Oma - da diese verständlicherweise mit dem Computer nicht so super Klasse umgehen kann. Das Programm zeigt eine kleine Oberfläche mit verschieden Buttons, die verschiedene Verknüpfungen zu Winamp öffnen.

Z.b
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button1Click(Sender: TObject);
begin
pfad1 := 'C:\Dokumente und Einstellungen\NoName\Desktop\musik1.m3u';
ShellExecute(Application.Handle, 'open', PChar(pfad1), '', Pchar(ExtractFileDir(pfad1)), SW_SHOW);
end;


Klappt alles soweit, nur möchte Ich jetzt auch die Grundfunktionen von Winamp über Delphi steuern, sprich:
Play, Stop, Zurück, Vor, Leiser, Lauter

Wie mache Ich das?
Alle Links die Ich ergoogled und hier im Forum gefunden haben, waren im Schnitt 4 - 8 Jahre alt. Alle Links funktionierten nicht mehr und die Domains waren teilweise gar nicht mehr vorhanden.

Ich habe mal irgendwo gelesen, dass man das per Befehl ähnlich wie oben machen kann. Die einfachste Möglichkeit wäre mir am liebsten.


Gruß
Core
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Di 19.05.09 17:13 
Deine Lösung ist die Nemp-API.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 19.05.09 17:27 
Oder halt der etwas komnpaktere Eintrag in der Library dazu:

www.delphi-library.d...+einlesen_48816.html

Die Nemp-Api ist eher auf meinen Player zugeschnitten, auch wenn die zum guten Teil kompatibel zu Winamp ist. ;-)

_________________
We are, we were and will not be.
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Di 19.05.09 19:16 
Also ich würde das ganze dann wirklich so machen, dass Du dem Winamp-Fenster Tastendruck-Simulationen sendest.
Zum Beispiel mit diesem Link.
Die Funktionen sind - meine ich mich erinnern zu können (habe Winamp schon lange nicht mehr benutzt) - immer ein Buchstabe mit gedrückter Strg-Taste zusammen - also eigentlich eben die ganz normale Vorgehensweise.
SignsOfCore Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Di 19.05.09 19:43 
user profile iconRegan hat folgendes geschrieben Zum zitierten Posting springen:
Deine Lösung ist die [url=gausi.de/delphi/nemp....php]Nemp-API[/url].


Klasse :wink:

Jetzt habe Ich 2 große Codes, wie mache Ich am besten einen daraus? Manche Namen sind doppelt vergeben, usw.
Außerdem brauche Ich nur Teile aus dem Code. Equalizer, Nemp Control usw. brauche ich gar nicht. Schieberegler für die Musik Spur und Lautstärke wären noch interessant, mehr nicht.



Gruß
Core
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Di 19.05.09 20:18 
Ist doch schon alles dabei :gruebel: . Natürlich musst du dir die Schieberegler alleine schreiben :wink: .
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 20.05.09 16:01 
user profile iconSignsOfCore hat folgendes geschrieben Zum zitierten Posting springen:
Jetzt habe Ich 2 große Codes, wie mache Ich am besten einen daraus? Manche Namen sind doppelt vergeben, usw.

Naja, da heißt das Zauberwort: Eigeninitiative. ;-)

Bei meinem Library-Eintrag gibt es unten gibt es eine Prozedur
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure WinampPlayNext; 
var hwndWinamp: THandle; 
begin 
    hwndWinamp:= FindWindow('Winamp v1.x',nil); 
    if hwndWinamp<>0 then SendMessage(hwndWinamp,WM_COMMAND, WINAMP_BUTTON5, 0); 
end;

Damit (und mit den weiter oben definierten anderen Button-Konstanten) bekommst du schonmal das Geklicke auf den Buttons hin. Für die beiden Schieberegler kannst du dir den Code in der Nemp-Api-Demo anschauen und daraus das passende rauskopieren.

_________________
We are, we were and will not be.
SignsOfCore Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mi 20.05.09 18:52 
Dankeschön :wink:

Habe einfach alles unnötige gelöscht, alle Fehlermeldungen abgearbeitet und meinen Code hinzugefügt. Klappt!


Jetzt habe Ich ein neues Problem:
Ich habe eine ComboBox1 mit einem einzigen Eintrag. Ich möchte dass dieser Eintrag automatisch selektiert und aktiviert wird. Eigentlich brauche Ich den gar nicht, Ich setze den danach auch unsichtbar.

Hier mein Code (noch nicht aufgeräumt & unsauber, funktioniert aber):
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Forms, StdCtrls,
  Contnrs, ExtCtrls, ComCtrls, Dialogs, NempApi, Graphics, ShellApi;

type

  TForm1 = class(TForm)
    Nemp_Info: TGroupBox;
    LBL_NempTitel: TLabel;
    LBL_NempFilename: TLabel;
    LBL_Status: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    LBL_NextTitel: TLabel;
    LBL_PrevTitel: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    LBL_NempPosition: TLabel;
    LBL_Nemp_AudioInfos: TLabel;
    GroupBox2: TGroupBox;
    Label8: TLabel;
    ComboBox1: TComboBox;
    Trackbar_NempVolume: TTrackBar;
    NempBTN7: TButton;
    NempBTN6: TButton;
    NempBTN5: TButton;
    NempBTN4: TButton;
    NempBTN3: TButton;
    NempBTN2: TButton;
    NempBTN1: TButton;
    Image1: TImage;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button17: TButton;

    procedure Timer1Timer(Sender: TObject);
    procedure NempBTN1Click(Sender: TObject);
    procedure NempBTN2Click(Sender: TObject);
    procedure NempBTN3Click(Sender: TObject);
    procedure NempBTN4Click(Sender: TObject);
    procedure NempBTN5Click(Sender: TObject);
    procedure NempBTN6Click(Sender: TObject);
    procedure NempBTN7Click(Sender: TObject);

    procedure Playlisteinlesen1Click(Sender: TObject);
    procedure Trackbar_NempVolumeChange(Sender: TObject);
    procedure EQTrackBarChange(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Search_TimerTimer(Sender: TObject);
    procedure btn_fertigClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }

  end;



var
  Form1: TForm1;

  NempState: Integer;
  NempFilename: String;
  NempRandomMode: Integer;

  pfad1: String;
  pfad2: String;
  pfad3: String;
  pfad4: String;
  pfad5: String;
  pfad6: String;
  pfad7: String;
  pfad8: String;
  pfad9: String;
  pfad10: String;
  pfad11: String;
  pfad12: String;
  pfad13: String;
  pfad14: String;
  pfad15: String;
  pfad16: String;
  pfad17: String;
  pfad18: String;
  pfad19: String;
  pfad20: String;


implementation

{$R *.dfm}


procedure TForm1.NempBTN1Click(Sender: TObject);
begin
    NempPlayPrev;
end;

procedure TForm1.NempBTN2Click(Sender: TObject);
begin
    NempPlay;
end;

procedure TForm1.NempBTN3Click(Sender: TObject);
begin
    NempPause;
end;

procedure TForm1.NempBTN4Click(Sender: TObject);
begin
    NempStop;
end;

procedure TForm1.NempBTN5Click(Sender: TObject);
begin
    NempPlayNext;
end;

procedure TForm1.NempBTN6Click(Sender: TObject);
begin
    NempVolumeDown;
    NempVolumeDown;
    NempVolumeDown;
end;

procedure TForm1.NempBTN7Click(Sender: TObject);
begin
    NempVolumeUp;
    NempVolumeUp;
    NempVolumeUp;
end;


function SekIntToMinStr(sek:integer):string;
begin
    result:='';
    result:=inttostr(sek DIV 60);
    sek:=sek Mod 60;
    if sek<10 then result:=result+':0'+inttostr(sek)
        else result:=result+':'+inttostr(sek)
end;



procedure TForm1.Timer1Timer(Sender: TObject);
var NeuerFilename:String;
    neuerstatus:integer;
    NeuerRandomMode: integer;
    pos : Integer;
begin
    Neuerstatus := GetNempState;
    neuerFilename :=GetNempPlaylistFileName(-1);
    NeuerRandomMode := GetNempRandomMode;

    NempBTN1.Enabled := neuerstatus <> -1;
    NempBTN2.Enabled := neuerstatus <> -1;
    NempBTN3.Enabled := neuerstatus <> -1;
    NempBTN4.Enabled := neuerstatus <> -1;
    NempBTN5.Enabled := neuerstatus <> -1;
    NempBTN6.Enabled := neuerstatus <> -1;
    NempBTN7.Enabled := neuerstatus <> -1;

    pos := GetNemp_TrackPosition;
    LBL_NempPosition.Caption := SekIntToMinStr(pos DIV 1000);



    if (NeuerFilename <> NempFilename) OR (Neuerstatus<>NempState) or (NeuerRandomMode<>NempRandomMode)then
    begin
        Lbl_NempFilename.Caption := neuerFilename;
        LBL_NempTitel.Caption := GetNempPlaylistTitel(-1);
        NempFilename := neuerFilename;
        NempState := NeuerStatus;
        NempRandomMode:= NeuerRandomMode;
        case Neuerstatus of
            -1: LBL_Status.Caption := 'Programm läuft nicht';
            0: LBL_Status.Caption := 'Programm gestoppt';
            1: LBL_Status.Caption := 'Programm spielt ab';
            3: LBL_Status.Caption := 'Programm pausiert';
        end;
        LBL_PrevTitel.Caption := GetNempPrevTitel;
        LBL_NextTitel.Caption := GetNempNextTitel;



        LBL_Nemp_AudioInfos.Caption := IntToStr(GetNemp_TrackLength) + 'sek, '
                 + IntTostr(GetNemp_Samplerate) + 'Hz, '
                 + IntToStr(GetNemp_Bitrate) + 'kbit/sec, '
                 + IntTostr(GetNemp_Channels) + 'Channels';
    end;
end;


procedure TForm1.Playlisteinlesen1Click(Sender: TObject);
var maxW,i : integer;
    Titel: String;
begin
   maxW := GetNempPlayListLength;
    if maxW < 0 then exit;
    for i:=0 to maxW-1 do
    begin
        Titel := GetNempPlaylistTitel(i) + ' (' + GetNempPlaylistFileName(i) + ')';
         end;
end;


procedure TForm1.Trackbar_NempVolumeChange(Sender: TObject);
begin
  SetNemp_Volume(Trackbar_NempVolume.Max - Trackbar_NempVolume.Position);
end;

procedure TForm1.EQTrackBarChange(Sender: TObject);
begin
  SetNemp_Equalizer(tTrackbar(Sender).Tag, TTrackbar(Sender).Position);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  case ComboBox1.ItemIndex of
    0: WINDOW_NAME := WINAMP_WINDOW_NAME;
    2: WINDOW_NAME := 'TF_Player.UnicodeClass';
    else WINDOW_NAME := NEMP_WINDOW_NAME;
  end;
end;

procedure TForm1.Search_TimerTimer(Sender: TObject);
begin
  if Nemp_GetSearchStatus = 1 then
  begin

    btn_fertigClick(NIL);
  end;
end;

procedure TForm1.btn_fertigClick(Sender: TObject);
var maxW,i : integer;
begin

    maxW := GetNempSearchListLength;
    if maxW < 0 then exit;

    if maxW > 50 then maxW := 50;

    for i:=0 to maxW-1 do
    begin


    end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
pfad1 := 'C:\Dokumente und Einstellungen\Name\Desktop\Fetenmix.m3u';
ShellExecute(Application.Handle, 'open', PChar(pfad1), '', Pchar(ExtractFileDir(pfad1)), SW_SHOW);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
pfad2 := 'C:\Dokumente und Einstellungen\Name\Desktop\Hit-Mix.m3u';
ShellExecute(Application.Handle, 'open', PChar(pfad2), '', Pchar(ExtractFileDir(pfad2)), SW_SHOW);
end;

end.



Wie setze Ich den Fokus automatisch auf den einen Eintrag?



Gruß
Core
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Mi 20.05.09 21:04 
Also wenn ich mich recht erinnere, müsstest Du dafür nur Pos1 und Enter/Return nacheinander senden um ihn abspielen zu lassen - so Du denn die Liste angewählt hast.
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Do 21.05.09 09:32 
Zitat:
Ich habe eine ComboBox1 mit einem einzigen Eintrag. Ich möchte dass dieser Eintrag automatisch selektiert und aktiviert wird.

ausblenden Delphi-Quelltext
1:
ComboBox1.ItemIndex := 0;					
SignsOfCore Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Do 21.05.09 11:54 
Funktioniert nicht.

Der Eintrag steht zwar automatisch auf 1, muss aber erst nochmal angeklickt werden damit es funktioniert. Ich will dieses Ding eigentlich ganz loswerden, wenn Ich es auf invisible stelle, kann man es nicht mehr anklicken.

Bitte schaut euch die Nemp-Api von Regan an. Ich möchte diese ComboBox mit Nemp, Winamp, AudioDB komplett loswerden, egal wie. Ich nutze nur Winamp.


Gruß
Core
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 21.05.09 12:02 
Dann schmeiß die dch einfach raus aus dem Programm. Schau dir an, wozu die da ist. Da wird einfach nur die Variable WINDOW_NAME neu gesetzt, die zum Finden des Winamp/Nemp/AudioDB-Fensters benutzt wird. Wenn du nur Winamp nutzt, dann setze WINDOW_NAME := WINAMP_WINDOW_NAME; bei Programmstart und lass die Combobox weg.

_________________
We are, we were and will not be.
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Do 21.05.09 12:13 
Übrigens, zu Deinem:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.NempBTN6Click(Sender: TObject);
begin
    NempVolumeDown;
    NempVolumeDown;
    NempVolumeDown;
end;

Da fände ich es angebrachter, dass Du dort eher eine For-Schleife 3 Mal durchlaufen lässt, also so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.NempBTN6Click(Sender: TObject);
var i:Integer;
begin
for i:=0 to 2 do
    NempVolumeDown;
end;

Naja - jeder wie er es mag...
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 21.05.09 15:16 
Nimm doch für Deine Oma gleich eine FB, dann hat sie mit dem PC direkt nichts zu tun:

Besser ist eine spezielle FB, z.B. bei der Fa. Pollin.

Beschreibung:
PC-Funkfernbedienung X10, USB

Hochwertige Funk-Fernbedienung und USB-Empfänger zum Anschluss an PC oder Laptop. Damit lassen sich nahezu alle Anwendungen komfortabel über die Fernbedienung steuern. Ideal zum Fernbedienen des Betriebssystems, von Multimedia-Funktionen usw.

Best.Nr. 721 379, 7,95 EUR
oder:

Infrarot PC-Fernbedienung, USB

Fernbedienung und USB-Empfänger zum Anschluss an den PC. Damit lassen sich viele Anwendungen komfortabel über die Fernbedienung steuern. Ideal zum Fernbedienen von PC, VDR, Multimedia-Funktionen, Präsentationen usw.

Best.Nr. 721 355, 9,95 EUR