如何抓取WINDOWS系統預設的輸入法 |
尚未結案
|
chimera
初階會員 發表:62 回覆:78 積分:28 註冊:2003-03-22 發送簡訊給我 |
|
leo2568
中階會員 發表:54 回覆:124 積分:70 註冊:2003-09-21 發送簡訊給我 |
|
chimera
初階會員 發表:62 回覆:78 積分:28 註冊:2003-03-22 發送簡訊給我 |
|
AB
高階會員 發表:166 回覆:262 積分:125 註冊:2003-08-21 發送簡訊給我 |
如果你看過dllee版主的範例
【BCB】【發表】列出所有輸入法(含語言輸入)、切換輸入法、監視目前輸入法
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37920
Windows2000下指定輸入法
http://delphi.ktop.com.tw/topic.php?topic_id=18705
=====================================================
就再去網路查看看 delphi 寬(老師) 的看看或msdn 發表人 - ab 於 2003/12/17 18:21:39
|
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; ComboBox1: TComboBox; procedure FormShow(Sender: TObject); procedure ComboBox1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormShow(Sender: TObject); begin ComboBox1.Items:=Screen.Imes; //顯示目前中文輸入法種類 end; procedure TForm1.ComboBox1Change(Sender: TObject); begin Edit1.ImeName:= ComboBox1.Text; //設定中文輸入法類型 Edit1.SetFocus; end; end.網海無涯,學無止境! |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
給你一些我常用的輸入法設定, 你直接引用就可以, 但 TsysUt 是formname, 請
自行修正
private function GetIMEList(dCombobox: TComboBox): integer; function GetImeFileName: string; function SetActiveIme(sWanted: string): boolean; function SetFirstIme: boolean; function SetCloseIme: boolean; function SetKey2Ime(aObj: TWinControl): boolean; .... // 取得window內所有的輸入法 function TSysUt.GetIMEList(dCombobox: TComboBox): integer; var iHandleCount: integer; pList: array[1..nHKL_LIST] of HKL; szImeFileName: array[0..MAX_PATH] of char; sImeFileName: string; i: integer; begin // 看看是否安裝了這個輸入法 iHandleCount:= GetKeyboardLayoutList(nHKL_LIST, pList); for i:= 1 to iHandleCount do begin ImmGetDescription(pList[i], szImeFileName, MAX_PATH); sImeFileName := trim(AnsiUpperCase(StrPas(szImeFileName))); dCombobox.Items.Add(sImeFileName); end; dCombobox.Items.Strings[0]:= ''; result:= iHandleCount; end; //偵測目前作用中的輸入法檔案名稱 function TSysUT.GetImeFileName: string; var szImeFileName: array[0..MAX_PATH] of char; begin if ImmGetDescription(GetKeyboardLayout(0), szImeFileName, MAX_PATH) <> 0 then result:= AnsiUpperCase(StrPas(szImeFileName)) else result:= ''; end; // 切換到指定的輸入法 function TSysUT.SetActiveIme(sWanted: string): boolean; var iHandleCount: integer; pList: array[1..nHKL_LIST] of HKL; szImeFileName: array[0..MAX_PATH] of char; sImeFileName: string; bInstalled: boolean; i: integer; begin result:= False; sWanted:= AnsiUpperCase(sWanted); // 看看是否安裝了這個輸入法 bInstalled:= False; iHandleCount:= GetKeyboardLayoutList(nHKL_LIST, pList); for i:= 1 to iHandleCount do begin ImmGetDescription(pList[i], szImeFileName, MAX_PATH); sImeFileName := AnsiUpperCase(StrPas(szImeFileName)); if pos(sWanted,sImeFileName)>0 then begin bInstalled:= True; break; end; end; // 如果這個輸入法已安裝了, 讓那個輸入法的鍵盤分佈(KeyLayout)作用 if bInstalled then begin ActivateKeyboardLayout(pList[i], 0); result:= True; end; end; // 切換到第一個輸入法 function TSysUT.SetFirstIme: boolean; var iHandleCount: integer; pList: array[1..nHKL_LIST] of HKL; szImeFileName: array[0..MAX_PATH] of char; begin iHandleCount:= GetKeyboardLayoutList(nHKL_LIST, pList); if iHandleCount>=2 then begin ImmGetDescription(pList[2], szImeFileName, MAX_PATH); ActivateKeyboardLayout(pList[2], 0); result:= True; end else result:= False; end; // 回英數輸入法, 本輸入法假設第一組為英數 function TSysUT.SetCloseIme: boolean; var iHandleCount: integer; pList: array[1..nHKL_LIST] of HKL; szImeFileName: array[0..MAX_PATH] of char; begin U_VarDef.ChangeIME:= SysUT.GetImeFileName; iHandleCount:= GetKeyboardLayoutList(nHKL_LIST, pList); if iHandleCount>0 then begin ImmGetDescription(pList[1], szImeFileName, MAX_PATH); ActivateKeyboardLayout(pList[1], 0); result:= True; end else result:= False; end; //模擬ctrl-space來切換中英文 function TSysUT.SetKey2Ime(aObj: TWinControl): boolean; begin ImmSimulateHotKey(aObj.Handle, IME_THOTKEY_IME_NONIME_TOGGLE); result:= True; end;// 取得window所有輸入法用法 GetIMEList(combobox1); // 切換到注音 (字串須依window不同版本所提供, 可用上述function查得 SetActiveIme('注音'); |
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |