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

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

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

Re[2]: IME がオフで SendInput で文字列を入力には


(過去ログ 82 を表示中)

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

■48896 / inTopicNo.1)  IME がオフで SendInput で文字列を入力には
  
□投稿者/ ダッチ (18回)-(2010/04/15(Thu) 23:33:53)

分類:[.NET 全般] 

実行環境
Windows XP 以降
.NET Framework 3.5

開発環境
Windows Forms アプリケーション
VB or C#

こんにちは、ダッチです。

他のアプリケーションに対して、
文字列を自動で入力させるアプリケーションを作成しています。

SendInput 関数で KEYEVENTF_UNICODE を指定することで、
文字列を入力させることはできました。

しかし Windows XP では IME をオフや無効状態にしても
IME が強制的にオンになり
入力した内容が変換中の状態になってしまいます。

Windows Vista 以降では IME がオフのままで問題ありません。

SendKeys.Send メソッドだと XP でも IME がオフのままになるので、
これが理想なのですが、^ を送信すると & になるなど、
キーボードの種類によって問題が発生するので、使用したくありません。

ちなみに IME をオフにするには WM_IME_CONTROL メッセージで
IMC_SETOPENSTATUS を送信しました。

IME を無効にするには ImmAssociateContext 関数を使用しました。

Windows XP でも IME がオフの状態であれば
そのまま文字列を入力できる方法はありませんでしょうか?

よろしくお願いいたします。
引用返信 編集キー/
■48899 / inTopicNo.2)  Re[1]: IME がオフで SendInput で文字列を入力には
□投稿者/ 魔界の仮面弁士 (1625回)-(2010/04/15(Thu) 23:42:45)
No48896 (ダッチ さん) に返信
> Windows XP でも IME がオフの状態であれば
> そのまま文字列を入力できる方法はありませんでしょうか?

送信先が (Rich)TextBox/EditBox に限定されるのであれば、
WM_SETTEXT を送出するという手がありますが、それが使えないなら、
やはり SendInput という事になるかと思います。

引用返信 編集キー/
■48917 / inTopicNo.3)  Re[2]: IME がオフで SendInput で文字列を入力には
□投稿者/ ダッチ (19回)-(2010/04/16(Fri) 11:31:34)
No48899 (魔界の仮面弁士 さん) に返信
回答ありがとうございます。

SendKeys.Send メソッドは SendInput 関数とは別の方法でやっているんでしょうね。

> IME を無効にするには ImmAssociateContext 関数を使用しました。
と書いたのですが、もう一度試してみたところ
ImmAssociateContext 関数が失敗して IME を無効にできていませんでした。

自身のアプリケーションの TextBox では IME を無効にでき、
SendInput 関数を使用して IME が無効のまま文字列を入力することができました。

他のアプリケーションに対してImmAssociateContext 関数が成功すれば、
解決できそうなのですが、
なぜ失敗するのかわかりません。

他の方法で IME を無効にする方法も見つけられませんでした。

ImmAssociateContext 関数に渡す引数には
GetGUIThreadInfo 関数で取得した GUITHREADINFO 構造体の hwndFocus の値を渡しています。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -