如何讓TrayIcon內的輸入法進行更新? |
尚未結案
|
babyfish0226
一般會員 發表:9 回覆:82 積分:23 註冊:2002-06-14 發送簡訊給我 |
我的目的是想寫一支讓使用者選了一組輸入法之後(如注音),就把系統內安裝的所有輸入法全部移除,只保留所選擇的輸入法。 程式的畫面如下:
目前我採取的方式是去編修系統內的登錄資料,這點沒有問題,不過問題來了,在TrayIcon內的輸入法內容卻找不到方法可以進行更新,我試過將 internat 關閉後再開始也沒用,找遍網站及各函式似乎也不得其門而入,浪費了一天只好上來請各位高手相助。 魔法兔子輸入法內的功能,在按完儲存之後馬上就能產生效果,不曉得是如何做到的?移除輸入法的ICON然後再加入?還是本來就有既定的函式可以用? 感恩~~~
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
應觀眾要求... 硬著頭皮來回答了 < > 這篇在前幾天剛發時,我就看了,當時看了標題,想說才玩過輸入法切換,應該可以來撈個分數,沒想到看到題目才知道不是那麼容易 < > 因為目前我自己只有 XP 可以測試,而 internat 這個東西是在 NT/2K/98/Me 才有的東西,在 XP 的語言工具列是 ctfmon.exe 。而我有試過將 ctfmon 由工作管理員結束它,更新語言後再執行 ctfmon 就會更新。
以下取只我在 geoshell 討論區的 post 主要是切換顯示 XP 的語言工具列:
http://www.geoshell.com/board/forum_posts.asp?TID=623&PN=1&TPN=3
引言: The following if my code for Show/Hide the XP Language bar, it work on my xp, and should work on others, just for any one who will add the feature to some plugins.如果您的系統不是 XP 而您也試過關閉 internat 更新設定後再執行還是不更新的話,建議您一個方法,您可以使用 Spyxx(VC的工具) 或類似的軟體去攔 Windows Message,如果您確定魔法兔子可以使 internat 立刻作用,如果它不是使用關閉再開的方法,那就可能需要傳 Message 給它,用可以攔 Message 的軟體去 trace 看看。 以我完成那個輸入法切換的測試程式,在 MSDN 上找了很久也找不到(因為方向錯誤),後來就用 Spyxx 去攔訊息,總算是給我攔到!否則,那麼多的 Message 實在是很難猜得到。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....void HideXPLanguageBar(void) { HWND hWndXPLanguageBar=FindWindow(NULL, "TF_FloatingLangBar_WndTitle"); if(hWndXPLanguageBar!=NULL) { SetWindowPos(hWndXPLanguageBar, 0, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE + SWP_NOZORDER + SWP_NOACTIVATE + SWP_HIDEWINDOW); } } void ShowXPLanguageBar(void) { // Step1 : Kill process ctfmon.exe DWORD dwProcessID; GetWindowThreadProcessId(hWndXPLanguageBar,&dwProcessID); HWND hWndXPLanguageBar=FindWindow(NULL, "TF_FloatingLangBar_WndTitle"); if(hWndXPLanguageBar!=NULL) { HANDLE hProcess=OpenProcess(PROCESS_TERMINATE|PROCESS_VM_READ, false,dwProcessID); bool bOK=TerminateProcess(hProcess,1); } // Step2 : Change Setting, you may also change other settings TRegistry *Reg=new TRegistry; Reg->RootKey=HKEY_CURRENT_USER; if (Reg->OpenKey("\\SOFTWARE\\Microsoft\\CTF\\LangBar",true)) { Reg->WriteInteger("ShowStatus",0); Reg->CloseKey(); } delete Reg; // Step3 : Run ctfmon.exe again ShellExecute(Application->Handle, "open", "ctfmon.exe",NULL,NULL,SW_SHOWNORMAL); }
------
http://www.ViewMove.com |
babyfish0226
一般會員 發表:9 回覆:82 積分:23 註冊:2002-06-14 發送簡訊給我 |
感謝 dllee ,說實在的,我也是找資料找到受不了才Po上來。 我的開發環境是win2k pro,魔法兔子也確定是ok,看他的運作真的好像是先關閉然後再開啟,因為輸入法的圖示會先消失然後出現。 我試過關閉internat 及 ctfmon 似乎都沒辦法馬上更新,我找過msdn,其中有一個函數是 imminquire ,好像是提供輸入法初始化的動作,不過試不出來~~ 我想我再用您所提到的 Spyxx 去攔截看看好了~~ 好累呀,有這麼困難嗎?人家兔子都做得到~~哪有寫不出來的道理?! 繼續陷入DeadLock的死結中~~~
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
|
babyfish0226
一般會員 發表:9 回覆:82 積分:23 註冊:2002-06-14 發送簡訊給我 |
|
babyfish0226
一般會員 發表:9 回覆:82 積分:23 註冊:2002-06-14 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |