设置程序窗口的位置

时间:2015-09-02 12:11:32

标签: c# wpf

我正在构建一个在Windows 8平板电脑上运行的C#wpf应用程序,我在我的应用程序中调用虚拟键盘,如下所示:

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

我想知道当我先打开它时,是否有办法在平板电脑上设置键盘窗口的位置。类似于将XY坐标添加到Process.Start

的内容

由于

1 个答案:

答案 0 :(得分:1)

操作OSK窗口将要求您的进程升级。 (OSK具有某些特权,这意味着它不能被未被提升的进程操纵。)但是,如果您的应用程序正在升级,您应该会发现下面的代码有效。

请注意,您需要在启动OSK后找到OSK窗口,而不是在调用Start()后从Process对象获取MainWindowHandle。由于OSK启动的方式,您会发现Process对象上的HasExited属性为true,并且MainWindowHandle不可用。

谢谢,

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);