鍵盤訊號 和 模擬鍵盤訊號 有什麼不同呢? |
尚未結案
|
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
各位大大:
小弟想寫一隻程式可以送出鍵盤訊息 而我也在網路上找到符合我需求的資訊 也寫了一支程式 的確也能正確的發送鍵盤訊息至TXT檔內 可是奇怪的是當我打開線上遊戲以後 再開啟我所寫的程式並且執行 卻發現在遊戲中 沒有做出相對應鍵盤訊息的動作 我以為我寫的程式並沒有執行 所以我回到桌面開啟TXT檔 結果我的程式的確是有在跑 也一直持續送出訊號 例如:在TXT檔內可以一直寫入字母K 但是在遊戲裡面卻不會執行K所對應的動作 而且我弟弟今天去買搖桿 附加的軟體卻可以把搖桿訊息模擬成鍵盤訊息 也能在TXT檔和遊戲中產生對應的動作 這到底是為什麼呢 附上我的程式碼 哪裡出錯了......麻煩各位了 我是用TIMER去連續發出訊號的 [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; float JUMP,DRING; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { DoubleBuffered=true; Timer1->Enabled=false; Timer2->Enabled=false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { JUMP =StrToFloat(Form1->Edit1->Text); DRING =StrToFloat(Form1->Edit2->Text); Timer1->Interval=100*JUMP; Timer1->Enabled=true; Timer2->Interval=100*DRING; Timer2->Enabled=true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Timer1->Enabled=false; Timer2->Enabled=false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { int keyA=65; keybd_event(keyA, MapVirtualKey(keyA,0),WM_LBUTTONDOWN ,0); keybd_event(keyA, MapVirtualKey(keyA,0),WM_LBUTTONUP ,0); } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer2Timer(TObject *Sender) { int keyB=66; keybd_event(keyB, MapVirtualKey(keyB,0), WM_LBUTTONDOWN ,0); keybd_event(keyB, MapVirtualKey(keyB,0),WM_LBUTTONUP ,0); } //--------------------------------------------------------------------------- [/code]
------
恩... 編輯記錄
istillloving 重新編輯於 2009-08-03 20:30:58, 註解 無‧
|
HUNK999
初階會員 發表:9 回覆:35 積分:28 註冊:2009-07-23 發送簡訊給我 |
猜的:
你的記錄檔Keyboard的確有按到... 可能是... 線上Game 只接受Virtual Key 的訊息(VM_XXXX) , 不是Keyboard 標準的訊息 (WM_XXXX) ===================引 用 istillloving 文 章=================== 各位大大: 小弟想寫一隻程式可以送出鍵盤訊息 而我也在網路上找到符合我需求的資訊 也寫了一支程式 的確也能正確的發送鍵盤訊息至TXT檔內 可是奇怪的是當我打開線上遊戲以後 再開啟我所寫的程式並且執行 卻發現在遊戲中 沒有做出相對應鍵盤訊息的動作 我以為我寫的程式並沒有執行 所以我回到桌面開啟TXT檔 結果我的程式的確是有在跑 也一直持續送出訊號 例如:在TXT檔內可以一直寫入字母K 但是在遊戲裡面卻不會執行K所對應的動作 而且我弟弟今天去買搖桿 附加的軟體卻可以把搖桿訊息模擬成鍵盤訊息 也能在TXT檔和遊戲中產生對應的動作 這到底是為什麼呢 附上我的程式碼 哪裡出錯了......麻煩各位了 我是用TIMER去連續發出訊號的 [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; float JUMP,DRING; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { DoubleBuffered=true; Timer1->Enabled=false; Timer2->Enabled=false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { JUMP =StrToFloat(Form1->Edit1->Text); DRING =StrToFloat(Form1->Edit2->Text); Timer1->Interval=100*JUMP; Timer1->Enabled=true; Timer2->Interval=100*DRING; Timer2->Enabled=true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Timer1->Enabled=false; Timer2->Enabled=false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { int keyA=65; keybd_event(keyA, MapVirtualKey(keyA,0),WM_LBUTTONDOWN ,0); keybd_event(keyA, MapVirtualKey(keyA,0),WM_LBUTTONUP ,0); } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer2Timer(TObject *Sender) { int keyB=66; keybd_event(keyB, MapVirtualKey(keyB,0), WM_LBUTTONDOWN ,0); keybd_event(keyB, MapVirtualKey(keyB,0),WM_LBUTTONUP ,0); } //--------------------------------------------------------------------------- [/code]
編輯記錄
HUNK999 重新編輯於 2009-08-05 18:24:15, 註解 無‧
|
bugmans
高階會員 發表:95 回覆:322 積分:188 註冊:2003-04-12 發送簡訊給我 |
普通的API都會被遊戲擋下來,可以試試更低階的技術
http://delphi.ktop.com.tw/board.php?cid=168&fid=914&tid=80850 |
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
|
HUNK999
初階會員 發表:9 回覆:35 積分:28 註冊:2009-07-23 發送簡訊給我 |
KeyBoard是HID Device: Device 發 USB封包到PC的USB Receiver , 經由SIE 到OS , OS的Driver再透過AP發出Windows Keyboard事件 ===================引 用 istillloving 文 章=================== 您好: 可不可以再請教一下 一般我們按下鍵盤到底是發送什麼訊號給電腦呢??
編輯記錄
HUNK999 重新編輯於 2009-08-06 14:46:45, 註解 無‧
|
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
大大您好:
那可以再請教 我所寫的程式是再這流程哪一段插入的呢? 還是是兩種不同的方法來達到Windows Keyboard事件? 麻煩您了 ===================引 用 HUNK999 文 章=================== KeyBoard是HID Device: Device 發 USB封包到PC的USB Receiver , 經由SIE 到OS , OS的Driver再透過AP發出Windows Keyboard事件 ===================引 用 istillloving 文 章=================== 您好: 可不可以再請教一下 一般我們按下鍵盤到底是發送什麼訊號給電腦呢??
------
恩... |
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
大大您好:
我試過了用VK_也是不行 會不會是他只接受 較低階的訊息然後遊戲在自己模擬成鍵盤事件 ===================引 用 HUNK999 文 章=================== 猜的: 你的記錄檔Keyboard的確有按到... 可能是... 線上Game 只接受Virtual Key 的訊息(VM_XXXX) , 不是Keyboard 標準的訊息 (WM_XXXX) ===================引 用 istillloving 文 章=================== 各位大大: 小弟想寫一隻程式可以送出鍵盤訊息 而我也在網路上找到符合我需求的資訊 也寫了一支程式 的確也能正確的發送鍵盤訊息至TXT檔內 可是奇怪的是當我打開線上遊戲以後 再開啟我所寫的程式並且執行 卻發現在遊戲中 沒有做出相對應鍵盤訊息的動作 我以為我寫的程式並沒有執行 所以我回到桌面開啟TXT檔 結果我的程式的確是有在跑 也一直持續送出訊號 例如:在TXT檔內可以一直寫入字母K 但是在遊戲裡面卻不會執行K所對應的動作 而且我弟弟今天去買搖桿 附加的軟體卻可以把搖桿訊息模擬成鍵盤訊息 也能在TXT檔和遊戲中產生對應的動作 這到底是為什麼呢 附上我的程式碼 哪裡出錯了......麻煩各位了 我是用TIMER去連續發出訊號的 [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; float JUMP,DRING; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { DoubleBuffered=true; Timer1->Enabled=false; Timer2->Enabled=false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { JUMP =StrToFloat(Form1->Edit1->Text); DRING =StrToFloat(Form1->Edit2->Text); Timer1->Interval=100*JUMP; Timer1->Enabled=true; Timer2->Interval=100*DRING; Timer2->Enabled=true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Timer1->Enabled=false; Timer2->Enabled=false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { int keyA=65; keybd_event(keyA, MapVirtualKey(keyA,0),WM_LBUTTONDOWN ,0); keybd_event(keyA, MapVirtualKey(keyA,0),WM_LBUTTONUP ,0); } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer2Timer(TObject *Sender) { int keyB=66; keybd_event(keyB, MapVirtualKey(keyB,0), WM_LBUTTONDOWN ,0); keybd_event(keyB, MapVirtualKey(keyB,0),WM_LBUTTONUP ,0); } //--------------------------------------------------------------------------- [/code]
------
恩... |
HUNK999
初階會員 發表:9 回覆:35 積分:28 註冊:2009-07-23 發送簡訊給我 |
我認為原因可能出在視窗焦點(Window Focus) , 當Game在執行時 , 你設計的API雖然發送訊號 , 但本身AP失去焦點 ..
同理 , 當你將焦點切至你的AP , Game本身已無法接受你的事件訊號... 這當然也有例外....一些特別製作的程式在失去焦點時仍會動作 .. 另一方面 , 寫檔動作與焦點無關 , 因此遊戲在動作時 , 仍可以做WriteFIle動作... 你可以寫兩個AP , 一個負責發送Keyboard訊息 , 一個負責息顯示訊息在"Dialog 物件"上 , 再同時執行這兩個程式 , Window 焦點放在負責發送訊息的AP上...再去觀察另一個AP就知道了... ===================引 用 istillloving 文 章=================== 大大您好: 我試過了用VK_也是不行 會不會是他只接受 較低階的訊息然後遊戲在自己模擬成鍵盤事件 ===================引 用 HUNK999 文 章=================== 猜的: 你的記錄檔Keyboard的確有按到... 可能是... 線上Game 只接受Virtual Key 的訊息(VM_XXXX) , 不是Keyboard 標準的訊息 (WM_XXXX) ===================引 用 istillloving 文 章=================== 各位大大: 小弟想寫一隻程式可以送出鍵盤訊息 而我也在網路上找到符合我需求的資訊 也寫了一支程式 的確也能正確的發送鍵盤訊息至TXT檔內 可是奇怪的是當我打開線上遊戲以後 再開啟我所寫的程式並且執行 卻發現在遊戲中 沒有做出相對應鍵盤訊息的動作 我以為我寫的程式並沒有執行 所以我回到桌面開啟TXT檔 結果我的程式的確是有在跑 也一直持續送出訊號 例如:在TXT檔內可以一直寫入字母K 但是在遊戲裡面卻不會執行K所對應的動作 而且我弟弟今天去買搖桿 附加的軟體卻可以把搖桿訊息模擬成鍵盤訊息 也能在TXT檔和遊戲中產生對應的動作 這到底是為什麼呢 附上我的程式碼 哪裡出錯了......麻煩各位了 我是用TIMER去連續發出訊號的 [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; float JUMP,DRING; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { DoubleBuffered=true; Timer1->Enabled=false; Timer2->Enabled=false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { JUMP =StrToFloat(Form1->Edit1->Text); DRING =StrToFloat(Form1->Edit2->Text); Timer1->Interval=100*JUMP; Timer1->Enabled=true; Timer2->Interval=100*DRING; Timer2->Enabled=true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Timer1->Enabled=false; Timer2->Enabled=false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { int keyA=65; keybd_event(keyA, MapVirtualKey(keyA,0),WM_LBUTTONDOWN ,0); keybd_event(keyA, MapVirtualKey(keyA,0),WM_LBUTTONUP ,0); } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer2Timer(TObject *Sender) { int keyB=66; keybd_event(keyB, MapVirtualKey(keyB,0), WM_LBUTTONDOWN ,0); keybd_event(keyB, MapVirtualKey(keyB,0),WM_LBUTTONUP ,0); } //--------------------------------------------------------------------------- [/code]
編輯記錄
HUNK999 重新編輯於 2009-08-07 23:44:15, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |