你好:

     感谢你访问我的 Blog ,本博客只提供博主的技术经验分享,你可以在此做简单的留言和评论,我会抽空回复你;若是要深入交流探讨,请联系QQ:47853253或者加QQ群:12012081


 

进程挂起和继续(api)[结贴]

 http://www.autoitx.com/viewthread.php?tid=7374

 

[转贴] 进程挂起和继续(api)[结贴]

 

本帖最后由 netegg 于 2010-1-29 18:14 编辑

已加入winapiex中
Func _ProcessSuspend($process)
$processid = ProcessExists($process)
If $processid Then
    $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
    $i_sucess = DllCall("ntdll.dll","int","NtSuspendProcess","int",$ai_Handle[0])
    DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
    If IsArray($i_sucess) Then
        Return 1
    Else
        SetError(1)
        Return 0
    Endif
Else
    SetError(2)
    Return 0
Endif
EndFunc

Func _ProcessResume($process)
$processid = ProcessExists($process)
If $processid Then
    $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
    $i_sucess = DllCall("ntdll.dll","int","NtResumeProcess","int",$ai_Handle[0])
    DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
    If IsArray($i_sucess) Then
        Return 1
    Else
        SetError(1)
        Return 0
    Endif
Else
    SetError(2)
    Return 0
Endif
EndFunc

 

如果这句

$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)

换成

$ai_Handle = DllCall("kernel32.dll", "hwnd", "OpenProcess", "dword",0x10000000, "int", 0, "dword", $processid)

或许会更好一点?起码针对360进程也能挂起

 

 

好东西
举个例子比较直观一点:

  1. Run("Notepad.exe")
  2. Sleep(3000)
  3. $process='Notepad.exe'
  4. _ProcessSuspend($process)
  5. MsgBox('','','已经挂起'&$process&@CRLF&'记事本5秒之内无法操作!')
  6. Sleep(5000)
  7. _ProcessResume($process)
  8. MsgBox('','','已经恢复'&$process&@CRLF&'记事本又可以操作了!')
  9. Func _ProcessSuspend($process)
  10. $processid = ProcessExists($process)
  11. If $processid Then
  12.     $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
  13.     $i_sucess = DllCall("ntdll.dll","int","NtSuspendProcess","int",$ai_Handle[0])
  14.     DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
  15.     If IsArray($i_sucess) Then
  16.         Return 1
  17.     Else
  18.         SetError(1)
  19.         Return 0
  20.     Endif
  21. Else
  22.     SetError(2)
  23.     Return 0
  24. Endif
  25. EndFunc
  26.  
  27. Func _ProcessResume($process)
  28. $processid = ProcessExists($process)
  29. If $processid Then
  30.     $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
  31.     $i_sucess = DllCall("ntdll.dll","int","NtResumeProcess","int",$ai_Handle[0])
  32.     DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
  33.     If IsArray($i_sucess) Then
  34.         Return 1
  35.     Else
  36.         SetError(1)
  37.         Return 0
  38.     Endif
  39. Else
  40.     SetError(2)
  41.     Return 0
  42. Endif
  43. EndFunc
复制代码


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 0 | 引用: 0 | 查看次数: 131
发表评论
你没有权限发表留言!