回家念经(kv300)--编程之禅

程序不过是梦,生于无形无象的禅中,我们只是那做梦的人。

用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
kvw3000的公告
<EMBED SRC=http://www.clocklink.com/Clocks/0001-Blue.swf?TimeZone=CCT WIDTH=165 HEIGHT=165 wmode=transparent quality=high loop=true menu=false> </br>个人简介</br> 网名:回家念经(kv300)</br> QQ:107336063</br> <SMALL>MSN:<A href="mailto:wjt2000@etang.com" >kvw3000@hotmail.com</A></SMALL></br></br> 来自:西安</br> ------------------------</br> 访问量: <script language=JavaScript src="http://laoan.com/counters/count.php?kvw3000"></script></br> ------------------------ <p><b>今日天气</b><br> <center><iframe width=157 height=240 frameborder=0 scrolling=NO src='http://appnews.qq.com/cgi-bin/news_qq_search?city='></iframe></center> <SCRIPT language=Javascript> { window.status = "回家念经欢迎您的光临!" } </SCRIPT>
文章分类
友情链接
CSDN技术社区
jiangsheng的专栏
Nicrosoft's Blog
VC知识库
回家念经相册
我在CSDN发表的文章
猫扑
西北工业大学
存档

原创  玩转keybd_event 收藏

玩转keybd_event

        模拟键盘平时不是很常用, 但是当调用某些快捷键执行某项功能时, 它真的是那么的方便呀.  你不信?  看看下面的实现, 你就会大呼: 为什么不早点告诉我?  呵呵,  原来没有blog呀,  都靠这些挣分呢.

1) 显示桌面:

         很多软件有显示桌面的功能, 并且大家的方法都是遍历窗口,  然后让它们最小化, 其实 win系统给咱们了一个非常方便的WIN键(就是键盘上在CTRL键和ALT键之间的那个带win标志的按键), 利用它, 可以轻松的完成显示桌面的功能.

    keybd_event(VK_LWIN, 0, 0 ,0);
    keybd_event('M', 0, 0 ,0);
    keybd_event('M', 0, KEYEVENTF_KEYUP ,0);
    keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);

其他的操作也类似, 比如直接显示开始的运行,就把上面的'M'换成'R'即可。

直接    keybd_event(VK_LWIN, 0, 0 ,0);
            keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);

直接显示“开始”对话框了。

2) 实现快速的全选

        很多的时候,比如listctrl实现全选,你可以用listctrl循环设置每一项的状态为选中,多罗索的事情呀。用快捷键试一试CTRL+A,其他的快捷键一样的用法,呵呵,你知道怎么办了吧?

    keybd_event(VK_CONTROL, (BYTE)0, 0 ,0);
    keybd_event('A',(BYTE)0, 0 ,0); //此处可以用  'A', (BYTE)65, 用'a'不起作用.
    keybd_event('A', (BYTE)0, KEYEVENTF_KEYUP,0);
    keybd_event(VK_CONTROL, (BYTE)0, KEYEVENTF_KEYUP,0);

3) 执行某些特殊的键,比如数字键,大小写,下面是数字键的例子

    bool bState=true;   //true为按下NumLock,false反之
    BYTE keyState[256];
   
    GetKeyboardState((LPBYTE)&keyState);
    if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
        (!bState && (keyState[VK_NUMLOCK] & 1)) )
    {
        // Simulate a key press
        keybd_event( VK_NUMLOCK,
            0x45,
            KEYEVENTF_EXTENDEDKEY | 0,
            0 );
       
        // Simulate a key release
        keybd_event( VK_NUMLOCK,
            0x45,
            KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
            0);
    }

4) 你想CTRL+ALT+DELETE三键一起按下,

    keybd_event(VK_CONTROL, 0, 0 ,0);
    keybd_event(VK_MENU,0, 0 ,0);
    keybd_event(VK_DELETE,0, 0 ,0);

    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP ,0);
    keybd_event(VK_MENU,0, KEYEVENTF_KEYUP ,0);
    keybd_event(VK_DELETE,0, KEYEVENTF_KEYUP ,0);
呵呵,这样不会成功呀,因为这几个键直接是操作系统来截获执行的,而模拟键盘只能发向应用程序,所以这种方法不行的(想显示锁定对话框,用    LockWorkStation();)

5) Window2000/NT/XP已经不提倡用这个函数了,上面的方法只是为了让大家开阔一下思路,怎么替代呢,呵呵,看下面,所以上面的所有代码都可以用这个来完成

   //2000下用这个代替 ,包含 "winable.h"
    INPUT input[4];
    memset(input, 0, sizeof(input));

    input[0].type = input[1].type = input[2].type = input[3].type = INPUT_KEYBOARD;

    input[0].ki.wVk  = input[3].ki.wVk = VK_LWIN;
    input[1].ki.wVk  = input[2].ki.wVk = 'R';

   
    //接下来释放它,这一点很重要。
    input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;
    input[0].ki.time = input[1].ki.time = input[2].ki.time = input[3].ki.time = GetTickCount();

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

感觉比那个有点罗索,呵呵。

====================

附WIN键的部分快捷键:

WIN键+D=快速的切到桌面,再次点击返回

WIN键+E=快速打开资源管理器

WIN键+R=“运行”。

WIN键+M=全部视窗最小化。

WIN键+Shift+M=取消全部视窗最小化。

WIN键+F1=Help。

WIN键+F=“寻找”。

WIN键+Ctrl+F=显示“查找电脑”。

WIN键+Tab=切换工作列的程式。

WIN键+Break=显示系统内容。

发表于 @ 2005年06月22日 17:13:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:爱的痛了 痛的哭了 | 新一篇:利用 HeartBeat 实现双机热备的网关接入

  • 发表评论
  • 评论内容:
  •  
Copyright © kvw3000
Powered by CSDN Blog