Const SHUTDOWN_NORETRY
= &H00000001 Const IDI_APPLICATION
= 32512 Const WS_EX_CLIENTEDGE
= &H00000200 Const WS_OVERLAPPED
= &H00000000 Const WS_CAPTION
= &H00C00000 Const WS_SYSMENU
= &H00080000 Const WS_THICKFRAME
= &H00040000 Const WS_MINIMIZEBOX
= &H00020000 Const WS_MAXIMIZEBOX
= &H00010000 Const WS_OVERLAPPEDWINDOW
= WS_OVERLAPPED
Or WS_CAPTION
Or WS_SYSMENU
Or WS_THICKFRAME
Or WS_MINIMIZEBOX
Or WS_MAXIMIZEBOX
Const CW_USEDEFAULT
= &H80000000 Const SW_SHOWMINIMIZED
= 2
Const WM_DESTROY
= &H0002 Const WM_POWERBROADCAST
= &H0218 Const WM_QUERYENDSESSION
= &H0011
Const PBT_APMSUSPEND
= &H0004 Const ENDSESSION_LOGOFF
= &H80000000
As Long cbClsExtra
, cbWndExtra
As _Offset hInstance
, hIcon
, hCursor
, hbrBackground
, lpszMenuName
, lpszClassName
, hIconSm
Function CreateWindowEx%&
(ByVal dwExStyle
As Long, Byval lpClassName
As _Offset, Byval lpWindowName
As _Offset, Byval dwStyle
As Long, Byval X
As Long, Byval Y
As Long, Byval nWidth
As Long, Byval nHeight
As Long, Byval hWndParent
As _Offset, Byval wMenu
As _Offset, Byval hInstance
As _Offset, Byval lpParam
As _Offset)
WriteLog
"Computer has finished startup at " + Time$ + " on " + Date$ 'put program in SHELL:STARTUP to catch this behavior
hInstance = GetModuleHandle(0)
SetProcessShutdownParameters dwLevel, SHUTDOWN_NORETRY
'Step 1: Registering the Window Class
wc.style = 0
wc.lpfnWndProc = WindowProcCallback
wc.cbClsExtra = 0
wc.cbWndExtra = 0
wc.hInstance = hInstance
wc.hIcon = LoadIcon(0, MAKEINTRESOURCE(IDI_APPLICATION))
wc.hCursor = LoadCursor(0, MAKEINTRESOURCE(IDC_ARROW))
wc.hbrBackground = COLOR_WINDOW + 1
wc.lpszMenuName = 0
wc.lpszClassName
= _Offset(className
)wc.hIconSm = LoadIcon(0, MAKEINTRESOURCE(IDI_APPLICATION))
Print "RegisterClassEx failed:"; GetLastError
'Else Print "OK"
'Step 2: Creating the Window
hwnd
= CreateWindowEx
(WS_EX_CLIENTEDGE
, _Offset(className
), _Offset(clientTitle
), WS_OVERLAPPEDWINDOW
, CW_USEDEFAULT
, CW_USEDEFAULT
, 240, 120, 0, 0, hInstance
, 0)
Print "Window Creation Failed:"; GetLastError
ShowWindow hwnd, SW_SHOWMINIMIZED
UpdateWindow hwnd
'End
DestroyWindow hwnd
PostQuitMessage 0
If wParam
= PBT_APMSUSPEND
Then WriteLog
"Computer suspended at " + Time$ + " on " + Date$ WriteLog
"Computer started shutting down at " + Time$ + " on " + Date$ Dim As String blockReason: blockReason
= ANSIToUnicode
("Shutdown logger is running..." + Chr$(0)) ShutdownBlockReasonCreate hwnd
, _Offset(blockReason
) If (lParam
And ENDSESSION_LOGOFF
) = ENDSESSION_LOGOFF
Then WriteLog
"User is logging off at " + Time$ + " on " + Date$ WndProc = DefWindowProc(hwnd, msg, wParam, lParam)
WndProc = 0
'$INCLUDE:'unicodetoansi.bas'