Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Активные процессы  (Прочитано 31447 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Harry
Команда клуба

ua
Offline Offline

« : 07-10-2003 10:23 » 

А как программно проверить, запущен ли какой-либо процесс и программно же включить/выключить его?
Записан

Слабый пол силен в силу слабости сильного пола к слабому
Var-Alex
Гость
« Ответ #1 : 07-10-2003 12:11 » 

EnumProcesses - подробенее в MSDN, убить процесс TerminateProcess тоже MSDN подробнее. А что ты имеешь ввиду под вкл/выкл?
Записан
Harry
Команда клуба

ua
Offline Offline

« Ответ #2 : 07-10-2003 13:02 » 

Т.е. для программы, которая будет прописана в моем коде должна быть проверка - запущена ли она, например, раз в 15 минут и если нет - запустить.
Например, хочу проверку для FlashGet или там для Icq сделать...
Записан

Слабый пол силен в силу слабости сильного пола к слабому
x77
Модератор

ro
Offline 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
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #5 : 07-10-2003 17:00 » 

мьютекс - это некий именнованый (хотя и не обязательно) объект в системе. в OnCreate формы пытаемся открыть мьютекс. если мы его благополучно открыли - значит прога запущена. если не открыли - значит проги нет, создаём мьютекс и работаем дальше. обычно мьютексами реализуется проверка на уникальность запуска, но можно его юзать и для этой задачи, imho.
Записан

p0s0l
Гость
« Ответ #6 : 08-10-2003 03:56 » 

Т.е. ты хочешь сказать, что например. ICQ при своём запуске создаёт какой-то mutex ? И как он называется ?
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #7 : 08-10-2003 03:59 » 

понятия не имею, что оно создаёт, и как оно называется - тем более Улыбаюсь. это всего лишь один из множества способов.
Записан

Harry
Команда клуба

ua
Offline Offline

« Ответ #8 : 08-10-2003 06:35 » 

Так а как указать на сам процесс? my_proc - это ведь собирательное название процесса. А как указывать на него? Путь к файлу прописывать?
Записан

Слабый пол силен в силу слабости сильного пола к слабому
Harry
Команда клуба

ua
Offline Offline

« Ответ #9 : 08-10-2003 06:48 » 

Кстати, если нетрудно, можно немного раскрыть другие способы? Кое-какую информацию по этому я нашел но вскользь и мало...  Жаль
Записан

Слабый пол силен в силу слабости сильного пола к слабому
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #10 : 08-10-2003 07:07 » new

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. со второй, я думаю, и так всё понятно Улыбаюсь
Записан

Harry
Команда клуба

ua
Offline Offline

« Ответ #11 : 08-10-2003 08:33 » 

Во-во-во... вот это как раз то что было нужно. Спасибо огромное!  Отлично
Записан

Слабый пол силен в силу слабости сильного пола к слабому
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #12 : 08-10-2003 08:37 » 

не за что Улыбаюсь
Записан

p0s0l
Гость
« Ответ #13 : 08-10-2003 10:31 » 

x77, тогда я не понял, зачем ты про Mutex сказал, ведь нужно узнать запущен ли чужая прога, а не своя. Ну да ладно... Ага
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #14 : 08-10-2003 10:35 » 

p0s0l, только никому не говори: я прогнал  Отлично
Записан

Harry
Команда клуба

ua
Offline 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
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #16 : 09-10-2003 10:12 » 

ага. допиши в uses tlhelp32
Записан

Harry
Команда клуба

ua
Offline Offline

« Ответ #17 : 09-10-2003 10:34 » 

Да, так все работает. А что это за библиотека и за что она отвечает? Только за процессами в памяти или она делает что-то еще? Я смотрю, этот код следит за процессами в памяти не привязываясь к пути к файлу.
Записан

Слабый пол силен в силу слабости сильного пола к слабому
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #18 : 09-10-2003 10:45 » 

можно и к пути привязаться, при желании. библиотека предназначена для получения сведений о процесса, потоках, модулях и ипользуемой ими памяти:

CreateToolhelp32Snapshot    // делает "снимок" текущих процессов (модулей, памяти, пр.)

// работа с динамической памятью процессов
Heap32First
Heap32ListFirst
Heap32ListNext
Heap32Next

// модулями
Module32First
Module32Next

// процессами
Process32First
Process32Next

// потоками
Thread32First
Thread32Next

// чтение памяти в контексте процесса
Toolhelp32ReadProcessMemory
Записан

x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #19 : 09-10-2003 10:46 » 

наваять, что ли, статью на эту тему? Улыбаюсь
Записан

Harry
Команда клуба

ua
Offline Offline

« Ответ #20 : 09-10-2003 10:53 » 

А если не затруднит - можно и наваять. Я думаю, многим будет интересно.
Записан

Слабый пол силен в силу слабости сильного пола к слабому
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #21 : 09-10-2003 10:55 » 

через пару дней - возможно.
Записан

x77
Модератор

ro
Offline 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
Команда клуба

ua
Offline Offline

« Ответ #23 : 09-10-2003 11:55 » 

Оч-чень интересно. А ведь это по F4 можно править. Сейчас попробую. Интересно, что получится...
Записан

Слабый пол силен в силу слабости сильного пола к слабому
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #24 : 09-10-2003 12:00 » 

нет, править ты будешь текстовую копию, но никак не это Улыбаюсь
Записан

Harry
Команда клуба

ua
Offline Offline

« Ответ #25 : 09-10-2003 12:03 » 

Понятно. Это просто отчет, его правка на процессы не влияет...  Ага
Записан

Слабый пол силен в силу слабости сильного пола к слабому
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines