lhzh114
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2008-12-27
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望37点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
阅读:2364回复:11

如何 实现 资源管理器 菜单中 刷新 功能

楼主#
更多 发布于:2005-04-26 15:07
我想实现 对 资源管理器 刷新功能,就是按 F5 键的效果,用以下方法都不成功:
1、 发送消息模拟 F5
hwnd = FindWindow(\"ExploreWClass\",NULL);
SendMessage(hwnd,WM_KEYDOWN,0x74,0);
SendMessage(hwnd,WM_KEYUP,0x74,0);

2、 // Simulate a key release
keybd_event( 0x74, 0, 0, 0 );
keybd_event( 0x74, 0,KEYEVENTF_KEYUP, 0);

3、使用 SendInput

INPUT input[2];

memset(input, 0, sizeof(input));
input[0].type = input[1].type =INPUT_KEYBOARD;
input[0].ki.wVk = input[1].ki.wVk= VK_F5;

input[0].ki.dwFlags = 0;
input[1].ki.dwFlags = KEYEVENTF_KEYUP;

input[0].ki.time = input[1].ki.time = GetTickCount();

SendInput(2, input, sizeof(INPUT));

那为高人能够指点?偶刚用VC不久
 
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-26 15:34
SetActiveWindow\\SetForegroundWindow\\BringWindowToTop\\SetWindowPos.
你挑一个试试,再/或调用SetFocus.

[编辑 -  4/26/05 by  maqian]
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-26 17:10
有空,给你试了一下.代码如下.
HWND h = FindWindow( \"ExploreWClass\", NULL );

::SetWindowPos( h, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE );
keybd_event( 0x74, 0, 0, 0 );

注:SetForegroundWindow\\BringWindowToTop也可以.SetActiveWindow不行.你的第一种方法肯定不行,原因可自己找书看.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
lhzh114
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2008-12-27
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望37点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-26 18:03
多谢啊!

我建立了win32 console 程序:

HWND h = FindWindow( \"ExploreWClass\", NULL );

::SetWindowPos( h, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE );
keybd_event( 0x74, 0, 0, 0 );
keybd_event( 0x74, 0,KEYEVENTF_KEYUP, 0);

BUILD 后 在资源管理器中执行 exe 还是不幸!为什么?
还需要别的吗?
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-04-27 08:51
用SetForegroundWindow就行了.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
hz_linuxer
驱动牛犊
驱动牛犊
  • 注册日期2005-01-11
  • 最后登录2005-04-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-04-27 09:10
he
lhzh114
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2008-12-27
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望37点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-04-27 09:47
HWND h = FindWindow( \"ExploreWClass\", NULL );

SetForegroundWindow( h);

keybd_event( 0x74, 0, 0, 0 );
keybd_event( 0x74, 0,KEYEVENTF_KEYUP, 0);

你试过吗? 我这样用还是不幸! :(
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-04-27 10:17
没办法了,只好出绝招,请看:
HWND h = FindWindow( \"ExploreWClass\", NULL );

SetForegroundWindow( h);
Sleep(100);:)
keybd_event( 0x74, 0, 0, 0 );
keybd_event( 0x74, 0,KEYEVENTF_KEYUP, 0);
 搞定收功.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
lhzh114
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2008-12-27
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望37点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-04-27 11:33

怎么还不幸?
发个exe 过来如何?
lhzh114@yahoo.com.cn

QQ:50994497
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-04-27 12:12
服了你,我连Sleep这样宫廷名医的祖传秘方都给你用上还不行,真TM不幸.
我把项目发给你吧.你确定是资源管理器?你调试看hWnd的值是否正确.再不行你看看Sleep(200,300,400...行不行.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-04-27 12:37
你写个没窗口的普通程序,不早就解决了.干嘛非要控制台程序?
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
lhzh114
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2008-12-27
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望37点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-04-27 14:31
 多谢你啊!不厌其烦多次解释,给分了!

我是了 Sleep(1000) 还是不幸才问的。

原来是他吗的 控制台程序 的问题!
游客

返回顶部