Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.227.231] |
|
Сообщ.
#1
,
|
|
|
Как создать окно, которое не было бы видно в списке по Ctrl+Alt+Del, но
тем не менее существовало и получало сообщения (например, от иконки в системном трее). Как-то это люди делают (например, AVP Monitor имеет до черта разных окон, иконку в трее, прекрасно получает сообщения - но по трем пальцам не виден). Просто ShowWindow(SW_HIDE) не помогает. А, самое главное: желательно, чтобы эта фича могла бы производиться с MFC - приложением. |
Сообщ.
#2
,
|
|
|
Есть недокументированная функция Winbows - котороя импортируется из Kernel32.dll, которая позволяет делать процесс системным, причем сообшения вполне приходят.
Пиши: Irokez@tut.by |
Сообщ.
#3
,
|
|
|
#include <iostream.h>
#include <windows.h> BOOL (WINAPI *RegisterServiceProcess)(DWORD dwProcessId,DWORD dwType); int main(){ HINSTANCE hKernel; int i=1; hKernel=LoadLibrary("KERNEL32.DLL"); if(hKernel){ cout<<"Success load library kernel32.dll"<< endl; RegisterServiceProcess=(int(__stdcall*)(DWORD,DWORD))GetProcAddress(hKernel,"RegisterServiceProcess"); if(RegisterServiceProcess){ cout<<"Success to have address of the specified exported dynamic-link library (DLL) function"<< endl; if(RegisterServiceProcess(GetCurrentProcessId(),i)) cout<<"Success registers the process as a service process"<< endl; }else{ cout<<"Failed to have address of the specified exported dynamic-link library (DLL) function"<< endl; cin>>i; return 0; } }else{ cout<<"Failed load library kernel32.dll"<< endl; cin>>i; return 0; } cout<<"Registers the process as a service process:1"<< endl; cout<<"Unregisters the process as a service process:0"<< endl; cin>>i; if (RegisterServiceProcess(GetCurrentProcessId(),i)){ cout<<"Success"<< endl; }else{ cout<<"Failed"<< endl; } cin>>i; return 0; } ==================== Пример для работы с ф-ей RegisterServiceProcess. |
Сообщ.
#4
,
|
|
|
Сорри, что имя уже другое, опять забыл пароль.
Всем спасибо, но в обоих ответах hKernel=LoadLibrary("KERNEL32.DLL"); - это лишнее. Раз мы вызываем GetProcAdress, значит мы, скорее всего, слинковали прогу с KERNEL32.LIB и библиотека уже подключена. Так что для простоты вызываем GetProcess("KERNEL32.DLL") - и не нужно помнить про FreeLibrary. |