Hi!
Ich mach es folgendermaßen, müsste eigentlich für alle Winamp-Versionen gehen:
Delphi-Quellcode:
procedure TForm1.WinAmp1Click(Sender: TObject);
var
hHandle: THandle;
str:
string;
i: integer;
LPARRAM : DWord;
begin
EnumWindows (@EnumWindowsProc,Integer(@LPARRAM));
for i:=0
to Listbox1.Items.count-1
do begin
hHandle := FindWindow(
nil, PChar(Listbox1.Items[i]));
str:=gettext(hhandle);
if pos('
Playlist', str)<> 0
then
begin dosomething
//hhandle ist hier das Handle auf winamp
hier die verwendeten Funktionen:
Delphi-Quellcode:
function EnumWindowsProc(const hWnd : Longword; Param: lParam): LongBool; stdcall;
var
Buffer: array[0..1024] of Char;
begin
Result := True;
GetWindowText(hWnd, Buffer, sizeof(Buffer));
if lstrlen(Buffer) = 0 then
begin
exit;
end
else
begin
Form1.listbox1.items.Add (buffer);
end;
end;
function GetText(Wnd: HWND): string;
var
textlength: Integer;
Text: PChar;
begin
textlength := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0);
if textlength = 0 then Result := ''
else
begin
GetMem(Text, textlength + 1);
// Änderung ->
if Assigned(Text) then
try
SendMessage(Wnd, WM_GETTEXT, textlength + 1, Integer(Text));
// Result := Text;
// Änderung ->
SetString(Result, Text, lstrlen(Text));
finally
FreeMem(Text);
end;
end;
end;
Dann hast du das
Handle auf Winamp und das geht dann (getested bei Winamp 3 - 1.0).
Alternativ steht in der Titelzeile eigentlich immer (playing), wenn er grad spielt. Man kann auch danach suchen!
Hoffe, das hilft!
Ciao fkerber
P.S.: Es gibt auch noch ne WinAmp
Api, oder?