Что нового

почему не закрывается окно WordPad

fixik

Новичок
Сообщения
29
Репутация
0
собственно в этом и проблема: почему не закрывается окно вордпада?
если поменяю местами в условии вордпад и блокнот (вордпад будет стоять первым в условии), то все работает.

Код:
; если в системе блокнот или Notepad++
If WinWaitActive('[class:Notepad]') Then
   WinClose('[class:Notepad]')
   Exit

If WinWaitActive('[class:WordPadClass]') Then 
   WinClose('[class:WordPadClass]')
   Exit
   EndIf
   
EndIf
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: почему не закрывается окно вордпада

fixik [?]
почему не закрывается окно вордпада?
Кто такая “вордпада”? :mad:

Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, Администратор форума.





Что касается вопроса, так у тебя условие в условий, и скрипт ждёт активности окна с классом Notepad, и пока оно не будет активно, вложенное условие, или любой другой код, выполняться не будет.
А даже если окно Notepad'а появится, то после его закрытия скриптом, выполнится функция Exit, и скрипт завершит свою работу.


Добавлено:
Сообщение автоматически объединено:

Скорее всего нужно вот что:

Код:
; если в системе блокнот или Notepad++
If WinWaitActive('[class:Notepad]', '', 5) Then ;Будет ждать окно 5 сек.
   WinClose('[class:Notepad]')
   ;Exit
EndIf

If WinWaitActive('[class:WordPadClass]') Then 
   WinClose('[class:WordPadClass]')
   Exit
EndIf
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
CreatoR [?]
Скорее всего нужно вот что:
CreatoR, подскажите, пожалуйста, почему как то через раз закрывается окно Notepad при таком условии?
как добиться однозначного эффекта закрытия окна программы из данного условия?
вот мой код, основанный на Вашем примере:
Код:
; если в системе блокнот или Notepad++
If  WinWait('[class:Notepad]', '', 2) Then ;Будет ждать окно 2 сек.
	WinClose('[class:Notepad]')
    ;Exit
EndIf

If  WinWait('[class:Notepad++]', '', 2) Then ;Будет ждать окно 2 сек.
	WinClose('[class:Notepad++]')
    ;Exit
EndIf
 
If  WinWait('[class:WordPadClass]', '', 2) Then ;Будет ждать окно 2 сек. 
	WinClose('[class:WordPadClass]')
    ;Exit
EndIf
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
fixik [?]
почему как то через раз закрывается окно Notepad при таком условии?
Всему есть причина.

Он работает так как и задуманно...

1) Ожидание в 2 секунды окна с классом Notepad, если окно найдено, будет закрыто.
2) Ожидание в 2 секунды окна с классом Notepad++, если окно найдено, будет закрыто.
3) Ожидание в 2 секунды окна с классом WordPadClass, если окно найдено, будет закрыто.
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
CreatoR [?]
1) Ожидание в 2 секунды окна с классом Notepad, если окно найдено, будет закрыто.
вот только закрывает не всегда :(
где моя ошибка? маленький тайминг? :-[
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Код:
While 1
Sleep(500)
Run("TASKKILL /F /IM notepad.exe", "", @SW_HIDE)
Run("TASKKILL /F /IM wordpad.exe", "", @SW_HIDE)
WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
fixik [?]
закрывает не всегда
Значит программа не позволяет себя закрывать в этот момент.
Я уверен что notepad это только пример, возможно то приложение которое нужно закрыть не поддаётся этому так просто.
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
CreatoR [?]
Я уверен что notepad это только пример
нет, это действительно те программы , окно которых мне необходимо закрыть для дальнейшей работы скрипта.
нашел такое решение:
Код:
; если в системе блокнот или Notepad++
If  WinWait('[class:Notepad]', '', 1) Then WinClose('[class:Notepad]')
		
If  WinWait('[class:Notepad++]', '', 1) Then WinClose('[class:Notepad++]')
 
If  WinWait('[class:WordPadClass]', '', 1) Then WinClose('[class:WordPadClass]')
в таком случае закрытие происходит в 10 из 10 случаев :laugh: :beer:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
fixik [?]
нашел такое решение
Разница в одну секунду?
Не знаю правда как оно может влиять на закрытие, но пусть будет так, раз уж работает :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
fixik,
Так у Вас будет закрывать только по одному окну. Если, например, открыто 2 или больше окон Notepad, то Ваш скрипт закроет только одно из них.
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
CreatoR [?]
Разница в одну секунду?
почему-то если не выставить хоть такой минимальный тайминг, то дальше скрипт не работает.
madmasles [?]
Так у Вас будет закрывать только по одному окну
впринципе меня это устраивает, но теперь Вы дали повод задуматься и над таким случаем :scratch: :smile:
хотя даже если работают все три программы, мой код закрывает их последовательно все.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
fixik [?]
мой код закрывает их последовательно все.
Откройте по 2 окна и проверьте.
Можно так попробовать:
Код:
$aListNotepad = WinList('[Class:Notepad]')
If $aListNotepad[0][0] Then
	For $i = 1 To $aListNotepad[0][0]
		WinClose($aListNotepad[$i][1])
	Next
Else
	MsgBox(64, 'Info', 'Нет их и так :)')
EndIf
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
madmasles
Ваш вариант супер! :beer:
все отлично работает ;) :laugh:

Спасибо!


Добавлено:
Сообщение автоматически объединено:

madmasles [?]
Откройте по 2 окна и проверьте.
с этим я и не спорил :smile:
я писал об одиночных окнах этих программ.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Yuriy
Я бы написал так
Код:
While 1
If ProcessExists("notepad.exe") Then ProcessClose("notepad.exe")
If ProcessExists("wordpad.exe") Then ProcessClose("wordpad.exe")
If Not ProcessExists("notepad.exe") And Not ProcessExists("wordpad.exe") Then ExitLoop
Sleep(500)
WEnd

или так
Код:
While 1
If ProcessExists("notepad.exe") Then ProcessClose("notepad.exe")
If ProcessExists("wordpad.exe") Then ProcessClose("wordpad.exe")
Sleep(500)
WEnd
 
Верх