|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 7, 2003 00:18:03 Как сделать резидентную программу без окна? Нужно чтобы можно было зарегистрировать горячую клавишу и при ее нажатии выполнить какое-либо действие. Т.е. нужно отлавливать событие (WM_HOTKEY). Но как? Ведь формы нет! И как сделать чтобы программа висела в памяти постоянно и не сильно грузила комп (занимала поменьше места в памяти)? Все это нужно сделать для Виндовз. Заранее спасибо! |
|
|
Дата: Июл 7, 2003 03:28:15 А если сделать окно не видимым? |
|
|
Дата: Июл 7, 2003 03:42:29 · Поправил: Evld |
|
|
Дата: Июл 7, 2003 04:11:57 · Поправил: Four-F [ Gloomy: Как сделать резидентную программу без окна? ] Никак. Зарегистрировать хоткей не имея окна невозможно. Единственное, что мне приходит на ум, это похукать какое-нить постоянно болтающееся в системе окно, например Program Mannager, и заставить его зарегистрировать хоткей на себя. В хуковой процедуре отлавливать приходящие к нему WM_HOTKEY и пересылать к себе через мар-файл, например или делать там что те надо. Синхронизироваться событием. В твоем следящем процессе окон вообще никаких не будет, но тем не менее память жрать он будет. Ну может раза в два поменьше. Но это очень извратно и не понятно зачем. Чего там экономить. Ну будет у тя невидимая "форма", ну будет твой процесс занимать какую-то память и грузить комп на 0.000001% ну и что с того? Какая такая необходимость этого избежать? Почему не сделать по традиции, как выше предлагают? |
|
|
Дата: Июл 7, 2003 14:09:05 Оказывается можно зарегистрировать хоткей без окна: start proc local msg:MSG invoke RegisterHotKey, NULL, 0001h, 0, VK_F1 .while TRUE invoke GetMessage, addr msg, NULL, 0, 0 lea edx, msg assume edx:ptr MSG .if [edx].message == WM_HOTKEY .if [edx].wParam == 0001h ; что-то делаем ; если сделали invoke UnregisterHotKey, NULL, 0001h .break .endif .endif assume edx:nothing .endw invoke ExitProcess, 0 start endp Окон не будет. Но все равно будет создана очередь сообщений, а это почти те же расходы что и с окном. Можно вот еще что сделать. Внедрить длл в какой-нить системный процесс, она создаст поток и зарегистрирует хоткей. И все будет происходить в этом самом процессе. Только SEH обязательно поставить надо, иначе если что умрет поток вместе с системным процессом и самой системой соответственно. В смысле расходов памяти расходы будут минимальны и никаких новых процессов. Но это не культурно, хотя можно и так. Главное знать зачем. |
|
|
Дата: Июл 7, 2003 15:53:09 > Можно вот еще что сделать. Внедрить длл в какой-нить системный процесс Ага, только на это может и прав не хватить. Можно вообще писать keyboard filter driver. :-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.066 |