スクリーンキーボード osk.exe


NANA  2007-08-28 09:56:59  No: 99369

VB6
よろしくお願いします。

スクリーンキーボード(osk.exe)に
SendMessageをおくっても受け付けないのですが
良い方法はありませんか?


かさのば  2007-08-28 10:09:27  No: 99370

それだけじゃ何だかよく分からないです。

取り合えず過去ログ検索「SendMessage」でどうぞ。


NANA  2007-08-28 23:55:07  No: 99371

すいません。

WINDOWS標準のスクリーンキーボード(osk.exe)を起動後
ボタンのハンドルを取得してBM_CLICKをSendMessageで送っているのですが
反応してくれません。
スクリーンキーボード(osk.exe)が特殊なのでしょうかね??


オショウ  2007-08-29 00:23:24  No: 99372

SPY++使ってメッセージがどう流れているのか見て
見ましたが・・・通常のWindow中の操作の流れで
は無いようです。

何もウィンドウメッセージが捕捉できませんでした。

よって、SendMessageやPostMessageでコードを送信
しても動作しないと思います。

時間があれば調べるのですが、今のところ解決する
方法は知りません。あしからず・・・

以上。


YuO  2007-08-29 12:12:43  No: 99373

SPY++で追ってみました。ある意味メチャクチャです。
# Vista Ultimate + Visual Studio 2005

まずは,Vista自身の仕組みによるものから。

osk.exeは整合性レベル高で走っています。
そのため,SPY++をそのまま起動したのでは整合性レベル中で起動してしまうため,ウィンドウメッセージを捕捉することはできません。
オショウさんがウィンドウメッセージを調べることができなかったのは,そのためだと思います。
管理者として実行を行えば,整合性レベル高で起動できるので,ウィンドウメッセージを捕捉することができます。

でもって,同じ事がNANAさんのプログラムにも言えます。
つまり,「管理者として実行」を行わない限り,osk.exeにメッセージを送信することはできません。
# 検索キーワード:MIC (必須整合性コントロール),UIPI (ユーザーインターフェイス特権の分離)

次に,osk.exe自体の都合です。
osk.exe自体は,メインウィンドウに他のボタンではないと思われるウィンドウが載っている状態になっています。
そしてキーをクリックすると,
・WM_LBUTTONDOWNはキーのウィンドウに送られる
・WM_LBUTTONUPはメインウィンドウに送られる
ということになっています。また,この一連の流れの中で,WM_COMMANDは関係していません。
よって,BM_CLICKではなく,WM_LBUTTONDOWN/UPを制御する必要があります。

# よもや,こんなところでTech ED (@T2-403) の話が役に立つとは……。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加