powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Kill Process
14 сообщений из 14, страница 1 из 1
Kill Process
    #36008872
ALEXPFR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.
Задача такая:
1. Запущена программа QWERTY.exe (в Caption окна может быть все что угодно)
2. Из FOXa просмотреть список всех запущенных процессов (с их идентификаторами)
3. Из FOXa по выбранному ID процесса убить этот процесс

Помогите пожалуйста с исходником ! Заранее спасибо.
...
Рейтинг: 0 / 0
Kill Process
    #36009041
Базофил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пример из моего процедурного файла

*================================================================================
* 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
*================================================================================
...
Рейтинг: 0 / 0
Kill Process
    #36009492
ALEXPFR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Базофил, спасибо за исходник, но в нем отсутствует ф-ция DWORD_NUM( ) или она гдето встроена.
Alexpfr.
...
Рейтинг: 0 / 0
Kill Process
    #36009836
Базофил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
*================================================================================
...
Рейтинг: 0 / 0
Kill Process
    #36009929
ALEXPFR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Базофил, ОГРОМНОЕ СПАСИБО !!!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Kill Process
    #37045775
rajulun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ALEXPFR,

Добрый день. Меня заинтересовала данная тема, прочитал, но не могу понять. Не могли бы Вы объяснить, как использовать эти функции.
...
Рейтинг: 0 / 0
Kill Process
    #37045797
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rajulun,

Скопируй весь код этого топика в один PRG (например My.prg)
и запускай
Код: plaintext
do KillExcel in My.prg
Будут найдены все процессы "excel.exe" и убиты.
...
Рейтинг: 0 / 0
Kill Process
    #37045831
rajulun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rajulun,

Извиняюсь, уже разобрался.
...
Рейтинг: 0 / 0
Kill Process
    #37045837
rajulun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Спасибо за ответ.
Я скопировал две функции (dechex.prg и dword_num.prg) по отдельности, а функцию KillExcel "повесил" на кнопку, закомментировав первую строку. Незнаю правильно или нет :-), но все заработало.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Kill Process
    #37818405
johngorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А кто может подсказать как уничтожить или закрыть конкретно открытый не сохраненный Excel файл......
...
Рейтинг: 0 / 0
Kill Process
    #37819031
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johngorn,

утилита unlocker
...
Рейтинг: 0 / 0
Kill Process
    #37819151
johngorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а причем тут эта утилитка?
...
Рейтинг: 0 / 0
Kill Process
    #37819297
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у объекта экселя сделай
Код: sql
1.
.DisplayAlerts = .F.


и тогда от будет нормально закрываться

PS Этот вопрос к данному топику никакого отношения не имеет.
...
Рейтинг: 0 / 0
Kill Process
    #37819502
johngorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, да я понимаю что вопрос не имеет отношения никакого, но я вроде так делал, но не через quit или close не получилось закрыть его.......
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Kill Process
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]