Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Закрыть EXE Добавлено: 30.01.05 17:11  

Автор вопроса:  Calhoon | Web-сайт: 4elovekssn.blog.ru | ICQ: 789764 
Запускаю EXE с помощью Shell(). Как потом его закрыть/убить?

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 30.01.05 17:32
1. OpenProcess где ProcessID есть то что тебе вернул Shell
2. TerminateProcess c тем что тебе вернул OpenProcess :)
3. CloseHandle с тем что тебе вернул... нет не угадал :) не TerminateProcess а OpenProcess :)

Ответить

Номер ответа: 2
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #2 Добавлено: 30.01.05 20:38
:))
Пасибо, т.к. я тоже хотел задать этот вопрос

Ответить

Номер ответа: 3
Автор ответа:
 HACKER


 

Разработчик 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%), "\";), Len(Kick$)) = Kick$ Then
            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
-------------------------------
использовать

        ;Dim KillProcName$(0)
        KillProcName$(0) = "proga.exe"
        KillProc KillProcName$()

Ответить

Номер ответа: 4
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 30.01.05 23:20
2Hacker, а процессов с одним именем может быть несколько ;)
Да и вопрос ьыл как после Shell закрыть процесс :)

Ответить

Номер ответа: 5
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #5 Добавлено: 31.01.05 08:08
Проще найти окно этого exe и послать WM_QUIT. Конечно, зависит от exe.

Ответить

Номер ответа: 6
Автор ответа:
 someone



Вопросов: 215
Ответов: 1596
 Web-сайт: 123
 Профиль | | #6
Добавлено: 02.02.05 11:13
все это ненадежно, я как-то пробовал. есть такая прога CCTask - вот это действует. она отлавливает все процессы, т.е. например, проводник она отображает,как "C:\WIN\EXPLORER.EXE". Убивает моментально. Правда иногда виснет =(

Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 02.02.05 12:05
2LamerOnLine, а если в приложении окон несколько ;) !?

Ответить

Номер ответа: 8
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #8 Добавлено: 03.02.05 10:57
Посылать WM_CLOSE каждому, либо Top-Level окну.

Ответить

Номер ответа: 9
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #9
Добавлено: 03.02.05 11:09
Все равно приложение не закроется, пробовано ;)

Т.ч. я использовал вот что: по PID перебирал все окошки в системе, смотрел на их принадлежность процессу и закрывал их... а уже потом если процесс так и небыл закры, его убивал...

Ответить

Номер ответа: 10
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #10 Добавлено: 03.02.05 11:10
Тут можно подойти с двух сторон - GetWindowThreadProcessId и EnumProcessModules. Проблема в том, что и окна и процессы могут иметь повторяющиеся имена. Думаю, тут лучше запускать через ShellExecuteEx.

Ответить

Номер ответа: 11
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #11 Добавлено: 03.02.05 11:13
Кстати, sne, думается что лучше использовать CreateProcess нежели OpenProcess и Shell...

Ответить

Номер ответа: 12
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #12 Добавлено: 03.02.05 11:16
Меня интересует другое, что уже неоднократно спрашивалось - возможно ли запустить процесс не с диска, а из памяти? Кто-нить с этим разбирался?

Ответить

Номер ответа: 13
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #13 Добавлено: 03.02.05 11:21

Т.ч. я использовал вот что: по PID перебирал все окошки в системе, смотрел на их принадлежность процессу и закрывал их... а уже потом если процесс так и небыл закры, его убивал...

Разумеется, смотря что за процесс. Если это что-то вроде простого VB приложения с несколькими формами - должен закрыться, а ежели там что-то вроде
[CODE]
Sub Main()
Do
Loop
End Sub
разумеется так его не закроешь :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам