static void timerproc (HWND hwnd) { HANDLE t; LUID l; int r; r = vmcall_iccard (); if (r > 0) { LockWorkStation (); #if 0 if (OpenProcessToken (GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &t)) { if (LookupPrivilegeValue (NULL, SE_SHUTDOWN_NAME, &l)) { TOKEN_PRIVILEGES p = { .PrivilegeCount = 1, .Privileges = { { .Luid = l, .Attributes = SE_PRIVILEGE_ENABLED } } }; AdjustTokenPrivileges (t, FALSE, &p, 0, NULL, NULL); }
HRESULT ConnectActiveSession() { Kernel32Dll kernel32; WinstaDll winsta; DWORD activexid = kernel32.WTSGetActiveConsoleSessionId(); INT connect_state; if(!QuerySessionInformationT(activexid,WTSConnectState,connect_state)) { DebugOutF(filelog::log_warning,("WTSQuerySessionInformationW %d failed,error code = %d"),activexid,GetLastError()); } else { if(connect_state == WTSDisconnected /*&& dwSessionID != activexid*/) { if(!winsta.WinStationConnect(0,activexid,activexid,L"",TRUE)){ DebugOutF(filelog::log_error,("Connect station %d to %d failed,error code = %d"),activexid,activexid,GetLastError()); return E_FAIL; }else{ LockWorkStation(); DebugOutF(filelog::log_info,("Connect station %d to %d"),activexid,activexid); } } } return S_OK; }
void MainWindow::on_closelocksysscreen_clicked() { #ifdef Q_WS_WIN //声明要使用windows API #endif LockWorkStation(); SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2); }
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nCmdShow) { LockWorkStation(); // Turn off monitor SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM)2); return 0; }
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { LPARAM const DISPLAY_SHUT_OFF = (LPARAM)2; // Tell the system to power-off the display SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, DISPLAY_SHUT_OFF); // Tell the system to lock the workstation LockWorkStation(); // No way to error check so exit return 0; }
unsigned long __stdcall threadlock(void *v) { Sleep(1000); LockWorkStation(); return 0; }
void CRelaxReminderDlg::RelaxNotify() { UINT nLS = 0; BOOL bShortRelax = FALSE; nLS = m_tm.GetLS(); switch (m_tm.GetStatus()) { case STATUS_SHORT_RELAX: bShortRelax = TRUE; break; case STATUS_LONG_RELAX: bShortRelax = FALSE; break; default: return; } if (nLS == 0) { CalcNotifyWindowPos(); if (m_bDarkerScreen) { // 先显示ScreenMask ShowDarkerScreen(m_iDarkerScreenAlpha, m_colorDarkerScreen, m_eDarkerScreenAnimateType); } } if ((!m_bDarkerScreen && (nLS == 0)) || (m_bDarkerScreen && (nLS == TRAY_WINDOW_DELAY))) { // 再显示TrayWindow m_dlgRelaxNotify.ShowTrayWindow( m_str.GetStr(bShortRelax ? TRAY_WINDOW_CAPTION_SHORT_RELAX : TRAY_WINDOW_CAPTION_LONG_RELAX), GetFixedColonTime()); } // 更新任务栏提示窗口显示的时间 m_dlgRelaxNotify.UpdateTrayWindow(NULL, GetTwinklingTime()); // 如果启用了休息时锁定鼠标键盘,则在休息开始后10秒钟时锁定 if (m_bLockInput && nLS == (UINT)m_iGraceTimeBeforeLockInput) { switch (m_iLockType) { case RELAX_LOCK_KEYBOARD: LockKeyboard(TRUE); break; case RELAX_LOCK_MOUSE: LockMouse(TRUE); break; case RELAX_LOCK_BOTH: LockKeyBoardAndMouse(TRUE); break; default: LockMouse(TRUE); break; } m_dlgRelaxNotify.GetDlgItem(IDC_BUTTON_DELAY)->EnableWindow(FALSE); m_dlgRelaxNotify.GetDlgItem(IDC_BUTTON_SKIP)->EnableWindow(FALSE); m_dlgRelaxNotify.GetDlgItem(IDC_BUTTON_HIDE)->EnableWindow(FALSE); } // 如果启用了锁定计算机,则在休息开始后17秒钟时锁定 if (m_bLockComputer && nLS == 17) { LockWorkStation(); } // 如果启用了关闭显示器,则在休息开始后20秒钟时关闭 if (m_bCloseMonitor && nLS == 20) { ::SendMessage(GetSafeHwnd(), WM_SYSCOMMAND, SC_MONITORPOWER, 1); } }
JNIEXPORT void JNICALL Java_keccs_hitTheHay_core_NativeInterface_lockScreen(JNIEnv *env, jclass c) { LockWorkStation(); }
void _start() { Sleep(500); SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2); LockWorkStation(); ExitProcess(0); }