吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Windows消息機制模擬用戶輸入的方法介紹

冬至子 ? 來源:活魚格勒 ? 作者:鬼人揚 ? 2023-09-07 10:59 ? 次閱讀

Windows 消息機制API

xiaoxi guanli jizhi

Windows平臺上的應用程序是事件驅動的 ,它們不會顯式地調用底層函數以獲得用戶輸入或其它信息,而是等待系統將這些信息提供給它們。同類定義的窗口向系統聲明一個唯一的 窗口過程函數 (Window Procedures)。當有關某一窗口句柄的事件發生時(比如:鼠標單擊這個窗口,或鍵盤向這個窗口輸入一個字符),系統調用這個函數,把某個特定的消息作為參數

要向特定的窗口過程發送消息,Windows提供了以下函數:

圖片

由于lpPrevWndFunc為同一類窗口共有,發送的消息在被某一窗口處理前事實上可能已被多個窗口接收。本文不會用到這一函數,關于此函數的完整定義請參閱:

圖片

這一函數在中定義,它向唯一的窗口句柄發送消息,并只在發送的消息被處理后返回。與之相似的是PostMessageW,它在發送消息后立即返回,即只將消息添加到目的窗口句柄的消息隊列里,并不等待其處理。

HWND hwnd:接收消息的窗口句柄

(特別地(HWND)0xffff為廣播)

UINT Msg:發送的消息類型

WPARAM wParam:發送的消息

LPARAM lParam:發送消息的附加參數

實現刷屏

mian dui dui xiang

獲得Windows提供的API函數后,下面用C++實現。

首先將刷屏過程封裝到一個類中

--------Bomb.h--------

圖片

構造類時向構造函數提供刷屏消息的重復次數和刷屏消息 (UTF-16格式)

ShowMessage()用于調試,把當前類保存的消息輸出到控制臺上

StartBombing(int)用于開始刷屏,參數定義開始刷屏前的延時。用戶可在這段延時內把鍵盤焦點設置到目標窗口上去,使目標窗口句柄或得消息后把消息內容加入到文本輸入框中去。此函數有一個無延遲參數的重載。

消息內容存儲在私有段中一個類型為WPARAM的數組中(該類型在上文中有介紹),附加消息是一個值為NULL的LPARAM類型——實現本例中的功能不需要向SendMessageW()提供附加消息。

--------Bomb.cpp--------

圖片

圖片

出于某些考量,我們在此不提供主要函數的定義。在StartBombing()中,程序按用戶設定的刷屏消息重復次數循環times次,并按消息長度循環MessageLength,每次將消息字符串中的第j個字符以WH_CHAR模式向所有窗口廣播。獲得鍵盤輸入焦點的窗口會將其加入到文本框中。

在發送完一條消息后,通過keybd_event函數模擬一次【回車鍵按下】事件,使目標窗口(比如:wechat)發送消息或換行。

--------Main.cpp--------

圖片

這是應用程序入口點。注意它設置了wcout/wcin的本地化,使其將儲存在WPARAM類型(其本質是unsigned int)中的UTF-16數據轉化為中文字符輸出/輸入。

可見,按以上代碼編譯的應用程序已經可以完成質問馬人王的任務。然而, 這速度也太慢了?? 這個速度比打字快不了多少,如果這樣的話就沒必要用刷屏軟件了。哪里出了問題呢?

問題在于,如本文開頭介紹:SendMessageW()強制在目標窗口過程將消息處理完畢后才返回,這使得整個過程變得相當緩慢。

解決方法是顯而易見的:用PostMessageW()取代原函數。但是這樣做會帶來新的問題:Post函數只是簡單地把消息加入到目標的消息隊列去,之后立即返回。而原程序在Post/Send函數返回后會調用keybd_event()模擬一個鍵盤事件。然而,窗口過程處理消息的速度現在看來并不盡如人意,這往往會導致大量字符消息堆積在消息隊列中,最終導致鍵盤事件和消息發送間不協調(比如:微信PC端輸入框中堆積了很多信息而不發送,因為回車鍵按下事件沒有按正常順序處理)

所以,要兼顧消息的穩定性和發送速度,就要把keybd_event替換成另一個PostMessageW(),使【回車鍵按下】這一事件也像其它字符事件那樣加入到消息隊列中去,這樣就能保證字符消息和回車間的先后順序不變。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲器
    +關注

    關注

    38

    文章

    7528

    瀏覽量

    164344
  • WINDOWS
    +關注

    關注

    4

    文章

    3569

    瀏覽量

    89303
  • C++語言
    +關注

    關注

    0

    文章

    147

    瀏覽量

    7027
