|
Kill Process
|
|||
---|---|---|---|
#18+
Привет всем. Задача такая: 1. Запущена программа QWERTY.exe (в Caption окна может быть все что угодно) 2. Из FOXa просмотреть список всех запущенных процессов (с их идентификаторами) 3. Из FOXa по выбранному ID процесса убить этот процесс Помогите пожалуйста с исходником ! Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2009, 18:36 |
|
Kill Process
|
|||
---|---|---|---|
#18+
пример из моего процедурного файла *================================================================================ * 43. Функция DecHex - Converts from base 10 to base 16. * Функция HexDec - Translates Hex (in a string) to a decimal *================================================================================ FUNCTION DecHex && Converts from base 10 to base 16. PARAMETER nDec IF nDec=0 RETURN '00000000' ENDIF DIMENSION aHex[16] FOR nChar = 1 TO 16 aHex[nChar] = SUBSTR('0123456789ABCDEF', nChar,1) NEXT cHex = '' DO WHILE nDec > 0 cHex = aHex[BITAND(nDec,15) + 1] + cHex nDec = BITRSHIFT(nDec,4) && Same as INT(nASCII / 16), but perhaps slightly faster. ENDDO cHex = PADL(cHex,8,'0') && addition by on the left till 8 characters RETURN cHex *********************************************************************************************************** FUNCTION HexDec && Translates Hex (in a string) to a decimal PARAMETERS cHex cHex=PADL(cHex,8,'0') IF cHex='00000000' RETURN 0 ENDIF DIMENSION aHex[16] FOR nChar = 1 TO 16 aHex[nChar] = SUBSTR('0123456789ABCDEF', nChar,1) NEXT len_hex = LEN(cHex) && Length of a symbolical line n_dec = 0 FOR jj=1 TO len_hex n_dec = n_dec + (ASCAN(aHex, SUBSTR(cHex, jj, 1)) -1) * 16^(len_hex - jj) ENDFOR RETURN n_dec *================================================================================ * конец функций DecHex, HexDec *================================================================================ *================================================================================ * 44. Функция KillExcel - получение списка процессов в WINDOWS и уничтожение процессов EXCEL *================================================================================ FUNCTION KillExcel #define TH32CS_SNAPHEAPLIST 0x00000001 #define TH32CS_SNAPPROCESS 0x00000002 #define TH32CS_SNAPTHREAD 0x00000004 #define TH32CS_SNAPMODULE 0x00000008 DECLARE integer CreateToolhelp32Snapshot IN WIN32API integer, integer DECLARE integer Process32First IN WIN32API integer, string @ DECLARE integer Process32Next IN WIN32API integer, string @ DECLARE integer TerminateProcess IN WIN32API integer, integer DECLARE integer OpenProcess IN WIN32API integer, integer, integer DECLARE integer CloseHandle IN WIN32API integer * CreateToolhelp32Snapshot - Takes a snapshot of the processes and the heaps, modules, and threads. HSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * структура для Process32First, Process32Next *typedef struct tagPROCESSENTRY32 { * DWORD dwSize; * DWORD cntUsage; * DWORD th32ProcessID; * DWORD th32DefaultHeapID; * DWORD th32ModuleID; * DWORD cntThreads; * DWORD th32ParentProcessID; * LONG pcPriClassBase; * DWORD dwFlags; * char szExeFile[MAX_PATH]; *} PROCESSENTRY32; cBuff=SPACE(400) Process32First(HSnapshot,@cBuff) DIMENSION arr[1,3] arr[1,1] = DWORD_NUM(SUBSTR(cBuff,9,4)) && PID процесса (10-чное число) arr[1,2] = DecHex(arr[1,1]) && PID процесса (16-чное число) arr[1,3] = '' && имя EXE-модуля lpString = SUBSTR(cBuff,37,100) FOR i=1 TO Len(lpString) IF ASC(SUBSTR(lpString,i,1))#0 arr[1,3] = arr[1,3] +SUBSTR(lpString,i,1) ELSE EXIT ENDIF NEXT *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flag=1 DO WHILE flag=1 flag = Process32Next(HSnapshot,@cBuff) j = ALEN(arr,1)+1 DIMENSION arr[j,3] arr[j,1] = DWORD_NUM(SUBSTR(cBuff,9,4)) && PID процесса (10-чное число) arr[j,2] = DecHex(arr[1,1]) && PID процесса (16-чное число) arr[j,3] = '' && имя EXE-модуля lpString = SUBSTR(cBuff,37,100) FOR i=1 TO Len(lpString) IF ASC(SUBSTR(lpString,i,1))#0 arr[j,3] = arr[j,3] +SUBSTR(lpString,i,1) ELSE EXIT ENDIF NEXT ENDDO *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FOR i=1 TO ALEN(arr,1) IF AT('excel.exe',LOWER(arr[i,3])) > 0 hProcess=OpenProcess(1,1,arr[i,1]) TerminateProcess(hProcess,0) CloseHandle(hProcess) ENDIF NEXT *================================================================================ * конец функций KillExcel *================================================================================ ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2009, 20:16 |
|
Kill Process
|
|||
---|---|---|---|
#18+
Базофил, спасибо за исходник, но в нем отсутствует ф-ция DWORD_NUM( ) или она гдето встроена. Alexpfr. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2009, 08:28 |
|
Kill Process
|
|||
---|---|---|---|
#18+
ALEXPFR, *================================================================================ * 42. Функция Num_Word - "число --> строка WORD (2 байта)" * Функция Word_Num - "строка WORD (2 байта) --> число" * Функция Num_Dword - "число --> строка DWORD (4 байта)" * Функция Dword_Num - "строка DWORD (4 байта) --> число" *================================================================================ FUNCTION num_word && Функция Num_Word - "число --> строка WORD" LPARAM Num LOCAL c0,c1 cresult = chr(0)+chr(0) IF Num < (2^16 - 1) then c1 = chr(int(Num/256)) c0 = chr(mod(Num,256)) cresult = c0+c1 ELSE MESSAGEBOX('Число '+ALLT(STR(Num))+' слишком большое !!!') cresult = '????' ENDIF RETURN cresult *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTION word_num && Функция Word_Num - "строка WORD --> число" LPARAM cW nresult = ASC(SUBSTR(cW,2))*256 + ASC(SUBSTR(cW,1)) RETURN nresult *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTION num_dword && Функция Num_Dword - "число --> строка DWORD" LPARAM Num LOCAL c0,c1,c2,c3 cresult = chr(0)+chr(0)+chr(0)+chr(0) IF Num < (2^32 - 1) then c3 = chr(int(Num/(256^3))) Num = mod(Num,256^3) c2 = chr(int(Num/(256^2))) Num = mod(Num,256^2) c1 = chr(int(Num/256)) c0 = chr(mod(Num,256)) cresult = c0+c1+c2+c3 ELSE MESSAGEBOX('Число '+ALLT(STR(Num))+' слишком большое !!!') cresult = '????' ENDIF RETURN cresult *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTION dword_num && Функция Dword_Num - "строка DWORD --> число" LPARAM cDW nresult = ASC(SUBSTR(cDW,4))*256*256*256 + ASC(SUBSTR(cDW,3))*256*256 + ; ASC(SUBSTR(cDW,2))*256 + ASC(SUBSTR(cDW,1)) RETURN nresult *================================================================================ * конец функций Num_Word, Word_Num, Num_Dword, Dword_Num *================================================================================ ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2009, 10:46 |
|
Kill Process
|
|||
---|---|---|---|
#18+
Базофил, ОГРОМНОЕ СПАСИБО !!!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2009, 11:08 |
|
Kill Process
|
|||
---|---|---|---|
#18+
ALEXPFR, Добрый день. Меня заинтересовала данная тема, прочитал, но не могу понять. Не могли бы Вы объяснить, как использовать эти функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2011, 15:58 |
|
Kill Process
|
|||
---|---|---|---|
#18+
rajulun, Скопируй весь код этого топика в один PRG (например My.prg) и запускай Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2011, 16:17 |
|
Kill Process
|
|||
---|---|---|---|
#18+
rajulun, Извиняюсь, уже разобрался. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2011, 16:46 |
|
Kill Process
|
|||
---|---|---|---|
#18+
Dima T, Спасибо за ответ. Я скопировал две функции (dechex.prg и dword_num.prg) по отдельности, а функцию KillExcel "повесил" на кнопку, закомментировав первую строку. Незнаю правильно или нет :-), но все заработало. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2011, 16:53 |
|
Kill Process
|
|||
---|---|---|---|
#18+
А кто может подсказать как уничтожить или закрыть конкретно открытый не сохраненный Excel файл...... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2012, 17:30 |
|
Kill Process
|
|||
---|---|---|---|
#18+
johngorn, утилита unlocker ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2012, 09:57 |
|
Kill Process
|
|||
---|---|---|---|
#18+
а причем тут эта утилитка? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2012, 11:06 |
|
Kill Process
|
|||
---|---|---|---|
#18+
у объекта экселя сделай Код: sql 1.
и тогда от будет нормально закрываться PS Этот вопрос к данному топику никакого отношения не имеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2012, 12:01 |
|
|
start [/forum/topic.php?fid=41&tid=1583645]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 260ms |
total: | 391ms |
0 / 0 |