傳送大寫鍵 |
答題得分者是:ccchen
|
鈴鐺
初階會員 發表:33 回覆:81 積分:35 註冊:2002-03-13 發送簡訊給我 |
|
MouseK
一般會員 發表:0 回覆:1 積分:0 註冊:2002-07-11 發送簡訊給我 |
|
鈴鐺
初階會員 發表:33 回覆:81 積分:35 註冊:2002-03-13 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
用keybd_event模擬鍵盤吧,下例提供你參考, 我想你應該可以很容易包裝成一個"Sendkeys " procedure 供以後使用
procedure TForm1.Button1Click(Sender: TObject); var npad:HWND; i,j:integer; begin //須先閞NotePad Npad := FindWindow(nil, '未命名 - 記事本'); if npad <> 0 then begin BringWindowToTop(Npad); //使其成為focus之window for j:=1 to 5 do begin for i := ord('A') to ord('Z') do begin //大小寫均同 keybd_event(i, 0, 0, 0); //keydown此鍵 keybd_event(i, 0, KEYEVENTF_KEYUP, 0); //keyup keybd_event(VK_SHIFT, 0, 0, 0); //按著Shift ,使成為大寫 keybd_event(I, 0, 0, 0); //keydown keybd_event(I, 0, KEYEVENTF_KEYUP, 0); //keyup keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); //放開shift end; keybd_event(VK_RETURN, 0, 0, 0); //換行 keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); end; end; end;[note] 1. 既是要送到別人的AP,用postmessage可能中途就被處理掉了不是一定成功, 而且一定要找到ClientWindow(例如你的Edit1),不如直接用keybd_event模擬鍵盤 2. 若一定要用postmessage, 還不如用SendMessage.( 同樣要用shift) 發表人 - CCCHEN 於 2002/09/20 22:25:33 |
鈴鐺
初階會員 發表:33 回覆:81 積分:35 註冊:2002-03-13 發送簡訊給我 |
我後來找到解法, by Spy 結果反推回去. 比方說要傳送 RETURN, 不是只有傳一個訊息即可.
SendMessage(h, WM_KEYDOWN, VK_RETURN, (($1C shl 16) or 1));
SendMessage(h, WM_CHAR, 13, (($1C shl 16) or 1));
SendMessage(h, WM_KEYUP, VK_RETURN, (($1 shl 30) or ($1C shl 16) or 1)); 同理, 我原本程式, 傳送 'A' 時, 應先送
KEYDOWN,'a'
WM_CHAR,'A'
KEYUP,'a' 才能正常運作, 省略掉後面的 message, 會有意外發生. ccchen 兄所說的 keybd_event 倒是另一個不錯的做法.
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |