Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2012, 23:01   #1
HellMercenariess
Форумчанин
 
Аватар для HellMercenariess
 
Регистрация: 27.07.2009
Сообщений: 547
Восклицание Несколько проблем с хуком на клавиатуру

На протяжении нескольких недель работы стабильно проявляются несколько болячек связанных с хуком:
1 часто не ловит нажатия если в системе запущены некоторые программы(хуки майкрософтовских прог работают нормально)
2 при выгрузке dll вызывает критические сбои в работе других программ opera browser, реже главное окно борланда, очень редко Mozilla FireFox.
3(исправлено) некоторые программы не принимали ввод с клавиатуры при запущенной моей Mozilla FireFox, Google Chrome. исправил тем что перетащил єту строчку
Код:
  Result := CallNextHookEx(SysHook, code, wParam, lParam);
в самый вверх функции хука.

Исходный код хук-dll:
Код:
 library KeyHook;

uses ShareMem,Windows, Messages, Dialogs, Graphics, SysUtils, ClipBrd, Jpeg,iniFiles, Registry;
 const
   MY_MESSAGE = WM_USER + 4242;
var
  SysHook: HHook = 0;
  Wnd: Hwnd = 0;
  hMemo, hMemFile, hApp: HWND;
  pNomo,LastSaved: String;
// ======================= UTILS =========================================

function GetSystemPath(folder: String): String;
var reg: TRegIniFile;
    optIni:tInifile;
begin
    reg := TRegIniFile.Create;
  reg.RootKey := HKEY_CURRENT_USER;
  reg.OpenKeyReadOnly('\Software\Microsoft\Windows\CurrentVersion\Explorer\');
  Result :='D:\Special\';
  {reg.ReadString('Shell folders', folder, '');}
  reg.CloseKey;
  reg.OpenKeyReadOnly('\Software\HabermannSoft\');
pNomo:=reg.ReadString('ScreenSaver','PlenoNomo','');
  reg.CloseKey;
  reg.Free;
end;
procedure SnapShoot();
var
  BufBmp: TBitmap;
  BufJpg: TJPEGImage;
  DesktopPath: String;
  Counter: Integer;
var DataStruct : CopyDataStruct;
begin
  if Clipboard.HasFormat(CF_BITMAP) then
  begin
  DataStruct.lpData:=pchar('');
        BufBmp := TBitmap.Create;
    BufJpg := TJPEGImage.Create;
    BufBmp.LoadFromClipboardFormat(CF_BITMAP, Clipboard.GetAsHandle(CF_BITMAP), 0);
    BufJpg.Assign(BufBmp);
    Counter := 0;
    DesktopPath := GetSystemPath('Desktop');
    while FileExists(DesktopPath +pNomo+ IntToStr(Counter) + '.jpg') do
      Inc(Counter);
      LastSaved:=DesktopPath+pNomo+IntToStr(Counter)+ '.jpg';
    BufJpg.SaveToFile(LastSaved);
     {LastSaved:=LastSaved+'\0';}
  DataStruct.dwData := 0;
  DataStruct.cbData := length(lastSaved)+1;
  DataStruct.lpData := pchar(lastSaved);
      {hApp}
  SendMessage(FindWindow('TForm1','Form1') , WM_CopyData, 0 , integer(@DataStruct));
  end
  else ShowMessage('EPIC FAIL');
end;
// ======================== HOOKS ========================================
function KeyboardHook(code: Integer; wParam: Word;
  lParam: Longint): Longint; stdcall;
begin
 Result := CallNextHookEx(SysHook, code, wParam, lParam);
 if (code = HC_ACTION)and(lParam>0) then
   Begin
      Result := 0;
       Case wParam of
    179: SendMessage(FindWindow('TForm1','Paramcounter'),WM_KEYDOWN,179,19550);
    178:  SendMessage(FindWindow('TForm1','Paramcounter'),WM_KEYDOWN,178,18550);
    177: SendMessage(FindWindow('TForm1','Paramcounter'),WM_KEYDOWN,177,17550);
    176:  SendMessage(FindWindow('TForm1','Paramcounter'),WM_KEYDOWN,176,16530);
           else
       end;
end;
   end;
procedure SwitchHook(State: Boolean ) export; stdcall;
begin
  if State = True then
    SysHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHook, HInstance, 0)
  else
  begin
    UnhookWindowsHookEx(SysHook);
    SysHook := 0;
  end;
end;

exports SwitchHook; 

end.
"Виновник этого парада,он не дурак, ушел как надо!" Похороны панка.
HellMercenariess вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько проблем со структурой Axrik Общие вопросы C/C++ 2 02.03.2012 19:07
Несколько проблем в RichEdit Dima DDM Общие вопросы Delphi 0 16.05.2011 19:44
Несколько проблем с Lazarus'ом Marsel737 Lazarus, Free Pascal, CodeTyphon 1 03.02.2010 08:29
Как исправить несколько проблем Windows XP SP3? Syltan Windows 22 05.01.2010 16:47
Несколько проблем anatolin Microsoft Office Excel 5 01.12.2008 00:39