2015-09-02 16 views
1

Я строй C# WPF приложения, которое работает на Windows 8 таблетки, и я называю виртуальную клавиатуру в моем приложении, например:Установите положение окна программы

Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "osk.exe"); 

Я бы чтобы узнать, есть ли способ установить положение окна клавиатуры на моем планшете, когда я открою его первым. Нечто подобное добавление XY координаты Process.Start

Благодарности

ответ

1

Манипулирования окна 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);