注入DLL,通过热键呼出窗体,呼不出来

内存溢出 2011-03-11 07:15:13
我是通过输入法注入的DLL到目标进程,以txt为例

注入进去以后那 我是通过SetWindowLong来让回调函数里监控按键

同时并输出一个对话框(MessageBox)来看下能否达到监控

MessageBox也能弹出来,但是窗口呼不出来

代码:
SetWindowLong(hWnd,GWL_WNDPROC,(LONG)MyWndProc);


LRESULT CALLBACK MyWndProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
//此处可以优先处理此窗口的所有消息,之后传递给原来的函数,让他进行处理

if(Message == WM_KEYDOWN)
{
if(wParam == VK_F1)
{
MessageBox(NULL,TEXT("按下了F1"),NULL,NULL);
DLLdlg=new CDlg;
DLLdlg->Create(IDD_DIALOG1);
DLLdlg->ShowWindow(SW_SHOW);
}

}
return OldWndProc(hWnd,Message,wParam,lParam);//传递给原来的函数
}




我把呼出代码放到DLL。cpp的InitInstance里在加载DLL的时候窗体就能出来

这是为什么




以前用SetWindowsHookEx的时候在回调函数里通过热键呼出窗体都是可以的
...全文
589 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
内存溢出 2011-03-11
  • 打赏
  • 举报
回复
我把

DLLdlg=new CDlg;
DLLdlg->Create(IDD_DIALOG1);
DLLdlg->ShowWindow(SW_SHOW);

放到InitInstance(); 加载DLL的时候就能呼出窗口


是不是因为在回调函数里德原因 ?
内存溢出 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhanshen2891 的回复:]

试试这个

C/C++ code
CWnd *pCWnd = CWnd::GetForegroundWindow();
DLLdlg->Create(IDD_DIALOG1, pCWnd);
DLLdlg->ShowWindow(SW_SHOW);
[/Quote]按热键的时候要呼出的时候程序就卡了 然后就消失了
内存溢出 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fishion 的回复:]

DLLdlg->Create(IDD_DIALOG1,CWnd::FromHandle(hWnd));行不
DoModal()行不
[/Quote][Quote=引用 7 楼 stjay 的回复:]

DLLdlg=new CDlg;前
加上AFX_MANAGE_STATE(AfxGetStaticModuleState());试试
你创建的MFC DLL?工程里的代码应该有说明这点

或者参考其他DLL资源切换方法
[/Quote]

都不行 都是按热键的时候要呼出的时候程序就卡了 然后就消失了
stjay 2011-03-11
  • 打赏
  • 举报
回复
DLLdlg=new CDlg;前
加上AFX_MANAGE_STATE(AfxGetStaticModuleState());试试
你创建的MFC DLL?工程里的代码应该有说明这点

或者参考其他DLL资源切换方法
内存溢出 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shenyi0106 的回复:]

游戏吗?
dx会把窗体刷没的
[/Quote]我用记事本测试也是这样的 在InitInstance里写呼出窗体的话 就可以 在热键里就不可以
内存溢出 2011-03-11
  • 打赏
  • 举报
回复
那我把代码放到InitInstance里就可以的


我去试试上面几位说的
zyrr159487 2011-03-11
  • 打赏
  • 举报
回复
会不会是被掩盖了
zhanshen2891 2011-03-11
  • 打赏
  • 举报
回复
试试这个

CWnd *pCWnd = CWnd::GetForegroundWindow();
DLLdlg->Create(IDD_DIALOG1, pCWnd);
DLLdlg->ShowWindow(SW_SHOW);
shenyi0106 2011-03-11
  • 打赏
  • 举报
回复
游戏吗?
dx会把窗体刷没的
fishion 2011-03-11
  • 打赏
  • 举报
回复
DLLdlg->Create(IDD_DIALOG1,CWnd::FromHandle(hWnd));行不
DoModal()行不

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