當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀][摘要:VC摹擬鍵盤輸進(jìn) 找了一周,終究找到摹擬鍵盤輸進(jìn)的方式了,不外話道照樣要看靠譜的開源項目,才干快速找到辦理題目的方式啊,空話未幾道,進(jìn)進(jìn)主題。 摹擬鍵盤的方式有三種(我]? ? ? ? ? ?

[摘要:VC摹擬鍵盤輸進(jìn) 找了一周,終究找到摹擬鍵盤輸進(jìn)的方式了,不外話道照樣要看靠譜的開源項目,才干快速找到辦理題目的方式啊,空話未幾道,進(jìn)進(jìn)主題。 摹擬鍵盤的方式有三種(我]

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VC++模擬鍵盤輸入


找了一周,終于找到模擬鍵盤輸入的方法了,不過話說還是要看靠譜的開源項目,才能快速找到解決問題的方法啊,廢話不多說,進(jìn)入主題。


模擬鍵盤的方法有三種(我只百度到三種,⊙﹏⊙b汗):keybd_event() 、?PostMessage() /SendMessage()、SendInput(),方法內(nèi)的參數(shù)暫省略。。。


首先,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
  );

網(wǎng)上大部分流傳的都是這么寫的:(我想說就因?yàn)榭吹剿麄冞@么說的,然后我嘗試了好多方式,都沒有成功,只能說好吧,我的掃描碼必須設(shè)置,我不一般可以了吧,囧?。。?/p>

最后幸虧看到tightvnc的源碼才看到他們都是使用掃描碼了,然后我嘗試了一下:

? ? ?//輸入字符'A',通過,就這么通過了,對于一個菜鳥來說,我找的好辛苦?。≈辽倩ㄙM(fèi)了我兩天時間
? ? ?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);
  參數(shù)
  hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含義的兩個值:

? ? (HWND_BROADCAST:消息被寄送到系統(tǒng)的所有頂層窗口,包括無效或不可見的非自身擁有的窗口、被覆蓋的窗口和彈出式窗口。消息不被寄送到子窗口。備注:需要以 HWND_BROADCAST方式通信的應(yīng)用程序應(yīng)當(dāng)用函數(shù) RegisterwindwosMessage來獲得應(yīng)用程序間通信的獨(dú)特的消息。
  NULL:此函數(shù)的操作和調(diào)用參數(shù)dwThread設(shè)置為當(dāng)前線程的標(biāo)識符PostThreadMessage函數(shù)一樣。)
  Msg:指定被寄送的消息。
  wParam:指定附加的消息特定的信息。
  IParam:指定附加的消息特定的信息。
  返回值:如果函數(shù)調(diào)用成功,返回非零值:如果函數(shù)調(diào)用失敗,返回值是零。若想獲得更多的錯誤信息,請調(diào)用GetLastError函數(shù)。

PostMessage()和SendMessage()是有區(qū)別的,前者是傳到指定窗口句柄即可,類似于UDP傳輸協(xié)議,后者是傳到指定句柄后,要一直等到其傳送的參數(shù)被指定窗口收到,并且返回結(jié)果,類似于TCP傳輸協(xié)議。

俺用這個方法驗(yàn)證的是往TXT文本框輸入內(nèi)容:

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

? ? ?:: SendMessage(HWND(0x0004097E),WM_CHAR,WPARAM('a'),0); ?//發(fā)送一個字符a

? ? ?說明HWND(0x0004097E)是獲取TXT文本輸入框的句柄(用VS2008 工具欄下的spy++獲取到,再強(qiáng)制轉(zhuǎn)型一下,強(qiáng)調(diào)一下,是輸入框的句柄,而不是TXT的句柄——輸入框的句柄是TXT文本框下面的一個子句柄,不太懂可以百度一下,主要是我沒嘗試就不介紹如何全部獲取TXT文本內(nèi)所有的句柄了,包括菜單欄句柄等等)


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

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

此方法需要用到的數(shù)據(jù)結(jié)構(gòu)INPUT,結(jié)構(gòu)如下:

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

SendInput方法可以模擬傳輸鍵盤和鼠標(biāo)的功能。以鍵盤輸入為例:

void inputKey()
{

? ? ? ? ::SetForegroundWindow(hWnd);//把接收窗口放在最前,同時使窗口獲取焦點(diǎn)(好吧,說的像android,獲取焦點(diǎn)。。。)
INPUT keyEvent = {0};
? ? ? ? keyEvent.type = INPUT_KEYBOARD;//如果是鼠標(biāo)設(shè)置鼠標(biāo)的INPUT_MOUSE
? ? ? ? keyEvent.ki.wVk = 0x41;//字符A
? ? ? ? keyEvent.ki.wScan = MapVirtualKey(0x41, 0);//又像前面別人說的,可能一般不需要設(shè)置吧,我覺得還是這樣靠譜,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//之前我沒映射就沒成功,不信你試試,you ?can ?you ?up!!

? ? ? ? :: SendInput(1, &keyEvent, sizeof(keyEvent));
Sleep(1000); //別為為啥,就想讓他睡會
? ? ? ? keyEvent.ki.dwFlags = KEYEVENTF_KEYUP;//默認(rèn)keyEvent.ki.dwFlags ?= 0 ,即?KEYEVENTF_KEYDOWN
::SendInput(1, &keyEvent, sizeof(keyEvent));
}


OK,就這些,花費(fèi)了我一周多的時間啊,才弄好,希望可以幫助到需要的同志??!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