ANDLL писал(а): нет понятия "корректно заврешить процесс"
Private Sub cmdKillProcess(ProcessName As String, ForceExit As Boolean)
Dim ckpFlag As String
Const ckpCommand As String = "taskkill"
If ForceExit Then
ckpFlag = "/F" & Chr$(32) & "/IM"
Else
ckpFlag = "/IM"
End If
Shell ckpCommand & Chr$(32) & ckpFlag & Chr$(32) & ProcessName, vbHide
End Sub
в процедуру обработки сообщенийAntonariy писал(а):Куда посылать сообщения, если окна нет?
для цього е TerminateProcess.Предлагаю грязный хак (для разнообразия, сильно не бейте)
Space писал(а):для цього е TerminateProcess.Предлагаю грязный хак (для разнообразия, сильно не бейте)
Нда, надмозг в действии.Space писал(а):в процедуру обработки сообщенийAntonariy писал(а):Куда посылать сообщения, если окна нет?
.WHILE TRUE
invoke GetMessage, ADDR msg_,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg_
; invoke DispatchMessage, ADDR msg_
.ENDW
program_end:
invoke ExitProcess,0
О чём те говорит сей код?
вот. Окна там никакого нет.
Do
st = GetMessage(mMsg, 0, 0, 0)
TranslateMessage mMsg
DispatchMessage mMsg
If st = 0 Then Exit Do
Loop
Розовенькую или голубенькую?Вообщем, я кажется, нашёл решение - PostThreadMessage или PostQuitMessage - пока не знаю, что выбрать.
То что очередь сообщений есть только если есть окна - бред сивой кобылы
Public Function GetThreads(ProcessID As Long, arrTreads() As THREADENTRY32) As Boolean
'Функция возвращает потоки
'Выход - массив потоков, GetThreads=False - ошибка
Dim hSnapShot As Long
Dim lRet As Long
Dim cTreads As Long
Dim hProc As Long
ReDim arrTreads(0)
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0)
If hSnapShot = -1 Then Exit Function
cTreads = 0
arrTreads(cTreads).dwSize = LenB(arrTreads(cTreads))
arrTreads(cTreads).th32OwnerProcessID = ProcessID
lRet = Thread32First(hSnapShot, arrTreads(cTreads))
If lRet = 0 Then
CloseToolhelp32Snapshot hSnapShot
Exit Function
End If
Do While lRet
ReDim Preserve arrTreads(cTreads)
arrTreads(cTreads).dwSize = LenB(arrTreads(cTreads))
arrTreads(cTreads).th32OwnerProcessID = ProcessID
lRet = Thread32Next(hSnapShot, arrTreads(cTreads))
cTreads = cTreads + 1
Loop
CloseToolhelp32Snapshot hSnapShot
GetThreads = True
End Function
Space писал(а):И ещё - у меня не получается получить потоки указанного процесса, какие флаги надо указать? У меня так (выводит все потоки всех процессов)
TH32CS_SNAPTHREAD 0x00000004
Includes all threads in the system in the snapshot. To enumerate the threads, see Thread32First.
To identify the threads that belong to a specific process, compare its process identifier to the th32OwnerProcessID member of the THREADENTRY32 structure when enumerating the threads.
Space писал(а):А есть разница между посылом всем окнам процесса WM_QUIT и всем потокам процесса WM_QUIT?
Сейчас этот форум просматривают: AhrefsBot и гости: 31