我用一个键盘钩子,将栏下的键sendmessage给主程序调用,设msg=$1400
当我用api创建的主程序窗口能收到这个消息并处理
而当我用delphi自动创建的窗口却收不到消息
消息函数是
Function WndProc(Window : hWnd; Msg,WParam,LParam : Integer): Integer; StdCall;
var
  k:longint;   //扫描码Begin
  Result := 0;
  Case Msg of
     $1400:begin
     ……
           end  
怎么会不一样呢?

解决方案 »

  1.   

    我说得不明白吗?键盘钩子在dll中,当钩子拦截到键盘按下时sendmessage(w,wm_hook,
    wparam,lparam),w是主程序的句柄,dll通过内存映射文件获取.
    主程序通过Function WndProc(Window : hWnd; Msg,WParam,LParam : Integer): Integer; StdCall;接到wm_hook消息后用WParam的值来工作.
    现在的问题是:我用api函数创建的主程序能接到wm_hook 用WParam的值来工作,
    而我用delphi自动生成的窗口却接不到wm_hook 因而无法用WParam的值来工作,
    它们都是用上面的消息处理函数,都是在创建的时候将句柄写到内存映射文件中
    为什么结果却不一样?
    难道用delphi自动生成的还要修改工程文件?
      

  2.   

    在你的主程序的MAINFORM的ONCREATE事件处加入:
    WindowProc := WndProc;
    关联你的消息处理函数,你利用sendmessage才起作用。
    (其实最好办法就是利用回调函数)