nt service
请教高手
怎么写可以实现从“Winsta0\\Winlogon”互相转换“Winsta0\\Default”?

解决方案 »

  1.   

    HDESK  hDesk = OpenDesktop("Default",0,FALSE,MAXIMUM_ALLOWED);
    SwitchDesktop(hDesk);HDESK  hDesk = OpenDesktop("Winlogon",0,FALSE,MAXIMUM_ALLOWED);
    SwitchDesktop(hDesk);你不会还要更详细吧?
      

  2.   

    不行呀,我人手从Winsta0\\Default转到Winsta0\\Winlogon登陆界面,程序就报错了.
    void CNTServiceDlg::P_Switch_Desktop()
    {
    HDESK  hDesk;
    if(IsWSLocked()==FALSE)
    {
    hDesk = OpenDesktop("Default",0,FALSE,MAXIMUM_ALLOWED);
    SwitchDesktop(hDesk);
    } if(IsWSLocked()==TRUE)
    {
    hDesk = OpenDesktop("Winlogon",0,FALSE,MAXIMUM_ALLOWED);
    SwitchDesktop(hDesk);
    }
    }
      

  3.   

    报什么错
    看看OpenDesktop是不是返回NULL,可能是权限不够
      

  4.   

    请指教,谢谢!!! 返回值如下:
    void CNTServiceDlg::P_Switch_Desktop()
    {
             BOOL bb;
    HDESK  hDesk;
    if(IsWSLocked()==FALSE)//for Default
    {
    hDesk = OpenDesktop("Default",0,FALSE,MAXIMUM_ALLOWED);
                      //返回值 hDesk =124 bb=SwitchDesktop(hDesk);
                      //返回值 bb=TRUE
    } if(IsWSLocked()==TRUE)//for Winlogon
    {
    hDesk = OpenDesktop("Winlogon",0,FALSE,MAXIMUM_ALLOWED);
                      //返回值 hDesk =244 或 hDesk=248  bb=SwitchDesktop(hDesk);
                      //返回值 bb=TRUE
    }
    }
    //////////////////
    BOOL CNTServiceDlg::IsWSLocked()
    {
    //if (!IsWinNT()) 
    // return false; bool bLocked = false;
    HDESK hDesk;
    BOOL bRes;
    DWORD dwLen;
    char sName[200];

    hDesk = OpenInputDesktop(0, FALSE, 0); if (hDesk == NULL)
    {
     bLocked = true;
    }
    else 
    {
    bRes = GetUserObjectInformation(hDesk, UOI_NAME, sName, sizeof(sName), &dwLen); if (bRes)
    sName[dwLen]='\0';
    else
    sName[0]='\0'; CloseDesktop(hDesk); if (stricmp(sName,"Default") != 0)//sName!="Default" =="Winlogon"
     bLocked = TRUE; // WS is locked or screen saver active
    else
     bLocked = FALSE;//sName=="Default"
    P_WriteLog("sName=");
    P_WriteLog(sName);
    } return bLocked;
    }
      

  5.   

    你这个程序想完成什么功能?if(IsWSLocked()==FALSE)//for Default
    {
    hDesk = OpenDesktop("Default",0,FALSE,MAXIMUM_ALLOWED);
                      //返回值 hDesk =124 bb=SwitchDesktop(hDesk);
                      //返回值 bb=TRUE
    }IsWSLocked返回false表明这当前已经是Default桌面,干嘛还要Swith到Default桌面? if(IsWSLocked()==TRUE)//for Winlogon
    {
    hDesk = OpenDesktop("Winlogon",0,FALSE,MAXIMUM_ALLOWED);
                      //返回值 hDesk =244 或 hDesk=248  bb=SwitchDesktop(hDesk);
                      //返回值 bb=TRUE
    }
    IsWSLocked返回TRUE表明当前桌面是WinLogon桌面或者屏保桌面,那么你这整段代码就是说如果发现是屏保桌面就切换到Winlogon桌面,如果是的话,需要这样写程序么?总而言之,你这程序的逻辑很有问题
      

  6.   

    做的一个远程控制项目.
    现在就是想“Winsta0\\Winlogon”和“Winsta0\\Default”都可以抓屏.
      

  7.   

    SetThreadDesktop自己看MSDN吧,如果到了这个地步你还不会的话,我很怀疑你的学习能力