Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Возможно ли изменять приоритет программ с помощью ВБ?

1.9K
05 июня 2004 года
Санчез
97 / / 22.10.2003
Вот возник еще один вопрос :) программа работает постоянно и должна работать без приостановок, но при очень сильной нагрузке компьютера(ну к примеру запускаем супер-пупер игру, и ставим все что только в ней можно на максимум), из-за того что у моей программы стандартный приоритет, она выполняется на ряду с другими программами(в нашем случае - игрой), и вызывается частичное заторможенность программы, а это недопустимо. Так вот собственно вопрос - как можно изменть приоритет программы? (предложене руками поменяй в таск манеджере, не принимаются :) )

ps. скоро можно будет сказать что я флужу :)
272
06 июня 2004 года
vladsoft
512 / / 20.08.2000
Цитата:
Originally posted by Санчез
Вот возник еще один вопрос :) программа работает постоянно и должна работать без приостановок, но при очень сильной нагрузке компьютера(ну к примеру запускаем супер-пупер игру, и ставим все что только в ней можно на максимум), из-за того что у моей программы стандартный приоритет, она выполняется на ряду с другими программами(в нашем случае - игрой), и вызывается частичное заторможенность программы, а это недопустимо. Так вот собственно вопрос - как можно изменть приоритет программы? (предложене руками поменяй в таск манеджере, не принимаются :) )

ps. скоро можно будет сказать что я флужу :)


НЕ нужно ничего менять, просто напиши службу и винда сама будет держать её в рабочем состоянии...

319
06 июня 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by vladsoft

НЕ нужно ничего менять, просто напиши службу и винда сама будет держать её в рабочем состоянии...


какая разница служба или нет? приоритеты никто не отменял для служб, насколько я в курсе...
в вб пользуй функции API, например:

Код:
Public Enum PriorityLevels

  IDLE_PRIORITY_CLASS = &H40

  NORMAL_PRIORITY_CLASS = &H20

  HIGH_PRIORITY_CLASS = &H80

  REALTIME_PRIORITY_CLASS = &H100

End Enum

 

Const PROCESS_DUP_HANDLE = &H40

Const PROCESS_SET_INFORMATION = &H200

Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Declare Function GetCurrentProcessId Lib "kernel32" () As Long

Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long


для потоков аналогично приоритеты расставляются. надеюсь, ты в курсе как рассчитывается приоритет твоего потока через приоритет процесса и приоритет самого потока...
1.9K
07 июня 2004 года
Санчез
97 / / 22.10.2003
Цитата:
Originally posted by xelos
для потоков аналогично приоритеты расставляются. надеюсь, ты в курсе как рассчитывается приоритет твоего потока через приоритет процесса и приоритет самого потока...


Мдя, где вы такие умные слова находите :))) конечно не в курсе, и вообще как теперь поставить приоритет программы с тем что ты дал?

ps. начал писать то как я пытался поставить приоритет, но понял что то что я делал - это полная чушь...

pss. если влом объяснять, то хоть давайте сллыки по которым можно почитать по вопросу что-нибудь. Так, будто бы тут собрались гении ВБ :) тут таких человек 5-6 всего и все они чаще отвечают на вопросы, чем задают их.

319
07 июня 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by Санчез

Мдя, где вы такие умные слова находите :))) конечно не в курсе, и вообще как теперь поставить приоритет программы с тем что ты дал?

ps. начал писать то как я пытался поставить приоритет, но понял что то что я делал - это полная чушь...

pss. если влом объяснять, то хоть давайте сллыки по которым можно почитать по вопросу что-нибудь. Так, будто бы тут собрались гении ВБ :) тут таких человек 5-6 всего и все они чаще отвечают на вопросы, чем задают их.


