C#获取系统当前是否处于锁屏状态

C#获取系统当前是否处于锁屏状态

C#引用代码如下:

[DllImport("GetScreendll.dll", CallingConvention = CallingConvention.Cdecl)]
extern static bool IsSessionLocked();
public main()
{
    InitializeComponent();
    if (IsSessionLocked() != true) //获取当前电脑是否处于锁屏状态下
    {
         //Unlock
   	 }else
   	 {
   	    //Lock
   	 }
}

c++生成dll 代码如下:

getScreendll.cpp代码:

#include "stdafx.h"
#include "GetScreendll.h"
#include "stdafx.h"
#include <windows.h>
#include <WtsApi32.h>
bool IsSessionLocked()
{
	typedef BOOL(PASCAL * WTSQuerySessionInformation)(HANDLE hServer,    DWORD SessionId, WTS_INFO_CLASS WTSInfoClass, LPTSTR* ppBuffer, DWORD* pBytesReturned);
	typedef void (PASCAL * WTSFreeMemory)(PVOID pMemory);

	WTSINFOEXW * pInfo = NULL;
	WTS_INFO_CLASS wtsic = WTSSessionInfoEx;
	bool bRet = false;
	LPTSTR ppBuffer = NULL;
	DWORD dwBytesReturned = 0;
	LONG dwFlags = 0;
	WTSQuerySessionInformation pWTSQuerySessionInformation = NULL;
	WTSFreeMemory pWTSFreeMemory = NULL;

	HMODULE hLib = LoadLibrary(L"wtsapi32.dll");
	if (!hLib)
	{
		return false;
	}
	pWTSQuerySessionInformation = (WTSQuerySessionInformation)GetProcAddress(hLib, "WTSQuerySessionInformationW");
	if (pWTSQuerySessionInformation)
	{
		pWTSFreeMemory = (WTSFreeMemory)GetProcAddress(hLib, "WTSFreeMemory");
		if (pWTSFreeMemory != NULL)
		{
			DWORD dwSessionID = WTSGetActiveConsoleSessionId();
			if (pWTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, dwSessionID, wtsic, &ppBuffer, &dwBytesReturned))
			{
				if (dwBytesReturned > 0)
				{
					pInfo = (WTSINFOEXW*)ppBuffer;
					if (pInfo->Level == 1)
					{
						dwFlags = pInfo->Data.WTSInfoExLevel1.SessionFlags;
					}
					if (dwFlags == WTS_SESSIONSTATE_LOCK)
					{
						bRet = true;
					}
				}
				pWTSFreeMemory(ppBuffer);
				ppBuffer = NULL;
			}
		}
	}
	if (hLib != NULL)
	{
		FreeLibrary(hLib);
	}
	return bRet;
}

getScreendll.h代码:

#pragma once

extern "C" __declspec(dllexport) bool IsSessionLocked();

与接收Windows消息获得是否处于锁屏状态的区别:

Dll方式:

上面采用dll去获取系统是否处于锁屏状态是可以实时的获取
如:在系统处于锁屏状态的情况下去调用此dll,可得到系统处于锁屏状态

Windows消息方式:

此方式只能在系统状态发生改变时,才能获取到系统当前状态
如:当程序启动的过程中,进行锁屏动作。这时windows消息方式是不能获取到系统的当前的状态的
因为系统从桌面到锁屏状态时,程序有可能还没能成功启动,而此方式只能在系统状态发生改变时,才能获取到系统当前状态,所以此时无法获取到系统是否处于锁屏状态。

windows方式获取系统状态请跳转到下面链接:
https://blog.csdn.net/weixin_45526252/article/details/123321930

参考资料:
[https://blog.csdn.net/FlushHip/article/details/83141062]

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值