111,124
社区成员
发帖
与我相关
我的任务
分享private void textBox1_MouseClick(object sender, MouseEventArgs e)
{
bool have = false;//是否已经启动了OSK
Process[] pro = Process.GetProcesses();//获取已开启的所有进程
for (int i = 0; i < pro.Length; i++)
{
//判断此进程是否是要查找的进程
if (pro[i].ProcessName.ToString().ToLower() == "osk")
{
SetWindowPos(pro[i].MainWindowHandle, HWND_TOPMOST, 0, 0, 800, 600, SWP_NOSIZE | SWP_NOZORDER | SWP_NOZORDER | SWP_SHOWWINDOW);//如果OSK存在,则设置OSK出现在(0,0)位置
SetForegroundWindow(this.Handle);
have = true;
break;
}
}
if (have == false)
{
bool haveWarn = false;//是否报过错误提醒了
bool haveOsk = false;//是否成功启动了OSK软件
Process p = Process.Start(Application.StartupPath + "\\osk.exe");
p.WaitForInputIdle();
Thread.Sleep(500);
System.Timers.Timer wait3s = new System.Timers.Timer(3000);//3s启动不了OSK则报错误提醒
wait3s.Elapsed += (s, ee) =>
{
wait3s.Enabled = false;
haveWarn = true;
this.Invoke(new Action(() =>
{
Common.FrmWarning myWarningWindow = new Common.FrmWarning("错误提醒", "无法打开虚拟键盘,请检查后重新尝试。");
myWarningWindow.Owner = this;
myWarningWindow.ShowDialog();
}));
};
while (haveOsk == false)
{
if (wait3s.Enabled == false)
{
wait3s.Enabled = true;
}
//Process[] pro2 = Process.GetProcesses();
//foreach(Process h in pro2)
//{
// if (h.ProcessName.ToString().ToLower() == "osk")
// {
// haveOsk = true;
// }
//}
if (p.HasExited == false)
{
haveOsk = true;
}
if (haveWarn)
{
wait3s.Enabled = false;
return;
}
Application.DoEvents();
}
wait3s.Enabled = false;
SetWindowPos(p.MainWindowHandle, HWND_TOPMOST, 0, 0, 800, 600, SWP_NOSIZE | SWP_NOZORDER | SWP_NOZORDER | SWP_SHOWWINDOW);//如果OSK存在,则设置OSK出现在(0,0)位置
//MoveWindow(p.MainWindowHandle, 0, 0, 800, 200, true);
SetForegroundWindow(this.Handle);
have = false;
}
}