收藏 人收藏

    評論

    相關推薦

    PCB設計高速模擬輸入信號走線方法及規則

    本文主要詳解PCB設計高速模擬輸入信號走線,首先介紹了PCB設計高速模擬輸入信號走線方法,其次闡
    發表于 05-25 09:06 ?9221次閱讀
    PCB設計高速<b class='flag-5'>模擬</b><b class='flag-5'>輸入</b>信號走線<b class='flag-5'>方法</b>及規則

    模擬輸入信號的保護電路

    本文介紹了四種模擬輸入信號的保護電路的實現方法
    發表于 09-07 10:38 ?1887次閱讀

    四種模擬輸入信號的保護電路實現方法

    本文介紹了四種模擬輸入信號的保護電路的實現方法
    發表于 03-28 09:55 ?1265次閱讀

    如何破解windows xp 用戶密碼

    ”命令把xpuser01這個用戶升為超級用戶,即可擁有所有權限。5.最后一步,就是重新啟動計算機,在登錄窗口中輸入剛剛更改的新密碼便可成功登陸。如果你正在為丟失了登陸口令而煩惱的話,不妨試一試此
    發表于 09-14 11:59

    Windows XP系統隱藏硬盤的方法和技巧

    Windows XP系統隱藏硬盤的方法和技巧 簡單有效的方法就是把存有許多重要文件夾的硬盤分區全部隱藏起來。下面以在Windows XP系統中隱藏D盤為例
    發表于 03-19 15:07

    Windows 7最新安裝方法大全

    Windows 7最新安裝方法大全  Windows 7安裝方法可分為:光盤安裝法、模擬光驅
    發表于 01-18 09:56 ?542次閱讀

    Windows系統用戶擺脫黑客攻擊的方法

    Windows系統用戶擺脫黑客攻擊的方法 IP被盜用是指盜用者使用未經授權的IP來配置網上的計算機。目前IP盜用行為非常常見,許多“不法之徒”用盜用
    發表于 01-27 10:06 ?622次閱讀

    三種單片機模擬串口方法介紹

    三種單片機模擬串口方法介紹 模擬串口就是利用51的兩個輸入輸出引腳如P1.0和P1.1,置1或0分別代表高低電平,也就是串口通信中所說的位
    發表于 02-27 10:41 ?4994次閱讀

    WINDOWS_XP藍牙虛擬串口設置方法

    WINDOWS_XP藍牙虛擬串口設置方法,可將藍牙模擬成串口進行通訊。
    發表于 11-10 16:11 ?0次下載

    Windows8圖文介紹

    計算機基礎 Windows 8主要操作及使用方法圖文介紹
    發表于 12-16 14:41 ?0次下載

    MFC中Windows消息處理機制解析

    Windows程序和DOS程序的主要不同點之一是:Windows程序是以事件為驅動、消息機制為基礎 本人對Windows系統、MFC談不上有深入的了解,但對MFC本身包裝API的
    發表于 11-07 10:36 ?1次下載

    模擬信號中高斯噪聲對ADC輸入的影響介紹

    本文介紹模擬信號中高斯噪聲對ADC輸入的影響。
    發表于 11-23 15:34 ?11次下載
    <b class='flag-5'>模擬</b>信號中高斯噪聲對ADC<b class='flag-5'>輸入</b>的影響<b class='flag-5'>介紹</b>

    PLC模擬輸入濾波方法以及優缺點的介紹

    輸入濾波通常是限幅濾波、中值濾波、算術平均濾波、遞歸平均濾波、中值平均濾波、極限平均濾波、一階滯后濾波、加權遞歸平均濾波、抖動濾波和極限抖動濾波。本文比較介紹了plc模擬輸入濾波
    發表于 12-13 13:51 ?1842次閱讀

    模擬輸入輸出模塊用戶手冊(詳細篇)

    本手冊介紹 MELSEC-Q 系列對應 Q64AD2DA 型模擬輸入輸出模塊 ( 以下簡稱為 Q64AD2DA) 的 規格、使用、編程方法等有關內容。
    發表于 08-25 14:47 ?4次下載
    <b class='flag-5'>模擬</b><b class='flag-5'>輸入</b>輸出模塊<b class='flag-5'>用戶</b>手冊(詳細篇)

    python控制windows窗口,并輸入數據

    于實現許多應用程序,包括控制Windows窗口以及進行數據輸入。 本文將以Windows平臺為例,詳細介紹如何使用Python來控制窗口和實現數據
    的頭像 發表于 11-22 14:11 ?3221次閱讀
    黄金百家乐官网的玩法技巧和规则| 皇冠百家乐官网代理网| 网上百家乐开户送现金| 至尊百家乐官网娱乐网| 河津市| 大发888打法888| 百家乐桌子豪华| 玩百家乐官网去哪个娱乐城最安全| 新2百家乐官网娱乐城| 新利国际网上娱乐| 太阳城 娱乐城| 百家乐singapore| 做生意大门方位风水| 百家乐官网筹码方形| 怎样看百家乐官网牌| 九州娱乐城| 大发888娱乐城客服电话| 网上百家乐破战| 真人百家乐是骗局| 金花百家乐官网的玩法技巧和规则| 百家乐官网EA平台| 百家乐官网路子分析| 打牌网| 棋牌英雄传| 百家乐长路投注法| 新葡京百家乐官网的玩法技巧和规则 | 百家乐官网打揽法| 澳门百家乐官网官网www.bjbj100.com| 金山区| 新澳博天上人间娱乐| 香港六合彩开奖记录| 大发888免费软件下载| 威尼斯人娱乐场骗人| 六合彩现场开奖结果| 真人百家乐开户优惠| 百家乐官网下注法| 百家乐官网投注限额| 盱眙县| 博盈国际娱乐城| 大发888网页版下载| 新天地百家乐的玩法技巧和规则|