1. 程式人生 > >Windows下向指定視窗模擬傳送鍵盤訊息

Windows下向指定視窗模擬傳送鍵盤訊息

在作業系統中,滑鼠和鍵盤的操作會被轉換為相應的系統訊息,視窗過程在接收到訊息後會進行對應的處理。傳送訊息,我們可以使用SendMessage()和PostMessage(),所以,只要使用這兩個函式來發送滑鼠和鍵盤的相關訊息就可以了。此外,還可以通過keybd_event()和mouse_event()兩個專用的函式進行滑鼠和鍵盤按鍵的模擬操作。

下面是一個簡單的向指定視窗傳送訊息的例子:

1.新建一個MFC基於Dialog的專案,介面如下:


設定視窗標題編輯框的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檔案中,新增成員函式:


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檔案中,新增訊息對映,將訊息和對應的處理函式關聯起來:


注:Timer的對應訊息是WM_TIMER。

至此,這個簡單的小專案就完成了。要獲得一個視窗的標題,向大家介紹spy++,用法可以在網上搜。下面是獲得瀏覽器標題的畫面:


通過獲得指定視窗的標題,就可以向該視窗傳送各種資訊。執行我們寫好的程式設定相應的欄位後,就可以看到指定的瀏覽器視窗每個一段時間將進行一次重新整理(因為我們模擬了F5鍵的訊息)。

程式原始碼:

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



相關推薦

Windows指定視窗模擬傳送鍵盤訊息

在作業系統中,滑鼠和鍵盤的操作會被轉換為相應的系統訊息,視窗過程在接收到訊息後會進行對應的處理。傳送訊息,我們可以使用SendMessage()和PostMessage(),所以,只要使用這兩個函式來發送滑鼠和鍵盤的相關訊息就可以了。此外,還可以通過keybd_event(

Java模擬傳送鍵盤訊息 shift組合鍵

Java中可通過java.awt.Robot來模擬傳送訊息:鍵盤訊息,滑鼠訊息之類的。 先來試試 Robot robot = new Robot(); robot.keyPress(KeyEvent.VK_CONTROL); robot.keyPress(KeyEvent.

WPF指定視窗傳送鍵盤指令

現在網上的庫大部分都是VB的那個傳送鍵盤指令的庫,那個在WPF裡面是用不了的,WPF的話可以用System.Windows.Forms中的其實跟VB中的Microsoft.VisualBasic.Devices這個裡面的SendKeys用法差不多一樣,吐槽一下,

windowstomcat指定命令視窗標題

背景:windows作業系統,啟動多個tomcat,多個命令視窗標題都是同名的“Tomcat”,難以區分。 解決:為每一個tomcat命令視窗自定義標題,區分各個tomcat。 編輯tomcat所在

Java程式碼指定的WebHook傳送訊息

1.我們通過Java來向某個WebHook地址傳送POST請求,並攜帶我們需要傳送的訊息 2.程式碼示例 搭建Maven專案,在pom.xml檔案裡引入httpclient依賴 <dependency> <groupId>org.apache.httpcompo

windows網路丟包模擬軟體(Network Emulator for Windows Toolkit)

最近公司有一個直播的測試專案,需要模擬各種網路環境下的直播狀態,最後找到一款這樣的軟體(如果有遇到更好的軟體,望和網友多多交流) 介紹一款windows下的網路模擬器,可以模擬各種丟包或延遲的網路(Network Emulator for Windows Toolkit) 下載地址:https://blo

指定的url傳送資料

public static String sendPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result

python ZeroMQ實現1:N,非同步收發訊息(也可指定客戶端傳送訊息

ZeroMQ的python版本和C/C++版本的介面差不多,要實現一個server對N個client,非同步方式,而且可以對指定的client傳送訊息,可以這樣: server採用ROUTER方式,cl

windows刪除指定日期前的檔案

      習慣操作linux系列的作業系統,對DOS下的操作有些陌生,但是現在有些客戶方使用的windows的環境,需要做資料庫的定時備份,Sqlserver的控制檯上面還是比較方便來進行資料庫的定時備份與刪除指定日期前的備份檔案的,但是MySQL的就不容易刪除了,,有些專

windows隱藏console視窗

1 問題 想寫一個程式,呼叫另外一個命令,雙擊執行時直接後臺執行,執行時不彈出console黑視窗。 2 解決方案 最開始使用system( "your_cmd" );這樣的方式,必然會有console視窗一閃而過。 後來查資料看到有人提出了新增連結

windows關閉指定埠服務,解決tomcat端口占用問題

<iframe id="cproIframe_595135_2" width="250" height="250" src="http://cb.baidu.com/ecom?adn=3&amp;at=231&amp;aurl=&amp;cad=1&amp;ccd=24

Windows設定任意視窗總在最前——Turbo Top

有些軟體,像KMPlayer,有設定“在最前”的功能,方便使用者對當前視窗進行固定,以免來回切換造成的麻煩。但是並不是所有軟體都有在這個功能,比如說看文章或者開小視窗,需要這個功能。 下面這個小軟

windows取消dos視窗執行bat檔案

在bat 檔案目錄下,新建.vbs檔案,內容為: CreateObject("WScript.Shell").Run "cmd /c jmeter.bat",0 其中jmeter換成要執行的bat檔案的名稱即可,儲存後,直接執行.vbs即可

VC指定視窗模擬按鍵或滑鼠事件

方法有兩種: 1.SendMessage or PostMessage 2.keybd_event,mouse_event 前者更強大,指定hwnd後可以後臺傳送,而後者只能夠傳送前臺資訊..也就是必須視窗最前 簡單的舉例: 方法2 SetCursorPos(

linux,windows檢測指定的IP地址是否可用或者檢測IP地址衝突的3種方式(批處理程式,python程式,linux shell 批量ping)

本文中的指令碼適用範圍:1)檢測某些IP地址是否被佔用;2)檢測網路中某些裝置是否存活;3)在分配新的ip地址之前,批量檢測環境中是否存在衝突的機器以上檢測基於ICMP Ping報文,要求所有的裝置允許Ping,裝置開通禁止ICMP策略,防火牆禁止ICMP報文等情況不在本文的

Windows使用python庫 curses遇到錯誤訊息的解決方案

在Windows系統下執行python應用時,有時會遇到錯誤資訊: ModuleNotFoundError: No module named ‘_curses’. 然而檢視Windows系統裡python安裝檔案,發現在Lib資料夾裡確實有一個名為curses

Android模擬傳送通知訊息及取消通知

效果圖如下: 一、實驗環境 開發軟體:Android Studio 3.1.4 模擬器:Genymotion 二、實現 介面佈局檔案————activity_main.xml <?xml version="1.0" encoding="utf-8"?>

在java程式中如何能獲取到另一個程式的windows控制代碼,又如何使用這個控制代碼這個視窗傳送訊息

import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.WinDef.HWND; import com.sun.jna.platform.win32.W

[python]windows模擬滑鼠鍵盤輸入

先介紹幾個用到的函式: 1.SetCursorPos(x,y)函式:該函式把游標移到螢幕的指定位置,但是並沒有點選。 2.mouse_event()函式:函式綜合滑鼠擊鍵和滑鼠動作 mouse_event(win32con.flag, 0, 0, 0, 0): Fla

windows修改tomcat啟動時指定的jdk

本機 添加 linu 1.7 jdk1.8 指定 windows tomcat啟動 .com   我本機默認的jdk版本是1.7,裝有tomcat7和tomcat8兩個版本的tomcat。現在是想用tomcat8使用jdk1.8來運行   1.查看tomcat啟動時使用的j