|
void CALLBACK timeCall(UINT timeid, UINT umsg, DWORD_PTR dwUser, DWORD dw1, DWORD_PTR dw2)
{
DWORD dwSessionId = WTSGetActiveConsoleSessionId(); //擷取控制台的session
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //為建立環境快照
if (hSnap == INVALID_HANDLE_VALUE)
return;
//遍曆快照,通過快照的 procEntry.szExeFile 擷取應用程式名稱字,從而取得相應的PID
PROCESSENTRY32 procEntry;
procEntry.dwSize = sizeof(PROCESSENTRY32);
Process32First(hSnap, &procEntry);
DWORD dwExplorerPid = -1;
do
{
if (strcmp(procEntry.szExeFile, "explorer.exe") == 0)
{
DWORD dwExplorerSessId = 0;
if (ProcessIdToSessionId(procEntry.th32ProcessID, &dwExplorerSessId) && dwExplorerSessId == dwSessionId)
{
dwExplorerPid = procEntry.th32ProcessID;
break;
}
}
} while (Process32Next(hSnap, &procEntry));
LOG_INFO("檢測使用者是否已經登入 : %s", (dwExplorerPid == -1) ? "未登入" : "已經登入");
if (dwExplorerPid != -1)
{
//已登入
DoSomething();
}
} |