![]() |
Minimieren im Hook abfangen!
Hi Leute!
ich hab die boardsuche schon benutzt (bevor es hier gleich wieder stress gibt)... Ich wollte n Message Hook schreiben der mir beim minimieren von programmen ne message schickt.... Meine Hook Funktion sieht atm so aus (i know man sollte dann noch den WParam der message nach SC_MINIMIZE abfragen):
Delphi-Quellcode:
Also bei nem Restore bekomm ich ne Message... das is nich die sache aber sonst nich...
type
tagMSG = record hwnd:hwnd; msg :Cardinal; WPARAM: wParam; LPARAM: lParam; time:DWORD; POINT: TPoint; end; PTagMsg = ^TagMSG; end; function HookProc(nCode: Integer; wParam: WPARAM; lParam:Integer): LRESULT; stdcall; begin case nCode < 0 of FALSE: begin if (PTagMsg(lparam).msg = WM_Syscommand) then begin MessageBox(my.Handle,'BLUB','a',0); //in my.Handle is das handle der Application und das geht auch prima SendMessage(My.Handle,WM_Minimize,PTagMsg(lparam).hwnd,0); end; end; end; Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); end; und noch was: geh ich richtig in der annahme das im PTagMsg(lparam).hwnd das Handle der Ziel-Application drin steht? Greetz Boombuler |
Re: Minimieren im Hook abfangen!
Warum Hook ?
Delphi-Quellcode:
private
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND; ... implementation ... procedure TForm1.WMSysCommand(var Msg: TWMSysCommand); begin if (Msg.CmdType = SC_MINIMIZE) then ShowMessage('Minimize') else if (Msg.CmdType = SC_MAXIMIZE) then ShowMessage('Maximize'); DefaultHandler(Msg); end; |
Re: Minimieren im Hook abfangen!
Wie denn sonst???
Es geht ja nicht um MEIN Programm sondern um EIN Programm... MfG Boombuler |
Re: Minimieren im Hook abfangen!
Ahh ok .. sry :?
|
Re: Minimieren im Hook abfangen!
hab auch schon mit WM_Size und WM_Sizing probier... ohne erfolg!
Problem besteht leider immer noch... :( Greetz Boombuler |
Re: Minimieren im Hook abfangen!
1. Man sollte NUR SC_MINIMIZE abfangen.
2. WM_SIZE wird geschickt, nachdem bereits etwas passiert ist, ist also so oder so falsch. 3. Der Hook ist global (also in einer DLL)??? 4. Statt MessageBox() versuch mal Beep() ... ist allemal weniger Eingriff ins fremde Programm. 5. TMsg ist bereits deklariert. 6. Statt SendMessage() an dein eigenes Handle nimm HWND_BROADCAST _und_ SendMessageTimeout() Interessant wäre auch, ob du eine Message blockieren willst, oder nur selber benachrichtigt werden willst (geht auch ohne Nachrichten, mit Events oder Semaphoren). Welchen Hooktyp benutzt du? Sollte man wohl angeben ... es gibt ja mehr als eine Möglichkeit! |
Re: Minimieren im Hook abfangen!
Hi
Zitat:
zu 4: war nur zum testen ob überhaupt hineingesprungen wird (debuggen von dlls is ja nich sooo einfach) zu 5: Ok Thx hab gedacht da gibts evtl n deklarations unterschied... hab das deswegen ausem Windows SDK abgeleitet... zu 6: werd ich umbauen... Ich will nur benachrichtigt werden... und ich benutze WH_GETMESSAGE Greetz Boombuler |
Re: Minimieren im Hook abfangen!
Na wenn das nix ist :-D
Versuche mal bitte WH_CALLWNDPROC && WH_CALLWNDPROCRET. Die beiden setzen an einer anderen Stelle an. Der erstere Typ vor und der zweite nach der Bearbeitung einer Nachricht duch die Fensterfunktion (WNDPROC). Nur der letzte Parameter unterscheidet sich wirklich. Den 2ten brauchst du vermutlich eh nicht ... |
Re: Minimieren im Hook abfangen!
So ich habs fertig!!!
Erst mal Danke an Assarbad! Es ist ein WH_CALLWNDPROC Hook geworden... Und hier der Code für alle die Intresse haben!
Delphi-Quellcode:
//----Hier wurd noch n fehler korrigiert... die Typen findet ihr weiter unten!----//
function HookProc(nCode: Integer; wParam: WPARAM; lParam:Integer): LRESULT; stdcall; var aCopy:TCopyDataStruct; begin case nCode < 0 of FALSE: begin if (PMsg(lparam).wparam = SC_Minimize) then begin with aCopy do begin dwData := PMsg(lparam).hwnd; cbData := 0; lpData := nil; end; SendMessage(ApplicationHandle, WM_COPYDATA, Longint(HookHandle),LongInt(@aCopy)); //Hab hier einfach mal das HookHandle übergeben.... end; end; end; Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); end; |
Re: Minimieren im Hook abfangen!
Erste Frage: Funktioniert es nun?
Zweite: Wie kann das funktionieren? TMsg hat doch komplett andere Offsets als du für diesen Hooktyp brauchst, oder? Bei WH_CALLWNDPROC:
Code:
Bei WH_GETMESSAGE:
typedef struct {
LPARAM lParam; WPARAM wParam; UINT message; HWND hwnd; } CWPSTRUCT, *PCWPSTRUCT;
Code:
typedef struct {
HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG, *PMSG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 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