我使用Process.Start()
从我的程序中打开了一个记事本,但新打开的记事本覆盖了屏幕。但我确实希望我的应用程序能够保持其重点。如何在打开过程(记事本)后将焦点设置回窗体?
我类似(使用相同的Process.Start)打开MS Excel和Word,但让焦点回到我的形式,我需要写的是:
this.Focus();
但是用记事本怪癖:我打开记事本(以及所有其他类似的过程)
Process process = new Process();
process.StartInfo.UseShellExecute = true;
process.EnableRaisingEvents = true;
process.StartInfo.FileName = @"abc.log";
process.Start();
现在记事本占据了焦点。
我尝试这些:
this.Activate()
,this.Focus()
,不用提[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)] public static extern IntPtr SetFocus(HandleRef hWnd); { IntPtr hWnd = myProcess.Handle; SetFocus(new HandleRef(null, hWnd)); }
[DllImport("User32")] private static extern int SetForegroundWindow(IntPtr hwnd); [DllImportAttribute("User32.DLL")] private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); private const int SW_SHOW = 5; private const int SW_MINIMIZE = 6; private const int SW_RESTORE = 9; { ShowWindow(Process.GetCurrentProcess().MainWindowHandle, SW_RESTORE); SetForegroundWindow(Process.GetCurrentProcess().MainWindowHandle); }
另一个更长的解决方案,从here了。
所有这些仍然把重点放在记事本上。为什么仅仅把焦点放在一个窗口上太难了,应用程序自己的窗口也是如此?
编辑:至多我可以打开记事本最小化,但它仍然不会在尝试所有上述代码后将焦点放在窗体上。记事本打开时最小化,但重点仍然放在记事本上(有时我们在Windows XP中看到的东西),而形式将会失去重点。
它是确定启动窗口处于最小化状态? – NoviceProgrammer 2012-01-16 14:14:16
是的,没关系,但它仍然不起作用。我会在我的问题中更新 – nawfal 2012-01-16 14:14:57
你试过这个吗? http://stackoverflow.com/questions/2121911/starting-a-process-without-stealing-focus-c – NoviceProgrammer 2012-01-16 14:17:37