Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.03.17;
Скачать: [xml.tar.bz2];

Вниз

Задравствуйте! Помогите, процессы...   Найти похожие ветки 

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.03.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
3-53925
Leon_O
2003-02-25 19:20
2003.03.17
проблема с индексами


3-53915
ruslan_as
2003-02-24 15:16
2003.03.17
Названия столбцов в DBGrid в две строки


7-54324
badaxe
2003-01-21 09:30
2003.03.17
Как определить время бездействия клавиатуры и мыши?


1-54005
Ag2002
2003-03-04 18:19
2003.03.17
Прозрачность


3-53897
Жук
2003-02-25 13:15
2003.03.17
Отбор записей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский