Альтернативы FindWindow и SetForegroundWindow?
Я ищу альтернативы старой версии User32.dll
для переключения в другое приложение с FindWindow()
и SetForegroundWindow()
.
Я нашел альтернативу первому с использованием Process.GetProcessesByName()
, но я не вижу соответствующего метода для переключения (установить активный/передний план) в это приложение.
Есть ли способ сделать это, не используя старый способ с User32.dll
?
Благодарим вас за помощь.
ИЗМЕНИТЬ
Я принял ответ @Sorceri, хотя это не тот ответ, который я искал.
Ответы
Ответ 1
Ответ: Нет.
Но, чтобы помочь следующему ищущему найти окно и активировать его с С# здесь, что вам нужно сделать:
[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");
В качестве побочного примечания - для тех из вас, кто пытается вывести окно в ваше приложение на передний план, просто вызовите метод Активировать().
Ответ 2
Вы можете использовать SetActiveWindow
в качестве альтернативы SetForeGroundWindow
. Я бы сказал, что вы должны пройти через все "Функции манипулирования Windows" и посмотреть, нет ли чего-то, чего вы упускаете.
Также обратите внимание, что вы можете получить дескриптор объекта System.Diagnostics.Process
с помощью свойства Process.Handle
.
Ответ 3
Альтернативой SetForeGroundWindow является VisualBasic AppActivate
Назовите его так:
Microsoft.VisualBasic.Interaction.AppActivate("WindowTitle")
Просто потому, что он находится в пространстве имен VisualBasic, это не значит, что вы не можете использовать его на С#.
Полная документация здесь
Ответ 4
Вы можете использовать System.Diagnostics.Process Object
для эквивалента FindWindow. В настоящее время нет эквивалента для SetForegroundWindow. Вам понадобится использовать Pinvoke с SetForgroundWindow.
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);