Shutting down workstations

This time is about to shut down a network machine. Of course, we have to use
InitiateSystemShutdown routine. The job is done in the sample dialog by pressing Shutdown button.
Also the dialog with Cancel event armed can be useful sometimes (think at stored procedures,
transactions, etc.).


#include <what_you_need.h>

void
CShutdownDlg::OnShutdown()
{
HTREEITEM
hSel = m_treeWksta.GetSelectedItem(), // tree items (selected workstation)
hRoot = m_treeWksta.GetRootItem(); // root (network neighborhood)

if(hRoot == hSel)
return;

CShutdownParamDlg dlgShutdown(this); // Here we configure how to shutdown workstation:
if(dlgShutdown.DoModal() == IDCANCEL) // force close, reboot, timeout, and user message
return;

BOOL bShutdown =
InitiateSystemShutdown
(
(LPSTR)(LPCTSTR)m_strWkstaName,
(LPSTR)(LPCTSTR)dlgShutdown.m_strMessage,
dlgShutdown.m_nTimeout,
dlgShutdown.m_fForce,
dlgShutdown.m_fReboot
);
if(!bShutdown)
ShowLastError(); // Usually: not enough privileges
else
{
CShutdownParam shdwn; // Pass a structure to wait for abort thread
shdwn.m_nTimeout = dlgShutdown.m_nTimeout;
shdwn.m_strMachineName = m_strWkstaName;

// Show to the user dialog with Cancel button
CEventDlg dlg(WaitForShutdown, (LPVOID)&shdwn);
// If user pressed Cancel, dismiss
if (dlg.DoModal() != 0)
AbortSystemShutdown((LPSTR)(LPCTSTR)m_strWkstaName);
}
}

Download demo project – 25 KB

History

More by Author

Must Read