![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Проверка отличия в процессах |
|
[решено] Проверка отличия в процессах
|
Новый участник Сообщения: 2 |
Здравствуйте!
Много раз пробовал как можно это реализовать но так ни чего и не пришло в голову. В AutoIt есть команды для проверки (есть ли такой процесс), отключения и т.д. процессов, но нет команды для сравнивания процесса. Предположим есть 2 файла с одинаковыми названиями например programs.exe и programs.exe при запуске 1 и 2 процесы так же называются programs.exe и отличить их не возможно, хотя программы разные и например CRC у них разное. Так вот прошу подскажите как и что написать что бы AutoIt сравнил процессы programs.exe можду собой и с первым или вторым файлом и дал результат какой файл запущен, а какой нет (вся проблема в том что я знаю как выполнить сравнение файлов например по тому же самому CRC но как сравнить файл с процессом хз). И еще может какая-то библиотека может в этом помочь? Заранее Спасибо за ответы! |
|
Отправлено: 02:25, 17-04-2009 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата RageHunter:
$Path = _ProcessGetPath("AutoIt3.exe") ConsoleWrite($Path) ;=============================================================================== ; ; Function Name: _ProcessGetPath() ; Description: Get the executable path of certain process. ; ; Parameter(s): $vProcess - PID or name of a process. ; ; Requirement(s): AutoIt v3.2.8.1 or higher. ; Kernel32.dll (included with Windows) ; Psapi.dll (included with most Windows versions) ; ; Return Value(s): On Success - Returns full path to the executed process. ; On Failure - Returns -1 and sets @Error to: ; 1 - Given process not exists. ; 2 - Error to call Kernel32.dll. ; 3 - Error to open Psapi.dll. ; 4 - Unable to locate path of executed process, ; (or can be other error related to DllCall). ; ; Author(s): G.Sandler (a.k.a CreatoR) - CreatoR's Lab (http://creator-lab.ucoz.ru) ; ;=============================================================================== Func _ProcessGetPath($vProcess) Local $iPID = ProcessExists($vProcess) If Not $iPID Then Return SetError(1, 0, -1) Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $iPID) If Not IsArray($aProc) Or Not $aProc[0] Then Return SetError(2, 0, -1) Local $vStruct = DllStructCreate('int[1024]') Local $hPsapi_Dll = DllOpen('Psapi.dll') If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@SystemDir & '\Psapi.dll') If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@WindowsDir & '\Psapi.dll') If $hPsapi_Dll = -1 Then Return SetError(3, 0, '') DllCall($hPsapi_Dll, 'int', 'EnumProcessModules', _ 'hwnd', $aProc[0], _ 'ptr', DllStructGetPtr($vStruct), _ 'int', DllStructGetSize($vStruct), _ 'int_ptr', 0) Local $aRet = DllCall($hPsapi_Dll, 'int', 'GetModuleFileNameEx', _ 'hwnd', $aProc[0], _ 'int', DllStructGetData($vStruct, 1), _ 'str', '', _ 'int', 2048) DllClose($hPsapi_Dll) If Not IsArray($aRet) Or StringLen($aRet[3]) = 0 Then Return SetError(4, 0, '') Return $aRet[3] EndFunc |
|
------- Отправлено: 03:03, 17-04-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать Для своих AutoIt файлов делал так: по процессу получал Handle GUI окна этого процесса и проверял на верность - мое коно или нет ...
|
------- Отправлено: 03:30, 17-04-2009 | #3 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R, не пойму зачем EnumProcessModules, и без нее вроде работает...
![]() $sProcess = "svchost.exe" $sFilePath = _WinAPI_ProcessGetFilePath($sProcess) If @error Then Exit MsgBox(16, "Ошибка", "код ошибки:"&@TAB& @error &@CRLF&"расширение:"&@TAB& @extended) MsgBox(0, "Сообщение", "процесс:"&@TAB& $sProcess &@CRLF&"путь:"&@TAB& $sFilePath) Func _WinAPI_ProcessGetFilePath($process) $process = ProcessExists($process) If $process =0 Then Return SetError(1, 0, "") ; ОШИБКА: процесс не найден ; Открытие процесса Local $aRet = DllCall('kernel32.dll', 'ptr', 'OpenProcess', _ 'int', BitOR(0x400,0x10), 'int', 0, 'int', $process) Local $hProc = $aRet[0], $tFilePath = DllStructCreate("char[300]") If $aRet[0]=0 Then $aRet = DllCall('kernel32.dll', 'int', 'GetLastError') Return SetError(2, $aRet[0], "") ; ОШИБКА открытия процесса EndIf ; Получение пути к файлу образа $aRet = DllCall("Psapi.dll", "dword", "GetModuleFileNameExA", _ "ptr", $hProc, "ptr", 0, "ptr", DllStructGetPtr($tFilePath), "dword", 300) If $aRet=0 Then $aRet = DllCall('kernel32.dll', 'int', 'GetLastError') Return SetError(3, $aRet[0], "") ; ОШИБКА получения имени EndIf ; Закрытие описателя и возврат значения DllCall('kernel32.dll','ptr', 'CloseHandle','ptr', $hProc) Return DllStructGetData($tFilePath, 1) EndFunc ;==> _WinAPI_ProcessGetFilePath |
Последний раз редактировалось amel27, 17-04-2009 в 11:13. Отправлено: 05:17, 17-04-2009 | #4 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Цитата amel27:
|
||
Отправлено: 10:13, 17-04-2009 | #5 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Последний раз редактировалось Creat0R, 21-04-2009 в 11:12. Отправлено: 14:42, 17-04-2009 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
В процессах появляется IEXPLORE.EXE | stst | Лечение систем от вредоносных программ | 5 | 04-12-2009 15:40 | |
Процессор загружается на 50% но при этом в процессах бездействие системы 97% | opium7777 | Microsoft Windows NT/2000/2003 | 3 | 15-06-2009 20:32 | |
Разное - процессор загружается на 50%, но при этом в процессах смотрю бездействие системы 97% | angelzan | Microsoft Windows 2000/XP | 30 | 07-04-2009 23:32 | |
iexplore.exe в процессах | kaizer | Лечение систем от вредоносных программ | 24 | 06-08-2008 02:00 |
|