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]