вобщем про потоки и процессы практически в любой книжке про архитектуру Windows найдешь.
Вобщем процесс - это отдельное адресное пространство, определяемое некоторыми атрибутами и ресурсами (ресурсами является и память). Один процесс не может просто так вот взять и использовать ресурсы другого процесса, каждый процесс имеет свой дескриптор и т.п.
Теперь потоки - потоки это куски исполняемого кода в адресном пространстве некоторого потока. Поток принадлежит только одному процессу. Потоки одного процесса могкт пользовать ресурсы этого процесса. Вобщем это контекст...
теперь про приоритеты... приоритеты определяются для потоков, время отводимое каждому потоку (это не совсем точное определение, но для нас сгодится) зависит от его приоритета. Конечный приоритет потока определяется приоритетом процесса и относительным смещением (которое называется приоритетом потока). Всего в Винде различается 32 уровня приоритетов. Есс-но чем выше приоритет, тем реже прерывается поток. Я точно счас не помню какие приоритеты бывают для процесса (по-моему их всего 5), и какие приоритеты бывают для потока (их штук 8, вроде).
Вобщем задаешь приоритет для твоего процесса, потом задаешь приоритет для твоего потока и конечный приоритет исполняемого кода будет приоритет процесса + приоритет потока.
вот, надеюсь что-нить понятно :):)

258
07 июня 2004 года
SergeySV
1.5K / / 19.03.2003
Применяются функции например так:
Код:
Const THREAD_BASE_PRIORITY_IDLE = -15
Const THREAD_BASE_PRIORITY_LOWRT = 15
Const THREAD_BASE_PRIORITY_MIN = -2
Const THREAD_BASE_PRIORITY_MAX = 2
Const THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN
Const THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX
Const THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST + 1)
Const THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST - 1)
Const THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE
Const THREAD_PRIORITY_NORMAL = 0
Const THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT
Const HIGH_PRIORITY_CLASS = &H80
Const IDLE_PRIORITY_CLASS = &H40
Const NORMAL_PRIORITY_CLASS = &H20
Const REALTIME_PRIORITY_CLASS = &H100
Private Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long
Private Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long
Private Declare Function GetThreadPriority Lib "kernel32" (ByVal hThread As Long) As Long
Private Declare Function GetPriorityClass Lib "kernel32" (ByVal hProcess As Long) As Long
Private Declare Function GetCurrentThread Lib "kernel32" () As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

Private Sub Form_Load()
    Dim hThread As Long, hProcess As Long
    'retrieve the current thread and process
    hThread = GetCurrentThread
    hProcess = GetCurrentProcess
    'set the new thread priority to "lowest"
    SetThreadPriority hThread, THREAD_PRIORITY_LOWEST
    'set the new priority class to "idle"
    SetPriorityClass hProcess, IDLE_PRIORITY_CLASS
    'print some results
    Me.AutoRedraw = True
    Me.Print "Current Thread Priority:" + Str$(GetThreadPriority(hThread))
    Me.Print "Current Priority Class:" + Str$(GetPriorityClass(hProcess))
End Sub
1.9K
08 июня 2004 года
Санчез
97 / / 22.10.2003
Большое спасибо. Все работает.

ps. Еще бы по хуку клавиатуры ответили, я б вообще был бы счастлив :)))
319
09 июня 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by Санчез
Большое спасибо. Все работает.

ps. Еще бы по хуку клавиатуры ответили, я б вообще был бы счастлив :)))


тебе в смысле как хуки ставятся или что это такое вообще?

1.9K
10 июня 2004 года
Санчез
97 / / 22.10.2003
Цитата:
Originally posted by xelos

тебе в смысле как хуки ставятся или что это такое вообще?


Мне в смысле топик по хуку клавы созданный vitalik-vl'ом("Перехват клавиатуры в Vb"). Только ты немного опоздал :) ответили уже :)

1.9K
16 июня 2004 года
Санчез
97 / / 22.10.2003
Сорь что поднял тему, но тут возник еще вопрос, думаю онт тоже относится к приоритетами программ. В WinXP в таск-менеджере есть раздел процессы, и в нем у некоторых процессов стоит имя пользователя - System, и такие процессы, в большинстве своем, нельзя выгружать, говорит "Отказано в доступе". Ну вопрос собственно заключается в том, что бы сделать то же самое со своей программой :), чтобы ее нельзя было выгрузить. Как такое можно осуществить?
258
17 июня 2004 года
SergeySV
1.5K / / 19.03.2003
Это наверное надо сервис делать из программы (была у мелкомягких утилитка по запуску проги в виде сервиса) с запуском от имени SYSTEM пользователя.

А так как то видел на одном форуме обсуждение по неубиваемым программам. Мысли такие:
Делаем пограмму естественно так, что при получении сообщения типа wm_close нифига она не соберается это делать. Однако это поможет токо от обычного пользователя с мышкой и Alt-F4, от Terminate процесса это конечно не убережет, он ничего спрашивать не будет.

