下面的这个函数可以获取Windows是否处于锁屏状态:
代码来自stackoverflow,
C++: check if computer is locked
。
#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;
我们可以简单地写一个测试程序,然后在锁屏和不锁屏之间切换,看看输出是否符合期望。
int main()
while (true)
std::cout << std::boolalpha << IsSessionLocked() << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(5));
return 0;
Windows如果长时间鼠标键盘不操作,系统就会进行锁屏操作,但是我现在不想让它锁屏,自己通过python脚本来实现不让它息屏。
如果不让系统锁屏,那么就可以通过在系统设置息屏时间内,来模拟键盘或鼠标操作达到系统不锁屏的目的。
那么就要找到操作鼠标键盘的模块,来进行模拟。python中有很多模块可以达到此目的。
下面说明几个操作鼠标键盘的方法。
要在Windows API中确定当前是否处于锁定状态,您可以使用以下步骤:
获取当前会话的状态。您可以使用WTSQuerySessionInformation函数和WTS_CURRENT_SESSION常量来获取当前会话的信息。
检查会话状态中的WTS_CONNECTSTATE_CLASS值。如果该值为WTSDisconnected,则会话已断开连接,因此您不必检查锁定状态。否则,如果该值为W...
如果窗口想获取相关消息,需要注册Session的Notification,需要Wtsapi32.dll中的两个函数:WTSRegisterSessionNotification和WTSUnRegisterSessionNotification,分别在窗口创建和销毁的时候调用。typedef BOOL (WINAPI *WTSRegisterSessionNotification)(HWND,
近来要实现程序查询Windows是否处于锁屏状态,没找到直接查询是否锁屏的API,通过Google 找到了在C++实现的查询Windows是否锁屏的代码,地址为:C++: check if computer is locked
之后使用C#通过P/Invoke对相关API进行了一下使用测试,相关代码如下:
首先是需要使用的三个Win32 API接口
[DllIm...
不知道大家注意到没有,Windows XP新增加了一个快速切换用户的功能。它可以让您在不注销的情况下在用户之间进行切换,而且每个用户有自己独立的配置文件和桌面。也就是说当您切换到另外 一个用户(即用另外一个账号登陆)时,以前的那个用户运行的所有程序都还是在运行的,并没有退出来。这就给我们的开发带来了新的问题。比如您的应用程序提
供的功能在多个用户同时运行时发生错误,您必须为应用程序添加代码以检
在一个项目中需要获取Win7系统中的当前活动用户与锁屏状态,网上有很多关于XP系统的相关资料,但关于Win7以上系统的资料很少,花了一些时间找到了相应的解决办法,现在整理并记录下来。
1.获取当前活动用户
实现思路:在Win7系统下,通过获取Session Id的方式获取活动用户,我们也可以通过任务管理器来查看获取的结果是否准确,标识等于1就是我们需要获取的Session Id:
//BOOL CALLBACK EnumChildProc(_In_ HWND hwnd, _In_ LPARAM lParam)
// char szTitle[MAX_PATH] = { 0 };
// char