Страница: 1 |
Страница: 1 |
Вопрос: Приоритет запускаемой программы или хэндл процесса
Добавлено: 29.07.05 19:59
Автор вопроса: kolyanoid
Рылся в поиске, но толком своей проблемы решить не смог :(
Проблема:
Запускаю прогу SHELL'ом и получаю ProcessID. Прога - это отдельное окно с известным заголовком. Нужно установить приоритет выполнения этого процесса на минимальный...
Нашёл всё, что надо: апи функции и значения параметров:
Const HIGH_PRIORITY_CLASS = &H80
Const IDLE_PRIORITY_CLASS = &H40
Const NORMAL_PRIORITY_CLASS = &H20
Const REALTIME_PRIORITY_CLASS = &H100
Private Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long
Вот... Подсунул вместо hProcess мой ProcessID и приоритет на Idle... Функция возвращает 0 (запаролась, значит) и приоритет остаётся на "среднем"... Через диспетчер задач приоритет устанавливается и я добиваюсь того результата, который мне нужен от этого приоритета...
Я даже начал думать что ProcessID и hProcess (хэндл) не одно и то же, но не нашёл способов узнать этот самый хэндл.
Народ, помогите плиз! Что я не так делаю?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
Sur
ICQ: 1249088
Вопросов: 10
Ответов: 304
Web-сайт:
Профиль | | #1
Добавлено: 29.07.05 21:20
Говорят так прав на изменение нет.
Тут модуль, работает.
http://www.novicksoftware.com/TipsAndTricks/Tips-Lower-your-Process-Priority-with-the-Win32-API.htm
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 29.07.05 21:33
Это и есть не одно и то же ))
ищи по теме: "Create Process, а что дальше !!!
" на этом форуме.
Номер ответа: 3
Автор ответа:
kolyanoid
Вопросов: 19
Ответов: 60
Профиль | | #3
Добавлено: 29.07.05 23:10
Ух, ребяты Долго я насиловал ВБ, но своего добился Вот как:
'Получаем ID процесса при запуске проги
ProcessID = Shell(::путь_к_файлу:
'Узнаём хэндл этого процесса по его ID
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, ProcessID)
'Устанавливаем приоритет процесса
Res = SetPriorityClass(hProcess, IDLE_PRIORITY_CLASS)
Вот и всё оказалось очень просто
Константы при OpenProcess:
Public Const PROCESS_VM_READ = 16
Public Const MAX_PATH = 260
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const SYNCHRONIZE = &H100000
Public Const PROCESS_ALL_ACCESS = &H1F0FFF
Public Const TH32CS_SNAPPROCESS = &H2&
Public Const hNull = 0
Public Const WIN95_System_Found = 1
Public Const WINNT_System_Found = 2
Public Const Default_Log_Size = 10000000
Public Const Default_Log_Days = 0
Public Const SPECIFIC_RIGHTS_ALL = &HFFFF
Public Const STANDARD_RIGHTS_ALL = &H1F0000
Константы при SetPriorityClass:
Const HIGH_PRIORITY_CLASS = &H80
Const IDLE_PRIORITY_CLASS = &H40
Const NORMAL_PRIORITY_CLASS = &H20
Const REALTIME_PRIORITY_CLASS = &H100
Enjoy
P.S.
Мелкомягким надо памятник поставить за такую неразбериху с ProcessID, hProcess и функцией OpenProcess... блин
Номер ответа: 4
Автор ответа:
kolyanoid
Вопросов: 19
Ответов: 60
Профиль | | #4
Добавлено: 29.07.05 23:19
Забыл:
ВСЕМ БОЛЬШОЙ ПАСИБ
Номер ответа: 5
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #5
Добавлено: 30.07.05 07:35
Небольшие замечания.
Во-первых, ты, по всей видимости, админ на своей машине. Потому что иначе открыть процесс на ALL_ACCESS сложно.
Во-вторых, достаточно права PROCESS_SET_INFORMATION.
В-третьих, можно избежать всего этого, запуская процесс не через shell, а через CreateProcess, поскольку она как раз возвращает HPROCESS с правом ALL_ACCESS.
Номер ответа: 6
Автор ответа:
kolyanoid
Вопросов: 19
Ответов: 60
Профиль | | #6
Добавлено: 30.07.05 11:53
1) Да, я админ...
2) Спасиба Я просто выбрал из всех параметров такой, "чтоб уж наверняка" и воспользовался первым правилом сисадмина: "работает - не трогай!" ) Спасибо, это очень пригодится. А это право (PROCESS_SET_INFORMATION) не требует привилегий админа?
3) Хм... там чего-то параметров жутко много ) А так, даже и не знал об этом - спасиба Но так проще. Да и в проге мне нужен ID процесса (а в последствии и хэндл тоже, о чём тут и спросил)
Номер ответа: 7
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #7
Добавлено: 30.07.05 12:39
2. В общем случае неизвестно, т.к. это зависит от локальных политик безопасности. Но чем меньше требуемые программой привилегии, тем лучше.