Я открываю блокнот из своей программы, используя 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)]
общедоступный статический extern IntPtr SetFocus (HandleRef hWnd);
{
IntPtr hWnd = myProcess.Ручка;
SetFocus (новый HandleRef (null, hWnd));
}
[DllImport ("User32")]
частный статический extern int SetForegroundWindow (IntPtr hwnd);
[DllImportAttribute ("User32.DLL")]
частный статический extern bool ShowWindow (IntPtr hWnd, int nCmdShow);
частная константа int SW_SHOW = 5;
частная константа int SW_MINIMIZE = 6;
частная константа int SW_RESTORE = 9;
{
ShowWindow (Process.GetCurrentProcess (). MainWindowHandle, SW_RESTORE);
SetForegroundWindow (Process.GetCurrentProcess (). MainWindowHandle);
}
Другое более длинное решение получено из здесь .
Все, что по-прежнему держит в центре внимания блокнот. Почему так сложно просто переключить фокус на окно, это тоже собственное окно приложения?
РЕДАКТИРОВАТЬ: В лучшем случае я могу открыть блокнот в свернутом виде, но он все равно не переключит фокус на форму после попытки всего вышеперечисленного коды. Блокнот открывается в свернутом виде, но фокус по-прежнему будет на блокноте (что иногда мы видим в Windows XP), а форма будет не в фокусе.