Task листата и Visual C++

5 отговора 208 прегледа
#1

Task листата и Visual C++

Как мога да скрия порцес от стандартната task листа на Windows 98, чрез Visual C++? Възможно ли е скриване от process листата на Win2000?

Отговор
в отговор на fOR #2

Re: Task листата и Visual C++

Доколкото разбирам искаш да скриеш приложенито така че да не се появява при натискане на CTRL+ALT+DEL. Ако е така решението е със API функцията:
"RegisterServiceProcess".
Тази функция се намира в "kernel32.dll".

За да скриеш приложението я ивикай с първи параметър NULL и втори 1.
Ако искаш отново да го регистрираш извикай
функцията с първи параметър 1 и втори NULL.
Не знам дали това работи в Win2000, но нищо не ти пречи да пробваш.

Pozdravi ot Bourgas.
Отговор
в отговор на pbourgas #3

Re: Task листата и Visual C++

дава
run-time error:
chkesp.c , line 42

указатели с различни calling conventions.
??

Отговор
в отговор на pbourgas #4

Re: Task листата и Visual C++

RegisterServiceProcess
The RegisterServiceProcess function registers or unregisters a service process. A service process continues to run after the user logs off.

To call RegisterServiceProcess, retrieve a function pointer using GetProcAddress on KERNEL32.DLL. Use the function pointer to call RegisterServiceProcess.

DWORD RegisterServiceProcess(
DWORD dwProcessId,
DWORD dwType
);

Parameters
dwProcessId
Specifies the identifier of the process to register as a service process. Specifies NULL to register the current process.
dwType
Specifies whether the service is to be registered or unregistered. This parameter can be one of the following values. Value Meaning
0 Unregisters the process as a service process.
1 Registers the process as a service process.


Return Value
The return value is 1 if successful or 0 if an error occurs.

Отговор
в отговор на fOR #5

Re: Task листата и Visual C++

Daite parametri na tazi funkciq za da moga da q importna ot dll-kata,pls!

Отговор
в отговор на fOR #6

Re: Task листата и Visual C++

Това е примерна функция за използване на "RegisterServiceProcess"
Моля да ме извиниш ако коментарите са прекалено много.

void OnHide()
{
/* Hiding the application in the taskmanager*/

//Дефинирам тип на адреса на следната функция
//DWORD CALLBACK LPFNDLLFUNC1(DWORD,DWORD);
typedef DWORD (CALLBACK* LPFNDLLFUNC1)(DWORD,DWORD);

//Инстанция на DLL
HINSTANCE hDLL;

//Декларирам променлива от дефинирания горе тип
LPFNDLLFUNC1 lpfnDllFunc1;

//Зарежда инстанцията на kernel32.dll
hDLL = LoadLibrary("kernel32");

//Проверява дали имаме валиден указател към kernel32.dll
if (hDLL != NULL)
{
//Ако адреса е валиден
//Присвоявам на lpfnDllFunc1 адреса на финкцията
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,"RegisterServiceProcess");

//Проверява дали адреса е невалиден и ако
//е така освобождава инстанцията на
//заредената библиотека
if (!lpfnDllFunc1)
{
FreeLibrary(hDLL);
}
else
{
//Ако всичко е наред унрегистрира
//текущата инстанция на приложението
//от RegisterServiceProcess за да
//скрие приложвнието
lpfnDllFunc1(NULL, 1);
}
}
//Oсвобождава инстанцията на заредената библиотека
FreeLibrary(hDLL);
}

Pozdravi ot Bourgas.
Отговор