powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TerminateProcess
7 сообщений из 7, страница 1 из 1
TerminateProcess
    #32412313
Load
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не срабатывает функция TerminateProcess (WinXP,Win2000)
Есть идеи?

Private Declare Function TerminateProcess Lib "kernel32" _
(ByVal hProcess As Long, _
ByVal uExitCode As Long) As Long
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)

Private Sub Form_Load()
Dim Pid&, di&

Pid& = FindWindow(vbNullString, "Project1")
If Pid& <> 0 Then di& = TerminateProcess(Pid&, 0&)
End Sub

'находим id процесса
Function FindProc(strPrilName As String) As Long

Dim hSnapShot As Long
Dim uProcess As PROCESSENTRY32
Dim r As Long

hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
If hSnapShot = 0 Then
Exit Function
End If

uProcess.dwSize = Len(uProcess)
r = ProcessFirst(hSnapShot, uProcess)
Do While r
If InStr(1, uProcess.szExeFile, strPrilName) Then
FindProc = uProcess.th32ProcessID
Call CloseHandle(hSnapShot)
Exit Function
End If

r = ProcessNext(hSnapShot, uProcess)
Loop

Call CloseHandle(hSnapShot)

End Function
...
Рейтинг: 0 / 0
TerminateProcess
    #32412362
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так:

TerminateProcess(byval Pid&, 0&)




Magnus
...
Рейтинг: 0 / 0
TerminateProcess
    #32412387
Load
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, не помогает, не хочет он прерываться
...
Рейтинг: 0 / 0
TerminateProcess
    #32412447
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пробелма в том что ты ему передаешь ProcID а нужен хендл.
Щас..

Magnus
...
Рейтинг: 0 / 0
TerminateProcess
    #32412655
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного мутно, но если что спрашивай. с NT больше проблем с правами на завершение процесса.
Это в модуль:

Option Explicit


Public Declare Function TerminateProcess Lib "kernel32" ( _
ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Public Declare Function Process32First Lib "kernel32" ( _
ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Public Declare Function Process32Next Lib "kernel32" ( _
ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Public Declare Function CloseHandle Lib "Kernel32.dll" _
(ByVal Handle As Long) As Long

Public Declare Function OpenProcess Lib "Kernel32.dll" _
(ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, _
ByVal dwProcId As Long) As Long

Public Declare Function EnumProcesses Lib "psapi.dll" _
(ByRef lpidProcess As Long, ByVal cb As Long, _
ByRef cbNeeded As Long) As Long

Public Declare Function GetModuleFileNameExA Lib "psapi.dll" _
(ByVal hProcess As Long, ByVal hModule As Long, _
ByVal ModuleName As String, ByVal nSize As Long) As Long

Public Declare Function EnumProcessModules Lib "psapi.dll" _
(ByVal hProcess As Long, ByRef lphModule As Long, _
ByVal cb As Long, ByRef cbNeeded As Long) As Long

Public Declare Function CreateToolhelp32Snapshot Lib "kernel32" ( _
ByVal dwflags As Long, ByVal th32ProcessID As Long) As Long

Public Declare Function GetVersionExA Lib "kernel32" _
(lpVersionInformation As OSVERSIONINFO) As Integer

Public Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long ' This process
th32DefaultHeapID As Long
th32ModuleID As Long ' Associated exe
cntThreads As Long
th32ParentProcessID As Long ' This process's parent process
pcPriClassBase As Long ' Base priority of process threads
dwflags As Long
szExeFile As String * 260 ' MAX_PATH
End Type

Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long '1 = Windows 95 2 = Windows NT
szCSDVersion As String * 128
End Type
Public Const PROCESS_TERMINATE = &H1

Public Const PROCESS_QUERY_INFORMATION = 1024
Public Const PROCESS_VM_READ = 16
Public Const MAX_PATH = 260
Public Const TH32CS_SNAPPROCESS = &H2&
Public Const hNull = 0

Public Function StrZToStr(s As String) As String
StrZToStr = Left$(s, Len(s) - 1)
End Function

Public Function getVersion() As Long
Dim osinfo As OSVERSIONINFO
Dim retvalue As Integer
osinfo.dwOSVersionInfoSize = 148
osinfo.szCSDVersion = Space$(128)
retvalue = GetVersionExA(osinfo)
getVersion = osinfo.dwPlatformId
End Function

Public Function KillAppByEXEName(NameOfEXE As String) As Boolean
NameOfEXE = UCase(NameOfEXE)
KillAppByEXEName = False ' Assume the worst
Select Case getVersion()
Case 1 'Windows 95/98
Dim f As Long, sname As String
Dim hSnap As Long, Proc As PROCESSENTRY32
Dim ProcFromprocid As Long
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If hSnap = hNull Then
Exit Function
End If
Proc.dwSize = Len(Proc)
' Iterate through the processes
f = Process32First(hSnap, Proc)
Do While f
sname = StrZToStr(Proc.szExeFile)
sname = UCase(Trim(sname))
If InStr(sname, NameOfEXE) > 0 Then
ProcFromprocid = OpenProcess(PROCESS_QUERY_INFORMATION Or _
PROCESS_VM_READ, 0, Proc.th32ProcessID) ' get
Call TerminateProcess(ProcFromprocid, 0)
KillAppByEXEName = True
Exit Function
End If
f = Process32Next(hSnap, Proc)
Loop

Case 2 'Windows NT
Dim cb As Long
Dim cbNeeded As Long
Dim NumElements As Long
Dim ProcessIDs() As Long
Dim cbNeeded2 As Long
Dim NumElements2 As Long
Dim Modules(1 To 200) As Long
Dim lRet As Long
Dim ModuleName As String
Dim nSize As Long
Dim hProcess As Long
Dim i As Long
'Get the array containing the process id's for each process object
cb = 8
cbNeeded = 96
Do While cb <= cbNeeded
cb = cb * 2
ReDim ProcessIDs(cb / 4) As Long
lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
Loop
NumElements = cbNeeded / 4

For i = 1 To NumElements
'Get a handle to the Process
hProcess = OpenProcess(PROCESS_TERMINATE Or PROCESS_QUERY_INFORMATION _
Or PROCESS_VM_READ, 0, ProcessIDs(i))
'Got a Process handle
If hProcess <> 0 Then
'Get an array of the module handles for the specified
'process
lRet = EnumProcessModules(hProcess, Modules(1), 200, _
cbNeeded2)
'If the Module Array is retrieved, Get the ModuleFileName
If lRet <> 0 Then
ModuleName = Space(MAX_PATH)
nSize = 500
lRet = GetModuleFileNameExA(hProcess, Modules(1), _
ModuleName, nSize)

ModuleName = UCase(Trim(ModuleName))
If InStr(ModuleName, NameOfEXE) > 0 Then
Call TerminateProcess(hProcess, 0)
KillAppByEXEName = True
Exit Function
End If
End If
End If
'Close the handle to the process
lRet = CloseHandle(hProcess)
Next
End Select
End Function



А этим килять
KillAppByEXEName("Project1.exe")




Magnus
...
Рейтинг: 0 / 0
TerminateProcess
    #32413965
Load
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо за помощь и отдельное спасибо за развернутый ответ(все понятно)
...
Рейтинг: 0 / 0
TerminateProcess
    #32414030
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должен заметит что код то не мой :)
Я посредник :)

Удачи!

Magnus
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TerminateProcess
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]