線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2246
推到 Plurk!
推到 Facebook!

如何讓TrayIcon內的輸入法進行更新?

尚未結案
babyfish0226
一般會員


發表:9
回覆:82
積分:23
註冊:2002-06-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-30 19:20:43 IP:61.58.xxx.xxx 未訂閱
我的目的是想寫一支讓使用者選了一組輸入法之後(如注音),就把系統內安裝的所有輸入法全部移除,只保留所選擇的輸入法。    程式的畫面如下: 目前我採取的方式是去編修系統內的登錄資料,這點沒有問題,不過問題來了,在TrayIcon內的輸入法內容卻找不到方法可以進行更新,我試過將 internat 關閉後再開始也沒用,找遍網站及各函式似乎也不得其門而入,浪費了一天只好上來請各位高手相助。 魔法兔子輸入法內的功能,在按完儲存之後馬上就能產生效果,不曉得是如何做到的?移除輸入法的ICON然後再加入?還是本來就有既定的函式可以用? 感恩~~~
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-02 22:56:54 IP:61.224.xxx.xxx 未訂閱
應觀眾要求... 硬著頭皮來回答了 < > 這篇在前幾天剛發時,我就看了,當時看了標題,想說才玩過輸入法切換,應該可以來撈個分數,沒想到看到題目才知道不是那麼容易 < > 因為目前我自己只有 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.
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);
}
如果您的系統不是 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....
------
http://www.ViewMove.com
babyfish0226
一般會員


發表:9
回覆:82
積分:23
註冊:2002-06-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-03 02:37:08 IP:61.58.xxx.xxx 未訂閱
感謝 dllee ,說實在的,我也是找資料找到受不了才Po上來。 我的開發環境是win2k pro,魔法兔子也確定是ok,看他的運作真的好像是先關閉然後再開啟,因為輸入法的圖示會先消失然後出現。 我試過關閉internat 及 ctfmon 似乎都沒辦法馬上更新,我找過msdn,其中有一個函數是 imminquire ,好像是提供輸入法初始化的動作,不過試不出來~~ 我想我再用您所提到的 Spyxx 去攔截看看好了~~ 好累呀,有這麼困難嗎?人家兔子都做得到~~哪有寫不出來的道理?! 繼續陷入DeadLock的死結中~~~
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-03 12:47:47 IP:61.231.xxx.xxx 未訂閱
沒辦法,訊息(Message)實在是太多了  另外,給您一個建議,自己寫一個! 我相信您的程式功力應該不錯,參考我的 >沒空更新的網頁... href="http://dllee.adsldns.org">http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
babyfish0226
一般會員


發表:9
回覆:82
積分:23
註冊:2002-06-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-16 22:36:35 IP:61.58.xxx.xxx 未訂閱
翻遍了msdn 總算試出來了,兩個api function就可以達到新增與移除輸入法。 原型 HKL LoadKeyboardLayout(LPCTSTR pwszKLID,UINT Flags); BOOL UnloadKeyboardLayout(HKL hkl); 之前就知道這兩支東西,只是不會用所以也試不出來~~ 原來~~就這麼Easy..唉 Coding 真是一個令人又愛又恨的工作~~
babyfish0226
一般會員


發表:9
回覆:82
積分:23
註冊:2002-06-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-16 22:38:32 IP:61.58.xxx.xxx 未訂閱
補充: 輸入法的登錄資料似乎仍然必須手動新增、修改或移除。
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-17 20:17:55 IP:61.224.xxx.xxx 未訂閱
感謝分享  <>沒空更新的網頁... href="http://dllee.adsldns.org">http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
系統時間:2024-07-02 11:14:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!