1. #include <Windows.h>
  2. /*
  3. * === FUNCTION ======================================================================
  4. * Name: LeftClick
  5. * Description: 左键按下消息
  6. * =====================================================================================
  7. */
  8. void LeftClick ( )
  9. {
  10. INPUT Input={0};
  11. // left down
  12. Input.type = INPUT_MOUSE;
  13. Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
  14. ::SendInput(1,&Input,sizeof(INPUT));
  15.  
  16. // left up
  17. ::ZeroMemory(&Input,sizeof(INPUT));
  18. Input.type = INPUT_MOUSE;
  19. Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
  20. ::SendInput(1,&Input,sizeof(INPUT));
  21. }
  22. /*
  23. * === FUNCTION ======================================================================
  24. * Name: RightClick
  25. * Description: 右键按下消息
  26. * =====================================================================================
  27. */
  28. void RightClick ( )
  29. {
  30. INPUT Input={0};
  31. // right down
  32. Input.type = INPUT_MOUSE;
  33. Input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
  34. ::SendInput(1,&Input,sizeof(INPUT));
  35.  
  36. // right up
  37. ::ZeroMemory(&Input,sizeof(INPUT));
  38. Input.type = INPUT_MOUSE;
  39. Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;
  40. ::SendInput(1,&Input,sizeof(INPUT));
  41. }
  42.  
  43. /*
  44. * === FUNCTION ======================================================================
  45. * Name: 鼠标移动消息
  46. * Description:
  47. * =====================================================================================
  48. */
  49. void MouseMove (int x, int y )
  50. {
  51. double fScreenWidth = ::GetSystemMetrics( SM_CXSCREEN )-1;
  52. double fScreenHeight = ::GetSystemMetrics( SM_CYSCREEN )-1;
  53. double fx = x*(65535.0f/fScreenWidth);
  54. double fy = y*(65535.0f/fScreenHeight);
  55. INPUT Input={0};
  56. Input.type = INPUT_MOUSE;
  57. Input.mi.dwFlags = MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE;
  58. Input.mi.dx = fx;
  59. Input.mi.dy = fy;
  60. ::SendInput(1,&Input,sizeof(INPUT));
  61. }
  62. int main(){
  63.  
  64. while(true)
  65. {
  66. MouseMove(0,100);
  67.  
  68. Sleep(5000);
  69.  
  70. MouseMove(200,0);
  71.  
  72. Sleep(5000);
  73.  
  74. }
  75. //RightClick ( );
  76. //LeftClick ( );
  77. return 0;
  78. }

  以上是使用sendinput函数

以下是使用keybd_event函数

  1. //#include <Windows.h>
  2. #include <afxwin.h>
  3.  
  4. int main()
  5. {
  6.  
  7. //CWnd *pWnd = CWnd::FromHandle(FindWindow("ConsolWindowClass", NULL)); GetConsoleWindow(void);
  8. CWnd *pWnd = CWnd::FromHandle(GetConsoleWindow()); //本控制台程序发送按键消息
  9. if (pWnd->GetSafeHwnd())
  10. {
  11. pWnd->ShowWindow(SW_NORMAL);
  12. pWnd->SetForegroundWindow();
  13. //keybd_event(VK_CONTROL, 0, 0 ,0);
  14. keybd_event('E', 0, 0 ,0);
  15. keybd_event('E', 0, KEYEVENTF_KEYUP ,0);
  16.  
  17. //keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP,0);
  18. }
  19. return 0;
  20. }

  demo

  1. /*
  2. * =====================================================================================
  3. *
  4. * Filename: get_message.cpp
  5. *
  6. * Description: 子线程产生按键消息,主线程等待输入,并输出
  7. *
  8. * Version: 1.0
  9. * Created: 2013/10/1 10:33:36
  10. * Revision: none
  11. * Compiler: gcc
  12. *
  13. * Author: @礼杨_HDU, yuliyang@qq.com
  14. * Organization:
  15. *
  16. * =====================================================================================
  17. */
  18.  
  19. #include <iostream>
  20. #include <Windows.h>
  21. using namespace std;
  22. DWORD WINAPI ThreadFunction(LPVOID lpParameter)
  23. {
  24. printf("in thread......");
  25. while (TRUE){
  26. //your code
  27.  
  28. INPUT Input1 = { };
  29. Input1.type = INPUT_KEYBOARD;
  30. Input1.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
  31. Input1.ki.wVk = 0x30; //
  32. SendInput( , &Input1, sizeof( INPUT ) );
  33. INPUT Input2 = { };
  34. Input2.type = INPUT_KEYBOARD;
  35. Input2.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
  36. Input2.ki.wVk = 0x0d; // 回车
  37. SendInput( , &Input2, sizeof( INPUT ) );
  38.  
  39. Sleep();
  40.  
  41. Input1.type = INPUT_KEYBOARD;
  42. Input1.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
  43. Input1.ki.wVk = 0x31; //
  44. SendInput( , &Input1, sizeof( INPUT ) );
  45.  
  46. Input2.type = INPUT_KEYBOARD;
  47. Input2.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
  48. Input2.ki.wVk = 0x0d; // 回车
  49. SendInput( , &Input2, sizeof( INPUT ) );
  50. }
  51. return true;
  52. }
  53.  
  54. int main(){
  55. HANDLE hT=CreateThread(NULL,,ThreadFunction,NULL,,NULL);
  56.  
  57. char m_char;
  58.  
  59. while (cin>>m_char)
  60. {
  61. printf("%c\n",m_char);
  62. }
  63. return ;
  64.  
  65. }

