Пытаюсь сделать программу которая будет отслеживать запуск определённых процессов, если какой-то процесс запустился отследить его и запустить метод (функции) Затем если процессы закрылись продолжать искать появление нужных процессов, и.т.п
Для одного поиска сделал так:
IntPtr ptr = WinAPI.FindWindow(null, "notepad");
while (ptr == IntPtr.Zero)
{
if (ptr == IntPtr.Zero)
{
Console.WriteLine("окно не найдено");
// Если окно не нашли то возвращаемся к поиску.
}
else
{
Если нашли то делаем что либо:
Console.WriteLine("окно найдено");
StringBuilder st = new StringBuilder(100);
Console.WriteLine(st.ToString());
}
}
Для списка же процессов добавил List<string>
со списком процессов которые нужно проверять на запуск через FindWindow
.
private static readonly List<string> App = new List<string>
{
"Notepad",
"Notepad++",
"Блокнот",
"Word",
};
И в цикле прогоняю их
for (int i = 0; i < App.Count; i++)
{
IntPtr ptr = WinAPI.FindWindow(null, App[i]);
while (ptr == IntPtr.Zero)
{
if (ptr == IntPtr.Zero)
{
Console.WriteLine("окно не найдено");
Thread.Sleep(500);
// Если окно не нашли то возвращаемся к поиску.
}
Console.WriteLine("окно найдено");
// Как сделать следующее?
// Если окно найдено, то Один раз выполнить какое-то действие.
// И ждать пока окно не закроется.
//Если окно закрылось возвратиться к поиску.
var st = new StringBuilder(100);
Console.WriteLine(st.ToString());
}
}
Вопрос:
Как сделать запуск функции метода один раз за проходы в цикле for
?
И ещё если окон нет запущенных то он всё равно пишет что окно найдено ( скрин )
Как это исправить?
List<IntPtr> pointers = new List<IntPtr>();
for (int i = 0; i < App.Count; i++)
pointers.Add(IntPtr.Zero);
while (true) {
for (int i = 0; i < App.Count; i++)
{
IntPtr ptr = WinAPI.FindWindow(null, App[i]);
Console.WriteLine(ptr == IntPtr.Zero? "окно не найдено: {0}" : "окно найдено: {0}", App[i]);
if (pointers[i] != ptr) {
if (ptr != IntPtr.Zero && pointers[i] != IntPtr.Zero)
Console.WriteLine(" process restarted");
else if (ptr == IntPtr.Zero)
Console.WriteLine(" process ended");
else if (pointers[i] == IntPtr.Zero)
Console.WriteLine(" process started");
pointers[i] = ptr;
}
}
Thread.Sleep(1000);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как сделать так, чтоб сначала проигрывалась анимация по одному, а иногда немного по другому
Подскажите как сделать, что бы масив начиная с последнего элемента, плавно опускался вниз и исчезал? Принцип тетриса, но реализовать не получаеться
как можно брать цифры в строке полученную из базы "1,5,7" засунуть их в переменные или как то еще лучше чтоб типа в цикле поставить на каждую...
Доброго времени сутокНе знаю, стоило ли сюда писать весь код, но я думаю, так будет нагляднее(а может и нет) Есть такой код, он выполняет нужную...