



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.



 Разве что флаг HACKER_TRANSLATE_ME_MSDN_DOCUMENTATION
 Разве что флаг HACKER_TRANSLATE_ME_MSDN_DOCUMENTATION







Space писал(а):А есть разница между посылом всем окнам процесса WM_QUIT и всем потокам процесса WM_QUIT?

Сейчас этот форум просматривают: Google-бот и гости: 6