亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? keyboardhook.pas

?? 用DLL文件的形式掛載鍵盤與鼠標鉤子的例子
?? PAS
字號:
{

 MouseHook DLL Load & TMouseHook Class Unit

 2004-09-08

 Copyright ? Thomas Yao

 // OnKeyUp does't work

}

unit KeyboardHook;

interface

uses
  Windows, Messages, Classes;

const
  DEFDLLNAME = 'keyboardhook.dll';
  MappingFileName = '57D6A971_KeyboardHookDLL_442C0DB1';
  MSGKEYDOWN: PChar = 'MSGKEYDOWN57D6A971-049B-45AF-A8CD-37E0B706E036';
  MSGKEYUP: PChar = 'MSGKEYUP442C0DB1-3198-4C2B-A718-143F6E2D1760';

type
  TMappingMem = record
    Handle: DWORD;
    MsgID: DWORD;
    KeyCode: DWORD;
  end;
  PMappingMem = ^TMappingMem;

  TEnableKeyboardHook = function(hWindow: HWND): BOOL; stdcall;

  TDisableKeyboardHook = function: BOOL; stdcall;

  TKeyDownNotify = procedure(const KeyCode: Integer) of object;

  TKeyUpNotify = procedure(const KeyCode: Integer) of object;

  TKeyboardHookBase = class
  private
    FDLLName: string;
    FDLLLoaded: BOOL;
    FListenerHandle: HWND;
    FActive: BOOL;
    hMappingFile: THandle;
    pMapMem: PMappingMem;
    procedure WndProc(var Message: TMessage);
    procedure SetDLLName(const Value: string);
  protected
    MSG_KEYDOWN: UINT;
    MSG_KEYUP: UINT;
    procedure ProcessMessage(var Message: TMessage); virtual; abstract;
  public
    constructor Create; virtual;
    destructor Destroy; override;
    function Start: BOOL; virtual;
    procedure Stop; virtual;
    property DLLLoaded: BOOL read FDLLLoaded;
    property Active: BOOL read FActive;
  published
    property DLLName: string read FDLLName write SetDLLName;
  end;

  TKeyboardHook = class(TKeyboardHookBase)
  private
    FOnKeyDown: TKeyDownNotify;
    FOnKeyUp: TKeyUpNotify;
    procedure DoKeyDown(const KeyCode: Integer);
    procedure DoKeyUp(const KeyCode: Integer);
  protected
    procedure ProcessMessage(var Message: TMessage); override;
  public

  published
    property DLLName;
    property OnKeyDown: TKeyDownNotify read FOnKeyDown write FOnKeyDown;
    property OnKeyUp: TKeyUpNotify read FOnKeyUp write FOnKeyUp;
  end;

var
  DLLLoaded: BOOL = False;

  StartKeyboardHook: TEnableKeyboardHook;
  StopKeyboardHook: TDisableKeyboardHook;

implementation

var
  DLLHandle: HMODULE;

procedure UnloadDLL;
begin
  DLLLoaded := False;

  if DLLHandle <> 0 then
  begin
    FreeLibrary(DLLHandle);
    DLLHandle := 0;
    @StartKeyboardHook := nil;
    @StopKeyboardHook := nil;
  end;
end;

function LoadDLL(const FileName: string): Integer;
begin
  Result := 0;

  if DLLLoaded then
    Exit;

  DLLHandle := LoadLibraryEx(PChar(FileName), 0, 0);
  if DLLHandle <> 0 then
  begin
    DLLLoaded := True;

    @StartKeyboardHook := GetProcAddress(DLLHandle, 'EnableKeyboardHook');
    @StopKeyboardHook := GetProcAddress(DLLHandle, 'DisableKeyboardHook');

    if (@StartKeyboardHook = nil) or (@StopKeyboardHook = nil) then
    begin
      Result := 0;
      UnloadDLL;
      Exit;
    end;

    Result := 1;
  end
  else
    MessageBox(0, PChar(DEFDLLNAME + ' library could not be loaded !'),
      'Error', MB_ICONERROR);
end;

{ TInputHook }

constructor TKeyboardHookBase.Create;
begin
  pMapMem := nil;
  hMappingFile := 0;
  FDLLName := DEFDLLNAME;
  MSG_KEYDOWN := RegisterWindowMessage(MSGKEYDOWN);
  MSG_KEYUP := RegisterWindowMessage(MSGKEYUP);
end;

destructor TKeyboardHookBase.Destroy;
begin
  Stop;
  inherited;
end;

