RT我想用delphi 制作个按键替换的小程序 ,用于玩魔兽真三 换键,虽然网上有很多,但我想自己弄个,请教个详细的 制作步骤教程, 谢谢 

解决方案 »

  1.   

    你可以用消息钩子,过滤相应的按键消息,换成你自己的,用WH_Debug
      

  2.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
      type 
      PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT; 
      KBDLLHOOKSTRUCT = record 
        vkCode: DWORD; 
        ScanCode: DWORD; 
        Flags: DWORD; 
        Time: DWORD; 
        dwExtraInfo: DWORD; 
      end;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
       Hook: HHOOK;
    implementation{$R *.dfm}
     function HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
           var
           p: PKBDLLHOOKSTRUCT;
            y: Integer;
    begin
      y:= 0;
    if nCode = HC_ACTION then
    begin
            case WParam of
          WM_KEYDOWN, WM_SYSKEYDOWN:
          begin 
           p:= PKBDLLHOOKSTRUCT(Lparam);
           if p^.vkCode=66 then
           begin
           y:=1;
             keybd_event(Ord('C'), 0, 0, 0);
             keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0);
             end;
          end;
          WM_KEYUP, WM_SYSKEYUP:                     
          begin
            y:=1;
          end;
        end; 
      end;
    if y = 1 then Result:= 1 else Result:= CallNextHookEx(hook,nCode,WParam,LParam);  end;function SetHook: Boolean; stdcall;begin
     if hook  <> 0 then
      begin
        Result:= False;
        Exit; 
      end; 
      hook:= SetWindowsHookEx(13, @HookProc, HINSTANCE, 0);
      Result:= hook  <> 0;
    end;function DelHook: Boolean; stdcall;
    begin
      if hook  <> 0 then
      begin
        UnhookWindowshookEx(hook);
        hook:= 0;
      end; 
      Result:= hook = 0;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       SetHook;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
     DelHook;
    end;end.
    上面的代码,当你按下键盘的b时,变成c了
    打开一个记事本,测试一下
    我测试没问题,无论按多快,都能变成c
      

  3.   

    bc  我按b 出现b  按c 出现c
    ???????
      

  4.   

    p:= PKBDLLHOOKSTRUCT(Lparam);
           if p^.vkCode=66 then
           begin
           y:=1;
             keybd_event(Ord('C'), 0, 0, 0);
             
             end;
          end;
          WM_KEYUP, WM_SYSKEYUP:                     
          begin
            y:=1;
    keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0);你是想按住不放呢,还是按一下是一下呢?
      

  5.   

     hook:= SetWindowsHookEx(13, @HookProc, HINSTANCE, 0);
    第一个参数13是什么意思啊,能讲解一下吗?