1. #include <windows.h>
  2.  
  3. int main()
  4. {
  5. HWND parentHwnd, childHwnd;
  6. INPUT input[4];
  7. parentHwnd = FindWindow(TEXT("Notepad"), NULL);
  8. if (parentHwnd)
  9. {
  10. childHwnd = FindWindowEx(parentHwnd, NULL, TEXT("Edit"), NULL);
  11. if (childHwnd)
  12. {
  13. for (int i = 0; i < 10; i++)
  14. {
  15. SendMessage(childHwnd, WM_CHAR, 'A', 0);
  16. }
  17.  
  18. SetForegroundWindow(parentHwnd);
  19.  
  20. //CTRL+S
  21. memset(input, 0, sizeof(input));
  22. input[0].type = input[1].type = input[2].type = input[3].type = INPUT_KEYBOARD;
  23. input[0].ki.wVk = input[2].ki.wVk = VK_CONTROL;
  24. input[1].ki.wVk = input[3].ki.wVk = 0x53;
  25. input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;
  26. SendInput(4, input, sizeof(INPUT));
  27.  
  28. //ALT+F4
  29. memset(input, 0, sizeof(input));
  30. input[0].type = input[1].type = input[2].type = input[3].type = INPUT_KEYBOARD;
  31. input[0].ki.wVk = input[2].ki.wVk = VK_MENU;
  32. input[1].ki.wVk = input[3].ki.wVk = VK_F4;
  33. input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;
  34. SendInput(4, input, sizeof(INPUT));
  35.  
  36. }
  37. }
  38. return 0;
  39. }
  40.  
  41. /*
  42. 发送字符串
  43. TCHAR *str = TEXT("Hello World");
  44. SendMessage(childHwnd, WM_SETTEXT, 0, (LPARAM)str);
  45.  
  46. 腾讯QQ
  47. FindWindow(TEXT("TXGuiFoundation"), TEXT("N3verL4nd"));
  48.  
  49. */
  50.  
  51. /*
  52. POINT pt;
  53. char *str = "Hello World";
  54. while (1)
  55. {
  56. Sleep(1000);
  57. GetCursorPos(&pt);
  58. //hwnd = WindowFromPoint(pt);
  59. hwnd = FindWindow(TEXT("Notepad"), NULL);
  60. SendMessage(hwnd, WM_CHAR, (WPARAM)'G', NULL);
  61. }
  62. */

实现操作:向已经打开的记事本写入数据,保存(CTRL+S),关闭(ALT+F4)。

尝试用SendMessage发送组合键,没有得到解决办法。

如果我们获取QQ窗口的HWND,那么我们就可以自动发消息了。

  1. int main()
  2. {
  3. HWND hwndTX, hwndConsole;
  4. INPUT input[4];
  5. hwndConsole = GetConsoleWindow();
  6. hwndTX = FindWindow(TEXT("TXGuiFoundation"), TEXT("N3verL4nd"));
  7. if (hwndTX != NULL)
  8. {
  9. for (int i = 0; i < 10; i++)
  10. {
  11. SendMessage(hwndTX, WM_CHAR, 'A', 0);
  12. }
  13.  
  14. SetForegroundWindow(hwndTX);
  15. memset(input, 0, sizeof(input));
  16. input[0].type = input[1].type = input[2].type = input[3].type = INPUT_KEYBOARD;
  17. input[0].ki.wVk = input[2].ki.wVk = VK_MENU;
  18. input[1].ki.wVk = input[3].ki.wVk = 0x53;
  19. input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;
  20. SendInput(4, input, sizeof(INPUT));
  21. SetForegroundWindow(hwndConsole);
  22. }
  23. else
  24. {
  25. puts("not found");
  26. }
  27. return 0;
  28. }

