前提:
用SetWindowsHookEx注入到游戏进程。SetWindowsHookEx的第2个参数为回调函数 内容是按HOME呼出dll里面封装的Form.SetWindowsHookEx最后一个参数先用FindWindow获取游戏标题 然后GetWindowThreadProcessId获取该标题的id. Hook Mutex实现游戏多开。问题:
在游戏为焦点的时候按一次热键可以呼出form.再按一次热键form消失,前景美好。但是再按没反映。请问各位高手能否帮我改下代码。达到一个dll可以注入到多个游戏,而且不是游戏的时候按热键注入不了。代码:var
keyhhk: HHOOK ;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,'StartUpDlgClass') = 0 then begin
form1 := Tform1.Create(Application);
form1.Visible := True;
end
else
form1.Visible := False;
end;
end;
Result := CallNextHookEx(keyhhk, nCode, wParam, lParam);
end;Function installKeyProc():boolean;stdcall;
begin
Result:=false;
keyhhk:=SetWindowsHookEx(WH_KEYBOARD,@Keyproc,HInstance,0);
if keyhhk>0 then Result:=true;
end;
用SetWindowsHookEx注入到游戏进程。SetWindowsHookEx的第2个参数为回调函数 内容是按HOME呼出dll里面封装的Form.SetWindowsHookEx最后一个参数先用FindWindow获取游戏标题 然后GetWindowThreadProcessId获取该标题的id. Hook Mutex实现游戏多开。问题:
在游戏为焦点的时候按一次热键可以呼出form.再按一次热键form消失,前景美好。但是再按没反映。请问各位高手能否帮我改下代码。达到一个dll可以注入到多个游戏,而且不是游戏的时候按热键注入不了。代码:var
keyhhk: HHOOK ;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,'StartUpDlgClass') = 0 then begin
form1 := Tform1.Create(Application);
form1.Visible := True;
end
else
form1.Visible := False;
end;
end;
Result := CallNextHookEx(keyhhk, nCode, wParam, lParam);
end;Function installKeyProc():boolean;stdcall;
begin
Result:=false;
keyhhk:=SetWindowsHookEx(WH_KEYBOARD,@Keyproc,HInstance,0);
if keyhhk>0 then Result:=true;
end;
解决方案 »
- dbgrid 排序问题
- 下面一段代码可以从服务器上下载一个文件,下载多个文件怎么写?
- cxGrid是否在打开时遍历记录
- 如何释放窗体??
- 可以向工程中添加一个Unit,那么如何写一个新类呢?是否象Unit一样添加?他们之间有什么区别?谢了!
- 在fastreport中如何有设置打印时间的功能吗
- Question:D7中的ClientSocket和ServerSocket到哪去了
- 请教一个小问题:NMsmtp控件中的一个函数nmsmtp1.verify(s:string)的用法。(新年快乐)
- 一个变异的子窗口,谁遇到过吗?来看看吧
- 如何把分类汇总结果存入到一个已存在的数据表中?急
- 笔记本关机不了机问题
- Delphi中如何计算查询后Dbgrid中的某列的总和???
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,'StartUpDlgClass') = 0 then
form1 := Tform1.Create(nil);
form1.Visible:=not form1.Visible;
end;
end;
Result := CallNextHookEx(keyhhk, nCode, wParam, lParam);
end;改为这样的话 如果当前焦点的类名不是StartUpDlgClass你按热键是呼不出 但是 你焦点为游戏类名的话再按热键就呼不出了 请问怎么处理?