C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: C# APIを用いてのIME変更


(過去ログ 138 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■81363 / inTopicNo.1)  C# APIを用いてのIME変更
  
□投稿者/ 微熱 (1回)-(2016/09/11(Sun) 18:49:24)

分類:[C#] 


Windows8、VisualStudio2013をを用いて開発をしている者です。

テキストボックスコントロールのIMEModeプロパティを半角カナにしたいのですが、効きません。

本体設定をいじらずともAPIを用いれば半角カナの設定が出来るようですが、コードでどう書けばいいのか分かりません。

APIの呼び出し及び、半角カナの設定をどうやれば出来るのでしょうか。

やりたいこととしては
・テキストボックス入力時にIMEを半角カナにする
・その後、全角などの切り替えも可能

どなたかご教授お願いします。
引用返信 編集キー/
■81374 / inTopicNo.2)  Re[1]: C# APIを用いてのIME変更
□投稿者/ zakzak (1回)-(2016/09/12(Mon) 16:22:48)
これはWinFormですか?
WinFormであれば、
textbox1.ImeMode = Windows.Forms.ImeMode.KatakanaHalf;
でできるのですが、これではダメですか?
引用返信 編集キー/
■81376 / inTopicNo.3)  Re[2]: C# APIを用いてのIME変更
□投稿者/ 微熱 (2回)-(2016/09/12(Mon) 18:57:08)
No81374 (zakzak さん) に返信
> これはWinFormですか?
WinForm = WindowsFormってことですよね?

であれば
> textbox1.ImeMode = Windows.Forms.ImeMode.KatakanaHalf;
を記述しても効かないですね
引用返信 編集キー/
■81377 / inTopicNo.4)  Re[3]: C# APIを用いてのIME変更
□投稿者/ みい (57回)-(2016/09/12(Mon) 20:35:24)
No81376 (微熱 さん) に返信
> ■No81374 (zakzak さん) に返信
>>これはWinFormですか?
> WinForm = WindowsFormってことですよね?
>
> であれば
>>textbox1.ImeMode = Windows.Forms.ImeMode.KatakanaHalf;
> を記述しても効かないですね
Windows8は設定変更しないと駄目なようです。
過去ログ
http://bbs.wankuma.com/index.cgi?mode=al2&namber=64131&KLOG=108
引用返信 編集キー/
■81384 / inTopicNo.5)  Re[4]: C# APIを用いてのIME変更
□投稿者/ furu (67回)-(2016/09/13(Tue) 14:09:03)
知っているAPIでやってみたけど、Win8では駄目だった

[System.Runtime.InteropServices.DllImport("imm32.dll")]
extern static int ImmGetContext(IntPtr hwnd);
[System.Runtime.InteropServices.DllImport("imm32.dll")]
extern static bool ImmReleaseContext(IntPtr hwnd, int imc);
[System.Runtime.InteropServices.DllImport("imm32.dll")]
extern static bool ImmSetOpenStatus(int imc, bool isOpen);
[System.Runtime.InteropServices.DllImport("imm32.dll")]
extern static bool ImmGetConversionStatus(int imc, out uint conversion, out uint sentence);
[System.Runtime.InteropServices.DllImport("imm32.dll")]
extern static bool ImmSetConversionStatus(int imc, uint conversion, uint sentence);
	

private void textBox1_Enter(object sender, EventArgs e)
{
	var imc = ImmGetContext(Handle);
	ImmSetOpenStatus(imc, true);
	uint conversion;
	uint sentence;
	ImmGetConversionStatus(imc, out conversion, out sentence);
	conversion = conversion & 0xFFFFFF4 | 0x00000003;
	ImmSetConversionStatus(imc, conversion, sentence);
	ImmReleaseContext(Handle, imc);
}

引用返信 編集キー/
■81386 / inTopicNo.6)  Re[5]: C# APIを用いてのIME変更
□投稿者/ Hongliang (457回)-(2016/09/13(Tue) 16:34:16)
私も試したことがないのでアレですが、SetInputScope関数を使ってみてはいかがでしょうか。
https://msdn.microsoft.com/en-us/library/windows/desktop/ms629025.aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms538181.aspx
引用返信 編集キー/
■81387 / inTopicNo.7)  Re[6]: C# APIを用いてのIME変更
□投稿者/ 魔界の仮面弁士 (900回)-(2016/09/13(Tue) 18:16:10)
No81386 (Hongliang さん) に返信
> 私も試したことがないのでアレですが、SetInputScope関数を使ってみてはいかがでしょうか。

過去ログに SetInputScope の使用例があります。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=80864

半角カナなら、System.Windows.Input.InputScopeNameValue.KatakanaHalfWidth を指定します。
定数定義するのであれば const int IS_KATAKANA_HALFWIDTH = 45;
引用返信 編集キー/
■81393 / inTopicNo.8)  Re[7]: C# APIを用いてのIME変更
□投稿者/ 微熱 (3回)-(2016/09/14(Wed) 18:50:58)
No81387 (魔界の仮面弁士 さん) に返信

> 過去ログに SetInputScope の使用例があります。
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=80864
>
> 半角カナなら、System.Windows.Input.InputScopeNameValue.KatakanaHalfWidth を指定します。
> 定数定義するのであれば const int IS_KATAKANA_HALFWIDTH = 45;

参考例ありがとうございます。
色々と自作メソッド、プロパティなども追加したところ無事やりたいことができました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -