我在一个应用程序中给一个edit加了一个键盘的钩子,为什么整个应用程序都起作用,起它应用中不起作用,我想只在这个edit起作用,另外为什么钩子函数总是执行两次!
程序如下:
function KeyHookProc(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export;    // 钩子函数
var
  str:pchar;
begin
  if wParam=vk_return then
  begin
    GetWindowText(editHandle ,str ,500);
    showmessage(str);
  end;
  result:= CallNextHookEx(g_hKey, iCode, wParam, lParam);
end;//设置钩子的语句
dwThreadID := GetWindowThreadProcessId(editHandle, nil);
g_hKey:= SetWindowsHookEx(WH_KEYBOARD,@KeyHookProc,Hinstance,dwThreadID);

解决方案 »

  1.   

    不大懂HOOK但调试API时尽量不是用showmessage();
      

  2.   

    从代码看你的用的线程钩子,再检查一下自己的函数用的是否准确!
    如果不行,把钩子函数单独做到一个DLL中试一下!
      

  3.   

    好像是delphi的edit没有自己的句柄返回的是窗体的句柄
      

  4.   

    ???????????????????????????????????????????要给edit控件下钩子,该怎样做呀
      

  5.   

    如果写成一个DLL的话我想问题应该不大