C++模拟键盘鼠标消息的更多相关文章

  1. (转)C#模拟键盘鼠标事件

    原文 1.模拟键盘事件System.Windows.Forms.SendKeys以下是   SendKeys   的一些特殊键代码表.     键   代码       BACKSPACE   {BA ...

  2. 判断软件的闲置时间(使用Application.OnMessage过滤所有键盘鼠标消息)

    GetLastInputInfo是检测系统输入的,应用到某个程序中不合适! 此问题有二种解法来监控输入消息: 1.用线程级HOOK,钩上MOUSEHOOK与KEYBOARDHOOK 2.在Applic ...

  3. 在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件(转)

    引言 这两天沉迷了Google SketchUp,刚刚玩够,一时兴起,研究了一下WebBrowser. 我在<WebBrowser控件使用技巧分享>一文中曾谈到过“我现在可以通过WebBr ...

  4. Android查询:模拟键盘鼠标事件(adb shell 实现)

    1. 发送键盘事件: 命令格式1:adb shell input keyevent “value” 其中value以及对应的key code如下表所列: KeyEvent Value KEYCODE ...

  5. C# winform 模拟键盘鼠标操作

    1.获取鼠标位置 private void timer1_Tick(object sender, EventArgs e) { // timer1.Stop(); // int x = Control ...

  6. C#模拟键盘鼠标事件 SendKeys 的特殊键代码表(转)

    使用 SendKeys 将键击和组合键击发送到活动应用程序.此类无法实例化.若要发送一个键击给某个类并立即继续程序流,请使用 Send.若要等待键击启动的任何进程,请使用 SendWait. 每个键都 ...

  7. C++模拟键盘消息

    实现功能:在现有DLL程序中向特定的EXE窗口中发送模拟键盘的消息 使用API根据窗口标题递归查找特定的窗口句柄,之后模拟调用. 注意:keybd_event函数不能在VS下使用,所以用SendInp ...

  8. C# winform 加载网页 模拟键盘输入自动接入访问网络

    声明: 本文原创,首发于博客园 http://www.cnblogs.com/EasyInvoice/p/6070563.html 转载请注明出处. 背景: 由于所在办公室网络限制,笔者每天都使用网络 ...

  9. 【转】C# winform 加载网页 模拟键盘输入自动接入访问网络

    [转]C# winform 加载网页 模拟键盘输入自动接入访问网络 声明: 本文原创,首发于博客园 http://www.cnblogs.com/EasyInvoice/p/6070563.html  ...

随机推荐

  1. 滚珠菜单动效-b

    原型从网上找的,动效使用了CAAnimation和UIDynamic物理引擎.  gitHub  :https://github.com/BearRan/FlowMenuAnimation 大致步骤如 ...

  2. C# DateTime和DateTime?格式化时间

    DateTime: <%= Model.CreateTime.ToString("yyyy年MM月dd日 H时m分s秒")%>   DateTime?: <%= ...

  3. hdu 4712 Hamming Distance(随机函数暴力)

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...

  4. E437: terminal capability "cm" required

    执行 vi 的时候出现:E437: terminal capability "cm" required 临时解决: export TERM=xterm

  5. js页面刷新一次

    // var str = document.location.hash, // index = str.indexOf("#"); // if(index == 0){ // wi ...

  6. Ubuntu的挂起和休眠

    Ubuntu的挂起和休眠 之前一直没关注过这方面的信息,因为以前只是在台式机上面用Ubuntu,笔记本一直都是Windows.随着Windows越来越傻冒,最近决定将常用系统转为Ubuntu,才注意到 ...

  7. Android 控制ScrollView滚动到底部

    scrollView.fullScroll(ScrollView.FOCUS_DOWN);滚动到底部 scrollView.fullScroll(ScrollView.FOCUS_UP);滚动到顶部 ...

  8. EXPORT_SYMBOL的作用是什么

    http://www.cnblogs.com/riskyer/p/3221805.html EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动 导入到 ...

  9. javaweb学习总结(四十七)——监听器(Listener)在开发中的应用

    监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听 ...

  10. thinkphp框架 中 ajax 的应用

    在thinkphp中,内置了ajax的方法,即: ajaxReturn("data","info","status"); data:传递的数 ...