キーボードを起動できません

1520 ワード

今日、アプリケーションを作成するときに、システムのスクリーン仮想キーボードを呼び出す必要があります.こんなに簡単な呼び出しで問題が発生するとは思いませんでした.「スクリーンキーボードを起動できません.「エラー.ShellExcute、CreateProcess、WinExec、systemといったさまざまな呼び出し方法を試してもうまく呼び出せませんでした.しかし、不思議なことにコマンドラインやプログラム->実行中に呼び出すのは正常です.仕方なく、C:WindowsSystem 32osk.exeプログラムを現在のディレクトリにコピーしてからプログラムを実行しようとしましたが、呼び出すことに成功しました.
以下はまず本人の仕事環境を渡します:win 7 64ビットシステム、win 32プログラムをコンパイルして、win 32プログラムの中でシステムのスクリーンキーボードを呼び出します.
これで大丈夫かと思ったら、32ビットシステムにプログラムを入れて呼び出してまた問題が発生しました.最後にgoogle大神に助けを求めた.やっとmsdnフォーラムで答えを見つけました:64ビットシステムでは32ビットを直接呼び出すアプリケーションを呼び出すことは許可されていません.呼び出しシステムが32ビットプログラムを64ビットプログラムにシミュレートするのに役立ちます.
この問題には、2つの解決策がある:1)XP 32ビットのoskのような32ビットバージョンの実行ファイルを提供する.exeはエンジニアリングファイルにコピーされます.2)Wow 64 DisableWow 64 FsRedirection関数によってWowシミュレーションの判定とクローズを呼び出す.使用方法は次のとおりです.
PVOID OldValue;
BOOL bRet = Wow64DisableWow64FsRedirection (&OldValue);

ShellExecute(this->GetSafeHwnd(),_T("open"),_T("osk.exe"),_T(""),_T(""),SW_SHOW);

if (bRet) { 
     Wow64RevertWow64FsRedirection(OldValue); 
}

Wow 64 DisableWow 64 FsRedirection機能は、wowシミュレーション機能をオフにし、現在の状態を取得します.Wow 64 RevertWow 64 FsRedirectionは、状態を回復するために使用されます.
参考文献:
【1】Error when opening On-Screen keyboard in windows 7 - "Could not start On-Screen keyboard"[OL]. http://social.msdn.microsoft.com/Forums/en-GB/vbgeneral/thread/e9252bb7-1df0-4826-880f-ad0a636a18cd
32ビットプログラムが64ビットシステム上でレジストリとファイルにアクセスする自動転向問題[OL]に対応する.http://www.cnblogs.com/FlyingBread/archive/2007/01/21/624291.html