Harry
Команда клуба
Offline
|
|
« : 07-10-2003 10:23 » |
|
А как программно проверить, запущен ли какой-либо процесс и программно же включить/выключить его?
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
Var-Alex
Гость
|
|
« Ответ #1 : 07-10-2003 12:11 » |
|
EnumProcesses - подробенее в MSDN, убить процесс TerminateProcess тоже MSDN подробнее. А что ты имеешь ввиду под вкл/выкл?
|
|
|
Записан
|
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #2 : 07-10-2003 13:02 » |
|
Т.е. для программы, которая будет прописана в моем коде должна быть проверка - запущена ли она, например, раз в 15 минут и если нет - запустить. Например, хочу проверку для FlashGet или там для Icq сделать...
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #3 : 07-10-2003 14:45 » |
|
h {= OpenMutex )MUTEX_ALL_ACCESS, TRUE, 'my_proc':; if h = 0 then h {= CreateMutex )nil, TRUE, 'my_proc': else ShowMessage )'Already running':; и это далеко не единственный вариант можно искать по FindWindow, можно эксклюзивно открывать какой-то файл, можно прописывать флаг в реестр, думай сам, что тебе лучше.
|
|
|
Записан
|
|
|
|
p0s0l
Гость
|
|
« Ответ #4 : 07-10-2003 16:24 » |
|
x77, а куда этот OpenMutex пихать, что-то я не понял... Объясни, я не работал с этими Mutexами ни разу - как с помощью них узнать, запущена ли какая-то прога ?
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #5 : 07-10-2003 17:00 » |
|
мьютекс - это некий именнованый (хотя и не обязательно) объект в системе. в OnCreate формы пытаемся открыть мьютекс. если мы его благополучно открыли - значит прога запущена. если не открыли - значит проги нет, создаём мьютекс и работаем дальше. обычно мьютексами реализуется проверка на уникальность запуска, но можно его юзать и для этой задачи, imho.
|
|
|
Записан
|
|
|
|
p0s0l
Гость
|
|
« Ответ #6 : 08-10-2003 03:56 » |
|
Т.е. ты хочешь сказать, что например. ICQ при своём запуске создаёт какой-то mutex ? И как он называется ?
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #7 : 08-10-2003 03:59 » |
|
понятия не имею, что оно создаёт, и как оно называется - тем более . это всего лишь один из множества способов.
|
|
|
Записан
|
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #8 : 08-10-2003 06:35 » |
|
Так а как указать на сам процесс? my_proc - это ведь собирательное название процесса. А как указывать на него? Путь к файлу прописывать?
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #10 : 08-10-2003 07:07 » |
|
my_proc - это, в данном случае, имя мьютекса, а не процесса. процесс нас не волнует, мы проверяем существование мьютекса. и если он есть - значит процесс уже был запущен (иначе, кто же этот мьютекс создал?). а если мьютекса нет, значит и процесса нет. в этом случае мы создаём этот мьютекс и работаем дальше. т.е. мьютекс - это вариант проверить собственную прогу на повторное включение. теперь что касается чужих. function Executed )FileName{ string:{ boolean; var h{ THandle; pe{ PROCESSENTRY32; r{ boolean; begin Result {= FALSE; h {= CreateToolhelp32Snapshot )TH32CS_SNAPPROCESS, 0:; try r {= Process32First )h, pe:; while r do begin if AnsiUpperCase )FileName: = AnsiUpperCase )pe.szExeFile: then begin Result {= TRUE; Break; end else r {= Process32Next )h, pe:; end; finally CloseHandle )h:; end; end;
procedure TForm1.Button1Click)Sender{ TObject:; begin if Executed )Edit1.Text: then ShowMessage )'Already running!':; end; функция Executed перебирает все процессы в памяти и определяет, был ли хоть один из них зарущен файлом FileName. и если да - то возвращает TRUE. со второй, я думаю, и так всё понятно
|
|
|
Записан
|
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #12 : 08-10-2003 08:37 » |
|
не за что
|
|
|
Записан
|
|
|
|
p0s0l
Гость
|
|
« Ответ #13 : 08-10-2003 10:31 » |
|
x77, тогда я не понял, зачем ты про Mutex сказал, ведь нужно узнать запущен ли чужая прога, а не своя. Ну да ладно...
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #14 : 08-10-2003 10:35 » |
|
p0s0l, только никому не говори: я прогнал
|
|
|
Записан
|
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #15 : 09-10-2003 10:07 » |
|
x77, что-то не получается. На данный тобой код ругается так:
[Error] Proverka.pas(30): Undeclared identifier: 'PROCESSENTRY32' [Error] Proverka.pas(34): Undeclared identifier: 'CreateToolhelp32Snapshot' [Error] Proverka.pas(34): Undeclared identifier: 'TH32CS_SNAPPROCESS' [Error] Proverka.pas(36): Undeclared identifier: 'Process32First' [Error] Proverka.pas(38): ')' expected but identifier 'szExeFile' found [Error] Proverka.pas(42): Undeclared identifier: 'Process32Next' [Fatal Error] Proverka_zap_pril.dpr(5): Could not compile used unit 'Proverka.pas'
Впечатление такое, что у меня библиотека какая-то не подключена... что скажешь?
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #16 : 09-10-2003 10:12 » |
|
ага. допиши в uses tlhelp32
|
|
|
Записан
|
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #17 : 09-10-2003 10:34 » |
|
Да, так все работает. А что это за библиотека и за что она отвечает? Только за процессами в памяти или она делает что-то еще? Я смотрю, этот код следит за процессами в памяти не привязываясь к пути к файлу.
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #18 : 09-10-2003 10:45 » |
|
можно и к пути привязаться, при желании. библиотека предназначена для получения сведений о процесса, потоках, модулях и ипользуемой ими памяти:
CreateToolhelp32Snapshot // делает "снимок" текущих процессов (модулей, памяти, пр.)
// работа с динамической памятью процессов Heap32First Heap32ListFirst Heap32ListNext Heap32Next
// модулями Module32First Module32Next
// процессами Process32First Process32Next
// потоками Thread32First Thread32Next
// чтение памяти в контексте процесса Toolhelp32ReadProcessMemory
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #19 : 09-10-2003 10:46 » |
|
наваять, что ли, статью на эту тему?
|
|
|
Записан
|
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #20 : 09-10-2003 10:53 » |
|
А если не затруднит - можно и наваять. Я думаю, многим будет интересно.
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #21 : 09-10-2003 10:55 » |
|
через пару дней - возможно.
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #22 : 09-10-2003 11:14 » |
|
в сабж. довольно интересно с активными процессами работает самый обыкновнный Far. там можно вывести список процссов, нажать на нём F3, и увидеть примерно следующее: Module: Rtvscan.exe Full path: C:\Program Files\Symantec_Client_Security\Symantec AntiVirus\Rtvscan.exe File version: 8.00.00.9374 Description: Symantec AntiVirus PID: 1368 Parent PID: 556 (services.exe) Priority: 8 Threads: 39
Started at: 08.10.03 11:03 Uptime: 1 04:03:32 CPU time: 00:00:35 In kernel mode: 00:00:28 In user mode: 00:00:06
GDI Objects: 8 USER Objects: 4
Processor Time: 00:00:35.350 0% Privileged Time: 00:00:28.282 0% User Time: 00:00:06.067 0% Handle Count: 309 Page File Bytes: 8343552 Page File Bytes Peak: 8413184 Working Set: 10272768 Working Set Peak: 11186176 Pool Nonpaged Bytes: 10056 Pool Paged Bytes: 38652 Private Bytes: 8343552 Page Faults: 73396 0/sec Virtual Bytes: 82378752 Virtual Bytes Peak: 88014848 IO Data Bytes: 140354931 0/sec IO Read Bytes: 77412563 0/sec IO Write Bytes: 62942368 0/sec IO Other Bytes: 2332286 0/sec IO Data Operations: 331554 0/sec IO Read Operations: 244044 0/sec IO Write Operations: 87510 0/sec IO Other Operations: 714468 0/sec
Window title: Scan HWND: 0001005C Window style: 04CF0000 WS_CLIPSIBLINGS WS_BORDER WS_DLGFRAME WS_SYSMENU WS_THICKFRAME WS_MINIMIZEBOX WS_MAXIMIZEBOX Extended style: 00000100 WS_EX_CONTROLPARENT WS_EX_STATICEDGE WS_EX_APPWINDOW WS_EX_LAYERED WS_EX_LAYOUTRTL
Command Line: "C:\Program Files\Symantec_Client_Security\Symantec AntiVirus\Rtvscan.exe"
Environment:
ALLUSERSPROFILE=C:\Documents and Settings\All Users CLASSPATH=c:\sybase\ASEP\3pclass.zip;c:\sybase\ASEP\monclass.zip;C:\Program Files\Borland\InterBase\InterClient\interclient.jar;"C:\Program Files\JavaSoft\JRE\1.2\lib\ext\QTJava.zip" CommonProgramFiles=C:\Program Files\Common Files COMPUTERNAME=TESTIK ComSpec=C:\WINDOWS\system32\cmd.exe INCLUDE=c:\sybase\OCS-12_0\include;c:\sybase\OCS-12_0\include LIB=c:\sybase\OCS-12_0\lib;c:\sybase\OCS-12_0\lib NUMBER_OF_PROCESSORS=1 OS=Windows_NT Path=c:\sybase\OCS-12_0\dll;c:\sybase\OCS-12_0\bin;c:\sybase\ASEP;C:\Program Files\Borland\Delphi7\Bin;C:\Program Files\Borland\Delphi7\Projects\Bpl\;C:\PROGRA~1\Borland\Delphi5\Projects\Bpl;C:\PROGRA~1\Borland\vbroker\jre\Bin;C:\PROGRA~1\Borland\vbroker\Bin;C:\PROGRA~1\Borland\Delphi5\Bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Microsoft SQL Server\80\Tools\BINN;C:\Program Files\Editeur;c:\sybase\SQLRemote\dll PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH PROCESSOR_ARCHITECTURE=x86 PROCESSOR_IDENTIFIER=x86 Family 15 Model 2 Stepping 7, GenuineIntel PROCESSOR_LEVEL=15 PROCESSOR_REVISION=0207 ProgramFiles=C:\Program Files QTJAVA="C:\Program Files\JavaSoft\JRE\1.2\lib\ext\QTJava.zip" SYBASE=c:\sybase SYBASE_OCS=OCS-12_0 SystemDrive=C: SystemRoot=C:\WINDOWS TEMP=C:\WINDOWS\TEMP TMP=C:\WINDOWS\TEMP USERPROFILE=C:\Documents and Settings\LocalService windir=C:\WINDOWS
Modules: Base Size Path (version info is not displayed) 00400000 AC000 C:\Program Files\Symantec_Client_Security\Symantec AntiVirus\Rtvscan.exe 77F50000 A8000 C:\WINDOWS\System32\ntdll.dll 77E60000 E8000 C:\WINDOWS\system32\kernel32.dll 501E0000 7000 C:\WINDOWS\System32\CBA.DLL 50240000 A000 C:\WINDOWS\System32\MsgSys.dll 50250000 14000 C:\WINDOWS\System32\NTS.dll 71AB0000 9000 C:\WINDOWS\System32\WSOCK32.dll 71A90000 15000 C:\WINDOWS\System32\WS2_32.dll 77C00000 53000 C:\WINDOWS\system32\msvcrt.dll 71A80000 8000 C:\WINDOWS\System32\WS2HELP.dll 77DC0000 9E000 C:\WINDOWS\system32\ADVAPI32.dll 78000000 86000 C:\WINDOWS\system32\RPCRT4.dll 71A30000 3C000 C:\WINDOWS\System32\MSWSOCK.dll 71C00000 4E000 C:\WINDOWS\System32\NETAPI32.dll 77D30000 8C000 C:\WINDOWS\system32\USER32.dll 77C60000 40000 C:\WINDOWS\system32\GDI32.dll 50270000 12000 C:\WINDOWS\System32\PDS.DLL 71B00000 11000 C:\WINDOWS\system32\MPR.dll 771A0000 121000 C:\WINDOWS\system32\ole32.dll 773C0000 7FB000 C:\WINDOWS\system32\SHELL32.dll 00320000 64000 C:\WINDOWS\system32\SHLWAPI.dll 6E0F0000 11000 C:\WINDOWS\System32\CTL3D32.dll 76B20000 2D000 C:\WINDOWS\System32\WINMM.dll 516A0000 11000 C:\Program Files\Symantec_Client_Security\Symantec AntiVirus\NAVLU.dll 73D90000 F2000 C:\WINDOWS\System32\MFC42.DLL 76BE0000 B000 C:\WINDOWS\System32\PSAPI.DLL 75A40000 A6000 C:\WINDOWS\system32\USERENV.dll 78090000 E4000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.10.0_x-ww_f7fb5805\comctl32.dll 77330000 8B000 C:\WINDOWS\system32\comctl32.dll 61EC0000 E000 C:\WINDOWS\System32\MFC42LOC.DLL 51810000 D000 C:\Program Files\Symantec_Client_Security\Symantec AntiVirus\NAVNTUTL.DLL 76B90000 4000 C:\WINDOWS\System32\SFC.DLL 76C50000 29000 C:\WINDOWS\System32\sfc_os.dll 76C20000 2B000 C:\WINDOWS\System32\WINTRUST.dll 76290000 8C000 C:\WINDOWS\system32\CRYPT32.dll 76270000 F000 C:\WINDOWS\system32\MSASN1.dll 76C80000 22000 C:\WINDOWS\system32\IMAGEHLP.dll 71A70000 8000 C:\WINDOWS\System32\wshtcpip.dll 76F10000 25000 C:\WINDOWS\System32\DNSAPI.dll 76FA0000 7000 C:\WINDOWS\System32\winrnr.dll 76F50000 2D000 C:\WINDOWS\system32\WLDAP32.dll 76FB0000 5000 C:\WINDOWS\System32\rasadhlp.dll 71F10000 6000 C:\WINDOWS\System32\wshisn.dll 51480000 4D000 C:\Program Files\Symantec_Client_Security\Symantec AntiVirus\i2ldvp3.dll 51370000 31000 C:\Program Files\Symantec_Client_Security\Symantec AntiVirus\NAVAPI32.DLL 51750000 11000 C:\Program Files\Symantec_Client_Security\Symantec AntiVirus\vpmsece.dll 69100000 90000 C:\PROGRA~1\COMMON~1\SYMANT~1\VIRUSD~1\20031008.020\NAVEX32a.DLL 692C0000 1C000 C:\PROGRA~1\COMMON~1\SYMANT~1\VIRUSD~1\20031008.020\NAVENG32.DLL 51300000 D000 C:\Program Files\Symantec_Client_Security\Symantec AntiVirus\NAVAP32.DLL[/qoute]
вот это, примерно, то, что позволяет делать Tool Help API.
|
|
|
Записан
|
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #23 : 09-10-2003 11:55 » |
|
Оч-чень интересно. А ведь это по F4 можно править. Сейчас попробую. Интересно, что получится...
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #24 : 09-10-2003 12:00 » |
|
нет, править ты будешь текстовую копию, но никак не это
|
|
|
Записан
|
|
|
|
|
|