1

Тема: VBScript: как из скрипта изменить приоритет его процесса

Option Explicit

' Перечень констант, соответствующих предопределённым приоритетам.
' Взято с: http://msdn.microsoft.com/en-us/library/aa393587(VS.85).aspx
'
' Замечание оттуда же относительно установки приоритета «Real Time»:
' To set the priority to Realtime, the caller must have SeIncreaseBasePriorityPrivilege (SE_INC_BASE_PRIORITY_PRIVILEGE).
' Without this privilege, the highest the priority can be set to is High Priority.
Const IDLE_PRIORITY_CLASS         = &H0040
Const BELOW_NORMAL_PRIORITY_CLASS = &H4000
Const NORMAL_PRIORITY_CLASS       = &H0020
Const ABOVE_NORMAL_PRIORITY_CLASS = &H8000
Const HIGH_PRIORITY_CLASS         = &H0080
Const REAL_TIME_PRIORITY_CLASS    = &H0100


Dim i

' Меняем приоритет процесса скрипта, например, на «Idle»:
GetObject("winmgmts:root\cimv2:Win32_Process.Handle='" & CStr(GetScriptProcessID()) & "'").SetPriority IDLE_PRIORITY_CLASS

'-----------------------------------------------------------------------------
' Здесь будет Ваш код. Мы же, в данном случае, для демонстрации просто имитируем нагрузку, не используя WScript.Sleep:
i = 1
Do
    i = i + 1
    i = i - 1
Loop
'-----------------------------------------------------------------------------

WScript.Quit 0
'=============================================================================

'=============================================================================
' Получение идентификатора процесса (PID) скрипта.
' Подробности в: http://forum.script-coding.com/viewtopic.php?pid=15930#p15930
'=============================================================================
Function GetScriptProcessID()
    With WScript.CreateObject("WScript.Shell").Exec("""mshta.exe"" " & _
        """<HTML><HEAD><HTA:APPLICATION APPLICATIONNAME='GetParentPID' " & _
        "WINDOWSTATE='minimize' SHOWINTASKBAR='no'</HEAD></HTML>""")
        
        GetScriptProcessID = GetObject("winmgmts:\\.\root\CIMV2:Win32_Process.Handle='" & CStr(.ProcessID) &"'").ParentProcessID
        .Terminate
    End With
End Function
'=============================================================================

Отдельное спасибо коллегам Carno, MikeSh, VSVLAD.