Альтернативы FindWindow и SetForegroundWindow? - программирование
Подтвердить что ты не робот

Альтернативы FindWindow и SetForegroundWindow?

Я ищу альтернативы старой версии User32.dll для переключения в другое приложение с FindWindow() и SetForegroundWindow().

Я нашел альтернативу первому с использованием Process.GetProcessesByName(), но я не вижу соответствующего метода для переключения (установить активный/передний план) в это приложение.

Есть ли способ сделать это, не используя старый способ с User32.dll?

Благодарим вас за помощь.

ИЗМЕНИТЬ

Я принял ответ @Sorceri, хотя это не тот ответ, который я искал.

4b9b3361

Ответ 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);