全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3126
推到 Plurk!
推到 Facebook!

請問這種軟體鍵盤是如何寫的呢?

答題得分者是:taishyang
kankan999
一般會員


發表:4
回覆:0
積分:0
註冊:2009-03-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-28 20:53:33 IP:122.118.xxx.xxx 訂閱
一個獨立的程式,裡面有鍵盤按鈕, 只要在這個程式按按鈕,接著focus在其它的程式,如記事本、小算盤。
那麼軟體鍵盤上的輸入都會寫在焦點所在的記事本、小算盤裡。
它是用行程通訊的方法嗎?但是如何 對 active的程式送鍵盤及滾輪訊息呢? 有沒有小範例?

http://cid-4c0e5b639d6b4485.skydrive.live.com/self.aspx/新資料夾/軟體鍵盤.rar
P.D.
版主


發表:571
回覆:3880
積分:3666
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-30 16:36:59 IP:61.67.xxx.xxx 未訂閱
好像是用SENDMESSAGE()來傳遞, 不過 API 我不熟, 本站有些討論, 你可以先搜尋一下
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-30 17:13:21 IP:118.169.xxx.xxx 訂閱
是指這個嗎?
螢幕數字鍵盤(含 Source)
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=56498
RootKit
資深會員


發表:16
回覆:357
積分:419
註冊:2008-01-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-31 11:46:02 IP:61.222.xxx.xxx 訂閱
通常有兩種
1. 使用 SendMessage(...,WM_CHAR ....
首先需找到 目標視窗->子物件。對該物件發送 Windows 假訊息。
好處,不需要讓出焦點。既使視窗在隱藏狀態下也可以用。
缺點, 頗多軟體不支援。

2. 使用 keybd_event
要仔細處理焦點,並 Active 該視窗。
好處,大部分軟體皆有用,缺點,若焦點不小心轉移就玩了。

大概這樣
kostin
一般會員


發表:18
回覆:43
積分:22
註冊:2010-03-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-11-30 18:25:52 IP:122.127.xxx.xxx 訂閱
請問 RootKit 大大
若使用keybd_event 模擬按下鍵盤
如何按下 "<" ">" "?" "-"

我試了很久 , 我猜 VK_ 之類的碼 不支援 這些按鍵
VK_ 碼 只有A~Z ,a~z, F1~F12 , 數字鍵盤上的按鍵 , 方向鍵 , 特殊功能鍵(home, esc,alt......)
請問 若我想模擬按下鍵盤上的 特殊符號鍵 ( \ ] [ / \ , . ) 等等 該怎麼辦

PS: dllee大大的程式我已將看過

若是 以下的解法 請多說一點 , 因為小弟試不出來 > < , 謝謝
SendMessage
PostMessage
keybd_event
SendInput





===================引 用 RootKit 文 章===================
通常有兩種
1. 使用 SendMessage(...,WM_CHAR ....
首先需找到 目標視窗->子物件。對該物件發送 Windows 假訊息。
好處,不需要讓出焦點。既使視窗在隱藏狀態下也可以用。
缺點, 頗多軟體不支援。

2. 使用 keybd_event
要仔細處理焦點,並 Active 該視窗。
好處,大部分軟體皆有用,缺點,若焦點不小心轉移就玩了。

大概這樣
------
工程師的世界太深奧了 ~ 總是有不斷的驚奇發生
在解決問題的當下 , 才能確認我的存在
在得到幫助的當下 , 才能發現我不孤單
老大仔
尊榮會員


發表:77
回覆:835
積分:1082
註冊:2006-07-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-12-01 10:53:37 IP:59.120.xxx.xxx 未訂閱
雖然我不是 RootKit 大大
但給你一點方向~
提示:
" < " 的由來是: " Shift , "
所以會是
keydb_event(16,0,0,0);
keydb_event(188,0,0,0);
keydb_event(16,0,KEYEVENTF_KEYUP,0);
keydb_event(188,0,KEYEVENTF_KEYUP,0);
其他的請自行測試囉~^^

至於為什麼我會知道是" , "就是 188
這個也很簡單
只要拉個Edit
在它的keydown事件中把key值給ShowMessage出來就可以了~



===================引 用 kostin 文 章===================
請問 RootKit 大大
若使用keybd_event 模擬按下鍵盤
如何按下 "<" ">" "?" "-"

我試了很久 , 我猜 VK_ 之類的碼 不支援 這些按鍵
VK_ 碼 只有A~Z ,a~z, F1~F12 , 數字鍵盤上的按鍵 , 方向鍵 , 特殊功能鍵(home, esc,alt......)
請問 若我想模擬按下鍵盤上的 特殊符號鍵 ( \ ] [ / \ , . ) 等等 該怎麼辦

PS: dllee大大的程式我已將看過

若是 以下的解法 請多說一點 ,因為小弟試不出來 > < , 謝謝
SendMessage
PostMessage
keybd_event
SendInput

christie
資深會員


發表:28
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-12-01 15:30:32 IP:59.125.xxx.xxx 未訂閱
{************************************************************}
{2. With keybd_event API}

procedure TForm1.Button1Click(Sender: TObject);
begin
{or you can also try this simple example to send any
amount of keystrokes at the same time. }

{Pressing the '<' key, and A Key and showing it in the Edit1.Text}

Edit1.SetFocus;

keybd_event(VK_SHIFT, 0, 0, 0);
keybd_event(188, 0, 0, 0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);


keybd_event(VK_SHIFT, 0, 0, 0);
keybd_event(Ord('A'), 0, 0, 0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);

{Presses the Left Window Key and starts the Run}
keybd_event(VK_LWIN, 0, 0, 0);
keybd_event(Ord('R'), 0, 0, 0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
end;



------
What do we live for if not to make life less difficult for each other?
kostin
一般會員


發表:18
回覆:43
積分:22
註冊:2010-03-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-12-10 14:18:44 IP:114.46.xxx.xxx 訂閱
感謝您的回答
我也有試過 但是我當初用的是
void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
{
Form1->Caption =int(Key);
}
而按 ' , ' 鍵 得到的碼為 44 , 所以一直卡關

您用的事件為
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,TShiftState Shift)
{
Form1->Caption =int(Key);
}
}
而按' , ' 鍵得到的碼為 188 ,

請問為什麼會得到不一樣的結果 謝謝


===================引 用 老大仔 文 章===================
雖然我不是 RootKit 大大
但給你一點方向~
提示:
" < " 的由來是: " Shift , "
所以會是
keydb_event(16,0,0,0);
keydb_event(188,0,0,0);
keydb_event(16,0,KEYEVENTF_KEYUP,0);
keydb_event(188,0,KEYEVENTF_KEYUP,0);
其他的請自行測試囉~^^

至於為什麼我會知道是" , "就是 188
這個也很簡單
只要拉個Edit
在它的keydown事件中把key值給ShowMessage出來就可以了~
------
工程師的世界太深奧了 ~ 總是有不斷的驚奇發生
在解決問題的當下 , 才能確認我的存在
在得到幫助的當下 , 才能發現我不孤單
編輯記錄
kostin 重新編輯於 2010-12-09 23:19:20, 註解 無‧
christie
資深會員


發表:28
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#9 引用回覆 回覆 發表時間:2010-12-10 17:30:55 IP:60.249.xxx.xxx 未訂閱
請看,
TWinControl.On KeyPress
Occurs when key pressed.
type TKeyPressEvent = procedure (Sender: TObject; var Key: Char) of object;

property On KeyPress: TKeyPressEvent;
D e script i o n
Use the On KeyPress event handler to make something happen as a result of a single character key press.
The Key parameter in the On KeyPress event handler is of type Char; therefore, the On KeyPress event registers the ASCII character of the key pressed. Keys that don't correspond to an ASCII Char value (Shift or F1, for example) don't generate an On KeyPress event. Key combinations (such as Shift A), generate only one On KeyPress event (for this example, Shift A results in a Key value of ?if Caps Lock is off). To respond to non-ASCII keys or key combinations, use the On KeyDown or On KeyUp event handlers.

------
What do we live for if not to make life less difficult for each other?
編輯記錄
christie 重新編輯於 2010-12-10 19:33:47, 註解 無‧
christie 重新編輯於 2010-12-10 19:35:52, 註解 無‧
系統時間:2017-10-19 6:12:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!