PPC关机代码:
//shut down the device
keybd_event(VK_OFF, 0, 0, 0); // down
keybd_event(VK_OFF, 0, 2, 0); // up
keybd_event(VK_OFF, 0, 0, 0); // down
keybd_event(VK_OFF, 0, 2, 0); // up
PPC软重启代码:
#include
<
winioctl.h
>
/// /声明*******************************************************************
/// /Structure that reset functions needed
/// **************************************
extern " C " __declspec(dllimport) BOOL KernelIoControl(
DWORD dwIoControlCode,
LPVOID lpInBuf,
DWORD nInBufSize,
LPVOID lpOutBuf,
DWORD nOutBufSize,
LPDWORD lpBytesReturned);
/// **************************************
/// /end of the defination that structure
/// **************************************************************************
void ResetDevice();
static void ResetWithExitWindows();
static void ResetWithSetSystemPowerState();
static void ResetWithKernelIoControl() ;
/// 定义 /// /
/// /Functions about restart the device
void ResetDevice()
{
OSVERSIONINFO vi;
memset( & vi, 0 , sizeof (vi));
vi.dwOSVersionInfoSize = sizeof (vi);
VERIFY(GetVersionEx( & vi));
if (vi.dwMajorVersion >= 5 )
{
ResetWithExitWindows();
}
else if (vi.dwMajorVersion == 4 && vi.dwMinorVersion >= 20 )
{
ResetWithSetSystemPowerState();
}
else
{
ResetWithKernelIoControl();
}
}
// soft restart
static void ResetWithExitWindows()
{
HMODULE hModule = ::LoadLibrary(TEXT( " aygshell.dll " ));
typedef BOOL ( * ExitWindowsExFunction)(UINT uFlags, DWORD dwReserved);
ExitWindowsExFunction f = (ExitWindowsExFunction)::GetProcAddress(hModule, TEXT( " ExitWindowsEx " ));
#ifndef EWX_REBOOT
#define EWX_REBOOT 2
#endif
f(EWX_REBOOT, 0 );
FreeLibrary(hModule);
}
static void ResetWithSetSystemPowerState()
{
typedef DWORD ( * SetSystemPowerStateFunction)(LPCWSTR pwsSystemState, DWORD StateFlags, DWORD Options);
HMODULE hModule = ::LoadLibrary(TEXT( " Coredll.dll " ));
SetSystemPowerStateFunction f = (SetSystemPowerStateFunction)
::GetProcAddress(hModule, TEXT( " SetSystemPowerState " ));
#ifndef POWER_STATE_RESET
#define POWER_STATE_RESET DWORD(0x00800000)
#endif
f(NULL, POWER_STATE_RESET, 0 );
::FreeLibrary(hModule);
}
static void ResetWithKernelIoControl()
{
#ifndef IOCTL_HAL_REBOOT
#define IOCTL_HAL_REBOOT CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
#endif
KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0 , NULL, 0 , NULL);
}
// //
/// /End of the functions about reset device
// //
// 调用 /
ResetDevice();
// /
/// /声明*******************************************************************
/// /Structure that reset functions needed
/// **************************************
extern " C " __declspec(dllimport) BOOL KernelIoControl(
DWORD dwIoControlCode,
LPVOID lpInBuf,
DWORD nInBufSize,
LPVOID lpOutBuf,
DWORD nOutBufSize,
LPDWORD lpBytesReturned);
/// **************************************
/// /end of the defination that structure
/// **************************************************************************
void ResetDevice();
static void ResetWithExitWindows();
static void ResetWithSetSystemPowerState();
static void ResetWithKernelIoControl() ;
/// 定义 /// /
/// /Functions about restart the device
void ResetDevice()
{
OSVERSIONINFO vi;
memset( & vi, 0 , sizeof (vi));
vi.dwOSVersionInfoSize = sizeof (vi);
VERIFY(GetVersionEx( & vi));
if (vi.dwMajorVersion >= 5 )
{
ResetWithExitWindows();
}
else if (vi.dwMajorVersion == 4 && vi.dwMinorVersion >= 20 )
{
ResetWithSetSystemPowerState();
}
else
{
ResetWithKernelIoControl();
}
}
// soft restart
static void ResetWithExitWindows()
{
HMODULE hModule = ::LoadLibrary(TEXT( " aygshell.dll " ));
typedef BOOL ( * ExitWindowsExFunction)(UINT uFlags, DWORD dwReserved);
ExitWindowsExFunction f = (ExitWindowsExFunction)::GetProcAddress(hModule, TEXT( " ExitWindowsEx " ));
#ifndef EWX_REBOOT
#define EWX_REBOOT 2
#endif
f(EWX_REBOOT, 0 );
FreeLibrary(hModule);
}
static void ResetWithSetSystemPowerState()
{
typedef DWORD ( * SetSystemPowerStateFunction)(LPCWSTR pwsSystemState, DWORD StateFlags, DWORD Options);
HMODULE hModule = ::LoadLibrary(TEXT( " Coredll.dll " ));
SetSystemPowerStateFunction f = (SetSystemPowerStateFunction)
::GetProcAddress(hModule, TEXT( " SetSystemPowerState " ));
#ifndef POWER_STATE_RESET
#define POWER_STATE_RESET DWORD(0x00800000)
#endif
f(NULL, POWER_STATE_RESET, 0 );
::FreeLibrary(hModule);
}
static void ResetWithKernelIoControl()
{
#ifndef IOCTL_HAL_REBOOT
#define IOCTL_HAL_REBOOT CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
#endif
KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0 , NULL, 0 , NULL);
}
// //
/// /End of the functions about reset device
// //
// 调用 /
ResetDevice();
// /