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

傳送大寫鍵

答題得分者是:ccchen
鈴鐺
初階會員


發表:33
回覆:81
積分:35
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-19 22:33:27 IP:61.220.xxx.xxx 未訂閱
要傳送'A' 到別人寫的程式 PostMessage(edit1.Handle, WM_KEYDOWN, 65, 0); 這樣字送出去的會依照目前鍵盤是 CapsLock ON -> 大寫 CapsLock OFF -> 小寫 請問, 該如何強迫大寫呢?(還要考慮 shift 按鍵) 發表人 - 鈴鐺 於 2002/09/19 23:29:31
MouseK
一般會員


發表:0
回覆:1
積分:0
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-19 23:16:55 IP:211.74.xxx.xxx 未訂閱
將edit的CharCase設成ecUpperCase 這樣所有輸入在edit中的英文字都會變成 大寫的
鈴鐺
初階會員


發表:33
回覆:81
積分:35
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-19 23:28:35 IP:61.220.xxx.xxx 未訂閱
Sorry, 問題沒講清楚, 我要傳送到別人寫的程式
引言: 將edit的CharCase設成ecUpperCase 這樣所有輸入在edit中的英文字都會變成 大寫的
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-20 22:18:19 IP:203.217.xxx.xxx 未訂閱
用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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-24 15:20:25 IP:61.220.xxx.xxx 未訂閱
我後來找到解法, 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 倒是另一個不錯的做法.
系統時間:2024-04-19 11:42:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!