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