procedure TKeyboardHookBase.WndProc(var Message: TMessage);
begin
  if pMapMem = nil then
  begin
    hMappingFile := OpenFileMapping(FILE_MAP_WRITE, False, MappingFileName);
    if hMappingFile = 0 then
      MessageBox(0, 'cannot create share memory!', 'Error', MB_OK or MB_ICONERROR);
    pMapMem := MapViewOfFile(hMappingFile, FILE_MAP_WRITE or FILE_MAP_READ, 0, 0, 0);
    if pMapMem = nil then
    begin
      CloseHandle(hMappingFile);
      MessageBox(0, 'cannot map share memory!', 'Error', MB_OK or MB_ICONERROR);
    end;
  end;
  if pMapMem = nil then
    Exit;

  if (Message.Msg = MSG_KEYDOWN) or (Message.Msg = MSG_KEYUP) then
  begin
    Message.WParam := pMapMem.KeyCode;
    ProcessMessage(Message);
  end
  else
    Message.Result := DefWindowProc(FListenerHandle, Message.Msg, Message.wParam,
      Message.lParam);
end;

function TKeyboardHookBase.Start: BOOL;
var
  hookRes: Integer;
begin
  Result := False;
  if (not FActive) and (not FDLLLoaded) then
  begin
    if FDLLName = '' then
    begin
      Result := False;
      Exit;
    end
    else
    begin
      hookRes := LoadDLL(FDLLName);
      if hookRes = 0 then
      begin
        Result := False;
        Exit;
      end
      else
      begin
        FListenerHandle := AllocateHWnd(WndProc);
        if FListenerHandle = 0 then
        begin
          Result := False;
          Exit;
        end
        else
        begin
          if StartKeyboardHook(FListenerHandle) then
          begin
            Result := True;
            FDLLLoaded := True;
            FActive := True;
          end
          else
          begin
            Result := False;
            Exit;
          end;
        end;
      end;
    end;
  end;
end;

procedure TKeyboardHookBase.Stop;
begin
  if FActive then
  begin
    if FListenerHandle <> 0 then
    begin
      pMapMem := nil;
      if hMappingFile <> 0 then
      begin
        CloseHandle(hMappingFile);
        hMappingFile := 0;
      end;
      DeallocateHWnd(FListenerHandle);
      StopKeyboardHook;
      FListenerHandle := 0;
    end;
    UnloadDLL;
    FActive := False;
    FDLLLoaded := False;
  end;
end;

procedure TKeyboardHookBase.SetDLLName(const Value: string);
begin
  if FActive then
    MessageBox(0, 'Cannot activate hook because DLL name is not set.',
      'Info', MB_OK + MB_ICONERROR)
  else
    FDLLName := Value;
end;

{ TKeyboardHook }

procedure TKeyboardHook.DoKeyDown(const KeyCode: Integer);
begin
  if Assigned(FOnKeyDown) then
    FOnKeyDown(KeyCode);
end;

procedure TKeyboardHook.DoKeyUp(const KeyCode: Integer);
begin
  if Assigned(FOnKeyUp) then
    FOnKeyUp(KeyCode);
end;

