Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Поиск по названию открытого окна. (http://forum.oszone.net/showthread.php?t=325298)

lecbit 28-03-2017 20:38 2723844

Поиск по названию открытого окна.
 
Мне нужно что-бы при нахождении названия окна, закрывалась другая программа.
Вот сделал заготовку,но чёт не работает(
Код:

@echo off

set process1=skype.exe
set process2=File manager 2.0

:st
tasklist /FI "windowtitle eq %process2%" | find /I "%process2%"
If %errorlevel% NEQ 0 goto :st
taskkill /f /im %process1%


Iska 28-03-2017 21:30 2723862

О каком именно:
Цитата:

Цитата lecbit
File manager 2.0 »

идёт речь?

lecbit 28-03-2017 21:51 2723876

Цитата:

Цитата Iska
О каком именно:
Цитата lecbit:
File manager 2.0 »
идёт речь? »

Это не важно Skype,file manager тут может стоять любая программа,мне главное суть понять.Она в том что-бы ожидалось открытие одной программы а определялась это по заголовку окна и далее закрывало другую программу.

Iska 28-03-2017 22:10 2723887

Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sProcessName=notepad.exe
set sWindowTitle=Калькулятор

title Waiting for window [%sWindowTitle%]...

:Repeat
        >nul timeout.exe /t 1
        2>nul tasklist.exe /fi "windowtitle eq %sWindowTitle%" /v | find.exe /i "%sWindowTitle%" || goto :Repeat

2>nul taskkill.exe /fi "imagename eq %sProcessName%" /f

endlocal
exit /b 0


Для старых ОС вместо timeout.exe используйте ping.exe для организации паузы.

lecbit 28-03-2017 22:28 2723896

Цитата:

Цитата Iska
Для старых ОС вместо timeout.exe используйте ping.exe для организации паузы. »

Я тут ещё вспомнил что у меня может быть пару "калькуляторов",можно ли это сделать для нескольких программ сразу?

Iska 28-03-2017 23:12 2723901

lecbit, а какая разница сколько калькуляторов, если пакетный файл сработает на первом же. Или Вы имеете в виду разные заголовки окна?

Можно, но лучше перейти к средствам, которые для того непосредственно предназначены. Например, AutoIt. Там и возможностей по работе с окнами на пару порядков больше. Например:
Скрытый текст
Код:

#include <Array.au3>

AutoItSetOption("MustDeclareVars", 1)
AutoItSetOption("WinTitleMatchMode", 2)

Local $sProcessName = "notepad.exe"
Local $aWindowTitles[] = ["Калькулятор", "Таблица символов", "Paint", "Microsoft Word"]


WinWait("[REGEXPTITLE:(?:" & _ArrayToString($aWindowTitles) & ")]")
ProcessClose($sProcessName)

Exit(0)


lecbit 28-03-2017 23:31 2723906

Цитата:

Цитата Iska
Например, AutoIt. »

Да,думаю так и сделаю,Спасибо!

lecbit 02-04-2017 17:14 2725208

Iska
Как же прекрасно что вы мне подсказали AutoIT
Но у меня появилась новая идея и я не знаю как её реализовать.Теперь мне нужно что-бы можно было находить сразу по заголовку окна и названию процесса.Попытался закоректировать строчки
Код:

WinWait("[REGEXPTITLE:(?:" & _ArrayToString($aWindowTitles) & ")]")
ProcessWait ( "iexplore.exe" )
ProcessClose($sProcessName)

Но тогда закрывает только по процессу.

Iska 03-04-2017 01:20 2725387

Цитата:

Цитата lecbit
Теперь мне нужно что-бы можно было находить сразу по заголовку окна и названию процесса. »

Пример приведите.

lecbit 03-04-2017 08:02 2725651

Цитата:

Цитата Iska
Пример приведите. »

Ну всё также только с добавлением процесса
Скрытый текст
#include <Array.au3>

AutoItSetOption("MustDeclareVars", 1)
AutoItSetOption("WinTitleMatchMode", 2)

Local $sProcessName = "notepad.exe"
Local $aWindowTitles[] = ["Калькулятор", "Таблица символов", "Paint", "Microsoft Word"]


WinWait("[REGEXPTITLE:(?:" & _ArrayToString($aWindowTitles) & ")]")
ProcessWait ( "iexplore.exe" )
ProcessClose($sProcessName)

Exit(0)

Iska 03-04-2017 08:31 2725657

lecbit, Вы меня не понимаете. Меня не интересует код. Совсем. Меня интересует пример заголовка окна и названия процесса.

Например: "Если ((окно имеет частичный заголовок «Безымянный» или «Новый») и имя процесса «winword.exe») или (окно имеет частичный заголовок «Мой розовый пони» и (имя процесса «iexplore.exe» или имя процесса «chrome.exe» или имя процесса «firefox.exe»)), то надо сделать то-то и то-то.

lecbit 03-04-2017 12:19 2725754

Iska, Опишу что нужно сделать.Если появляется процесс server.exe либо какой-то из перечисленных заголовков окна(BD,1C,word) то нужно закрыть процесс Imn.exe

Iska 03-04-2017 15:49 2725840

Код:

#include <Array.au3>

AutoItSetOption("MustDeclareVars", 1)
AutoItSetOption("WinTitleMatchMode", 2)


Local $bFound = False

Local $sProcessName4Close    = "server.exe"

Local $sProcessName4Exists    = "Imn.exe"
Local $aWindowTitles4Exists[] = ["BD", "1C", "word"]

AdlibRegister("Check", 1000)

Do
        Sleep(1000)
Until $bFound

ProcessClose($sProcessName4Close)

Exit(0)

Func Check()
        If WinExists("[REGEXPTITLE:(?i:" & _ArrayToString($aWindowTitles4Exists) & ")]", "") Or ProcessExists($sProcessName4Exists) Then
                $bFound = True
                AdlibUnRegister("Check")
        EndIf
EndFunc

Только не удивляйтесь, что с подобными заголовками будет куча лишних срабатываний.


Время: 01:13.

Время: 01:13.
© OSzone.net 2001-