テキストボックスがフォーカスされたときに仮想キーボードを実行していますが、キーボードアプリがフォーカスされ、キーをテキストボックスに転送しません。テキストボックスをクリックして有効にすると、すべて問題ありませんが、vKeyboard プロセスの実行後にアプリケーションを有効にしたいと考えています。これは私がこれまでに試したことです:
[DllImport("user32.dll")]
static extern bool PostMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
....
vKeyboard = Process.Start(keyboardPath);
SetFocusToApplication(handle);
....
private static void SetFocusToApplication(IntPtr handle)
{
Process currentProcess = Process.GetCurrentProcess();
IntPtr hWnd = currentProcess.MainWindowHandle;
if (hWnd != IntPtr.Zero)
{
SetForegroundWindow(handle);
ShowWindow(hWnd,3);
}
}
また、Alt + Tab をキーボード プロセスに送信しようとしましたが、機能しません。
private static void AltTab(IntPtr handle)
{
vKeyboard.WaitForInputIdle();
int WM_SYSCOMMAND = 0x0112;
int SC_PREVWINDOW = 0xF050;
PostMessage(vKeyboard.MainWindowHandle, WM_SYSCOMMAND, (IntPtr)SC_PREVWINDOW, (IntPtr)0);
}
PS: 仮想キーボードのソース コードを持っていますが、そこからそれ自体を非アクティブ化することができれば問題ありません。お知らせ下さい。また、キーボードの一番上のプロパティがtrueに設定されていますが、それが異なるかどうかはわかりません。
これは私が試しているコードで、ボタンクリックで機能しません:
Process vKeyboard;
string keyboardPath = Application.StartupPath + "\\vKeyboard.exe";
vKeyboard = Process.Start(keyboardPath);