Autor Beitrag
max120b
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

WinXP, Linux 9.0
Delphi 2005 Professional
BeitragVerfasst: Mi 27.12.06 21:42 
Aloa :)

Ich hab folgendes Problem:

Ich habe mir ein Programm geschrieben, das via Hotkes Programme fernsteuert. Ich habe nun vor auch Winamp in die Liste der unterstützen Programme aunzunehmen.Um nun die Funktionen von Winamp nutzen zu können benötige ich ein Handle auf den aktiven Winamp Fenster.

mit
ausblenden Delphi-Quelltext
1:
2:
    hwndWinamp:= FindWindow('Winamp',nil);
    if hwndWinamp<>0 then SendMessage(hwndWinamp,WM_COMMAND, value, 0)


funktioniert das leider nicht... auch wenn man nach "Winamp 5" oder ähnlichem suche bringt das leider keinen Erfolg.
Dazu kommt noch das man ja im Winamp-Fenstertitel den aktuellen Musiktitel anzeigen und scrollen lassen kann...

nur wie bekomme ich nun mein Handle aufs Winamp-Fenster???

Ich hab mit Hilfe der SuFu nur das gefunden, was oben als Code steht.
Hat jemand ne Idee oder hat sowas schonmal gemacht?

Für eine Antwort wäre ich sehr dankbar :)


Thx im Voraus

Max120b

Moderiert von user profile iconmatze: Code- durch Delphi-Tags ersetzt
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 27.12.06 23:44 
Warum sooo umständlich ? - nimm doch
TWinAmpControl - Die ultimative Unit für Winamp !

www.delphipraxis.net...nit+fuer+winamp.html

oder WINAMP SDK

oder google mal "winamp sdk delphi"
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mi 27.12.06 23:50 
Brauchst du auch nicht ;)
Ich weiß nicht mehr, wo es hier im Forum stand, aber Gausi? oder wars Christian? - ich weiß es nicht mehr - hatte mal das wichtigste zusammengetragen:
(Aber kurz zu deinem Problem:
so muss es lauten: "[...] := FindWindow('Winamp v1.x',nil);") ;)
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:
const    WA_BUTTON1   : integer = 40044// previous title
         WA_BUTTON2   : integer = 40045// play
         WA_BUTTON3   : integer = 40046// pause
         WA_BUTTON4   : integer = 40047// stop
         WA_BUTTON5   : integer = 40048// next title
         WA_VOLUMEUP  : integer = 40058// volume up
         WA_VOLUMEDOWN: integer = 40059// volume down
         WA_SHUFFLE   : integer = 40023//Toggle Shuffle
         WA_REPEAT    : integer = 40022//Toggle Repeat
         WA_JMPTIME   : integer = 40193//Open jump to time dialog
         WA_JMPFILE   : integer = 40194//Open jump to file dialog
         WA_SKINSELEC : integer = 40219//Open skin selector
         WA_CONFVISUAL: integer = 40221//Configure current visualization plug-in
         WA_RELOADSKIN: integer = 40291//Reload the current skin
         WA_CLOSE     : integer = 40001//Close Winamp
         WA_TENTRKBACK: integer = 40197//Moves back 10 tracks in playlist
         WA_EDBOOKMRK : integer = 40320//Show the edit bookmarks
         WA_BOOKMRKTRK: integer = 40321//Adds current track as a bookmark
         WA_AUDIOCD   : integer = 40323//Play audio CD
         WA_LOADEQ    : integer = 40253//Load a preset from EQ
         WA_SAVEEQ    : integer = 40254//Save a preset to EQF
         WA_LOADPRESETS : integer =  40172//Opens load presets dialog
         WA_AUTOLDPRSTS : integer =  40173//Opens auto-load presets dialog
         WA_LOADDEFPRST : integer =  40174//Load default preset
         WA_SAVEPRESET  : integer =  40175//Opens save preset dialog
         WA_AUTOLDSAVE  : integer =  40176//Opens auto-load save preset
         WA_DELPRESET   : integer =  40178//Opens delete preset dialog
         WA_DELAUTOLD   : integer =  40180//Opens delete an auto load preset dialog


        IPC_GETLISTLENGTH : integer = 124;
        IPC_GETLISTPOS :integer = 125;
        IPC_GETPLAYLISTFILE : integer = 211;
        IPC_GETPLAYLISTTITLE : integer = 212;

        IPC_GET_SHUFFLE : integer = 250;
        IPC_GET_REPEAT : integer = 251;


var
  Form1: TForm1;

implementation

{$R *.dfm}


function GetWinampTitel(data:Integer): String;
var hwndWinamp, TempHandle : THandle;
    dat2: array[0..500of Char;
    TrackPos: Integer;
    temp, MPointer: Cardinal;
begin
    // Prinzip ist fast immer dasselbe, daher nur einmal die Kommentare ;-)
    // Fenster suchen
    hwndWinamp:= FindWindow('Winamp v1.x',nil);
    if hwndWinamp= 0 then
    begin  // Kein Erfolg
        result:=''
    end else
    begin  // Erfolg - Winamp-Fenster gefunden
        if data<0 then
          // ermittle die aktuelle Position in der Playlist
          TrackPos:= SendMessage(hwndWinamp,WM_USER,0 , IPC_GETLISTPOS  )
        else
          // sonst nehme die übergebene zahl als tracknummer
          TrackPos:=data;

        // Tja nu, halt ein paar Nachrichten an Winamp senden, um an die Daten zu kommen ;-)
        MPointer:= SendMessage(hwndWinamp,WM_USER,TrackPos , IPC_GETPLAYLISTTITLE);
        // Diese Info möchte Winamp nicht direkt rausrücken  - da muss man was tricksen ;-)
        GetWindowThreadProcessId(hwndWinamp,TempHandle);
        hwndWinamp:= OpenProcess(PROCESS_ALL_ACCESS,False,TempHandle);
        ReadProcessMemory(hwndWinamp, Pointer(MPointer), @dat2,500,temp);
        // warum ausgerechnet 500 kann ich nicht sagen. Habe das so übernommen.
        // Kann sein, dass auch kleinere Werte funktionieren.
        CloseHandle(hwndWinamp);
        Result:= string(dat2);
    end;
end;



procedure TForm1.Button1Click(Sender: TObject); // aktueller titel
begin
 label1.Caption := GetWinampTitel(-1);
end;

procedure TForm1.Button2Click(Sender: TObject); // pause
var
 hWinAmp: THandle;
begin
 hWinAmp := FindWindow('Winamp v1.x',nil);
  SendMessage(hWinAmp,wm_command,WA_BUTTON2,0);
end;
max120b Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

WinXP, Linux 9.0
Delphi 2005 Professional
BeitragVerfasst: Fr 29.12.06 00:00 
Super, danke für die schnellen Antworten.

Beides funktioniert :)

Vielen Dank!
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 29.12.06 00:07 
Dieser Beitrag in der Library dürfte evtl. auch noch hilfreich sein. Nur der Vollständigkeit halber ;-).

_________________
We are, we were and will not be.