Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WinAmp beenden? (https://www.delphipraxis.net/13971-winamp-beenden.html)

TheMiller 30. Dez 2003 01:34


WinAmp beenden?
 
Hi möchte Winamp automatisch beenden. Jetzt habe ich den Code :

Delphi-Quellcode:
var
  run:boolean;
  Speed:integer;
  Programm:string;

procedure SetRun(Value:boolean;Rate:integer;ProgrammName:string);
var
  ThreadHandle: THandle;
  ThreadID: DWORD;

  procedure killProgramm;
  begin
  while Run do
    begin
    sleep(Speed);
    if FindWindow(NIL,PChar(Programm))<>0 then PostMessage(FindWindow(NIL,PChar(Programm)), wm_close, 1, 1);
    end;
  end;

begin
Speed:=Rate;
Programm:=ProgrammName;
if Run=Value then exit;
Run:=Value;
if Value then
  begin
  sleep(1);
  ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@killProgramm),@ProgrammName, 0, ThreadID);
  if ThreadHandle<>0 then CloseHandle(ThreadHandle);
  end;
end;
gefunden.

Er funzt auch einwandtfrei. Nur als zu schliesendes Programm kann ich nciht WinAmp eingeben, da es ja im Titel immer den Liednamen hat. Wie kann ich das ändern, bzw, was muss ich für einen Code benutzen?

Danke im Vorraus

TheMiller 30. Dez 2003 02:07

Re: WinAmp beenden?
 
Hat da niemand eine Idee?

Es wäre dringend (für Sylvester)

Uncle Cracker 30. Dez 2003 10:18

Re: WinAmp beenden?
 
Hi DJ-SPM,

du fragst mitten in der Nacht, ob dir jemand helfen könnte und eine Stunde später fragst du nochmal? Außerdem ist Silvester erst morgen :mrgreen:

Also, ich habe da jetzt schnell mal was zusammen geschrieben. Funktioniert bei WinAMP 5 auf alle Fälle, bei den älteren Version weis ich das nicht so genau, aber so wie es aussieht, dürfte es da auch gehn.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var WinAMP : HWND;
begin
  WinAMP:=findwindow(PChar('Winamp v1.x'),nil);
  if(WinAMP<>0) then
  begin
    PostMessage(WinAMP, WM_CLOSE, 0, 0);
  end;
end;
Falls diese Funktion bei anderen WinAMP-Versionen nicht geht, musst du dir das FindWindow von denen holen, ich mache das immer mit EDA von Assarbad ziemlich gutes Programm.

Musst nur mal probieren und bescheid geben.

fkerber 30. Dez 2003 10:30

Re: WinAmp beenden?
 
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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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