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

您所在的位置:网站首页 uV检测到车头防撞机器处于急停锁定状态 C#获取系统当前是否处于锁屏状态

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

2023-07-28 19:04| 来源: 网络整理| 查看: 265

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 #include 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]



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3