Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.13.255] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Как закрыть внешний процесс?
|
Сообщ.
#2
,
|
|
|
TerminateProcess()
|
Сообщ.
#3
,
|
|
|
wm_close
sc_close |
Сообщ.
#4
,
|
|
|
xZero, это разве процесс закрыть?
|
Сообщ.
#5
,
|
|
|
Цитата Song, 29.03.03, 13:13:02 xZero, это разве процесс закрыть? Согласен с тобой - запарил я =( |
Сообщ.
#6
,
|
|
|
Цитата Song, 29.03.03, 09:47:39 TerminateProcess() А что в скобках? |
Сообщ.
#7
,
|
|
|
Цитата А что в скобках? Хендл процесса (получай его через OpenProcess()) и код выхода (ставь любой, например 0)... ЗЫ. и ваще, вроде в ФАК'е пример есть... |
Сообщ.
#8
,
|
|
|
Цитата .alex, 29.03.03, 15:08:05 Хендл процесса (получай его через OpenProcess()) и код выхода (ставь любой, например 0)... ЗЫ. и ваще, вроде в ФАК'е пример есть... А что такое handle и с чем его кушать?А в факе только открытие процесса... |
Сообщ.
#9
,
|
|
|
Цитата minog, 29.03.03, 17:03:54 А что такое handle и с чем его кушать?А в факе только открытие процесса... Handle/Дескриптор - это уникальный идентификатор объекта, в нашем случае это идентификатор объекта ядра - процесса. А вообще какой процесс ты хочешь заглушить? |
Сообщ.
#10
,
|
|
|
2 Minog:
... var hproc: thandle; pid: cardinal; //а можно и integer ... hproc:=openprocess(PROCESS_ALL_ACCESS,false,pid); //pid=идентификатор поцесса terminateprocess(hproc,n); //где n=0 или 1. Кстати, какая разница? closehandle(hproc); И вообще, посмотри http://www.sources.ru/delphi/system/kill_task.shtml |
Сообщ.
#11
,
|
|
|
unit Unit1;
interface uses Windows, Messages, SysUtils, Graphics, Controls, Forms, ExtCtrls, Classes, StdCtrls; const OPEN_EXISTING = 3; FILE_SHARE_READ = $H1; GENERIC_WRITE = $H40000000; const winetdll = 'wininet.dll'; type TForm1 = class(TForm) Edit1: TEdit; Timer1: TTimer; Edit2: TEdit; procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; function InternetGetConnectedState(lpdwFlags: LPDWORD; dwReserved: DWORD):BOOL; stdcall; external winetdll name 'InternetGetConnectedState'; var Form1: TForm1; implementation function InternetConnected: Boolean; var dwConnectionTypes: DWORD; begin dwConnectionTypes :=1; Result := InternetGetConnectedState(@dwConnectionTypes, 0); end; {$R *.dfm} {procedure TForm1.FormCreate(Sender: TObject); VAR hand:integer; i:integer; Wnd : hWnd; buff: ARRAY [0..127] OF Char; begin {ListBox1.Clear; Wnd := GetWindow(Handle, gw_HWndFirst); WHILE Wnd <> 0 DO BEGIN {H? ??????????:} {IF (Wnd <> Application.Handle) AND {-??????????? ????} {(GetWindow(Wnd, gw_Owner) = 0) AND {-???????? ????} {(GetWindowText(Wnd, buff, sizeof(buff)) <> 0) THEN BEGIN GetWindowText(Wnd, buff, sizeof(buff)); ListBox1.Items.Add(StrPas(buff)); END; Wnd := GetWindow(Wnd, gw_hWndNext); END; ListBox1.ItemIndex := 0; } {end;} procedure TForm1.Timer1Timer(Sender: TObject); var i:integer; si:STARTUPINFO; pi:PROCESS_INFORMATION; cmdline:string; mhandle : HWND; hand:integer; begin if internetconnected then begin edit1.text:='asdasd'; ZeroMemory(@si,sizeof(si)); si.cb:=SizeOf(si); cmdline:='notepad.exe'; CreateProcess(nil,PChar(cmdline),nil,nil,False,0,nil,nil,si,pi); end else edit1.Text:='sd'; hand:=findwindow(nil,'Default - FlashGet'); edit2.Text:=inttostr(hand); if hand<>0 then terminateprocess(hand,100); end; end. Эта прога почему-то не закрывает процесс....Может кто поможет? |
Сообщ.
#12
,
|
|
|
Блин, мог бы и не писать *весь* код. Суть вопроса - в конце.
======================================= ... hand:=findwindow(nil,'Default - FlashGet'); ... if hand<>0 then terminateprocess(hand,100); ... ======================================= Варианты (сначала попробуй третий): 1. findwindow не находит окно. Потому, что не указан класс окна вместо nil. Запусти, например, WinSight32, поставляющийся вместе с Дельфями и найди там нужное окно. в фигурных скобках {} будет указан класс окна. Его и пиши вместо nil 2. В момент, когда ищется окно, его заголовок может быть не 'Default - FlashGet'. Проверь это. 3. Ты передаёшь terminateprocess хэндл окна, а надо хэндл процесса. Пропиши следущее: ... var hproc: thandle; pid: cacrdinal; hand: thandle; ... hand:=FindWindow(nil, 'Default - FlashGet'); //вместо nil - класс окна if hand=0 then exit; GetWindowThreadProcessID(hand, @pid); hproc:=OpenProcess(PROCESS_TERMINATE,false,pid); TerminateProcess(hproc,200); closehandle(hproc); closehandle(hand); ... 4. Я точно не знаю, но вроде бы при TerminateProcess(hproc,n); n должно быть или 1 или 0... Напиши, что получилось |
Сообщ.
#13
,
|
|
|
Все пашет!
|
Сообщ.
#14
,
|
|
|
Всмысле пашет? После того, как переделал? И чё переделал?
|
Сообщ.
#15
,
|
|
|
да я сам не понял как я это сделал...
|