Windows下向指定窗口模拟发送键盘消息

在操作系统中,鼠标和键盘的操作会被转换为相应的系统消息,窗口过程在接收到消息后会进行对应的处理。发送消息,我们可以使用SendMessage()和PostMessage(),所以,只要使用这两个函数来发送鼠标和键盘的相关消息就可以了。此外,还可以通过keybd_event()和mouse_event()两个专用的函数进行鼠标和键盘按键的模拟操作。

下面是一个简单的向指定窗口发送消息的例子:

1.新建一个MFC基于Dialog的项目,界面如下:

Windows下向指定窗口模拟发送键盘消息_第1张图片

设置窗口标题编辑框的ID为:IDC_EDIT_CAPTION,绑定成员变量:m_StrCaption;

设置刷新频率编辑框的ID为:IDC_EDIT_INTERVAL;

设置开始按钮的ID为:IDC_BTN_START,绑定成员控件:m_Start。

2.完成按钮点击事件的代码如下:

voidCMyDlg::OnBtnStart()

{   

 

      CString strBtn;

      int nInterval = 0;

      //获取窗口标题

      GetDlgItemText(IDC_EDIT_CAPTION,m_StrCaption);

      //获取输入的刷新频率

      nInterval =GetDlgItemInt(IDC_EDIT_INTERVAL,FALSE, TRUE);

 

      //判断输入是否为非法

      if(m_StrCaption == " " ||nInterval == 0)

      {

     

           return;

      }

 

      //获取按钮的标题

      m_Start.GetWindowText(strBtn);

 

      if(strBtn == "开始")

      {

           //设置定时器

           SetTimer(1, nInterval * 1000, NULL);

           m_Start.SetWindowText("停止");

           GetDlgItem(IDC_EDIT_CAPTION)->EnableWindow(FALSE);

           GetDlgItem(IDC_EDIT_INTERVAL)->EnableWindow(FALSE);

      }else{//MessageBox("jieshu");

           //结束定时器

           KillTimer(1);

           m_Start.SetWindowText("开始");

           GetDlgItem(IDC_EDIT_CAPTION)->EnableWindow(TRUE);

           GetDlgItem(IDC_EDIT_INTERVAL)->EnableWindow(TRUE);

      }

}

3.工程名Dlg.h文件中,添加成员函数:

Windows下向指定窗口模拟发送键盘消息_第2张图片

4.实现添加的成员函数:

voidCMyDlg::OnTimer(UINT nIDEvent)

{

          //根据窗口标题获得窗口句柄

      HWND hWnd =::FindWindow(NULL,m_StrCaption.GetBuffer(0));

      //发送键盘按下,此处模拟F5键

      ::PostMessage(hWnd, WM_KEYDOWN, VK_F5, 1);

      Sleep(100);

      //发送键盘弹起

      ::PostMessage(hWnd, WM_KEYUP, VK_F5, 1);

 

      CDialog::OnTimer(nIDEvent);

}

5.在工程名Dlg.cpp文件中,添加消息映射,将消息和对应的处理函数关联起来:

Windows下向指定窗口模拟发送键盘消息_第3张图片

注:Timer的对应消息是WM_TIMER。

至此,这个简单的小项目就完成了。要获得一个窗口的标题,向大家介绍spy++,用法可以在网上搜。下面是获得浏览器标题的画面:

Windows下向指定窗口模拟发送键盘消息_第4张图片

通过获得指定窗口的标题,就可以向该窗口发送各种信息。运行我们写好的程序设置相应的字段后,就可以看到指定的浏览器窗口每个一段时间将进行一次刷新(因为我们模拟了F5键的消息)。

程序源码:

http://pan.baidu.com/s/1dFv2xyh



你可能感兴趣的:(C++,windows,MFC,Windows九阳神功)