Вниз
Скачать: CL | DM;

Как перехватить сообщения без KOL applet и Form.OnMessage   Найти похожие ветки 

← →
Psychedelic ©   (2006-10-13 14:22) [0]

Всем привет. Как можно перехватывать все сообщения (message) (WindowProc),
но БЕЗ помощи KolApplet и Form.OnMessage . Чисто в образовательных целях. Вобщем не кидая компонентов. На API в кол.


← →
Thaddy   (2006-10-13 15:07) [1]

program Project1;
uses
 Windows, Messages, kol, objects;
var
 wClass: TWndClass;
 Msg: TMsg;
 Handle:Hwnd;
 Stream:PStream;
 i:integer;
 UtilWindowClass: TWndClass = (
   style: 0;
   lpfnWndProc: @DefWindowProc;
   cbClsExtra: 0;
   cbWndExtra: 0;
   hInstance: 0;
   hIcon: 0;
   hCursor: 0;
   hbrBackground: 0;
   lpszMenuName: nil;
   lpszClassName: "KOLFakeUtilWindow");

function WindowProc(hWnd,Msg,wParam,lParam:Integer):hwnd; stdcall;
begin
if Msg = WM_DESTROY then PostQuitMessage(0);
Result := DefWindowProc(hWnd,Msg,wParam,lParam);
end;

begin
wClass.lpszClassName:= "CN";
wClass.lpfnWndProc :=  @WindowProc;
wClass.hInstance := hInstance;
wClass.hbrBackground:= 1;
RegisterClass(wClass);
Handle := CreateWindowEx(WS_EX_TOOLWINDOW, UtilWindowClass.lpszClassName,
   "", WS_POPUP {!0}, 0, 0, 0, 0, 0, 0, HInstance, nil);
Stream := NewWriteFilestream("c:\Test.log");
for i := 0 to 9 do
       postmessage(Handle,WM_USER,i,0);
while GetMessage(Msg,0,0,0) do
begin
  Stream.WriteStr(Int2Hex(msg.message,4)+"  "+Int2Str(msg.wparam));
  DispatchMessage(Msg);
end;
Stream.free;
end.


← →
Thaddy   (2006-10-13 15:13) [2]

Better:

program Project1;
uses
 Windows, Messages, kol, objects;
var
 Msg: TMsg;
 Handle:Hwnd;
 Stream:PStream;
 i:integer;
 UtilWindowClass: TWndClass = (
   style: 0;
   lpfnWndProc: @DefWindowProc;
   cbClsExtra: 0;
   cbWndExtra: 0;
   hInstance: 0;
   hIcon: 0;
   hCursor: 0;
   hbrBackground: 0;
   lpszMenuName: nil;
   lpszClassName: "KOLFakeUtilWindow");

function WindowProc(hWnd,Msg,wParam,lParam:Integer):hwnd; stdcall;
begin
if Msg = WM_DESTROY then PostQuitMessage(0);
Result := DefWindowProc(hWnd,Msg,wParam,lParam);
end;

begin
Handle := CreateWindowEx(WS_EX_TOOLWINDOW, UtilWindowClass.lpszClassName,
   "", WS_POPUP {!0}, 0, 0, 0, 0, 0, 0, HInstance, nil);
Stream := NewWriteFilestream("c:\Test.log");
for i := 0 to 9 do
       postmessage(Handle,WM_USER,i,0);
while GetMessage(Msg,0,0,0) do
begin
  Stream.WriteStr(Int2Hex(msg.message,4)+"  "+Int2Str(msg.wparam)+"  ");
  DispatchMessage(Msg);
end;
Stream.free;
end.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.028 c
15-1178362347
ArtemESC
2007-05-05 14:52
2007.06.03
Шахматы...


11-1160734977
Psychedelic
2006-10-13 14:22
2007.06.03
Как перехватить сообщения без KOL applet и Form.OnMessage


2-1179105701
Ale][andr
2007-05-14 05:21
2007.06.03
Открытие файла


1-1175750114
s_
2007-04-05 09:15
2007.06.03
Exe как Dll


4-1167142342
MasteroK
2006-12-26 17:12
2007.06.03
Как извлечь из буфера обмена первые N символов текста.




   Наверх