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