문제

나는 여러 가지 응용 프로그램의 일부는 도구 세트를 다양한 개발자에서 우리의 스튜디오 사용.이러한 응용 프로그램은 주로 명령행하는 앱을 엽 DOS cmd 쉘입니다.이러한 앱을 차례로 시작하는 GUI 응용 프로그램을 추적하는 출력 상태(via sockets)의 이러한 명령 라인다.

명령을 새로 시작할 수 있는 사용자가 로그인할 때 자신의 워크 스테이션이 잠겨(그들은 불을 끄는 배치 파일을 다음 즉시 잠금 자신의 workstaion),그리고 그들은 로그아웃(를 통해 예약된 작업).는 문제가 있으로 마지막 두 가지 경우가 있습니다.

는 경우 이러한 앱을 발사할 때 사용자에 잠겨 있거나 로그아웃,이러한 명령이 생성한 GUI windows 는 트랙 출력/상태입니다.그러나 말하는 사용자가 자신의 워크 스테이션이 잠긴 때 그들은 그들의 잠금을 해제들이 워크스테이션의 GUI 를 볼 수 없습니다.실행중인 작업 목록은,하지만 그것의 보이지 않습니다.다음에 이러한 사용자 실행의 일부를 우리의 명령 라인 apps,GUI 지 않을 시작했(기 때문에 그것은 이미 실행중)하지만 그것 때문에 바탕 화면에 표시되지 않습,사용자가 보이지 않는 어떤 출력이다.

내가 무엇을 찾고있는 방법을 말해서는 나의 명령 라인 앱을 실행하는 경우 뒤에 잠겨있는 워크스테이션 또는 사용자가 로그아웃(를 통해 예약된 작업이)--기본적으로 그들을 실행하지 않고 사용자의 데스크탑을 볼 수 있습니다.는 경우 내가 말할 수 있는,나는 단순히 시작하지 않을 우리의 GUI 방지할 수 있습 많은 문제입니다.

이러한 앱을 테스트하는 C/C++Windows 응용 프로그램입니다.

익스피디아에는 취소 수수료가 없습니다.

도움이 되었습니까?

해결책

내가 찾는 프로그래밍 응답을 찾고 있었습니다.그것은 역이다.분명히 아무것도에서 실행 되는 데스크톱에서 실행됩니다 스테이션이 특정한 이름입니다.아무것도 없는 바탕화면(즉프로세스에 의해 시작되는 작업 관리자 로그인 할 때 해제 또는 잠 워크스테이션)을 시작으로 다른 역 이름입니다.예제 코드:

HWINSTA dHandle = GetProcessWindowStation();
if ( GetUserObjectInformation(dHandle, UOI_NAME, nameBuffer, bufferLen, &lenNeeded) ) {
    if ( stricmp(nameBuffer, "winsta0") ) {
        // when we get here, we are not running on the real desktop
        return false;
   }
}

는 경우에 당신을 얻을 내는'만약에'문에,다음의 프로세스는 데스크톱에서만 실행하는"다른 곳".나는 보았다 namebuffer 값을 실행하지 않는 경우에는 데스크탑에서 이름을 의미하지 않지만,그들은하지 않습 winsta0 에.

에 대한 링크를 문서 .

다른 팁

당신이 사용할 수 있습니다 SENS(시스템의 이벤트 통지 서비스).나는 그것을 자신을 사용하지 않지만,나는 거의 긍정적인 그것이 당신이 무엇을 원하는:을 줄 알림한 이벤트가 같은 로그온,로그오프,화면 보호기,등등.

내가 알기에는 아주 막연하지만,잘하면 그것은 당신을 얻을 것이 시작됩니다.빠른 google 검색이 다른 사람의 사이에서,: http://discoveringdotnet.alexeyev.org/2008/02/sens-events.html

나는 성공적으로 사용되는 이 방법을 탐지하는지 여부를 바탕 화면에 잠겨 Windows:

bool isDesktopLocked = false;
HDESK inputDesktop = OpenInputDesktop(0, FALSE,
             DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW |
             DESKTOP_ENUMERATE |  DESKTOP_SWITCHDESKTOP |
             DESKTOP_WRITEOBJECTS | DESKTOP_READOBJECTS |
             DESKTOP_WRITE);

if (NULL == inputDesktop)
{
    isDesktopLocked = true;
}
else
{
    CloseDesktop(inputDesktop);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top