Текущий архив: 2003.03.17;
Скачать: CL | DM;
Вниз
Задравствуйте! Помогите, процессы... Найти похожие ветки
← →
Antosya (2003-01-18 13:09) [0]Извините, вот второй раз задаю вопрос но только теперь более понятно, скажите пожалуйста, как узнать хандлы активного окна и хандлы окна по заголовку! Как кикнуть процесс без каких либо проблем! То есть без помощи Post или Send Message, a TerminateProcess! Как? Что писать в скобках? Т.е мне нужны хандлы и соординаты или я ошибаюсь? Как их узнать? Как узнать оба пораметра функции зная только что окно активно или его заголовок?
В общем, мне надко кикнуть процесс зная только что он активен или его заголовок(Microsoft Word - предположим?)!
Очень надо!
← →
Юрий Зотов (2003-01-18 13:31) [1]1. > хандлы активного окна
GetForegroundWindow
2. > хандлы окна по заголовку
FindWindow
3 > Как кикнуть процесс без каких либо проблем!
> То есть без помощи Post или Send Message, a TerminateProcess
Вот как раз TerminateProcess и может привести к проблемам. Могут не освободиться системные ресурсы, не выгрузиться DLL, остаться недоступными файлы и пр. Поэтому нужно сначала послать WM_CLOSE, потом (если не поможет) WM_QUIT, а уж только потом (если и это не поможет) вызывать TerminateProcess. См. PostMesssage и PostThreadMesssage.
4. > Как узнать оба пораметра функции
Нужно знать только первый, второй - любое целое число. Если хэндл главного окна известен, то см. GetWindowThreadProcessID и OpenProcess. Под NT могут потребоваться соответствующие права доступа к процессу.
5. Ерундой Вы занимаетесь, IMHO.
← →
Antosya (2003-01-18 21:03) [2]Понимаете, после close оно сворачивается в трэй, quit не пашет! Это есле Send, а если использовать Post то вообще винда говорит ошибку!!! И глюки - это в 98!
← →
Antosya (2003-01-19 21:08) [3]Как без сообщений! А просто TerminateProcess или KillProgram!? И как узнать параметры?
← →
DeadMeat (2003-01-19 22:59) [4]В случае если надо "прибить" процесс, окно которого активно в данный момент я делал так:
procedure killactiveprocess;
var pe : TProcessEntry32;
c1:cardinal;
buf:dword;
buff:boolean;
buf1:cardinal;
begin
GetWindowThreadProcessId (getforegroundwindow,@buf);
c1:=CreateToolHelp32Snapshot(TH32CS_SnapProcess,0);
pe.dwSize:=sizeof (pe);
if c1=INVALID_HANDLE_VALUE then exit;
if Process32First(c1,pe) then
repeat
buff:=Process32Next(c1,pe);
if pe.th32ProcessID=buf then
begin
if getexitcodeprocess (OpenProcess(PROCESS_ALL_ACCESS, False, pe.th32ProcessID),buf1)=false then buf1:=0;
if uppercase (pe.szExeFile)<>uppercase (application.exename) then TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS, False, pe.th32ProcessID), buf1);
end;
until not buff;
closehandle (c1);
end;
Да и в списке uses подключи tlhelp32
← →
Antosya (2003-01-21 15:54) [5]О, большое спасибо! Класс, работает будь здоров! НО у меня есть ещё одня просьба! Помоги прожалуйста в таком случае, если мн нужно не активный процесс кикнуть, а процесс, которого ты знаешь title или имя exe файла, очень надо! А за это ещё раз спасибо!
← →
DeadMeat (2003-01-21 18:58) [6]Если знаешь title, то первую строку после begin замени на такие:
bufhnd:=findwindow (nil, title);
if bufhnd<>0 then GetWindowThreadProcessId (bufhnd,@buf) else exit;
и в списке var добавь:
bufhnd:hwnd;
Если известен только *.EXE файл (а точнее желательно его полное местонахождение), то удали первую (после begin) строку, а вторую после repeat замени на такую:
if uppercase (pe.szexefile)=uppercase (*.EXE) then
Может теперь приоткроешь ты нам свою великую завесу тайны... зачем тебе энто...??
← →
Antosya (2003-01-22 21:18) [7]Уух! Класс, спасибо, всё работает как нельзя лучше! Очень сильно благадарю! Но у меня есть ещё один, и наверно последний вопрос, вот он:
Вот ведь когда ты пишешь findwindow, то туда нужно вторым параметром писать значение типа Pchar, а мне надо сделать так - у меня есть переменная типа string, и её как-то надо перевести в PCHar, в общем мне надо в findwindow как-то записать переменную типа string! Не знаю, я и с массивом пробывал и так просто! Вот например для перевевода из PCHar в строку используется вроду StrPos? ну или что-то в этом роде! Помогите, если не трудно!
← →
DeadMeat (2003-01-22 21:29) [8]Если бы ты немного покапался в help-е, то нашёл бы такую функцию, которая так и называется PChar. Её в качестве параметра передаёшь свой string, а возвращает она нужный pchar, т.е.
bufhnd:=findwindow (nil, pchar (title));
← →
Юрий Зотов (2003-01-22 23:39) [9]PChar - это не функция. Это тип. А PChar(Title) - это приведение типа.
← →
Antosya (2003-01-23 15:38) [10]О, попробую! *не люблю в help"ах копаться!*
← →
Antosya (2003-01-23 22:19) [11]Удалено модератором
Примечание: Задай вопрос в отдельной ветке
Страницы: 1 вся ветка
Текущий архив: 2003.03.17;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.013 c