• ベストアンサー

C♯で言語バーをデスクトップ上でフロート表示する?

言語バーのアイコンをクリック ⇒ 設定を選択 ⇒ TabControl(耳のついている奴)の中から言語バーを選択 ⇒ デスクトップ上でフロート表示する の操作を行うとタスクバーにあった言語バーがデスクトップに移動します これと同じことをC#でプログラム的に行うにはどの様にすれば良いのでしょうか???調べたのですが分かりません、教えてください、お願い申し上げます

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

参照の追加のリストには表示されないようなので、ComImport を使ってやってみました。 using System; using System.Runtime.InteropServices; namespace FloatLangBar { class Program { static Guid CLSID_TF_LangBarMgr = new Guid("EBB08C45-6C4A-4FDC-AE53-4EB8C4C7DB8E"); [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("00000000-0000-0000-C000-000000000046")] public interface IUnknown { IntPtr QueryInterface(ref Guid riid); [PreserveSig] UInt32 AddRef(); [PreserveSig] UInt32 Release(); } [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("87955690-e627-11d2-8ddb-00105a2799b5")] public interface ITfLangBarMgr { int AdviseEventSink(IUnknown pSink, IntPtr hwnd, uint dwFlags, ref uint pdwCookie); int UnadviseEventSing(uint dwCookie); int GetThreadMarshalInterface(uint dwThreadId, uint dwType, [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid, ref IntPtr ppunk); int GetThreadLangBarItemMgr(uint dwTrheadId, ITfLangBarMgr pplbi, uint pdwThreadid); int GetInputProcessorProfiles(uint dwThreadId, ref IUnknown ppaip, ref uint pdwThreadId); int RestoreLastFocus(ref uint pdwThreadId, [MarshalAs(UnmanagedType.Bool)] bool fPrev); int SetModalInput(IUnknown pSink, uint dwThreadId, uint dwFlags); int ShowFloating(uint dwFlags); int GetShowFloatingStatus(ref uint pdwFlags); } static void Main(string[] args) { try { Type classtype = Type.GetTypeFromCLSID(CLSID_TF_LangBarMgr, true); ITfLangBarMgr tflbm = (ITfLangBarMgr)Activator.CreateInstance(classtype); if (tflbm != null) { tflbm.ShowFloating(1); Marshal.ReleaseComObject(tflbm); tflbm = null; } } catch (Exception e) { Console.WriteLine(e.Message); } } } }

sato-may
質問者

お礼

出来ました 本当に助かりました

その他の回答 (1)

回答No.1

とりあえず、C++ だと #include <windows.h> #include <Ctfutb.h> int main() { ITfLangBarMgr *pLangBarMgr; CoInitialize( NULL ); HRESULT hr = CoCreateInstance( CLSID_TF_LangBarMgr, NULL, CLSCTX_INPROC_SERVER, IID_ITfLangBarMgr, (void**)&pLangBarMgr ); if( hr == S_OK ) { pLangBarMgr->ShowFloating( TF_SFT_SHOWNORMAL ); } else { MessageBox( NULL, _T("CoCreateInstance Error."), _T("Test"), MB_ICONINFORMATION ); } CoUninitialize(); return 0; } のようになります。 これを C# で実装すればいいのですが、私の環境 ( Windows7 ) では、参照設定にはそれらしいものが見当たりませんでした。

参考URL:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms628765(v=VS.85).aspx
sato-may
質問者

お礼

ありがとうございます ・・・・・ でもC++はあまり得意ではないので ・・・・・ 上のご回答で助かりました

関連するQ&A