首页
社区
课程
招聘
[旧帖] [求助]dll注入,处理多线程 0.00雪花
发表于: 2010-5-11 18:19 1302

[旧帖] [求助]dll注入,处理多线程 0.00雪花

2010-5-11 18:19
1302
前提:
用SetWindowsHookEx注入到游戏进程。SetWindowsHookEx的第2个参数为回调函数 内容是按HOME呼出dll里面封装的Form.SetWindowsHookEx最后一个参数先用FindWindow获取游戏标题 然后GetWindowThreadProcessId获取该标题的id. Hook Mutex实现游戏多开。
问题:
开第一个游戏的话 按Home 可以呼出 但是如果你再开第2个游戏按Home就呼不出了。
请问该如何处理多线程 让程序只要开一个就可以注入多个游戏里?

大致代码:
var
keyhhk: HHOOK ;
Function keyproc(icode,wp,lp:integer):DWORD;stdcall;   //键盘HOOK回调函数
begin
  if (icode=HC_ACTION) then
            begin
              if (wp=VK_HOME)and ((1 shl 31)and lp=0) then
              begin
             if form1=nil then  Form1:=Tform1.Create(nil);
                form1.Visible:=not form1.Visible;
              end;
            end;
 keyProc:=CallNextHookEx(keyhhk,icode,wp,lp);
end;
Function installKeyProc():boolean;stdcall;
var
 h:HWND;
 GameTid:THandle;
begin
    Result:=false;
        h:=FindWindow(nil,'武林外传11');
    if h=0 then begin Messagebox(0,'未找到游戏','error',0);exit; end;//如果游戏未打开则退出
    GameTid:=GetWindowThreadProcessId(h);
    keyhhk:=SetWindowsHookEx(WH_KEYBOARD,@Keyproc,GetModuleHandle('HookDll.dll'),GameTid);//hookdll为本dll
    if keyhhk>0 then Result:=true;
end;
procedure DllEnterProc(reason:integer);
begin
   case reason of
   windows.DLL_PROCESS_ATTACH: begin end;
   windows.DLL_PROCESS_DETACH: begin Form1.Free;form1:=nil; end;
   end;
end;
exports   //导出函数
  installKeyProc;

begin
dllProc:=@DllEnterProc;
end.

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Function keyproc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): DWORD; stdcall; //键盘HOOK回调函数
var
game:hwnd;
cn : Array[0..255] of char;
begin
game:=0;
  if nCode = HC_ACTION then
  begin
    if (wParam = VK_F9) and ((1 shl 31) and lParam = 0) then
    begin
      if form1 = nil then
      game:=GetForegroundWindow();
      getclassname(game ,cn,255);
       if lstrcmpi(cn,'GameCaption') = 0 then
        form1 := Tform1.Create(nil);
        form1.Visible:=not form1.Visible;
     end;
  end;
  Result := CallNextHookEx(keyhhk, nCode, wParam, lParam);
end;

改为这样的话 如果当前焦点的类名不是GameCaption你按热键是呼不出 但是 你焦点为游戏类名的话再按热键就呼不出了 请问怎么处理?
2010-5-12 01:59
0
游客
登录 | 注册 方可回帖
返回
//