Манипулирования окна OSK потребует вашего процесса будет запущенно приподнято. (OSK обладает определенными привилегиями, что означает, что нельзя манипулировать процессами, которые не повышаются). Но если ваше приложение работает с повышенным уровнем, вы должны найти код ниже.
Обратите внимание, что после запуска OSK необходимо найти окно OSK, а не получать MainWindowHandle из объекта Process после вызова Start(). Из-за того, что OSK запускается, вы обнаружите, что свойство HasExited объекта Process является истинным, а MainWindowHandle недоступно.
Спасибо,
Guy
private void buttonLaunchOSK_Click(object sender, EventArgs e)
{
// Launch the OSK.
Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "osk.exe");
// Wait a moment for the OSK window to be created.
Thread.Sleep(200);
// Find the OSK window.
IntPtr hwndOSK = Form1.FindWindow("OSKMainClass", null);
// Move and size the OSK window.
Form1.MoveWindow(hwndOSK, 0, 0, 800, 300, true);
}
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string className, string windowTitle);
[DllImport("user32.dll", SetLastError = true)]
internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);