Я пытаюсь создать базовую систему записи/воспроизведения макросов. Если бы я хотел выбрать открытое приложение (например, блокнот), чтобы вывести его на передний план для ввода, как бы я мог его вызвать по имени или другому ссылочному атрибуту?C# Как открыть окно открытого приложения
ответ
Вот пример. В принципе, получить Process, а затем вызвать SetForegroundWindow на это MainWindowHandle:
using System;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
namespace StackOverflow.Test
{
class Program
{
static void Main(string[] args)
{
var proc = Process.GetProcessesByName("notepad").FirstOrDefault();
if (proc != null && proc.MainWindowHandle != IntPtr.Zero)
SetForegroundWindow(proc.MainWindowHandle);
}
[DllImport("user32")]
private static extern bool SetForegroundWindow(IntPtr hwnd);
}
}
Вы должны знать об ограничениях:
Система ограничивает какие процессы можно установить окно переднего плана. Процесс может установить окно переднего плана, только если один из следующих условий:
- Процесс является основным процессом.
- Процесс был начат процессом переднего плана.
- Процесс получил последнее событие ввода.
- Не существует процесса переднего плана.
- Процесс переднего плана отлаживается.
- Передний план не заблокирован (см. LockSetForegroundWindow).
- Истек срок блокировки переднего плана (см. SPI_GETFOREGROUNDLOCKTIMEOUT в SystemParametersInfo).
- Нет меню.
Вы можете начать использовать с помощью Process.GetProcesses
- это даст вам список всех запущенных процессов. Изучите различные свойства каждого процесса - это должно вас заставить.
Проблема, с которой я столкнулся, заключается в том, как сделать это окно процесса активным. – ashurexm
Оформить заказ приложения с именем «Autohotkey», он делает все, что вам нужно, и экономит много времени на программирование, и это бесплатно.
Если AutoHotkey не решает свои проблемы или, если вы делаете это для целей обучения, кто-то спросил «совершенно новый» приложение, и т.д., есть некоторые ссылки, которые могут быть полезны:
Bringing Window to the Front in C# using Win32 API http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesvbcs/thread/92823775-29f6-4950-bf06-d2f1ca89ec8d (он говорит «мобильные окна», но все равно может быть полезно)
Надеюсь, это поможет.
Я действительно посмотрел на autohotkey. Это определенно полезное приложение, проблема в том, что это должно быть внутренним типом вещей из-за ограничений сторонних разработчиков и будущего использования (макро-ввод основан на выборщиках и т. Д.) – ashurexm
Большое спасибо за ОЧЕНЬ подробно ответ. Я попытаюсь выполнить это немедленно. – ashurexm
Это похоже на работу, но у меня есть своеобразная проблема. Я задал здесь новый вопрос: http://stackoverflow.com/questions/3973532 – ashurexm