Форум: "Потрепаться";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];
ВнизИгровой клуб Найти похожие ветки
← →
Sword-Fish (2003-09-28 23:58) [0]Добрый вечер, уважаемые знатоки !!!
Я открыл игровой клуб и пишу программу для администрирования и у меня возник небольшой вопрос !!!
У меня на "клиентах" стоит таймер и когда он срабатывает надо закрыть все процессы кроме моего. Как моно это осуществить ???
Моя программа работает вместо шела, т.е вместо Explorer.exe !!!
← →
jonni (2003-09-29 02:34) [1]ochen" prosto .... perebiray vse processi v sisteme i esli oni ne sistemnie in etvoy to zakrivay ih....... vot i vse
PS: molodoy ti odnako dlya otkritiya.. a esli dazhe i otkril naydi normal"nogo programera kotoriy tebe horoshuyu programku sdelaet... kazhdiy dolzhen zanimat"sya svoim.....
← →
Opuhshii (2003-09-29 15:24) [2]2Sword-Fish © (28.09.03 23:58)
"Я открыл игровой клуб и пишу программу для администрирования "....
а 10 вшивых убитых енота слабо заплатить,... уж этих программ за 10$ писано-переписано,...
ну может 20,...
← →
(3223)jab (2003-09-29 16:16) [3]Это как и говорили просто...
Для этого тебе нужно перебрать все процессы... а именно:
procedure TForm1.Button1Click(Sender: TObject);
var
Wnd:hWnd;
buff: array [0..127] of Char;
begin
ListBox1.Clear;
Wnd:=GetWindow(Handle,gw_HWndFirst);
while Wnd<>0 do begin
if (Wnd<>Application.Handle) and
(IsWindowVisible(Wnd)) 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.Button2Click(Sender: TObject);
var
ProcessHandle:THandle;
ProcessID:Integer;
TheWindow:HWND;
begin
TheWindow:=FindWindow(nil, PChar(Edit1.Text));
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle:=OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
Edit1.Text:="";
end;
Ну сам понимаеш что в Edit1.Text у на должно быть название того окна, которое мы получили из листбокса в предыдущем клике и это название должно не равнятся названию твоего шэла :)
TerminateProcess(ProcessHandle,4); - убивает его нах...
Думаю теперь всё ясно и понятно....
← →
Sword-Fish (2003-09-30 11:54) [4]Добрый день !!!
Я попробовал этот вариант с закрытием всех приложений, он работает, но Half-Life и Counter-Strike не закрывает почему и как это моно исправить ???
← →
Sword-Fish (2003-09-30 21:52) [5]Мне может кто-нибудь ответить !!!
← →
Livid (2003-10-01 09:36) [6]По-моему, проще перебирать процессы и соответственно убивать... Главное не трогать системные (как напр. svchost)
Чтобы перебрать процессы попробуй почитать документацию к CreateToolhelp32Snapshot, узнаешь много интересного :)
Все функции в юните tlhelp32.dcu
← →
Livid (2003-10-01 09:36) [7]По-моему, проще перебирать процессы и соответственно убивать... Главное не трогать системные (как напр. svchost)
Чтобы перебрать процессы попробуй почитать документацию к CreateToolhelp32Snapshot, узнаешь много интересного :)
Все функции в юните tlhelp32.dcu
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c