控制台中使用热键的问题

jurchine 2012-11-14 11:39:42

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
RegisterHotKey( 0, 100, NULL, VK_HOME);

MSG msg;

while( GetMessage( &msg, 0, 0, 0 ))

{
switch( msg.message )
{
case WM_HOTKEY:
printf( " you press hot key " );

return TRUE;
}
return TRUE;
}

UnregisterHotKey( 0, 100 );
getchar();
return 0;
}




我想在控制台中使用热键。成功是成功了。但是只能运行一次。

比如按下 HOME 键。 它会打印 you press hot key

但是,再按一下HOME键。程序就退出了。。

我想让程序不退出,一直可以响应 hotkey 消息
...全文
548 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alexander 2012-11-14
  • 打赏
  • 举报
回复
引用 2 楼 anhuizhuanjiao 的回复:
上面的还有点问题 C/C++ code?12345678910111213while( GetMessage( &msg, 0, 0, 0 )) { switch( msg.message ) { case WM_HOTKEY: printf( " you press h……
+1 要注意的是:switch块末分支加break是没有意义的(一般在优化编译模式会直接被编译器pass),直接去掉就好:

    while(GetMessage(&msg,0,0))
        if(msg.message==WM_HOTKEY)
            printf(" you press hot key \n");
漫步者、 2012-11-14
  • 打赏
  • 举报
回复
引用 楼主 jurchine 的回复:
C/C++ code?1234567891011121314151617181920212223242526272829#include <stdio.h>#include <stdlib.h>#include <windows.h> int main(){ RegisterHotKey( 0, 100, NULL, VK_HOME); MSG msg; ……
循环里面用个break,代替掉return;
转角天边 2012-11-14
  • 打赏
  • 举报
回复
上面的还有点问题

while( GetMessage( &msg, 0, 0, 0 ))
  
    {
        switch( msg.message )
        {
            case WM_HOTKEY:
                printf( " you press hot key " );
  
                break;//这里换成break
        }
  //   return TRUE;
    }
转角天边 2012-11-14
  • 打赏
  • 举报
回复

 while( GetMessage( &msg, 0, 0, 0 ))
 
    {
        switch( msg.message )
        {
            case WM_HOTKEY:
                printf( " you press hot key " );
 
                return TRUE;
        }
  //   return TRUE;
    }
把这条return去掉,不然程序直接return了

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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