AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WinAmp beenden?

Ein Thema von TheMiller · begonnen am 30. Dez 2003 · letzter Beitrag vom 30. Dez 2003
Antwort Antwort
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

WinAmp beenden?

  Alt 30. Dez 2003, 02:34
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
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#2

Re: WinAmp beenden?

  Alt 30. Dez 2003, 03:07
Hat da niemand eine Idee?

Es wäre dringend (für Sylvester)
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#3

Re: WinAmp beenden?

  Alt 30. Dez 2003, 11:18
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

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.
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#4

Re: WinAmp beenden?

  Alt 30. Dez 2003, 11:30
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?
Frederic Kerber
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:44 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