PDA

Показать полную графическую версию : "Сумасшедший" ProcessExists


sashadeg
08-06-2010, 13:49
Написал себе очередную "лентяйку-скрипт" для уничтожения процесса программы файлобменника при запуске он-лайн игры... Всем надеюсь понятен смысл этих действий.
While 1
$process_hl=ProcessExists ("hl2.exe")
if $process_hl = 1 Then
ProcessClose ("Shareman.exe")
Else
$process_sh=ProcessExists ("Shareman.exe")
If $process_sh = 0 Then
Run("C:\Program Files\Shareman\Shareman.exe")
EndIf
EndIf
Sleep(3000)
WEnd

Но программы УПОРНО не хотела работать!!! Проверил всё, что только можно!!!
Пока дело не дошло до проверки функции "ProcessExists": оказывается эта функция "решила" возвращать не "1" при наличии процесса, а рандомное четырехзначное значение...
Все скрипты ранее мной писавшиеся тоже перестали работать.... Компилированые работают.

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

Iska
08-06-2010, 14:18
sashadeg, с какого перепуга сия функция должна возвращать единицу? В документации (http://www.autoitscript.com/autoit3/docs/functions/ProcessExists.htm) ясно сказано: при отсутствии процесса возвращается «0», при наличии процесса — его PID.

sashadeg
08-06-2010, 14:25
Значит наши документации писали разные люди:

Взято из справки "любимого" Валерия Иванова:
ProcessExists
--------------------------------------------------------------------------------
Проверка наличия указанного процесса.

Возвращаемое значение:
Значение 1 означает наличие процесса, иначе 0.

Iska
08-06-2010, 14:31
Мне сложно сказать, почему там переведено именно так. Не знаю, как было в версии 2.xx, но в AutoIt 3.xx изначально было именно так (можете сами пройтись поиском ключевой фразы «ProcessExists» по странице Сhangelog (http://www.autoitscript.com/autoit3/docs/autoit_changelog.txt)). Так что — загадка.

kaster
08-06-2010, 15:57
В очередной раз убеждаюсь, что русская справка от г-на Иванова, в свете последних версий, приносит больше вреда нежели пользы

FlatX007
08-06-2010, 19:11
; Кстати эксперименты приносят не плохие результаты =)
ConsoleWrite(ProcessExists("hl2.exe") & @CRLF)

; А если не уверен делается так:
If ProcessExists("hl2.exe") Then MsgBox(0, "", "ProcessExists")
If Not ProcessExists ("hl2.exe") Then MsgBox(0, "", "Not ProcessExists")

sashadeg
09-06-2010, 07:39
; А если не уверен делается так: If ProcessExists("hl2.exe") Then MsgBox(0, "", "ProcessExists")
If Not ProcessExists ("hl2.exe") Then MsgBox(0, "", "Not ProcessExists") »

Всё время забываю что в Autoit можно писать такие "упращенные фразы". А то пишу всегда как в QBASIC...




© OSzone.net 2001-2012