Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.03;
Скачать: 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 вся ветка

Текущий архив: 2007.06.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.038 c
15-1178518779
db2admin
2007-05-07 10:19
2007.06.03
Модульное ПО


2-1179142023
ыавпып
2007-05-14 15:27
2007.06.03
String


15-1178195190
SkySpeed
2007-05-03 16:26
2007.06.03
Как выявить причину упадка грызуна и клавы?


2-1179310746
Шакал
2007-05-16 14:19
2007.06.03
Удаление из нескольких таблиц


15-1178189164
CCili
2007-05-03 14:46
2007.06.03
Какая-то функция, соединяющая Word, Excel