Страница: 1 |
Вопрос: Закрыть EXE | Добавлено: 30.01.05 17:11 |
Автор вопроса: ![]() |
Запускаю EXE с помощью Shell(). Как потом его закрыть/убить? |
Ответы | Всего ответов: 13 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 30.01.05 17:32 |
1. OpenProcess где ProcessID есть то что тебе вернул Shell
2. TerminateProcess c тем что тебе вернул OpenProcess ![]() 3. CloseHandle с тем что тебе вернул... нет не угадал ![]() ![]() |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 192496851 Вопросов: 75 Ответов: 3178 |
Профиль | Цитата | #2 | Добавлено: 30.01.05 20:38 |
![]() Пасибо, т.к. я тоже хотел задать этот вопрос |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #3 | Добавлено: 30.01.05 20:38 |
Public Sub KillProc(KillProcName$())
Dim NP$(100) Dim mass(100) As Long Snap = CreateToolhelpSnapshot(TH32CS_SNAPall, 0) proc.dwSize = Len(proc) TheLoop = ProcessFirst(Snap, proc) Index = 0 While TheLoop <> 0 NP$(Index) = Replace(proc.szExeFile, Right(proc.szExeFile, 1), "" ![]() mass(Index) = proc.th32ProcessID Index = Index + 1 TheLoop = ProcessNext(Snap, proc) Wend CloseHandle Snap For i% = LBound(KillProcName$) To UBound(KillProcName$) Kick$ = KillProcName$(i ![]() For q% = 0 To Index If Left(Spliting(NP$(q ![]() ![]() openproc = OpenProcess(1, 0, mass(q ![]() term = TerminateProcess(openproc, -9) End If Next q% Next i% End Sub -------------------------------- модуль Public proc As PROCESSENTRY32, Snap As Long Public Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long Public Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Public Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Const TH32CS_SNAPPROCESS = &H2, TH32CS_SNAPheaplist = &H1, TH32CS_SNAPthread = &H4, TH32CS_SNAPmodule = &H8, TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + TH32CS_SNAPmodule, MAX_PATH As Integer = 260 Public Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long szExeFile As String * MAX_PATH End Type Public Function Spliting(sFullPath As String, point As String) On Error Resume Next Dim str1() As String str1 = Split(sFullPath, point) Spliting = str1(UBound(str1)) End Function ------------------------------- использовать ![]() KillProcName$(0) = "proga.exe" KillProc KillProcName$() |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 30.01.05 23:20 |
2Hacker, а процессов с одним именем может быть несколько ![]() Да и вопрос ьыл как после Shell закрыть процесс ![]() |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #5 | Добавлено: 31.01.05 08:08 |
Проще найти окно этого exe и послать WM_QUIT. Конечно, зависит от exe. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() Вопросов: 215 Ответов: 1596 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 02.02.05 11:13 |
все это ненадежно, я как-то пробовал. есть такая прога CCTask - вот это действует. она отлавливает все процессы, т.е. например, проводник она отображает,как "C:\WIN\EXPLORER.EXE". Убивает моментально. Правда иногда виснет =( |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #7 | Добавлено: 02.02.05 12:05 |
2LamerOnLine, а если в приложении окон несколько ![]() |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #8 | Добавлено: 03.02.05 10:57 |
Посылать WM_CLOSE каждому, либо Top-Level окну. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 03.02.05 11:09 |
Все равно приложение не закроется, пробовано ![]() Т.ч. я использовал вот что: по PID перебирал все окошки в системе, смотрел на их принадлежность процессу и закрывал их... а уже потом если процесс так и небыл закры, его убивал... |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #10 | Добавлено: 03.02.05 11:10 |
Тут можно подойти с двух сторон - GetWindowThreadProcessId и EnumProcessModules. Проблема в том, что и окна и процессы могут иметь повторяющиеся имена. Думаю, тут лучше запускать через ShellExecuteEx. |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #11 | Добавлено: 03.02.05 11:13 |
Кстати, sne, думается что лучше использовать CreateProcess нежели OpenProcess и Shell... |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #12 | Добавлено: 03.02.05 11:16 |
Меня интересует другое, что уже неоднократно спрашивалось - возможно ли запустить процесс не с диска, а из памяти? Кто-нить с этим разбирался? |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #13 | Добавлено: 03.02.05 11:21 |
Т.ч. я использовал вот что: по PID перебирал все окошки в системе, смотрел на их принадлежность процессу и закрывал их... а уже потом если процесс так и небыл закры, его убивал... Разумеется, смотря что за процесс. Если это что-то вроде простого VB приложения с несколькими формами - должен закрыться, а ежели там что-то вроде [CODE] Sub Main() Do Loop End Sub разумеется так его не закроешь :) |
Страница: 1 |
|