문제

복제하다: 내 워크 스테이션이 잠겨 있는지 프로그래밍 방식으로 어떻게 결정할 수 있습니까?

Windows 사용자가 화면 (Windows+L)을 잠그고 다시 잠금 해제 한 경우 (런타임 중)를 어떻게 감지 할 수 있습니까? 전 세계적으로 키보드 입력을 추적 할 수 있다는 것을 알고 있지만 환경 변수로 그러한 것을 확인할 수 있습니까?

도움이 되었습니까?

해결책

wm_wtssession_change 메시지를 통해이 알림을 얻을 수 있습니다. WtsregistersessessionNotification을 통해 이러한 메시지를 수신하고 WTSUNREGISTESSESSESSENTOINICATION을 통해 이러한 메시지를 수신하려는 Windows에 알리야합니다.

이 게시물은 C# 구현에 도움이되어야합니다.

http://pinvoke.net/default.aspx/wtsapi32.wtsregisterssessionNotification

http://blogs.msdn.com/shawnfa/archive/2005/05/17/418891.aspx

http://bytes.com/groups/net-c/276963-trapping-when-workstation-locked

다른 팁

세션 스위치 이벤트가이를위한 최선의 방법 일 수 있습니다. 을 체크하다 세션 스위치 통과했습니다 세션 스위치 벤 타르스 어떤 종류의 스위치인지 알아 내고 적절하게 반응합니다.

당신이 사용할 수있는 ComponentDispatcher 그러한 이벤트를 얻는 대안적인 방법으로.

다음은 포장 할 수있는 수업입니다.

public class Win32Session
{
    private const int NOTIFY_FOR_THIS_SESSION = 0;
    private const int WM_WTSSESSION_CHANGE = 0x2b1;
    private const int WTS_SESSION_LOCK = 0x7;
    private const int WTS_SESSION_UNLOCK = 0x8;

    public event EventHandler MachineLocked;
    public event EventHandler MachineUnlocked;

    public Win32Session()
    {
        ComponentDispatcher.ThreadFilterMessage += ComponentDispatcher_ThreadFilterMessage;
    }

    void ComponentDispatcher_ThreadFilterMessage(ref MSG msg, ref bool handled)
    {
        if (msg.message == WM_WTSSESSION_CHANGE)
        {
            int value = msg.wParam.ToInt32();
            if (value == WTS_SESSION_LOCK)
            {
                OnMachineLocked(EventArgs.Empty);
            }
            else if (value == WTS_SESSION_UNLOCK)
            {
                OnMachineUnlocked(EventArgs.Empty);
            }
        }
    }

    protected virtual void OnMachineLocked(EventArgs e)
    {
        EventHandler temp = MachineLocked;
        if (temp != null)
        {
            temp(this, e);
        }
    }

    protected virtual void OnMachineUnlocked(EventArgs e)
    {
        EventHandler temp = MachineUnlocked;
        if (temp != null)
        {
            temp(this, e);
        }
    }
}

당신은 절대적으로 wm_wtssession_change가 필요하지 않습니다. 내부 WTTS API 만 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top