请问怎么窗口化一个全屏游戏?

KeSummer 2006-07-16 10:43:55
现在大多数好玩的游戏都是全屏的,而且不能更改.想写个程序把全屏游戏变为窗口的,遇到几个问题请各位大侠帮帮,分不多,嘻嘻.
1:怎么获得 任务列表--就是任务管理器那个应用程序页那个任务列表,注意不是进程列表,我记得是枚举窗口实现的.可是要怎么枚举呢?

2:要怎么更改那个窗口的属性,就是要修改的是那些属性?*^-^*给点代码参考行不行?

3:恐怕更改窗口属性的办法过菜,对一些游戏恐怕不行.要通过HOOK DirectX才行,可是HOOK的是COM,我不会..请问该怎么HOOK?(有个D3DWindower的程序就是这样实现的,可惜效果不佳^&^,这个忙帮不了就算了.)

\(~0~)/问题解决我会很快结帖的,放心..
...全文
2680 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
jzjking 2006-07-18
  • 打赏
  • 举报
回复
那个编成高手的文档在哪
zhaogaojian 2006-07-17
  • 打赏
  • 举报
回复
这个编程高手箴言上老梁讲的很清楚
saince 2006-07-17
  • 打赏
  • 举报
回复
在游戏开发过程中如果没有设计成支持窗口化,你这边修改是没用的吧?
似乎DirectX对显存的使用方式不一样。
ringphone 2006-07-17
  • 打赏
  • 举报
回复
你试试不子类化窗口过程呢?
zoulie 2006-07-17
  • 打赏
  • 举报
回复
up
KeSummer 2006-07-17
  • 打赏
  • 举报
回复
因女朋友的事,不想写了..她喜欢窗口方式玩游戏..这个程序给她的..
谢谢各位兄弟姐妹.结帖了.
KeSummer 2006-07-17
  • 打赏
  • 举报
回复
allenhiman(9Ft)
如果游戏本身不支持全屏,那没戏 勉强全屏了也看起来是垃圾,甚至出错
如果支持全屏的话,他肯定个全凭的快键,发这个消息就是了
(ps:没仔细研究搂住的意思,主要是帮齐达内)

====================================================
那个工具叫D3DWindower,它是通过HOOK DIRECTX实现的啊.效果真的不错.我有个测试游戏SONICHEROES TRIAL本身就不支持窗口,它窗口化后效果很不错。
allenhiman 2006-07-17
  • 打赏
  • 举报
回复
如果游戏本身不支持全屏,那没戏 勉强全屏了也看起来是垃圾,甚至出错
如果支持全屏的话,他肯定个全凭的快键,发这个消息就是了
(ps:没仔细研究搂住的意思,主要是帮齐达内)
KeSummer 2006-07-17
  • 打赏
  • 举报
回复
ringphone(临风)
ringphone(临风)
你试试不子类化窗口过程呢?
=============================
我的方法就是子类化啊!

==============================
我的意思是试试取消子类化,把子类化的代码拿掉。

从调试输出来看,子类化都没成功.和取不取消一样吧.
LegerWu 2006-07-17
  • 打赏
  • 举报
回复
制作游戏的时候,是可以选择模式的,一般是全屏模式的多,也有两种模式都支持的,一旦游戏发布后,你再要修改这个模式,那就比较复杂,也很困难了。
ringphone 2006-07-17
  • 打赏
  • 举报
回复
ringphone(临风)
你试试不子类化窗口过程呢?
=============================
我的方法就是子类化啊!

==============================
我的意思是试试取消子类化,把子类化的代码拿掉。
hhyytt 2006-07-17
  • 打赏
  • 举报
回复
顶,关注。
KeSummer 2006-07-17
  • 打赏
  • 举报
回复
ringphone(临风)
你试试不子类化窗口过程呢?
=============================
我的方法就是子类化啊!


saince(搜猫)
在游戏开发过程中如果没有设计成支持窗口化,你这边修改是没用的吧?
似乎DirectX对显存的使用方式不一样。
===================
我测试的游戏是可以设置成窗口模式的.只不测试时我调成全屏了.

zhaogaojian(米柑年成-WWW.VSFAN.NET)
这个编程高手箴言上老梁讲的很清楚
===================
他讲了什么?我没看过那本书啊...郁闷了..



有个窗口化程序能把我所有的全屏游戏变成窗口,郁闷了..
Cipherliu 2006-07-16
  • 打赏
  • 举报
回复
你需要学习3D才行
KeSummer 2006-07-16
  • 打赏
  • 举报
回复
怎么没人接分啊?自己顶个~
KeSummer 2006-07-16
  • 打赏
  • 举报
回复
不行~~窗口化后游戏都不会自己刷新了(但是能听到音乐)我的代码如下:(我的代码是在游戏进程内部执行的,测试了两个游戏都是同样的结果,1个能输出default ok,另外一个不能)
诶~~各位大侠,救命啊!
hWnd = ::FindWindow(NULL,"《英雄传说6》空之轨迹SC By乖小子");
if(hWnd==NULL)
return FALSE;
::OutputDebugString("wnd ok");
oldStyle = ::GetWindowLong(hWnd,GWL_STYLE);
oldStyle = oldStyle|WS_CAPTION;
::SetWindowLong(hWnd,GWL_STYLE,oldStyle);

oldExStyle= ::GetWindowLong(hWnd,GWL_EXSTYLE);
oldExStyle=oldExStyle|WS_EX_APPWINDOW|WS_EX_WINDOWEDGE;
::SetWindowLong(hWnd,GWL_EXSTYLE,oldExStyles);

::SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,800,600,SWP_SHOWWINDOW);
::ShowWindow(hWnd,SW_SHOWNORMAL);

oldWndProc=(WNDPROC)GetWindowLong(hWnd,GWL_WNDPROC);
if(SetWindowLong(hWnd,GWL_WNDPROC,(long)MyMsgProc)==0)
{return false;}
::OutputDebugString("SetWindowLong ok");

return true;


////////////////窗口过程////////////////////////////
::OutputDebugString("proc ok");
switch (umsg)
{
case WM_ACTIVATEAPP:
case WM_ACTIVATE:
case WM_KILLFOCUS:
case WM_SETFOCUS:
case WM_CLOSE:
return 0;
//这里是个关键,把这个计时器kill
case WM_TIMER:
if(wParam==0x3e9)

KillTimer(hWnd,wParam);
break;


}
::OutputDebugString("default ok");
return CallWindowProcA((WNDPROC)oldWndProc,hWnd,umsg,wParam,lParam);
  • 打赏
  • 举报
回复
hook com这个好像不难,就是麻烦点。

15,979

社区成员

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

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