游戏进程显示自己窗口问题?...100分献上

Janlex 2008-11-07 03:00:38
如今要做一个游戏的一点小辅助工具..2D游戏来的...
窗口我写在DLL中.
原来我是先把游戏窗口化,
CGameApp::InitInstance()中去创建线程,在线程中去
CDlg dlg;
dlg.DoModal();
这样可以显示自己外挂窗口,但在任务栏会有图标. 所以我改成

CWnd wnd;
CWnd *pWnd = wnd.FindWindow(NULL, "Game name");
if (pWnd == NULL)
MessageBox(0, "un found", 0, 0);
CDlg dlg(pWnd);
dlg.DoModal();

这样的话的确没有任务栏图标了,因为把游戏主窗口父窗口了...但问题了..直接阻塞了..我又改成如下,让他不模态窗口显示..

CWnd wnd;
CWnd *pWnd = wnd.FindWindow(NULL, "Game name");
if (pWnd == NULL)
MessageBox(0, "un found", 0, 0);
CDlg dlg(pWnd);
dlg.ShowWindow(SW_SHOW);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

结果窗口直接不显示了...
可能消息循环不能这样写,我也不会..所以这里请教一下...
...全文
281 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
walkbywind 2008-11-13
  • 打赏
  • 举报
回复
mark
Janlex 2008-11-13
  • 打赏
  • 举报
回复
我就是显示的无模式对话框啊.不行的哦..

你发我EMAIL,我测下.谢谢

319400400@qq.com
r_swordsman 2008-11-13
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 Janlex 的回复:]
晕...LS先谢过.这不用说了,肯定是注入DLL啦.
[/Quote]

那就用ShowWindow显示一个普通的无模式对话框就可以
有没邮箱,我给你发一个我做的,看看是不是你想要的结果
Janlex 2008-11-13
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 r_swordsman 的回复:]
引用 23 楼 Janlex 的回复:
晕...LS先谢过.这不用说了,肯定是注入DLL啦.


那就用ShowWindow显示一个普通的无模式对话框就可以
有没邮箱,我给你发一个我做的,看看是不是你想要的结果
[/Quote]

你只发了EXE,没发DLL...
Janlex 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 cnzdgs 的回复:]
我有时间再试试,可能这种情况就没法在上面加常规的窗口。
[/Quote]
想在全屏游戏里显示窗口.这一点,我还不是很在呼..大不了窗口化后..在旁边显示.我现在在就是这样做的..勉强用得上.

但现在游戏最小化了..游戏不动了..这才是最烦人的...
cnzdgs 2008-11-12
  • 打赏
  • 举报
回复
我有时间再试试,可能这种情况就没法在上面加常规的窗口。
Janlex 2008-11-12
  • 打赏
  • 举报
回复
晕...LS先谢过.这不用说了,肯定是注入DLL啦.
r_swordsman 2008-11-12
  • 打赏
  • 举报
回复
你对话框是在自己的进程中创建的吧?这样即使显示在游戏窗口之上也还是属于你自己的进程,而不属于游戏进程。
应该先注入到游戏进程之后创建:

if(bThreadInjected) return 0;

TCHAR szPath[MAX_PATH];
::GetModuleFileName(hDllInstance, szPath, MAX_PATH);

if(!(hInjectedThreadDll = ::LoadLibrary(szPath))) return 0;

hInjectingDialog = CreateDialog(hDllInstance, (LPCTSTR)IDD_DIALOG_PRESSKEYSIMULATOR, hCurrentWindow, (DLGPROC)PressKeySimulatorDlgProc);

if(hInjectingDialog == NULL)
{
ShowLastErrorMessage(hCurrentWindow);
return FALSE;
}

ShowWindow(hInjectingDialog, SW_SHOW);

bThreadInjected = TRUE; // for StartInjectWindowThread return
Janlex 2008-11-12
  • 打赏
  • 举报
回复
继续顶....等待人回答..
Janlex 2008-11-11
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 zzdmfk 的回复:]
根本不是你那样搞。看下这个:http://www.diybl.com/course/3_program/vc/vc_js/2007124/89776.html
[/Quote]

早都看过啦.
别全屏,或者DX写的全屏窗口你这方法是可以..但DX全屏绘制的窗口,只要你一呼出.要么窗口看不到,一直闪.要么游戏直接最小化了
cnzdgs 2008-11-10
  • 打赏
  • 举报
回复
在我的机器上运行这个游戏程序,没多久就会自动关闭,有时候还会导致机器重启,看来是没法试验了。
你再查一下,获取到的游戏画面的窗口句柄对不对,有可能游戏是多层嵌套的窗口。
另外可以试一下用WS_EX_NOACTIVATE扩展风格的窗口。还有给游戏窗口加上WS_CLIPCHILDREN、WS_CLIPSIBLINGS风格。
wywgk 2008-11-10
  • 打赏
  • 举报
回复
一堆神仙在聊天,羡慕中........
路人乙2019 2008-11-10
  • 打赏
  • 举报
回复
根本不是你那样搞。看下这个:http://www.diybl.com/course/3_program/vc/vc_js/2007124/89776.html
Janlex 2008-11-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 cnzdgs 的回复:]
在我的机器上运行这个游戏程序,没多久就会自动关闭,有时候还会导致机器重启,看来是没法试验了。
你再查一下,获取到的游戏画面的窗口句柄对不对,有可能游戏是多层嵌套的窗口。
另外可以试一下用WS_EX_NOACTIVATE扩展风格的窗口。还有给游戏窗口加上WS_CLIPCHILDREN、WS_CLIPSIBLINGS风格。
[/Quote]

游戏自动关闭我没遇到..因为我没进游戏里面去.可能是这原因.

我直接打开游戏. new game,全屏后就没继续了,在此时测试的呼出窗口..没有自动关闭..

WS_EX_NOACTIVATE扩展风格的窗口。还有给游戏窗口加上WS_CLIPCHILDREN、WS_CLIPSIBLINGS风格。
这些我都试过,不行. 我在网上搜过.有人说DX游戏不能自己在最上层是显示自己窗口,需要调他的绘制函数绘自己窗口什么之类的.我也不知怎么实现,但我想,应该还有别的方法吧...cnzdgs再等待您大驾帮助
Janlex 2008-11-09
  • 打赏
  • 举报
回复
我真的很佩服你.
这么忙还能抽出时间来帮我解决问题. 感觉得到很大很大的帮助... 真心的说声谢谢
已经发到你EMAIL.
cnzdgs 2008-11-08
  • 打赏
  • 举报
回复
下载不了这个游戏程序。
发到我E-mail吧:wasay@yeah.net。
另外,你用的VC是哪个版本?
cnzdgs 2008-11-08
  • 打赏
  • 举报
回复
我有时间试试看。
zzz822163 2008-11-08
  • 打赏
  • 举报
回复
http://dev.21tx.com/2002/10/20/10075.html
你要把DLL放到游戏的进程空间才行
他的对话框是模态的,你给改成非模态的
Janlex 2008-11-08
  • 打赏
  • 举报
回复
申声. 这个游戏是DX绘制的
Janlex 2008-11-08
  • 打赏
  • 举报
回复
一个小游戏.下载才4MB多点..(俄罗斯方快)

现在问题就是不能显示到游戏的顶层
加载更多回复(9)

15,466

社区成员

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

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