Как закрыть другую программу из своего приложения

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Как закрыть другую программу из своего приложения

Сообщение dedmakar » 22.08.2007 (Ср) 17:18

Как закрыть другую программу из своего приложения?
Есть пример, но там устаревшая функции GetWindowTask. http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/Interaction/15.mspx. На что изменить?

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 22.08.2007 (Ср) 17:32

reset

dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Сообщение dedmakar » 22.08.2007 (Ср) 17:34

StimorolD3DX, ты очем. С чем это едят хотя бы? :shock:

dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Сообщение dedmakar » 22.08.2007 (Ср) 17:37

Код: Выделить всё
Declare Function FindWindow Lib "User" (ByVal lpClassName As Any, ByVal _
lpWindowName As Any) As Integer
Declare Function GetWindowTask Lib "User" (ByVal hWnd As Integer) As Integer
Declare Function PostAppMessage Lib "User" (ByVal hTask As Integer, ByVal
wMsg _
As Integer, ByVal wParam As Integer, lParam As Any) As Integerм

Title = "Программа А"
ihWnd = FindWindow(0&, Title)
ihTask = GetWindowTask(ihWnd)
iRet = PostAppMessage(ihTask, WM_QUIT, 0, 0&)
MsgBox "Внимание! Программа А закрывается"

Вот код с линка/\
GetWindowTask и PostAppMessage катят только для Win16. Чем заменить? Или другие варианты...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.08.2007 (Ср) 17:42

Найди в MSDN статью "Obsolete Windows Programming Elements", там для всех старых функций приведено, на что они заменены.
Изображение

dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Сообщение dedmakar » 22.08.2007 (Ср) 18:21

Код: Выделить всё
Public Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hwnd As Long, ByRef lpdwProcessId As Long) As Long
Public Declare Function PostThreadMessage Lib "user32.dll" Alias "PostThreadMessageA" (ByVal idThread As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

ihWnd = FindWindow("Notepad", "Безымянный - Блокнот")
ihTask = GetWindowThreadProcessId(ihWnd, 0)
iRet = PostThreadMessage(ihTask, WM_QUIT, 0, 0&)
MsgBox "Внимание! Программа Notepad закрывается"

Код срабатывает без ошибок, но Блокнот не закрывается.
Мож проблема в GetWindowThreadProcessId(ihWnd, 0), я добавил 2-ой элемент 0, без него код не срабатывает. В чем причина?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 22.08.2007 (Ср) 18:38

Протрассируй и посмотри, что в переменных.

И ByRef lpdwProcessId As Long замени на Byval lpdwProcessId as long и передавай 0& соотвественно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.08.2007 (Ср) 19:07

Хакер писал(а):И ByRef lpdwProcessId As Long замени на Byval lpdwProcessId as long и передавай 0& соотвественно.

Без разницы.
Изображение

HiSER
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 88
Зарегистрирован: 04.07.2007 (Ср) 18:17

Сообщение HiSER » 22.08.2007 (Ср) 19:52

Код: Выделить всё
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long

Private Const PROCESS_ALL_ACCESS = &H1F0FFF

Private Sub Command1_Click()
Dim hwnd As Long
Dim pid As Long
Dim hproc As Long
Dim ecode As Long
hwnd = FindWindow("SciCalc", vbNullString)
If Not hwnd = 0 Then
GetWindowThreadProcessId hwnd, pid
hproc = OpenProcess(PROCESS_ALL_ACCESS, 0, pid)
GetExitCodeProcess hproc, ecode
TerminateProcess hproc, ecode
CloseHandle hproc
Else
MsgBox "Window not found!", vbExclamation
End If
End Sub

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.08.2007 (Ср) 20:00

HiSER, ты нифига не в теме.
Изображение

dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Сообщение dedmakar » 22.08.2007 (Ср) 21:01

HiSER, все идет. То же пойдет...


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 93

    TopList