| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Процессы real-time |
| Автор: Addmin 8.9.2006, 17:10 |
| Здравствуйте! Попалась мне на глаза одна программа, которая ускоряет работу компьютера, выставляя активному сейчас процессу высочайший приоритет или приоритет реального времени. Так вот, хотел бы у вас спросить, каким образом это делается и можно ли это организовать на Delphi? Всем откликнувшимся заранее благодарен! |
| Автор: BUGOR 8.9.2006, 17:16 |
| Что значит активному процессу? SetPriorityClass & GetPriorityClass пробовал? Попробуй |
| Автор: Addmin 8.9.2006, 18:16 |
| Ну, насколько я понял, это процессу, с которым пользователь на данный момент работает. А вообще спасибо, правда, натолкнул меня на мысль. Сейчас попробую... |
| Автор: Yanis 11.9.2006, 17:51 |
| Addmin Просто определяешь окно какого процесса сейчас активно, получаешь его PID, открываешь процесс и используешь специальные функции как сказал BUGOR. Примеры всех действий можно найти на форуме в этом же разделе или в DRKB. Если нужен пример такой проги на masm32, то отпиши, попытаюсь вспомнить как называется |
| Автор: Addmin 12.9.2006, 08:06 |
| Спасибо, Yanis, спасибо! Так я сделал. |
| Автор: Addmin 12.9.2006, 10:56 |
| Хм, а вот с определением PID активного приложения всё не так уж и просто... Как бы то ни было, ни в DRKB, ни на форуме я ответа не нашёл. Yanis, не мог бы дать ссылку или сам код? |
| Автор: Romikgy 12.9.2006, 12:48 |
| GetActiveWindow GetWindowThreadProcessId и те пид активного приложения или что? |
| Автор: Addmin 12.9.2006, 14:35 |
| Да, именно PID активного приложения. |
| Автор: Yanis 12.9.2006, 14:49 |
PID бвает только у процессов. Собственно в это йабривеатуре первое слово и есть Process. Тебе наверное нужно узнать PID процесса потоку которого принадлежит активное окно. |
| Автор: Addmin 12.9.2006, 15:01 |
| Да-да, Process Identificator (Identifier?) процесса активного приложения. Надеюсь, теперь я правильно сформулировал |
| Автор: Romikgy 12.9.2006, 15:15 | ||
|
| Автор: Yanis 12.9.2006, 15:16 | ||
Скорее всего придётся перебирать все окна и определять активное, окно. А уже потом из этого окна узнавать PID его процесса. Fedia этим уже занимался совершенно недавно. |
| Автор: Addmin 13.9.2006, 03:02 |
| Но ведь, если не ошибаюсь, Fedia искал активное окно приложения? PID приложения был ему известен. |
| Автор: Addmin 13.9.2006, 07:28 | ||||
Ты прав, если процесс не занимается сложными вычислениями, то на нём много не выиграешь. Но, к примеру, WinRAR значительно ускоряет добавление файлов в архив (на больших архивах видно даже "невооружённым глазом"). Ну, все ресурсы, конечно, никто приложению выдавать не будет, но выделить его среди приложений с приоритетом "Normal" всё-таки можно.
Да, именно то, что сказал Yanis. Я не слишком хорошо пока разобрался в этих терминах, так что прошу меня поправлять, если что. Чтож, если сегодня не найду решения, то придётся выпускать проект без него. |
| Автор: Yanis 13.9.2006, 11:03 |
| Addmin Какой информации тебе недостаточно, что бы написать то что ты хочешь? Растолкую ещё раз. Для определения описателя активного окна используется GetForegroundWindow, далее узнаешь PID с помощью GetWindowThreadProcessId, затем открываешь процесс OpenProcess и меняешь приоритет процесса используя SetPriorityClass. Ты сказал, что пока что не силён в терминологии. Сделай всё по пунктам, как в моём описании и сразу научишься |
| Автор: Fedia 13.9.2006, 11:17 | ||||||
Попробуй определять PID активного окна таким образом:
Если будет определять не все нужные тебе окна, то посмотри стили окон в MSDN. Например, стиль WS_CAPTION означает:
Добавлено @ 11:22 Все оказывается было проще |
| Автор: Yanis 13.9.2006, 11:26 | ||
| Fedia А почему не:
|
| Автор: Fedia 13.9.2006, 11:29 |
См. выше. Для этого нужно было помнить про GetForegroundWindow Добавлено @ 11:33 Зато при небольшой модификации в моей функции можно фильтровать типы искомых окон. Хотя это, скорее всего, автору ветки нафиг и не нужно |
| Автор: Addmin 13.9.2006, 12:10 |
| Ура! Работает! Ребята, не знаю даже, как вас благодарить! Придумаю А пока примите просто слова моей огромной благодарности и моего громадного уважения! |