如何在游戏运行时使自己的程序在最顶端(100分)

Q

qixia

Unregistered / Unconfirmed
GUEST, unregistred user!
关键是这个游戏是用DirectX的全屏游戏,切换到别的程序时游戏会自动最小化
(因为游戏用的分辨率和windows的不一样)
这样,如何在游戏运行时使自己的程序能在最顶端,且我把焦点放在我的程序上
时游戏不会自动最小化呢?(就像一个输入法一样)

100分,知道的大侠来拿吧!
 
改变窗体式样..top,或继承参数
 
你有没有试过在打星际的时候QQ啊?一点QQ,星际就自动最小化了。
你这个方法我早试过了。怎么才能做得跟输入法一样呢?
 
难道是100分不够刺激,没人答?
 
游戏是用DirectX的全屏游戏 ,还意味着是独占模式 ,既然是独占模式 ,合作级别必定是
排它的 ,很多游戏修改的高手 ,最后选择了截屏也没有解决到如你的要求 ,恐怕不行吧。
 
我有办法,300分告诉你。
 
我觉你的程序也应该用DirectX来做,
我记得nVIDIA的选项里有一个叫在Direct3D显示Logo
选了后每次3D玩游戏都会在屏幕的右下角有一个nVIDIA的Logo。
期待!
 
關注中………
 
分不是问题。300分?OK!
只要你能帮我解决问题!注意我的要求:不影响游戏的正常运行,
但使自己的程序在最上。并且我的程序在响应鼠标操作时,游戏仍正常运行。

只要你告诉我怎么做,我马上给你300分(我现在积分一千多了。hoho)
 
是啊~!!!我以前也问过。没人答!!!!
以前别人说金山游侠是截图实现的。可现在玩传奇,那些外挂都是在游戏上面出现的。
而且游戏里面的东西不会静止。我想这个应该不是截屏实现的吧。
 
首先将 Form 的formStyle 属性设置为 fsStayOnTop
然后在 form 的 OnCreate 中重载 Application.OnMessage

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, Grids, DBGrids, StdCtrls;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure MyProc (var Msg: TMsg; var Handled: Boolean);

{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
application.OnMessage:=MyProc;
end;

procedure TForm1.MyProc(var Msg: TMsg; var Handled: Boolean);
begin
if (msg.wparam=SC_MINIMIZE) then handled:=true;
end;

end.
 
似乎还没见过一个东西可以在不停止游戏运行的情况下出现在游戏前面吧。
 
输入法不是可以吗?
 
一语点醒梦中人。自己查 CSDN 文章《在DirectX下弹出对话框》作者 e-mail: malloc@sohu.com
内容大致如下:
...............
微软的 DirectX 为Windows下的游戏带来了华丽的声光效果。但是由于DirectX采用直接访问硬件
的方法提高多媒体与游戏程序的速度,因此导致了人们误以为在DirectX(确切地说是DirectDraw)
下不能显示普通的Windows对话框。
但是DirectX是支持GDI的,也就是说游戏可以用常规的方法在DirectX下显示对话框(在
微软 DirectX 8 SDK 中有名为“FullScreenDialog”的例子)。现在我们的问题是:如上所述,
调用API建立与显示对话框必须要在该进程的内部,而我们的程序是在游戏进程的外部,这样,那
些CreateDialog() 与DialogBox() 只会引起“非法操作”或不起任何作用。
但是,有了上面所讲的Hook情况就不同了。既然Hook可以映射到别的进程内部,那么只要
将显示对话框的函数以及对话框资源包括在Hook DLL 中不就可以调用DialogBox() 了吗?完全正
确!我们用 SetWindowsHookEx() 为系统设置一个键盘消息Hook,系统会自动将这个DLL映射到游
戏的进程中。每当有键盘消息,我们只要判断是不是我们所设定的热键,如果是就调用 DialogBox()
显示对话框即可。
...............
 
try
postmessage(mainf.Handle, WM_SYSCOMMAND, SC_RESTORE, 0); //如果被其它软件最小化了,在这儿恢复
except
end;
try
setactivewindow(mainf.handle); //强制设为当前活动窗口
except
end;
try
BringWindowToTop(mainf.handle); //将当前窗口强制置到顶层
except
end;
try
SetForegroundWindow(mainf.handle); //强制将当前窗口所属的线程置为前台程序 ,因为win98在同一时刻只允许一个前台程序在执行
except
end;
 
SetWindowPos函数行不行?
 
看这个帖子:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1578788
把其中的显示模太窗口改成非模太窗口,当然不能简单的将form1.showmodal改成form1.show
自己试试吧,我做过,在疯狂坦克,天龙八步中成功,不过程序还有缺陷不想公布,等有时间
改好后再现出来,也希望有些人不要把人家给的分数看得太重,
这里讨论的是技术,
信奉的是共享.
 
顶部