首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

远程注入Dll 参数传递有关问题

2013-01-08 
远程注入Dll 参数传递问题!本帖最后由 mywmshow 于 2012-11-01 10:13:22 编辑注入程序向其它EXE注入DLL,用

远程注入Dll 参数传递问题!
本帖最后由 mywmshow 于 2012-11-01 10:13:22 编辑 注入程序向其它EXE注入DLL,用的是键盘钩子!
怎么样才能把注入时带的参数,在被注入的EXE按某键调出Dll窗口时显示这个参数呢?

var
  TmpStr: string;

function installKeyProc(GameTid:THandle;DllId:THandle;MyData:string;): THandle;
begin
  Result := SetWindowsHookEx(WH_KEYBOARD, @Keyproc, DllId, GameTid);
  TmpStr:=MyData
  ShowMessage(TmpStr);  //▲▲▲▲这里可以显示传来的参数
end

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 MFrm = nil then MFrm := TMFrm.Create(nil);
      MFrm.Visible:= not MFrm.Visible;
      ShowMessage(TmpStr);  //▲▲▲▲这样是显示不了的,如何在这里获取到上面的那个MyData参数呢
    end;
  end;
  keyProc := CallNextHookEx(keyhhk, icode, wp, lp);
end;

[解决办法]
installKeyProc是在你的Exe中运行的,你的Exe把这个Dll加载到你的进程空间,而当别的程序触发键盘钩子时,这个Dll在那个这个进程中加载,这个进程中并没有执行过installKeyProc,因此需要进程间通讯,
实在不行,就用文件交换吧,installKeyProc把内容写到文件里,需要的时候从文件里读,或者注册表
用共享内存比较好
[解决办法]
参数只能在dll, 要么就是消息传递, dll加载完成后向你的exe发条消息, exe收到约定消息再把参数发给dll.
当然用共享内存也可以。 这样的消息最终也是共享内存。

热点排行