如何在dll中用 PostMessage 傳訊息給呼叫此dll的應用程式 |
答題得分者是:dllee
|
kin031021
一般會員 ![]() ![]() 發表:5 回覆:4 積分:1 註冊:2007-09-01 發送簡訊給我 |
請問各位高手,如何在dll中利用 PostMessage 傳訊息給呼叫此dll的應用程式?
以下是我的程式碼,在PostMessage(happ,WM_USER 1,Ord(AryChar[0]),0) 這行發生錯誤。<textarea class="delphi" rows="10" cols="60" name="code">library KeyHook1; uses SysUtils,Classes,windows; var hHook,happ : hwnd; s : char; f : file of char; {$R *.res} function HookProc(iCode: integer; wParam: wParam; lParam: lParam): Lresult; stdcall; var KeyState1 : TKeyBoardState; Count,i:integer; AryChar : array[0..1] of char; begin Result :=0; if iCode <0 then begin Result :=CallNextHookEx(hHook,iCode,wParam,lParam); Exit; end; if ((lParam and (1 shl 30))<>0) then begin GetKeyboardState(KeyState1); Count :=ToAscii(wParam, lParam,KeyState1,AryChar,0); if Count = 1 then postmessage(happ,WM_USER 1,Ord(AryChar[0]),0) end; end; procedure StartHook(AppHandle:hwnd);export; begin hHook := SetWindowsHookEx(WH_KEYBOARD, HookProc, Hinstance, 0); if hHook >0 then happ:=AppHandle; end; procedure StopHook;export; begin if hHook <> 0 then begin close(f); UnHookWindowsHookEx(hHook); hHook:=0; end; end; exports StartHook, StopHook; begin hHook :=0; Assign(f,'c:\code.txt'); Reset(f); end. </textarea> |
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
如果您要用 PostMessage 那傳進去的東西都不可以是函式內的變數,因為函式內的變數是放在 Stack 的,在 PostMessage 訊息送出後,該函式也結束,Stack變數還給了系統,而您的程式才收到Message要處理時,變數存的內容早就不在了。
如果你要傳的就只是 2 個 char,那把它們放在一個 Short 或 Long 內,直接用 WParam 傳, 或是一個放 WParam, 一個放 LParam,就不會有問題了。例如: PostMessage(happ,WM_USER 1,AryChar[0],AryChar[1])
------
http://www.ViewMove.com |
kin031021
一般會員 ![]() ![]() 發表:5 回覆:4 積分:1 註冊:2007-09-01 發送簡訊給我 |
|
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
|
kin031021
一般會員 ![]() ![]() 發表:5 回覆:4 積分:1 註冊:2007-09-01 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |