DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: 19137911446
今日帖子: 4
在线用户: 20
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 killnex (PC.Killer) ★☆☆☆☆ -
盒子活跃会员
2004/2/14 13:45:13
标题:
■■大家帮我看看我做的钩子哪里有问题呀? 浏览:1339
加入我的收藏
楼主: 我想模仿QQ尾巴写一个程序..
我写的钩子哪里错了呀?
为什么在Hook.dll运行
PasteText(g_hRich);
没有反映....?
而且WM_COMMAND也拦截不到...


//------------Main---------------
procedure TForm1.Button1Click(Sender: TObject);
var
 g_hQQ,hSend:Hwnd;
begin
  g_hQQ:=0;
  hSend:=0;
  SetHook(0);
  while (g_hQQ=0) or (hSend=0) do
    begin
       g_hQQ := FindWindowEx(0, g_hQQ, '#32770', 0);
       hSend := FindWindowEx(g_hQQ, 0, 'Button', '发送(&S)');
    end;
  if g_hQQ<>0 then SetHook(g_hQQ);
end;
//--------------Main---------



我做的Dll
//---------hook.dll----------
unit hook1;

interface
uses
  Windows,Messages;
var
  g_hKey,g_hProc:HHOOK;
  g_hRich:HWND;

function Sethook(hQQ:HWND): boolean ;stdcall;
function CallWndProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM): LRESULT;stdcall;
function KeyboardProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM): LRESULT;stdcall;

implementation

procedure PasteText(hRich:HWND);
begin
  SendMessage(g_hRich, WM_PASTE, 0, 0);
end;


function CallWndProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM): LRESULT;stdcall;
begin
  if WParam = WM_COMMAND then
    begin
      PasteText(g_hRich);
    end;
  Result := CallNextHookEx(g_hProc, nCode, WParam, LParam);
end;


function KeyboardProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM): LRESULT;stdcall;
begin
  PasteText(g_hRich);
  Result := CallNextHookEx(g_hKey, nCode, WParam, LParam);
end;


function Sethook(hQQ:HWND): boolean ;stdcall;
var bRet:boolean;
    dwThreadID:dword;
begin
  if hQQ<>0 then
    begin
    dwThreadID:=GetWindowThreadProcessId(hQQ,nil);
    g_hrich:= findwindowex(hQQ,0,'AfxWnd42',nil);
    g_hrich:= findwindowex(g_hRICH,0,'RICHEDIT',nil);
    if g_hRich=0 then result:=false;
    g_hProc := SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, Hinstance, dwThreadID);
    g_hKey := SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, Hinstance, dwThreadID);
    bRet := (g_hProc<>0) and (g_hKey <>0);
    end
  else
    begin
    bRet := UnhookWindowsHookEx(g_hProc) and UnhookWindowsHookEx(g_hKey);
    g_hProc := 0;
    g_hKey := 0;
    g_hRich := 0;

    end;
end;
end.
//---------hook.dll----------


WM_COMMAND就是拦截不到
大家帮我看看是哪里写错了呀?

----------------------------------------------
生活就好像是被强奸,要是你无力反抗,你只有去享受!
作者:
男 killnex (PC.Killer) ★☆☆☆☆ -
盒子活跃会员
2004/2/14 15:32:14
1楼: UP!
----------------------------------------------
生活就好像是被强奸,要是你无力反抗,你只有去享受!
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS