Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Приоритет процессов! Добавлено: 14.07.06 08:59  

Автор вопроса:  KEP
Уважаемые коллеги. Пишу программу оптимизации игрового процесса. которая перед запуском игры выключает практически все сервисы итд. при выходе из игры, настройки востанавливаются. Вобщем вопрос вот в чем. игры я запуская с помощью:

Function vtShell(ByRef Path As String, WindowStyle As VbAppWinStyle) As Long
ChDrive Left$(Path, 2)
ChDir Left$(Path, InStrRev(Path, "\"))
vtShell = Shell(Path, vbNormalFocus)
End Function

\
тобиш x = vtShell('Файл.exe', vbNormalFocus)

Как запустить процесс с среднем, высоким приоритетом итд

Помогите пожалуйста очень нужно, нужно учесть то что с помощью других функций
я немогу запустить exe файлы так как в некоторых играх вылетают ошибки. Удалось
всего избежать только с помощью этого кода. Жду помощи, спасибо.

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #1 Добавлено: 14.07.06 09:08
WinAPI=

BOOL SetPriorityClass(

    HANDLE hProcess, // handle to the process
    ;DWORD dwPriorityClass // priority class value
   ;);


Best regards,

Ответить

Номер ответа: 2
Автор ответа:
 KEP



Вопросов: 44
Ответов: 119
 Профиль | | #2 Добавлено: 14.07.06 09:10
Можно по подробней, исходя из моего кода, просто с приоритетами не когда не работал, если не сложно, пожалуста.

Ответить

Номер ответа: 3
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #3 Добавлено: 14.07.06 09:14

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()
    'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    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

Ответить

Номер ответа: 4
Автор ответа:
 KEP



Вопросов: 44
Ответов: 119
 Профиль | | #4 Добавлено: 14.07.06 09:21
Спасибо, большое, сейчас попробую, это ссылка на мою программу 100% доделаная. Нехватает только приоритетов процессов. http://webfile.ru/1023761 еще раз спасибо!

Ответить

Номер ответа: 5
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #5 Добавлено: 14.07.06 09:29
You are welcome

Ответить

Номер ответа: 6
Автор ответа:
 KEP



Вопросов: 44
Ответов: 119
 Профиль | | #6 Добавлено: 14.07.06 10:26
Так а как тогда получить
hThread = GetCurrentThread
hProcess = GetCurrentProcess

Яж не запускаю путем hProcess = OpenProcess итд

яж запускаю

 x = vtShell("c:\Games\Oblivion.exe", vbNormalFocus)


Function vtShell(ByRef Path As String, WindowStyle As VbAppWinStyle) As Long
ChDrive Left$(Path, 2)
ChDir Left$(Path, InStrRev(Path, "\";))
vtShell = Shell(Path, vbNormalFocus)
End Function
Как мне получить
hThread = GetCurrentThread
hProcess = GetCurrentProcess

только что запущенного Oblivion.exe

Ответить

Номер ответа: 7
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #7 Добавлено: 14.07.06 19:44
Запускайте "Obvilion.exe" не через SHELL
а через WinAPI = ShellExecuteEx

В структуре SHELLEXECUTEINFO или как ее кратко зовут [SEI] member hProcess = hProcess по завершению работы АПИ.

SY,


Ответить

Номер ответа: 8
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #8
Добавлено: 18.07.06 13:38
Изменение приоритета программы:
Автор: Бельбаков Александр

Следующий пример покажет, как изменить базовый приоритет программы. Сначала объявим необходимые нам
API Функции и константы:



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

Const IDLE_PRIORITY_CLASS = &H40
Const NORMAL_PRIORITY_CLASS = &H20
Const HIGH_PRIORITY_CLASS = &H80
Const REALTIME_PRIORITY_CLASS = &H100


Теперь добавим на форму выпадающий список (cmbPriority) и кнопку (cmdPriority). В событии
загрузки формы заполним выпадающий список доступными типами приоритетов:

Private Sub Form_Load()
With cmbPriority
.AddItem "Idle Priority"
.AddItem "Normal Priority"
.AddItem "High Priority"
.AddItem "Realtime Priority"
.ListIndex = 1
End With
End Sub

В событие Click кнопки добавим следующий код, где мы установим для нашей программы выбранный тип приоритета:

Private Sub cmdSetPriority_Click()
Select Case cmbPriority.ListIndex
Case 0
SetPriorityClass GetCurrentProcess(), IDLE_PRIORITY_CLASS
Case 1
SetPriorityClass GetCurrentProcess(), NORMAL_PRIORITY_CLASS
Case 2
SetPriorityClass GetCurrentProcess(), HIGH_PRIORITY_CLASS
Case 3
SetPriorityClass GetCurrentProcess(), REALTIME_PRIORITY_CLASS
End Select
End Sub

Ответить

Номер ответа: 9
Автор ответа:
 ENIX



ICQ: 238819245 

Вопросов: 9
Ответов: 76
 Профиль | | #9 Добавлено: 18.07.06 15:47
Можно получить его и использую Shell:




Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
'PROCESS_SET_INFORMATION As Long = &H200&

.........

hProcess=OpenProcess(&H200&,0&,vtShell)

.........


И не забудь если используеш ShellExecute потом "убрать за собой"
CloseHandle hProcess
CloseHandle hThread
или только
CloseHandle hProcess
если сделаеш как выше описал.

Ответить

Номер ответа: 10
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #10 Добавлено: 18.07.06 18:00
Помойму там ограничения есть, под админом быть надо, хотя я могу ошибаться...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам