最近做远程控制程序,要求在远程机器为锁定状态时,实现去解除,也就是回复到未锁定的桌面状态,若得高人指点,100完全赠送以示谢意

解决方案 »

  1.   

    解锁用
    BOOL LogonUser(
      LPTSTR lpszUsername, 
      LPTSTR lpszDomain, 
      LPTSTR lpszPassword, 
      DWORD dwLogonType, 
      DWORD dwLogonProvider, 
      PHANDLE phToken
    );
    锁定用
    BOOL LockWorkStation(VOID);
      

  2.   

    http://community.csdn.net/Expert/topic/3219/3219161.xml?temp=.6837274
      

  3.   

    试过了,logonuser只能用于获取执行权限,并不能去除锁定啊,我这边最需要的是去解除的界面进入正常的桌面,多谢兄弟指点,希望多给点帮助,谢谢
      

  4.   

    1. win32 subsystem associate a process with a workstation object, each workstation object contains desktops and desktop contains windows.
    There are 3 types of desktops: default, winlogon, screen saver.
    2. Note that messages can be sent only between processes on the same desktop. In addition, the hook procedure of a process running on a particular desktop can only receive messages intended for windows created in the same desktop.你所谓的锁定的桌面和未锁定的桌面,实际上不是同一个桌面。
    你的程序必须运行在winlogon桌面上。否则就没有戏,如果能运行在winlogon桌面上,那就easy了。还要那么多函数干什么?
      

  5.   

    一种替代的方法。
    /*
    函数:锁定/解除 计算机
    */
    void COperation::LockOperation(BOOL bIsLock)
    { if(bIsLock)
    {
       HKEY hk;
    if (RegOpenKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",&hk)!=ERROR_SUCCESS)
    RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", &hk);
    DWORD val=1;
    RegSetValueEx(hk, "DisableTaskMgr", NULL,
    REG_DWORD, (BYTE*)&val, sizeof(val));
    CRect rct(0,0,0,0);
    ClipCursor(rct);
    SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,true,0,SPIF_UPDATEINIFILE);
    ::EnableWindow(::FindWindow("Shell_TrayWnd",NULL),FALSE);
    }
    else
    {
       ClipCursor(NULL);
    SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,false,0,SPIF_UPDATEINIFILE);
    ::EnableWindow(::FindWindow("Shell_TrayWnd",NULL),TRUE);

    HKEY hk;
    if (RegOpenKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",&hk)!=ERROR_SUCCESS)
    RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", &hk);
    RegDeleteValue(hk,"DisableTaskMgr");
    }
    }
      

  6.   

    已经顺利搞定,谢谢各位帮助。要捕获登录窗口的画面,必须要让程序以NT服务的方式启动。且在程序中也要将当前的desktop切换到登陆的desktop,:)具体可以看opendestop这个API