- Zuerst suche die Message die versenden wird wenn die Maus über die Titelleiste des Fenster bewegt wird.
WM_MOUSEMOVE
WM_NCHITTEST
WM_MOUSELEAVE
WM_NCMOUSELEAVE
Zitat:
- Dann suche die Message die versenden wird wenn mit der Maus auf die Titelleiste geklickt wird.
WM_NCLBUTTONDOWN (in Verbindung mit WM_NCHITTEST)
Zitat:
- Besonders suche die Message die versenden wird wenn die Maus über die System-Buttons (Minimieren, usw.)des Fenster bewegt wird.
- Falls es die gibt, suche die Message die versenden wird wenn mit der Maus auf die die System-Buttons geklickt wird.
WM_SYSCOMMAND
Oder einfach selbst untersuchen, welche Nachrichten erzeugt werden:
Delphi-Quellcode:
var
OldWndProc:
function (hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
stdcall;
function GetWinMsgName(Msg: UINT):
string;
begin
// eine sinnvollere Implementierung, die den Msg-Wert in den WM_xxx Namen übersetzt, überlasse ich dem Leser
// siehe Winapi.Messages.pas oder http://wiki.winehq.org/List_Of_Windows_Messages
Result := '
Msg = $' + IntToHex(Msg, 4);
end;
function MyWndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
stdcall;
begin
Result := OldWndProc(hWnd, Msg, wParam, lParam);
System.Writeln(Format('
WindowProc: $%.8x $%.8x $%.8x %s = %d',
[hWnd, wParam, lParam, GetWinMsgName(Msg), Result]));
end;
procedure TForm1.FormShow(Sender: TObject);
begin
AllocConsole;
SetConsoleOutputCP(CP_UTF8);
OldWndProc := Pointer(SetWindowLongPtr(
Handle, GWL_WNDPROC, IntPtr(@MyWndProc)));
end;