MasterGamerFX Ответов: 3

Как проверить окно в VB


я хочу проверить, открыто ли имя.bat или закрыто, но

Что я уже пробовал:

я пытаюсь это сделать, но безуспешно
Dim CMDProc As Process() = Process.GetProcessesByName("window name")
    If CMDProc.Length > 0 Then
    Else
    '''''
  End If

процесс.GetProcessesByName" не работал на пакетный файл, почему?

Richard MacCutchan

Возможно, ваше имя процесса неверно. Вы можете легко проверить это с помощью Диспетчера задач.

MasterGamerFX

я не могу видеть имя процесса в окне cmd
есть ли способ проверить, работает ли cmd windowtitle в VB?

Gerry Schmitz

"Process()" имеет "длину"? Может быть, вы недостаточно быстры, чтобы поймать какие-то "пакетные окна". Может быть, попробовать файл семафора и / или файловый наблюдатель.

MasterGamerFX

вы можете привести мне пример пожалуйста

3 Ответов

Рейтинг:
2

Christian Graus

Открытый файл заблокирован. Попробуйте открыть его в операторе try/catch


Dave Kreskowiak

Я думаю, он хочет знать, работает он или нет. Последний раз, когда я проверял, файл .BAT можно записать во время работы.

MasterGamerFX

Правильно, как я могу это сделать
Я стараюсь ,но у меня ничего не получается
Вы можете привести мне пример

Dave Kreskowiak

Вы не можете и не добьетесь успеха, пока не начнете использовать отладчик и не начнете читать документацию по функциям (методам), которые вы пытаетесь использовать.

Прямо сейчас вы копируете код, надеясь, что все, что вы копируете в свой собственный код, будет работать. У вас нет понимания чего-либо вообще.

Christian Graus

Дейв говорит, что пакетный файл не блокируется, когда он работает. В таком случае, я думаю, вы выбрали правильный подход. Сначала я бы подтвердил, что могу получить длительный процесс с этим кодом по имени. Затем я запускал пакетный файл и смотрел, как называется этот процесс. Если это что-то общее, то вы обливаетесь из шланга. Если это имя файла, вы можете использовать его. Конечно, этот код будет очень хрупким в любом случае

MasterGamerFX

Хорошо ,но если я использую get process by id, то идентификатор пакетного файла может меняться каждый раз, не так ли ?

Christian Graus

Я предполагал, что вы можете получить его по имени

MasterGamerFX

Хорошо ,но как же ,я стараюсь ,как же позвольте мне примерить

Рейтинг:
1

MasterGamerFX

Не работает с пакетным файлом .bat

Christian Graus

Это API. Код будет работать. Вам просто нужно выяснить, как это называется. Я беспокоюсь, что это что-то общее. Вы уже проверили?

MasterGamerFX

Процесс.Метод GetProcessesByName (System.Диагностика)

Не работает я выписался
Не могли бы вы попробовать это для меня пожалуйста

MasterGamerFX

я проверяю его сейчас это обнаруживает cmd.exe но не название окна я стараюсь cmd.exe -тест оконного эквалайзера

Christian Graus

Хорошо, если он будет запущен как cmd.exe-чего я и ожидал, так это того, что ты не можешь делать то, что хочешь

MasterGamerFX

ладно после исследования вопроса я почти добился успеха
я использовал класс MainWindowTitle.Содержит(мое окно заголовка)
но условие не соответствует ибо его ретранслирует туре
еще не работает с синтексом
код:

Для каждого p Как процесса в процессе.GetProcesses
Если p.MainWindowTitle.Содержит("test23") затем
MsgBox("существует")

Выход Для
Конец, Если
Следующий

Christian Graus

Значит, у вас есть код, но он не работает? Имеет ли процесс свойство path к исполняемому файлу?

MasterGamerFX

Он возвращает true ,но когда я добавляю "else"
Чтобы проверить, является ли условие ложным
Он возвращает true (перед строкой else)

MasterGamerFX

Должен быть другой путь

Christian Graus

Конечно, если вы знаете магию

MasterGamerFX

Так что же я могу сделать ?

Christian Graus

Спросить Гарри Поттера? Заплатите кому-нибудь, чтобы он попробовал, если это выше ваших сил?

Рейтинг:
0

Dave Kreskowiak

"Имя процесса" не является заголовком окна. Это имя исполняемого файла, который работает без ".exe" в конце. Для любого пакетного файла это будет "cmd".

Теперь, чтобы найти окно CMD, в котором выполняется ваш пакетный файл, вы должны посмотреть MainWindowTitle каждого из ваших объектов процесса CMD, которые вы получили обратно из процесса.GetProcessesByName("cmd") и найдите текст командной строки, с помощью которой вы запустили пакетный файл.

Например, если ваш пакетный файл называется "Test.bat" и вы запустили его с командной строкой "test /someArgument 123", то свойство MainWindowTitle объекта Process для окна командной строки CMD будет иметь значение "C:\Windows\System32\cmd.exe - тест /некоторый аргумент 123".


MasterGamerFX

объясните мне лучше ,пожалуйста
я не понимаю

Dave Kreskowiak

Я не знаю, как это упростить. Вы получаете список процессов, используя GetProcessesByName("имя окна"). Вы не можете использовать заголовок окна в этом вызове. Вместо этого вы должны пройти" cmd".

После того, как у вас есть список процессов, вы должны проверить свойство MainWindowTitle каждого из них для того, что я описал.

Это сводится к чтению документации по классу Process и использованию отладчика. Вы могли бы легко догадаться об этом.

MasterGamerFX

Позвольте мне привести пример этого

Dave Kreskowiak

ФФС. ТЫ УЖЕ ЭТО ДЕЛАЕШЬ!! Просто измените "имя окна" на "cmd".