Как завершить чужую программу, зная ее hwnd.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alfa
Бывалый
Бывалый
 
Сообщения: 249
Зарегистрирован: 12.01.2003 (Вс) 20:15
Откуда: Россия, Красноярск

Как завершить чужую программу, зная ее hwnd.

Сообщение Alfa » 15.01.2004 (Чт) 18:00

Я понимаю, что вопрос давно проскальзывал. Мне надо завершить программу, знаю ее hwnd. Завершить без всяких окон сохранения. За миг. Пробывал отсылать сообщение WM_DESTROY. С блокнотом проходит, а например с Explorer, IE нет.
Как завершить?

SSSerj
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 07.11.2003 (Пт) 11:32

Сообщение SSSerj » 15.01.2004 (Чт) 18:27

А SendKeys чем не подходит

AppActivate hwnd, True
SendKeys "%{F$}", True

Данная комбинация закроет и Explorer, IE. А вот с вордом посложнее.

Alfa
Бывалый
Бывалый
 
Сообщения: 249
Зарегистрирован: 12.01.2003 (Вс) 20:15
Откуда: Россия, Красноярск

Ответ

Сообщение Alfa » 15.01.2004 (Чт) 21:26

Помогите пожалуйства.[/quote]

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 15.01.2004 (Чт) 22:21

ты имеешь ввиду хендл окна?

если да, то по нему можно найти ИД процесса, ну и TerminateProcess
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Alfa
Бывалый
Бывалый
 
Сообщения: 249
Зарегистрирован: 12.01.2003 (Вс) 20:15
Откуда: Россия, Красноярск

Ответ

Сообщение Alfa » 16.01.2004 (Пт) 7:45

Я пытаюсь так:
Код: Выделить всё
a = Shell("calc.exe", vbNullString)
TerminateProcess(a, 0)

Ничего не выходит.
Но при
Код: Выделить всё
a = GetCurrentProcess
TerminateProcess(a, 0)

Все замечательно. VB закрывается...

Alfa
Бывалый
Бывалый
 
Сообщения: 249
Зарегистрирован: 12.01.2003 (Вс) 20:15
Откуда: Россия, Красноярск

Ответ

Сообщение Alfa » 16.01.2004 (Пт) 16:30

Сейчас попытался функцией TerminateProcess закрыть все окна с 1 по 10000000. Результат отрицательный. Не одно не закрылось!
Люди, научите пожалуйства закрывать так окна. Мне очень нужно для проекта! Пожалуйства.

ShadowCaster
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 24.05.2002 (Пт) 10:52

Сообщение ShadowCaster » 17.01.2004 (Сб) 0:10

Declare Function GetWindowThreadProcessId Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Declare Function TerminateProcess Lib "kernel32" Alias "TerminateProcess" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Long) As Long
Const PROCESS_ALL_ACCESS = &H1F0FFF

Sub KillByhWnd(ByVal hWnd as Long)
dim h1 as long, h2 as long
GetWindowThreadProcessId hWnd, h1
h2 = openprocess(PROCESS_ALL_ACCESS, false, h1)
TerminateProcess(h2)
CloseHandle(h2)
End Sub


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 19

    TopList