发新话题
打印

[SDK/API/系统] findwindow综合应用(包含消息发送)

findwindow综合应用(包含消息发送)

function   FindQQWindow:   THandle;   
   
      function   GetSpecialButtonHandle(hwnd:   HWND;   lParam:   LPARAM):Boolean;   stdcall;   
      var   
          cName:   array[0..128]   of   Char;   
          wName:   array[0..128]   of   Char;   
      begin   
          result   :=   true;   
          GetClassName(hwnd,   cName,   128);   
          if   StrPas(cName)   =   'Button'   then   
          begin   
              GetWindowText(hwnd,   wName,   128);   
              if   StrPas(wName)   =   '软键盘'then   
              begin   
                  FQQVersion   :=   'V2004Beta';   
                  PInteger(lParam)^   :=   hwnd;   
                  result   :=   false;   
              end;   
              if   StrPas(wName)   =   '注册向导'   then   
              begin   
                  FQQVersion   :=   'V2003';   
                  PInteger(lParam)^   :=   hwnd;   
                  result   :=   false;   
              end;   
          end;   
      end;   
   
      function   EnumWindowsProc(hwnd:   HWND;   lParam:   LPARAM):   boolean;   stdcall;   
      var   
          eName:   array[0..180]   of   Char;   
      begin   
          Result   :=   true;   
          if   hwnd   =   0   then   Exit;   
          GetClassName(hwnd,   eName,   32);   
   
          If   CompareText('#32770',   StrPas(eName))<>0   Then   Exit;   
   
          EnumChildWindows(hwnd,   @GetSpecialButtonHandle,   Integer(@HSpecialHandle));   
          if   HSpecialHandle   <>   0   then   
          Begin   
              QQHandle:=   hwnd;   
              Result   :=   False;   
          End;   
      end;   
  begin   
      QQHandle:=   0;   
      EnumWindows(@EnumWindowsProc,   0);   
      Result:=   QQHandle;   
  end;   
   
  {-------------------------------------------------------------------------------   
      说明:             取得QQ窗口的各个编辑框以及登陆按钮的句柄   
  -------------------------------------------------------------------------------}   
  procedure   GetQQHandle;   
  Var   
      eHandle:   THandle;   
  begin   
      eHandle:=   FindQQWindow;   
      if   eHandle<>0   then   
      begin   
          HPasswordEdit:=   FindWindowEx(eHandle,   0,   'Edit',   nil);   
          HNumberEdit:=   FindWindowEx(eHandle,   0,   'Combobox',   nil);   
          HLoginButton:=   FindWindowEx(eHandle,   0,   'Button',   '登录');   
      end;   
  end;   
   
  {-------------------------------------------------------------------------------   
      说明:             启动QQ后,计时器开始检测QQ窗口的存在,   
                            检测到了,发送用户名密码到指定编辑框再模拟点击QQ登陆按钮完成登陆   
  -------------------------------------------------------------------------------}   
  procedure   TQQLogin.FTimerTimer(Sender:   TObject);   
  var   
      i:   integer;   
  begin   
      GetQQHandle;   
   
      If   (HNumberEdit=0)   or   (HPasswordEdit=0)   or   (HLoginButton=0)   Then   Exit;   
   
      SendMessage(HNumberEdit,   WM_SETTEXT,   0,   Integer(FUserId));   
   
      if   FQQVersion   =   'V2004Beta'   then   
      begin   
          For   I:=   1   To   Length(FPassword)   Do   
              SendMessage(HPasswordEdit,   WM_USER+513,   Integer(FPassword[I]),   0);   
      end   
      else   
      begin   
          For   I:=   1   To   Length(FPassword)   Do   
          begin   
              SendMessage(HPasswordEdit,   WM_CHAR,   Integer(FPassword[I]),   0);   
          end;   
      end;   
   
      SendMessage(HLoginButton,   WM_LBUTTONDOWN,   0,   0);   
      SendMessage(HLoginButton,   WM_LBUTTONUP,   0,   0);   
   
      FTimer.Enabled   :=   False;   
      Free;   
  end;
妖城欢迎您!

TOP

发新话题