FindWindow и SetForegroundWindow альтернативы?
Я ищу альтернативу старому User32.dll
версия переключения на другое приложение с FindWindow()
а также SetForegroundWindow()
,
Я нашел альтернативу первому с использованием Process.GetProcessesByName()
но я не вижу соответствующего метода для переключения (установить активный / передний план) для этого приложения.
Есть ли способ сделать это без использования старого способа с User32.dll
?
Спасибо за помощь.
РЕДАКТИРОВАТЬ
Я принял ответ @Sorceri, хотя это не тот ответ, который я искал.
4 ответа
Ответ: Нет.
Но, чтобы помочь следующему чуду, ищущему окно и активировать его из C#, вот что вы должны сделать:
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
void ActivateApp(string processName)
{
Process[] p = Process.GetProcessesByName(processName);
// Activate the first application we find with this name
if (p.Count() > 0)
SetForegroundWindow(p[0].MainWindowHandle);
}
Например, чтобы перенести блокнот на передний план, вы должны позвонить:
ActivateApp("notepad");
В качестве дополнительного примечания - для тех из вас, кто пытается вывести окно в вашем приложении на передний план, просто вызовите метод Activate().
Вы могли бы использовать SetActiveWindow
в качестве альтернативы SetForeGroundWindow
, Я бы сказал, что вы должны пройти через все функции API Windows Manipulation и посмотреть, есть ли что-то, что вы упускаете.
Также обратите внимание, что вы можете получить дескриптор System.Diagnostics.Process
объект через Process.Handle
имущество.
Альтернативой SetForeGroundWindow является AppActivate в VisualBasic.
Назови это так
Microsoft.VisualBasic.Interaction.AppActivate("WindowTitle")
Тот факт, что он находится в пространстве имен VisualBasic, не означает, что вы не можете использовать его в C#.
Полная документация здесь
Ты можешь использовать System.Diagnostics.Process Object
для эквивалента FindWindow. Там в настоящее время нет эквивалента для SetForegroundWindow. Вы захотите использовать Pinvoke с SetForgroundWindow.
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);