Предлагали еще такой вариант, как запуск вспомогательных процессов 3-4 штуки, которые по таймеру каждую секунду проверяют гл. процесс программы, и при закрытии его - запускают заново(себя тоже). Ставка идет на то, что ни одна другая программа не сможет быстро сделать terminate главному и вспомогательным процессам, чтобы в ее работу не успел вклиниться хотя бы один их вспомогательных, которые опять же восстановит равновесие.
1.9K
17 июня 2004 года
Санчез
97 / / 22.10.2003
Цитата:
Originally posted by SergeySV
... и при его закрытии - запускают заново ...


Как то было дело - прикол сделал, и в Unload формы вот такую фигню поставил :)
Shell app.path & "\progr.exe", vbNormalFocus

Интересно наблюдать за тем как пытаются закрыть эту программу :) ... жаль только что в ХР оно не работает если выгружают сам процесс...

Ну если вдруг кто-нибудь чего-нибудь нокопает по данному вопросу - киньте сюда.

258
18 июня 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Санчез
Интересно наблюдать за тем как пытаются закрыть эту программу :) ... жаль только что в ХР оно не работает если выгружают сам процесс...



Ну, да от Terminate, процесс никто не спасет

В твоем случае, если не хочешь разбираться с получением привилегий SYSTEM (вообще, по идее в защищенной системе это невозможно, мало ли кто захочет себе получить такие привилегии), можно поступить проще - от хакера не спасет, а вот от обычных и менее продвинутых пользователей это поможет:
по запуску прога запускает еще один скрытый процесс(exe прога, со свойствами TaskVisible=False, без GUI и все такое), которая по таймеру, каждую секунду, проверяет наличие гл. проги, и запускает ее заново .... тут токо такой момент - как работает гл. прога? можно ли ее закрывать/запускать или она будет терять при этом данные и важно, чтобы она вообще не прерывалась

1.9K
18 июня 2004 года
Санчез
97 / / 22.10.2003
Скажу сразу - хотел применить ненормативную лексику :) но както не дошло до этого :))) Переписываю этот пост в третий раз(первые два раза при нажатии кнопки "ответить" вылетатла ошибка типа данныя страница недоступна:))) [вырезано цензурой] :))
==================================================
Цитата:
Originally posted by SergeySV

По запуску прога запускает еще один скрытый процесс(exe прога, со свойствами TaskVisible=False, без GUI и все такое), которая по таймеру, каждую секунду, проверяет наличие гл. проги, и запускает ее заново


Именно так она сейчас и работает :) только пасут ее сразу 2 программы которые также пасут и себя :)

Вот что меня навело на эти привелегии System процессов - не в какую не хочет выгружаться через окно процессов avpcc.exe(AVP, проверят открываемые файлы на вирусы, или что-то в этом роде), ну собственно если Касперский смог такое сделать так почему бы и на ВБ не сделать такое :)))

319
20 июня 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by Санчез
Вот что меня навело на эти привелегии System процессов - не в какую не хочет выгружаться через окно процессов avpcc.exe(AVP, проверят открываемые файлы на вирусы, или что-то в этом роде), ну собственно если Касперский смог такое сделать так почему бы и на ВБ не сделать такое :)))


вообще-то если написать драйвер, то он будет запускаться как системный... однако написание драйвера на VB - имхо, пока нереализуемая задача.

258
21 июня 2004 года
SergeySV
1.5K / / 19.03.2003
читал я на RSDN.ru (winAPI) краем глаза, прочувака у которого была несоклько другая проблема, он написал сервис, который стартовал как SYSTEM - при этом это давало то преймущество что этот сервис стартует вместе с ядром, раньше логина пользователя, и во он как раз наоборот хотел узнать тек. пользователя, а ст. функции возвращали ему - SYSTEM.

из чего я сделал вывод, что написать то конечно что-то, чтобы оно висело под SYSTEM можно, но это уже будет точно не программа, а сервис либо драйвер, зарег. определенным образом в системе (со всеми своими радостями и проблемами: стартовать видимо ему придется самому автоматом) и как правильно заметили, не факт, что это можно сделать на VB
1.9K
21 июня 2004 года
Санчез
97 / / 22.10.2003
Да ну тогда такой гемор :) Пусть дальше работает так как сейчас :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог