我正在构建一个在Windows 8平板电脑上运行的C#wpf应用程序,我在我的应用程序中调用虚拟键盘,如下所示:
Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "osk.exe");
我想知道当我先打开它时,是否有办法在平板电脑上设置键盘窗口的位置。类似于将XY坐标添加到Process.Start
由于
答案 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);