procedure TKeyboardHook.ProcessMessage(var Message: TMessage);
begin
  if Message.Msg = MSG_KEYDOWN then
  begin
    DoKeyDown(Message.WParam);
  end
  else if Message.Msg = MSG_KEYUP then
  begin
    DoKeyUp(Message.WParam);
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆91在线播放| 日日夜夜免费精品视频| 国产精品欧美极品| 久久精品一区蜜桃臀影院| 久久伊人蜜桃av一区二区| 欧美xingq一区二区| 久久免费的精品国产v∧| 亚洲国产精品高清| 亚洲欧美二区三区| 日韩av成人高清| 国产一区二区三区美女| 99精品桃花视频在线观看| 色天天综合色天天久久| 欧美精品一二三区| 国产午夜亚洲精品不卡| 欧美一级日韩免费不卡| 日韩丝袜美女视频| 亚洲日韩欧美一区二区在线| 亚洲一区二区视频在线观看| 麻豆极品一区二区三区| 91视频精品在这里| 欧美va亚洲va在线观看蝴蝶网| 国产精品人成在线观看免费| 成人免费毛片a| 欧美激情自拍偷拍| 欧美电影影音先锋| 亚洲欧美国产77777| 韩国精品在线观看| 欧美一区二区三区不卡| 亚洲欧美国产77777| 99久久精品国产网站| 久久久久久一二三区| 麻豆一区二区在线| 日韩一区二区三区视频在线观看| **欧美大码日韩| 91美女在线看| 亚洲一区二区三区在线看| 色婷婷久久久亚洲一区二区三区 | 国产精品久久久久久久浪潮网站 | 欧美视频在线一区二区三区| 在线观看一区日韩| 精品入口麻豆88视频| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 六月丁香综合在线视频| 欧美三片在线视频观看| 亚洲一区二区欧美激情| 欧美一级淫片007| 午夜在线成人av| 欧美一区二区三区在线看| 老司机精品视频在线| 久久综合色8888| 91网站最新网址| 亚洲一区二区三区自拍| 26uuu亚洲婷婷狠狠天堂| 国产伦精一区二区三区| 亚洲人吸女人奶水| 欧美日韩免费电影| 久久精品免费观看| 久久综合色鬼综合色| 波多野洁衣一区| 亚洲精品成人精品456| 色天天综合久久久久综合片| 欧美国产丝袜视频| 色婷婷综合视频在线观看| 亚洲欧美日韩国产成人精品影院| 在线看国产一区| 免费看精品久久片| 国产午夜精品一区二区三区嫩草| 国产精一区二区三区| 一区二区在线观看免费视频播放| 欧美专区在线观看一区| 久久国产麻豆精品| 亚洲欧美日本韩国| 欧美成人a在线| 在线观看网站黄不卡| 国产精品自产自拍| 免费成人在线网站| 亚洲第一在线综合网站| 精品国产乱码久久久久久影片| 成人激情午夜影院| 蜜臂av日日欢夜夜爽一区| 一二三区精品视频| 亚洲天堂中文字幕| 亚洲人被黑人高潮完整版| 久久综合国产精品| 欧美一区二区在线观看| 91福利在线看| 91麻豆精品国产自产在线| 色网综合在线观看| 91美女蜜桃在线| 欧美在线视频日韩| 欧美三级日韩三级| 3d动漫精品啪啪| 日韩三级高清在线| 精品入口麻豆88视频| 久久亚区不卡日本| 国产精品嫩草影院com| 国产精品久久久久久久久图文区 | 亚洲国产精品t66y| 亚洲欧洲精品成人久久奇米网| 亚洲国产激情av| 亚洲青青青在线视频| 亚洲不卡一区二区三区| 欧美精品乱码久久久久久| 日韩精品在线网站| 欧美极品xxx| 五月天精品一区二区三区| 免费国产亚洲视频| 成人v精品蜜桃久久一区| 色av成人天堂桃色av| 欧美va日韩va| 亚洲高清免费观看高清完整版在线观看| 国产一区二区三区香蕉| 欧美吞精做爰啪啪高潮| 国产丝袜在线精品| 蜜桃在线一区二区三区| 色综合天天综合狠狠| www国产精品av| 丝瓜av网站精品一区二区 | 成人国产免费视频| 日韩美女一区二区三区| 麻豆视频观看网址久久| 欧美伊人精品成人久久综合97| 久久久亚洲午夜电影| 日本不卡中文字幕| 欧美高清dvd| 亚洲h精品动漫在线观看| 国内国产精品久久| 日韩欧美一二三| 天天综合天天综合色| 欧美日韩黄色影视| 午夜视频一区在线观看| 欧美三级视频在线播放| 一区二区高清免费观看影视大全| 成人自拍视频在线| 中文字幕av一区二区三区| 国产成人av资源| 国产精品夫妻自拍| 97精品视频在线观看自产线路二| 国产精品区一区二区三区| 在线观看国产一区二区| 天天影视涩香欲综合网| 欧美欧美午夜aⅴ在线观看| 日日摸夜夜添夜夜添国产精品| 7777精品伊人久久久大香线蕉的| 免费人成黄页网站在线一区二区| 欧美一二三区在线观看| 依依成人精品视频| 日韩一区二区免费在线观看| 美国精品在线观看| 中文一区二区在线观看| 日韩精品一区二区三区蜜臀 | 9i看片成人免费高清| 五月婷婷激情综合| 中文字幕精品一区二区三区精品| 97久久精品人人做人人爽| 亚洲va欧美va人人爽午夜| 日韩一级高清毛片| 97精品电影院| 日韩精品一级中文字幕精品视频免费观看 | 麻豆精品一二三| 一区二区三区毛片| 中文字幕第一页久久| 色噜噜狠狠色综合中国| 韩国欧美国产一区| 日本美女一区二区三区视频| 亚洲精品国产精品乱码不99| 欧美tickling挠脚心丨vk| 91黄色激情网站| 在线观看一区不卡| 色悠久久久久综合欧美99| 成人sese在线| 成人app软件下载大全免费| 人人精品人人爱| 亚洲午夜羞羞片| 亚洲欧美综合网| 亚洲视频免费看| 一区二区三区免费观看| 欧美激情综合网| 久久精品无码一区二区三区| 欧美性色综合网| 日本精品一区二区三区四区的功能| 福利一区在线观看| 丁香五精品蜜臀久久久久99网站| 激情综合亚洲精品| 国产成人精品一区二区三区四区| 国产在线一区二区综合免费视频| 久久er精品视频| 国产成人精品影视| 99精品黄色片免费大全| 色综合天天综合给合国产| 欧美人狂配大交3d怪物一区| 欧美美女黄视频| 久久久久88色偷偷免费| 日韩理论电影院| 国产福利电影一区二区三区| 欧美四级电影网| 欧美激情一区二区三区全黄| 亚洲综合色在线| 国产成人av一区二区三区在线|