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 Problem mit SendMessage (https://www.delphipraxis.net/24379-problem-mit-sendmessage.html)

Schneider-Huetter 20. Jun 2004 10:33


Problem mit SendMessage
 
Hallo Zusammen,
mit folgender Prozedur möchte ich die Abspielposition von Winamp abfragen:

Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
begin

   WindowHandle := FindWindow( 'Winamp v1.x', nil);
   Edit1.Text:=IntToStr( SendMessage( WindowHandle, WM_WA_IPC, 0 , PC_GETOUTPUTTIME ) );

end;
Das funktioniert soweit auch, nur das Programmfenster "friert" ein. Ich kann
zwar noch den Button anklicken und der Wert im Edit-Feld wird akualisiert,
aber das Fenster lässt sich nicht mehr verscieben und auch nicht über den
x-Button beenden. Wenn ich zu einem anderen Fenster wechsle und zu meinem
Programm zurückwechsle wird es nicht mehr angezeigt. Wenn ich es dann über
Rechtsklick auf das Taskleisten Symbol beende erhalte ich folgenden Fehler:
"Im Projekt Projekt1.exe ist eine Exception der Klasse EOSError aufgetreten.
Meldung: 'Systemfehler. Code: 5. Zugriff verweigert' [...] "

MfG Schneider-Huetter

Christian Seehase 20. Jun 2004 13:36

Re: Problem mit SendMessage
 
Moin Schneider-Huetter,

probier's doch mal mit PostMessage.
SendMessage kehrt erst zurück wenn die Message verarbeitet wurde.

Ausserdem könntest Du Dir mal mit

Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));
wie das Ergebnis von Send bzw. PostMessage ist.

Schneider-Huetter 21. Jun 2004 10:51

Re: Problem mit SendMessage
 
Ich werds mal mit PostMessage versuchen aber im Winamp-SDK ist komischerweise SendMessage angegeben :gruebel:

MfG Schneider-Huetter

Muetze1 21. Jun 2004 11:44

Re: Problem mit SendMessage
 
Moin!

PostMessage() ist in dem Falle auch totaler Müll, weil der Rückgabewert wichtig ist und PostMessage() nunmal keinen Rückgabewert liefert (und deshalb sofort zurückkehren kann).

Grundlegend vermute ich den Fehler woanders, weil das reine SendMessage() funktioniert ja (Edit1 wird aktualisiert), es muss was anderes in deinem Programm sein was dieses Verhalten auslöst.

/EDIT: Ich weiss auch schon was: Du weist das gefundene Fensterhandle WindowHandle zu, aber WindowHandle ist eine Property deiner Form, somit setzt du das Fensterhandle deiner Form auf die von Winamp und das ist tödlich. Ergo: Definiere dir eine Variable für das Fensterhandle von Winamp!

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
  lWndHandle : HWND;
begin
   lWndHandle := FindWindow( 'Winamp v1.x', nil);
   Edit1.Text:=IntToStr( SendMessage( lWndHandle , WM_WA_IPC, 0 , PC_GETOUTPUTTIME ) );
end;
MfG
Muetze1

Schneider-Huetter 22. Jun 2004 08:37

Re: Problem mit SendMessage
 
Alles klar, vielen Dank !!


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz