Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Minimieren im Hook abfangen! (https://www.delphipraxis.net/35370-minimieren-im-hook-abfangen.html)

Boombuler 6. Dez 2004 10:56


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:
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;
Also bei nem Restore bekomm ich ne Message... das is nich die sache aber sonst nich...


und noch was:
geh ich richtig in der annahme das im PTagMsg(lparam).hwnd das Handle der Ziel-Application drin steht?

Greetz
Boombuler

Orbmu2k 6. Dez 2004 11:46

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;

Boombuler 6. Dez 2004 12:26

Re: Minimieren im Hook abfangen!
 
Wie denn sonst???
Es geht ja nicht um MEIN Programm sondern um EIN Programm...

MfG
Boombuler

Orbmu2k 6. Dez 2004 12:29

Re: Minimieren im Hook abfangen!
 
Ahh ok .. sry :?

Boombuler 6. Dez 2004 14:49

Re: Minimieren im Hook abfangen!
 
hab auch schon mit WM_Size und WM_Sizing probier... ohne erfolg!
Problem besteht leider immer noch... :(

Greetz
Boombuler

Assarbad 6. Dez 2004 19:51

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!

Boombuler 7. Dez 2004 07:18

Re: Minimieren im Hook abfangen!
 
Hi

Zitat:

Zitat von Assarbad
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!

zu 3: ja der ist global
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

Assarbad 7. Dez 2004 10:25

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 ...

Boombuler 7. Dez 2004 13:38

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;

Assarbad 7. Dez 2004 13:58

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:
typedef struct {
    LPARAM lParam;
    WPARAM wParam;
    UINT message;
    HWND hwnd;
} CWPSTRUCT, *PCWPSTRUCT;
Bei WH_GETMESSAGE:
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.
Seite 1 von 2  1 2      

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