当前位置:首页 > > 充电吧
[导读][摘要: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,就这些,花费了我一周多的时间啊,才弄好,希望可以帮助到需要的同志!!

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