1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

Hỏi đáp Cho hỏi về cách Suspend Process

Thảo luận trong 'Thảo luận chung - Hỏi đáp' bắt đầu bởi afriend, 15/4/18.

  1. afriend

    afriend Thành viên mới
    • 1/6

    Tham gia ngày:
    15/7/16
    Bài viết:
    1
    Đã được thích:
    0
    Mấy bác giúp em phát ạ em có dùng 1 code chia sẽ trên mạng để tạm ngưng 1 file như notepad.exe và 1 số tiến trình khác , nhưng khi test trên process cần suspend thì lại ko được . mấy bác giúp em phát ạ em cảm ơn .

     
  2. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    167
    Đã được thích:
    155
    Cậu thử UDF này xem sao:

    Mã (AutoIt):
    Func Proc_Suspend($vProcess)
            Local $fRval = Proc_Manager($vProcess, False)
            Return SetError(@error, @extended, $fRval)
    EndFunc

    Func Proc_Resume($vProcess)
            Local $fRval = Proc_Manager($vProcess, True)
            Return SetError(@error, @extended, $fRval)
    EndFunc

    Func Proc_Manager($vProcess, $iReverserProc)
            Local $iPID, $vTmp, $hThreadSnap, $ThreadEntry32, $iThreadID, $hThread, $iThreadCnt, $iThreadCntSuccess, $sFunction
            $iPID = ProcessExists($vProcess)
            If Not $iPID Then Return SetError(1, 0, False)
            $vTmp = DllCall("kernel32.dll", "ptr", "CreateToolhelp32Snapshot", "int", 0x00000004, "int", 0)
            If @error Or $vTmp[0] = 0xFFFFFFFF Then Return SetError(2, 0, False)
            $hThreadSnap = $vTmp[0]
            $ThreadEntry32 = DllStructCreate("int;int;int;int;int;int;int")
            DllStructSetData($ThreadEntry32, 1, DllStructGetSize($ThreadEntry32))
            $vTmp = DllCall("kernel32.dll", "int", "Thread32First", "ptr", $hThreadSnap, "long", DllStructGetPtr($ThreadEntry32))
            If @error Or Not $vTmp[0] Then Return SetError(3, 0, DllCall("kernel32.dll", "int", "CloseHandle", "ptr", $hThreadSnap))
            While 1
                If DllStructGetData($ThreadEntry32, 4) = $iPID Then
                    $iThreadID = DllStructGetData($ThreadEntry32, 3)
                    $vTmp = DllCall("kernel32.dll", "ptr", "OpenThread", "int", 0x00000002, "int", False, "int", $iThreadID)
                    If Not @error Then
                        $hThread = $vTmp[0]
                        If $hThread Then
                            $vTmp = DllCall("kernel32.dll", "int", $iReverserProc ? 'ResumeThread' : 'SuspendThread', "ptr", $hThread)
                            If $vTmp[0] <> -1 Then $iThreadCntSuccess += 1
                            DllCall("kernel32.dll", "int", "CloseHandle", "ptr", $hThread)
                        EndIf
                    EndIf
                    $iThreadCnt += 1
                EndIf
                $vTmp = DllCall("kernel32", "int", "Thread32Next", "ptr", $hThreadSnap, "long", DllStructGetPtr($ThreadEntry32))
                If @error Then Return SetError(4, 0, False)
                If Not $vTmp[0] Then ExitLoop
            WEnd
            DllCall("kernel32.dll", "int", "CloseToolhelp32Snapshot", "ptr", $hThreadSnap)
            If Not $iThreadCntSuccess Or $iThreadCnt > $iThreadCntSuccess Then Return SetError(5, $iThreadCnt, $iThreadCntSuccess)
            Return SetError(0, $iThreadCnt, $iThreadCntSuccess)
        EndFunc
     
    Trong đó $vProcess là tên của process hay PID của process đều được.
    Ví dụ: Proc_Suspend("Unikey.exe")
     

Chia sẻ trang này

Đang tải...