На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
  
> Hidden Process
    Как создать окно, которое не было бы видно в списке по Ctrl+Alt+Del, но
    тем не менее существовало и получало сообщения (например, от иконки в
    системном трее). Как-то это люди делают (например, AVP Monitor имеет до
    черта разных окон, иконку в трее, прекрасно получает сообщения - но по трем
    пальцам не виден). Просто ShowWindow(SW_HIDE) не помогает. А, самое главное:
    желательно, чтобы эта фича могла бы производиться с MFC - приложением.
      Есть недокументированная функция Winbows - котороя импортируется из Kernel32.dll, которая позволяет делать процесс системным, причем сообшения вполне приходят. :)
      Пиши: Irokez@tut.by
        #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.
          Сорри, что имя уже другое, опять забыл пароль.
          Всем спасибо, но в обоих ответах hKernel=LoadLibrary("KERNEL32.DLL"); - это лишнее. Раз мы вызываем GetProcAdress, значит мы, скорее всего, слинковали прогу с
          KERNEL32.LIB и библиотека уже подключена. Так что для простоты вызываем GetProcess("KERNEL32.DLL") - и не нужно помнить про FreeLibrary.
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0221 ]   [ 15 queries used ]   [ Generated: 14.05.24, 23:50 GMT ]