線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1602
推到 Plurk!
推到 Facebook!

TEventMSG的疑問

答題得分者是:dllee
kin031021
一般會員


發表:5
回覆:4
積分:1
註冊:2007-09-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-04 15:49:02 IP:125.231.xxx.xxx 訂閱
請問各位大哥兩個問題

1、TEventMSG的用法?

2、還有pEventMSG(lParam)^的意思?為甚麼前面要加個p和後面加^

<textarea class="delphi" rows="10" cols="60" name="code">function HookProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall; var msg:TEventMsg; Count,i : integer; KeyState1 : TKeyboardState; AryChar : array[0..1] of char; begin Result:=0; if iCode < 0 then Result := CallNextHookEx(hHook,iCode,wParam,lParam) else if icode=HC_ACTION then begin msg:=pEventMSG(lParam)^; with Form1 do begin if msg.message=WM_MOUSEMOVE then Label2.Caption := inttostr(msg.paramL) ',' inttostr(msg.paramH); if msg.message=WM_LBUTTONDOWN then Memo1.Lines.add({inttostr(msg.hwnd) ':' }'L:' inttostr(msg.paramL) ',' inttostr(msg.paramH) #13); if msg.message=WM_RBUTTONDOWN then Memo1.Lines.add({inttostr(msg.hwnd) ':' }'R:' inttostr(msg.paramL) ',' inttostr(msg.paramH) #13); if msg.message=WM_KEYDOWN then begin GetKeyboardState(KeyState1); Count :=ToAscii(msg.paramL,msg.paramH,KeyState1,AryChar,0); i := ord(AryChar[0]); if Count=1 then Memo2.Text := Memo2.Text chr(i); end; end; end; end;</textarea>
編輯記錄
kin031021 重新編輯於 2007-09-04 15:50:25, 註解 無‧
kin031021 重新編輯於 2007-09-04 15:54:23, 註解 無‧
dllee
站務副站長


發表:319
回覆:2516
積分:1710
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-04 19:31:16 IP:59.105.xxx.xxx 訂閱
TEventMSG 是一個資料結構,存 Message 的內容及觸發時間/視窗 Handle
pEventMSG(lParam)^ 是把 lParam 所指到的位址,轉換成 TEventMSG 型態

pEventMSG 算是 TEventMSG 的指標型態,以下是 BCB 的宣告:

winuser.h
/*
* Message Structure used in Journaling
*/
typedef struct tagEVENTMSG {
UINT message;
UINT paramL;
UINT paramH;
DWORD time;
HWND hwnd;
} EVENTMSG, *PEVENTMSGMSG, NEAR *NPEVENTMSGMSG, FAR *LPEVENTMSGMSG;

\vcl\windows.hpp
typedef tagEVENTMSG *PEventMsg;
typedef tagEVENTMSG TEventMsg;

可以看到 PEventMsg 就是一個指標,它指向 TEventMsg 的資料型態。

以您的問題 1、TEventMSG 的用法? 基本上是您要了解 HC_ACTION 所攔的是什麼?
lParam/wParam 存的內容是什麼?如何取出其內容?
TEventMSG 本身只是存資料用,
沒有什麼用法,完全是看您如何去用它。
------
http://blog.yam.com/dllee/
kin031021
一般會員


發表:5
回覆:4
積分:1
註冊:2007-09-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-09-04 20:32:39 IP:59.114.xxx.xxx 訂閱
感謝dllee大哥詳細的解答!!
系統時間:2017-10-21 5:47:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!