none
VS2008 MFC利用远程桌面控件mstscax.dll的问题 RRS feed

  • 常规讨论

  • 用mstscax.dll开发一个远程桌面程序,能够正常连到服务器,可以正常操作,但只要一将操作焦点移到其他地方,如打开帮助或关于对话框,再回来远程桌面就无法操作了,如果这时把远程桌面切换成全屏,又可以响应了.
    开发平台:vs2008 c++ sp1
    运行平台:windows server 2008
    以下是初始化和连接远程桌面的代码
    void connect()
    {
    m_rdp.Create(_T("Remote"),WS_CHILDWINDOW|WS_VISIBLE,CRect(0,0,1024,768),this,100);
     m_rdp.put_Server(L"192.168.0.214");
     m_rdp.put_UserName(L"administrator");
     m_rdp.put_DesktopHeight(768);
     m_rdp.put_DesktopWidth(1024);
     m_rdp.put_ColorDepth(32);

     m_rdp.Connect();
    }
    请高手指教

    2009年4月27日 3:33

全部回复

  • 在做了大量测试的情况,我认为这是微软MFC的BUG,在VS2008里无法通过Insert ActiveX插入该控件,而VS2005是可以的。同时在MFC视图中实例化该控件,移出焦点后再获得焦点却无法响应鼠标消息,只能看不能操作,而目前的实验用WTL开发的程序却一切正常,因而我断定是MFC的BUG,而且是严重的BUG。
    提请斑竹重视该问题,下面的代码是正常的
    CAxWindow m_ax;
    LPOLESTR olestr;
     StringFromCLSID(__uuidof(MsRdpClient6),&olestr);
     CComPtr<IUnknown> pUnk;
     _pAtlModule=&_Module;
     m_ax.Create(m_hWnd,CRect(0,0,1024,768),L"",WS_CHILD|WS_VISIBLE,0,1);
     m_ax.CreateControlEx(olestr,NULL,NULL,&pUnk);
     m_pRdpClient6=pUnk;
     m_pRdpClient6->Server=L"192.168.0.214";
     m_pRdpClient6->UserName=L"administrator";
     m_pRdpClient6->AdvancedSettings4->ClearTextPassword=L"123";
     m_pRdpClient6->ColorDepth=32;
     m_pRdpClient6->Connect();
     SysFreeString(olestr);
    2009年4月28日 2:07
  • 用mstscax.dll开发一个远程桌面程序,能够正常连到服务器,可以正常操作,但只要一将操作焦点移到其他地方,如打开帮助或关于对话框,再回来远程桌面就无法操作了,如果这时把远程桌面切换成全屏,又可以响应了.
    开发平台:vs2008 c++ sp1
    运行平台:windows server 2008
    以下是初始化和连接远程桌面的代码
    void connect()
    {
    m_rdp.Create(_T("Remote"),WS_CHILDWINDOW|WS_VISIBLE,CRect(0,0,1024,768),this,100);
     m_rdp.put_Server(L"192.168.0.214");
     m_rdp.put_UserName(L"administrator");
     m_rdp.put_DesktopHeight(768);
     m_rdp.put_DesktopWidth(1024);
     m_rdp.put_ColorDepth(32);

     m_rdp.Connect();
    }
    请高手指教

    请问怎么改变端口号?
    2011年2月23日 19:42
  • 确实存在这个问题,不过你可以在窗口失去焦点后又获得焦点的时候对远程控件进行隐藏一下,然后再显示就正常了,例如:

    void CRDPDeskDlg::OnActive(UINT nState, CWnd* pWndOther, BOOL bMinimiaed)

    {

    CDialogEx::OnActive(nState, pWndOther, bMinimized);

    if(nState == WA_ACTIVE || nState == WA_CLICKACTIVE)

    {

    m_rdp.ShowWindow(SW_HIDE);

    Sleep(10); //视情况Sleep或不Sleep

    m_rdp.ShowWindow(SW_SHOW);

    }

    }

    2011年12月5日 7:22