如何获取“显示桌面”事件

bclife 2007-10-15 06:31:18
如何获取用户点击 显示桌面 那个按钮事件
...全文
523 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yurenchen 2012-10-23
  • 打赏
  • 举报
回复
楼主啊,最后怎么弄的啊?

还是把窗口嵌入桌面了?
bclife 2007-10-24
  • 打赏
  • 举报
回复
多谢16楼的回答
但是你理解错了
我要的是在显示桌面事件发生后获取消息
不是发送显示桌面消息
凌枫 2007-10-23
  • 打赏
  • 举报
回复
楼上说了,最笨的一种方法,虚拟键盘去按Win+M键(显示桌面)
void CDataTranslateDlg::OnBnClickedButton6()
{
::keybd_event(VK_LWIN,0,0,0);//按Win,不放开
::keybd_event(77,0,0,0);//M key;再按M键不放开
::keybd_event(77,0,KEYEVENTF_KEYUP,0);//放开M键
::keybd_event(VK_LWIN,0,KEYEVENTF_KEYUP,0);//放开Win键
}
SoftUI 2007-10-17
  • 打赏
  • 举报
回复
看看Win2000的代吗,或许能找到线索(用VS搜索相关的关键字),祝好运!
Prince_vegeta 2007-10-17
  • 打赏
  • 举报
回复
test:
#include <windows.h>
#include <shldisp.h>
int main ()
{
CoInitialize (0);
IShellDispatch4 *pdisp = NULL;
CoCreateInstance(CLSID_Shell, NULL, CLSCTX_ALL, __uuidof (IShellDispatch4), (void**)&pdisp);
pdisp->ToggleDesktop (); //这句是用来切换桌面的
pdisp->Release();
CoUninitialize();
};
注意这个 IShellDispatch4接口只有WINDOWS XP以上的操作系统才支持。要求shell32.dll 5.0及以上版本
bclife 2007-10-17
  • 打赏
  • 举报
回复
还是没解决
liwei84516 2007-10-16
  • 打赏
  • 举报
回复
学习
good_worker 2007-10-16
  • 打赏
  • 举报
回复
#include <objbase.h>

void Ctest2Dlg::OnBnClickedButton1()
{
IShellDispatch * lpDisp;
IShellDispatch4 * lpDisp4;

CoInitialize(NULL);

CoCreateInstance(CLSID_Shell, NULL, CLSCTX_SERVER, IID_IDispatch, (void **)&lpDisp);

lpDisp->QueryInterface(__uuidof(IShellDispatch4), (void **)&lpDisp4);

lpDisp4->ToggleDesktop();

CoUninitialize();
}
实验通过
wjkgz 2007-10-16
  • 打赏
  • 举报
回复
换一个思路,你要得到显示桌面的消息很困难,但是在显示桌面的时候,会给你的程序发送最小化的消息的吧。
kbh1984 2007-10-16
  • 打赏
  • 举报
回复
HWND desktop=::FindWindow(NULL,"Program Manager");
if(desktop!=NULL)
{
::ShowWindow(desktop,SW_HIDE);
}
这个隐藏桌面;
然后在执行
HWND desktop=::FindWindow("Progman",NULL);
if(desktop!=NULL)
{
::ShowWindow(desktop,SW_SHOW);
}
隐藏的桌面就会显示了
也可以利用注册表实现显示桌面
HKEY sub;
DWORD data=0;
CString skey="Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer";
::RegCreateKey(HKEY_CURRENT_USER,skey,&sub);
RegSetValueEx(sub,"nodesktop",NULL,REG_DWORD,(BYTE*)&data,sizeof(DWORD));
RegCloseKey(sub);
bclife 2007-10-16
  • 打赏
  • 举报
回复
多谢6楼的提示
但是不明白6楼的意思
能帮我解释一下么
我把这段程序放到我那里面没效果啊
cooleditpro 2007-10-16
  • 打赏
  • 举报
回复
一种最笨的方法就是向程序发送win+m健信息,因为只要按下键盘下的win+m健就回显示桌面的!
kbh1984 2007-10-15
  • 打赏
  • 举报
回复
HWND desktop=::FindWindow("Progman",NULL);
if(desktop!=NULL)
{
::ShowWindow(desktop,SW_SHOW);
}
bclife 2007-10-15
  • 打赏
  • 举报
回复
多谢4喽理解我的意思
但是我还是想用VC实现
你那方法好像不行吧
Yofoo 2007-10-15
  • 打赏
  • 举报
回复
楼主要得是得到事件, 不是调用

调用用IShellDispatch4的
IShellDispatch4.ToggleDesktop()

怀疑系统没这个事件
hcy1906 2007-10-15
  • 打赏
  • 举报
回复
汗,被2楼的抢先了一步。。。
还好我的也不是什么好方法。
hcy1906 2007-10-15
  • 打赏
  • 举报
回复
不懂,不过如果你要自己创建一个“显示桌面”的事件,我倒有个主意:
把以下字符串写入一个后缀为SCF的文本文件中(ANSI编码):
“[Shell]\nCommand=2\nIconFile=explorer.exe,3\n[Taskbar]\nCommand=ToggleDesktop\n”
也许从这行字符串中你能得到什么启发呢。。。
pzp_7676 2007-10-15
  • 打赏
  • 举报
回复
没有找到相应的方法,只好自己采用一种笨方法了。就是写一个脚本文件,然后执行 。

显示桌面的命令不多,文件式为scf文件。高手看了不要笑 。。。。。

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
FILE *f; //记得要 #include
String filename="dest.scf";
f=fopen(filename.c_str(),"w");
fprintf(f,"[Shell]\nCommand=2\nIconFile=explorer.exe,3\n[Taskbar]\nCommand=ToggleDesktop");
fclose(f);
if(FileExists(filename))
{
ShellExecute(this->Handle,"Open",filename.c_str(),NULL,NULL,SW_SHOW);
DeleteFile(filename);
}
}
//---------------------------------------------------------------------------

PS: 在完成某个工程时突然间想到了模拟按键这个概念,于是就写了2句代码,实现了显示桌面的功能。代码如下:

void __fastcall TForm1::Button1Click(TObject *Sender)
{ //显示桌面,利用模拟按钮事件
keybd_event(91,MapVirtualKey(91,0),0,0);
keybd_event(68,MapVirtualKey(68,0),0,0);
keybd_event(68,MapVirtualKey(68,0),KEYEVENTF_KEYUP,0);
keybd_event(91,MapVirtualKey(91,0),KEYEVENTF_KEYUP,0);
}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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