osk.exe 开启非常容易,但是进程关闭确实关闭不了
没办法只能通过句柄去关闭他
开启键盘:
int oskID = System.Diagnostics.Process.Start("osk").Id;
初始化系统API
static class WindowsApi
{
const int WM_CLOSE = 0x0010;
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "FindWindowEx", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, uint hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam);
[DllImport("user32.dll", EntryPoint = "SetForegroundWindow", SetLastError = true)]
public static extern void SetForegroundWindow(IntPtr hwnd);
[DllImport("user32.dll")]
public static extern int EnumChildWindows(IntPtr hWndParent, CallBack lpfn, int lParam);
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
public delegate bool CallBack(IntPtr hwnd, int lParam);
}
获取句柄
IntPtr hwnd = tool.WindowsApi.FindWindow(null, "屏幕键盘");
关闭窗口
tool.WindowsApi.SendMessage(hwnd, 0x10, 0, 0);