鱼C论坛

 找回密码
 立即注册
查看: 1738|回复: 0

[技术交流] C语言中一些常用的控制台的API使用方法

[复制链接]
发表于 2019-3-28 20:04:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
控制台窗口设置
  1. system("title XXX");
  2. sysytem("mode con cols=100 lines=40");
复制代码


启动时切换英文输入法
  1. keybd_event(VK_SHIFT,0,0,0);
  2. Sleep(100);
  3. keubd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
复制代码


播放声音音效
  1. #include<windows.h>
  2. #pragma comment(lib,"winmm.lib")
  3. //可以是相对地址,
  4. PlaySoundA("\\start.wav",NULL,SND_FILENAME|SND_ASYNC|SND_NODEFAULT);
  5. //结束播放
  6. PlaySound(NULL, NULL, SND_PURGE);
复制代码


设置光标
  1.         /*
  2.         0=黑色,   8=灰色,
  3.         1=蓝色,   9=淡蓝色,
  4.         2=绿色,   A=淡绿色,
  5.         3=湖蓝色, B=淡浅绿色,
  6.         4=红色,   C=淡红色,
  7.         5=紫色,   D=淡紫色,
  8.         6=黄色,   E=淡黄色,
  9.         7=白色,   F=亮白色
  10.         */
  11. HANDLE hstd = GetStdHandle(STD_OUTPUT_HANDLE);
  12. //设置光标位置
  13. COORD pos = {x,y};
  14. SetConsoleCursorPosition(hstd,pos);
  15. //光标可见性,true为可见,false为不可见,第一个元素为光标大小
  16. CONSOLE_CURSOR_INFO cci = { 1,FALSE };
  17. SetConsoleCursorInfo(winhandle, cci);
  18. //设置文本颜色
  19. SetConsoleTextAttribute(hstd,color);
复制代码


键盘事件和鼠标事件
  1. void WriteChar(short x, short y, const char *pStr, WORD color = 1 | 8);
  2. void OutputPos(int nx, int ny);
  3. void KeyEventProc(KEY_EVENT_RECORD ker);
  4. void MouseEventProc(MOUSE_EVENT_RECORD mer);
  5. int MessageLoop();

  6. int main()
  7. {
  8.         MessageLoop();
  9.         getchar();
  10.         return 0;
  11. }

  12. //调整光标位置,输出消息
  13. void WriteChar(short x, short y, const char * pStr, WORD color)
  14. {
  15.         COORD pos = { x * 2,y };
  16.         HANDLE hOutStd = GetStdHandle(STD_OUTPUT_HANDLE);
  17.         SetConsoleCursorPosition(hOutStd, pos);
  18.         SetConsoleTextAttribute(hOutStd,color);
  19.         printf("%s", pStr);
  20. }

  21. //用来输出鼠标移动信息
  22. void OutputPos(int nx, int ny)
  23. {
  24.         char szBuf[100] = { 0 };
  25.         sprintf_s(szBuf, sizeof(szBuf), "x=%2d,y=%2d", nx / 2, ny);
  26.         SetConsoleTitleA(szBuf);
  27.         WriteChar(0, 0, szBuf, 0x50);
  28. }

  29. //用来看键盘事件
  30. void KeyEventProc(KEY_EVENT_RECORD ker)
  31. {
  32.         if (ker.bKeyDown)
  33.                 WriteChar(0, 0, "键盘按下", 0x50);
  34.         else
  35.                 WriteChar(0, 0, "键盘弹起", 0x50);
  36. }

  37. //用来看鼠标事件
  38. //查看鼠标事件时,需要把控制台属性中快速编辑和插入的选项去掉
  39. void MouseEventProc(MOUSE_EVENT_RECORD mer)
  40. {
  41.         switch (mer.dwEventFlags)
  42.         {
  43.         case 0:
  44.                 if (mer.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
  45.                 {
  46.                         WriteChar(0, 0, "左键单击", 0x50);
  47.                 }
  48.                 else if (mer.dwButtonState == RIGHTMOST_BUTTON_PRESSED)
  49.                 {
  50.                         WriteChar(0, 0, "右键单击", 0x50);
  51.                 }
  52.          break;
  53.         case DOUBLE_CLICK:
  54.                 WriteChar(0, 0, "双击", 0x50);
  55.                 break;
  56.         case MOUSE_MOVED:
  57.                 OutputPos(mer.dwMousePosition.X, mer.dwMousePosition.Y);
  58.                 break;
  59.         }
  60. }


  61. //事件循环查看
  62. int MessageLoop()
  63. {
  64.         HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
  65.         INPUT_RECORD stcRecord = { 0 };
  66.         DWORD dwRead;
  67.         SetConsoleMode(hStdin, ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT);
  68.         while (1)
  69.         {
  70.                 ReadConsoleInput(hStdin, &stcRecord, 1, &dwRead);
  71.                 if (stcRecord.EventType == KEY_EVENT)
  72.                 {
  73.                         KeyEventProc(stcRecord.Event.KeyEvent);
  74.                 }
  75.                 else if (stcRecord.EventType == MOUSE_EVENT)
  76.                 {
  77.                         MouseEventProc(stcRecord.Event.MouseEvent);
  78.                 }
  79.         }
  80.         return 0;
  81. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 23:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表