如何用热键显示桌面??(20分)

  • 主题发起人 主题发起人 icysword
  • 开始时间 开始时间
I

icysword

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何用热键使正在运行的所有程序都最小化, 并显示windows桌面.
其作用就像一些游戏修改器, 如金山游侠, 按*号就可以使正在运行的游戏弹出到桌面来.

我试过一下, 绑定热键为 Alt + D, 下面是显示桌面的代码, 但没成功, 请指正.
var deskhandle:integer;
deskhandle:=getdesktopwindow(); //获取桌面句柄.
SetForegroundWindow(deskhandle); //设桌面为当前窗口

编译后运行, 按Alt+D并不显示桌面, 为什么??
 
win 98下显示桌面:

procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(GetDesktopWindow(),'open',
'C:/WINDOWS/Application Data/Microsoft/Internet Explorer/Quick Launch/显示桌面.scf','',nil,0);
end;
 
不用系统的"显示桌面.scf"可以实现吗??
 
向系统发送WINDOW+M键同时按下的消息
 
icysword:
你写得代码我试过了,果然不行的。想不出原因
一个笨办法,找到所有窗口,然后隐藏它们
 
向所有Application发送最小化消息
 
但是那样的效果不好,可以看到一个个窗口慢慢地最小化的过程。

有人知道 window+M 这个按键是怎么定义的?
 
可是那些游戏修改器就是能实现, 呵,~! 真厉害哦. 不知道是怎样实现的.
就算游戏按ALT+TAB, CTRL+ESC这些系统键不能切换到桌面, 它都能使游戏最小化, 并显示桌面.
---------
有谁知道是怎样实现的吗??
 
游戏进入的 全屏 Dos 方式,很容易实现的。
 
不是游戏啊, 我是指游戏修改器是为什么又能使全屏的游戏在运行中弹出到桌面, 是怎么实现的??
 
顶一下. 有人知道吗?
 
就是用WIN+M吧
 
用WIN+M 吗??
但如果游戏限制了这些系统热键呢??
用过FPE或金山游侠的朋友应该很清楚, 不管游戏是否限制诸如ALT+TAB, CTRL+ESC, WIN这些
系统热键, 它都能弹出桌面, .
所以, 我想除了WIN+M, 应该还有其它的方法, 请高手指点... 谢谢.
 
现在系统 Shell 都集成了 IE,估计和IE有关。可能给IE指定命令行参数执行的。
其实从这个文件‘显示桌面.scf'也可以看出一些迹象。
既然微软的默认方式,我不知道不这样用的理由是什么,
而且你可以拷贝到其它地方去执行。
 
那怎样才能实现呢?
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Keybd_event(VK_LWIN, 0, 0, 0);
Keybd_event(Byte('M'), 0, 0, 0);
Keybd_event(Byte('M'), 0, KEYEVENTF_KEYUP, 0);
Keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
h: HWnd;
begin
h := Handle;
while h > 0 do
begin
if IsWindowVisible(h) then
PostMessage(h, WM_SYSCOMMAND, SC_MINIMIZE, 0);
h := GetNextWindow(h, GW_HWNDNEXT);
end;
end;
 
用钩子吧,把你要用的热键消息钩住不就行了。
 
用钩子行吗? 响应了钩子热键, 也弹不出桌面啊.
 
后退
顶部