SendInput模拟键盘操作的更多相关文章

  1. SendInput模拟键盘输入的问题

    SendInput模拟键盘输入的问题  http://www.cnblogs.com/yedaoq/archive/2010/12/30/1922305.html 最近接触到这个函数,因此了解了一下, ...

  2. wshShell.SendKeys模拟键盘操作

    Dim wshShellSet wshShell = CreateObject("Wscript.Shell")wshShell.SendKeys "{ENTER}&qu ...

  3. firefox下载文件弹出框之终极解决方案-vbs模拟键盘操作

    由于近期一直被firefox的保存文件弹出框困扰,摸索尝试过几种方法,已有的方法可以跑通但是对对效果不太满意,因此一直在寻找合适的解决办法. 最近发现了也可以通过VBS来处理弹出框,速度也不错,其原理 ...

  4. Python+Selenium自动化-模拟键盘操作

    Python+Selenium自动化-模拟键盘操作   0.导入键盘类Keys() selenium中的Keys()类提供了大部分的键盘操作方法:通过send_keys()方法来模拟键盘上的按键. # ...

  5. 【java+selenium3】模拟键盘操作 (十二)

    一.键盘操作 用代码来模拟键盘的Enter或一系列的组合键,前面使用sendkeys()方法模拟键盘的输入,除此之外还可以模拟键盘组合键输入如下: 整理一些比较常用的键盘操作如下: sendKeys( ...

  6. C# 模拟键盘操作--SendKey(),SendKeys()

    模拟键盘输入就是使用以下2个语法实现的.SendKeys.Send(string keys);  //模拟汉字(文本)输入SendKeys.SendWait(string keys); //模拟按键输 ...

  7. C# 模拟键盘操作SendKey(),SendKeys()

    模拟键盘输入就是使用以下2个语法实现的. SendKeys.Send(string keys);  //模拟汉字(文本)输入SendKeys.SendWait(string keys); //模拟按键 ...

  8. selenium模拟键盘操作

    单键 /** * 模拟键盘回车事件 * @throws AWTException */ public void KeyEventEnter() throws AWTException { Robot ...

  9. Selenium WebDriver-actionchain模拟键盘操作

    #encoding=utf-8 import unittest import time import chardet from selenium import webdriver from selen ...

随机推荐

  1. 让你彻底明白TCP三次握手,四次挥手

    今天我们来讲一下TCP的三次握手和四次挥手,先来张思维导图.  一.TCP是什么 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流 ...

  2. linux入门系列3--常见的linux远程登陆管理工具

    服务器一般是云服务器或者放置在机房,我们日常工作中通过远程连接工具连接到服务器进行操作,这类工具很多(如SecureCRT.XShell.Putty.FinallShell.TeamViewer以及w ...

  3. Bandicam(班迪录屏)高清视频录制工具

    Bandicam(班迪录屏)简单好用的录屏幕,录游戏,录视频的功能强大的屏幕录像软件,比起其他软件其性能更加卓越. 与其他软件相比,用Bandicam录制的视频大小更小, 不仅保证原文件的质量.

  4. 使用Eureka中遇到的一些问题

    1.情况 :   服务已经注册到eureka,eureka中可以看到,但是 consumer和provider这两个服务,一直报错, 错误信息:DiscoveryClient_CONSUMER-DEM ...

  5. Mybatis-plus 实体类继承关系 插入默认值

    在实际开发中,会定义一些公共字段,而这些公共字段,一般都是在进行操作的时候由程序自动将默认值插入.而公共的字段一般会被封装到一个基础的实体类中,同时实体类中会实现相应的getter setter 方法 ...

  6. 【Java基础总结】泛型

    泛型实现了参数化类型的概念,使代码可以应用于多种类型. 1. 泛型类 声明的泛型类型静态方法不能使用 class Tools<T>{ private T t; public void se ...

  7. CTPN中anchors代码

    import numpy as np def generate_basic_anchors(sizes, base_size=16): #base_anchor([0,0,15,15]) base_a ...

  8. 大白话建造者模式(Builder Pattern)

    前言 起初打算按照之前的日产系列写建造者模式.但参考了网上的很多文章,让我对建造者模式更加的困惑,也害怕自己无法已易懂的方式进行解释.最后通过Google发现了一篇英文文章Builder,使我茅塞顿开 ...

  9. 倍增笔记ST表

    https://noip-1253948194.cos.ap-beijing.myqcloud.com/%E5%80%8D%E5%A2%9E-ST%E7%AE%97%E6%B3%95.mp4 1123 ...

  10. struts2 convention插件

    1.struts2自2.1以后推荐使用Convention Plugin支持struts零配置支持(引入jar:struts2-convention-plugin-2.x.x.jar)①convent ...