全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2723
推到 Plurk!
推到 Facebook!

如何在dll中用 PostMessage 傳訊息給呼叫此dll的應用程式

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


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-02 00:23:27 IP:125.231.xxx.xxx 訂閱
請問各位高手,如何在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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-02 20:36:25 IP:59.105.xxx.xxx 訂閱
如果您要用 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-09-02 23:37:11 IP:125.231.xxx.xxx 訂閱
感謝dllee大哥回覆我的問題,再請教一個問題,我要run的時候出現Undeclared identifier: 'WM_USER'。
不知道是為什麼??
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-09-03 12:41:45 IP:220.134.xxx.xxx 訂閱
應該是 Compile 時出現吧
uses 加 Messages 就可以了。
------
http://www.ViewMove.com
kin031021
一般會員


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

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