下面的这个函数可以获取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