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);
Другие вопросы по тегам