AGB  ·  Datenschutz  ·  Impressum  







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

Minimieren im Hook abfangen!

Ein Thema von Boombuler · begonnen am 6. Dez 2004 · letzter Beitrag vom 7. Dez 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#1

Minimieren im Hook abfangen!

  Alt 6. Dez 2004, 11:56
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
  Mit Zitat antworten Zitat
Benutzerbild von Orbmu2k
Orbmu2k

Registriert seit: 29. Nov 2004
Ort: Erfurt
254 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Minimieren im Hook abfangen!

  Alt 6. Dez 2004, 12:46
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;
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Minimieren im Hook abfangen!

  Alt 6. Dez 2004, 13:26
Wie denn sonst???
Es geht ja nicht um MEIN Programm sondern um EIN Programm...

MfG
Boombuler
  Mit Zitat antworten Zitat
Benutzerbild von Orbmu2k
Orbmu2k

Registriert seit: 29. Nov 2004
Ort: Erfurt
254 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Minimieren im Hook abfangen!

  Alt 6. Dez 2004, 13:29
Ahh ok .. sry
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Minimieren im Hook abfangen!

  Alt 6. Dez 2004, 15:49
hab auch schon mit WM_Size und WM_Sizing probier... ohne erfolg!
Problem besteht leider immer noch...

Greetz
Boombuler
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#6

Re: Minimieren im Hook abfangen!

  Alt 6. Dez 2004, 20:51
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!
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Minimieren im Hook abfangen!

  Alt 7. Dez 2004, 08:18
Hi

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
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#8

Re: Minimieren im Hook abfangen!

  Alt 7. Dez 2004, 11:25
Na wenn das nix ist

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 ...
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Minimieren im Hook abfangen!

  Alt 7. Dez 2004, 14:38
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;
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#10

Re: Minimieren im Hook abfangen!

  Alt 7. Dez 2004, 14:58
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:32 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