当前位置:首页 > 芯闻号 > 充电吧
[导读][摘要:VC摹拟键盘输进 找了一周,终究找到摹拟键盘输进的方式了,不外话道照样要看靠谱的开源项目,才干快速找到办理题目的方式啊,空话未几道,进进主题。 摹拟键盘的方式有三种(我]           

[摘要:VC摹拟键盘输进 找了一周,终究找到摹拟键盘输进的方式了,不外话道照样要看靠谱的开源项目,才干快速找到办理题目的方式啊,空话未几道,进进主题。 摹拟键盘的方式有三种(我]

                                                                             VC++模拟键盘输入


找了一周,终于找到模拟键盘输入的方法了,不过话说还是要看靠谱的开源项目,才能快速找到解决问题的方法啊,废话不多说,进入主题。


模拟键盘的方法有三种(我只百度到三种,⊙﹏⊙b汗):keybd_event() 、 PostMessage() /SendMessage()、SendInput(),方法内的参数暂省略。。。


首先,keybd_event()方法原型:

VOID keybd_event(

  BYTE bVk, // virtual-key code
  BYTE bScan, // hardware scan code
  DWORD dwFlags, // flags specifying various function options
  DWORD dwExtraInfo // additional data associated with keystroke
  );

网上大部分流传的都是这么写的:(我想说就因为看到他们这么说的,然后我尝试了好多方式,都没有成功,只能说好吧,我的扫描码必须设置,我不一般可以了吧,囧!!)

最后幸亏看到tightvnc的源码才看到他们都是使用扫描码了,然后我尝试了一下:

     //输入字符'A',通过,就这么通过了,对于一个菜鸟来说,我找的好辛苦!!至少花费了我两天时间
     keybd_event(65,MapVirtualKey(0x41, 0),0,0);
     Sleep(300);
     keybd_event(65,MapVirtualKey(0x41, 0),KEYEVENTF_KEYUP,0);


其次,PostMessage()/SendMessage()方法原型:

      B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
  参数
  hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:

    (HWND_BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口。备注:需要以 HWND_BROADCAST方式通信的应用程序应当用函数 RegisterwindwosMessage来获得应用程序间通信的独特的消息。
  NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样。)
  Msg:指定被寄送的消息。
  wParam:指定附加的消息特定的信息。
  IParam:指定附加的消息特定的信息。
  返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。

PostMessage()和SendMessage()是有区别的,前者是传到指定窗口句柄即可,类似于UDP传输协议,后者是传到指定句柄后,要一直等到其传送的参数被指定窗口收到,并且返回结果,类似于TCP传输协议。

俺用这个方法验证的是往TXT文本框输入内容:

     //向txt文本窗口传送字符,成功

     :: SendMessage(HWND(0x0004097E),WM_CHAR,WPARAM('a'),0);  //发送一个字符a

     说明HWND(0x0004097E)是获取TXT文本输入框的句柄(用VS2008 工具栏下的spy++获取到,再强制转型一下,强调一下,是输入框的句柄,而不是TXT的句柄——输入框的句柄是TXT文本框下面的一个子句柄,不太懂可以百度一下,主要是我没尝试就不介绍如何全部获取TXT文本内所有的句柄了,包括菜单栏句柄等等)


最后介绍一下SendInput的使用方法:

    UINT SendInput(
        UINT nInputs,     // count of input events
        LPINPUT pInputs,  // array of input events
        int cbSize        // size of structure
   );

此方法需要用到的数据结构INPUT,结构如下:

    typedef struct tagINPUT {
        DWORD   type;
        union {
            MOUSEINPUT      mi;
            KEYBDINPUT      ki;
            HARDWAREINPUT   hi;
      };
    } INPUT, *PINPUT;

SendInput方法可以模拟传输键盘和鼠标的功能。以键盘输入为例:

void inputKey()
{

        ::SetForegroundWindow(hWnd);//把接收窗口放在最前,同时使窗口获取焦点(好吧,说的像android,获取焦点。。。)
INPUT keyEvent = {0};
        keyEvent.type = INPUT_KEYBOARD;//如果是鼠标设置鼠标的INPUT_MOUSE
        keyEvent.ki.wVk = 0x41;//字符A
        keyEvent.ki.wScan = MapVirtualKey(0x41, 0);//又像前面别人说的,可能一般不需要设置吧,我觉得还是这样靠谱,

                                                                                       //之前我没映射就没成功,不信你试试,you  can  you  up!!

        :: SendInput(1, &keyEvent, sizeof(keyEvent));
Sleep(1000); //别为为啥,就想让他睡会
        keyEvent.ki.dwFlags = KEYEVENTF_KEYUP;//默认keyEvent.ki.dwFlags  = 0 ,即 KEYEVENTF_KEYDOWN
::SendInput(1, &keyEvent, sizeof(keyEvent));
}


OK,就这些,花费了我一周多的时间啊,才弄好,希望可以帮助到需要的同志!!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

近日,2024中关村论坛年会发布了10项重大科技成果名单,其中“转角氮化硼光学晶体原创理论与材料”备受关注。

关键字: 激光

负责支持和保护网络生活的云服务提供商阿卡迈技术公司(Akamai),近日在其日益丰富的云产品阵容中又增添了一款基于NVIDIA GPU的媒体优化型产品。这款全新的云服务产品基于NVIDIA RTX 4000 Ada Ge...

关键字: 视频解码器

业内消息,近日高通公司宣布推出针对桌面平台的全新骁龙 X Plus 处理器。

关键字: 高通 骁龙 X Plus 处理器

近日,台积电在圣克拉拉年度技术研讨会上宣布首个“埃级”制程技术:A16。A16 是台积电首次引入背面电源输送网络技术,计划于 2026 年下半年开始量产。同时,台积电也在重新命名工艺节点,标志着「埃级」时代的开始。

关键字: 台积电 A16

4 月 25 日消息,4 月 25 日,国际数据公司(IDC)发布 2024 年第一季度中国手机市场跟踪报告,荣耀以 17.1% 的市场份额拿下第一,华为占 17.0% 位列第二,OPPO、苹果和 vivo 分别位列第三...

关键字: 荣耀 华为

业内消息, 近日华为全新Pura 70系列手机正式开售引发广大 数码爱好者追捧,但是有网友注意到这款手机的“AI修图”功能,竟然可以将照片中的人物衣服消除,并拍成视频发布网络。

关键字: 华为Pura70 华为

据韩媒报道,近日韩国多位军方人士透露,韩国军方正在考虑全面禁止在军事建筑内使用苹果手机,军方担心敏感信息通过录音泄露。

关键字: iPhone 苹果

为了满足日益增长的数据处理需求,铁威马NAS推出了全新的性能巅峰2024年旗舰之作F4-424 Pro,并搭载了最新的操作系统--TOS 6。这款高效办公神器的问世,无疑将为企业和专业人士带来前所未有的便捷与效率。

关键字: 存储 Linux 服务器

继“特斯拉开启万人大裁员”之后,如今又一家车企扛不住了!

关键字: 电动汽车

轻量级AI定制模型助力低成本快速部署 北京2024年4月18日 /美通社/ -- 数据和人工智能(AI)领域的领先者SAS—今日在SAS Innovate大会上首次展示了一款变革性的、旨在帮助企业直面业务挑战的解决方案...

关键字: SAS AI模型 人工智能 INNOVATE
关闭
关闭