000
09.01.2010, 21:31 Uhr
Hans
Library Walker (Operator)
|
Hi,
normalerweise sollte nach dem herunterfahren von Win 2000 Professionell eine Nachricht erscheinen, die besagt, das ich den Computer ausschalten kann. Aber seit einiger Zeit führt mein Rechner einen Neustart durch, obwohl ich im Beenden-dialog "Herunter fahren" gewählt habe. Hab ich da irgendwo was verstellt, und weis nicht wo?
Eine weitere Möglichkeit wäre noch, das ein DemoProgramm zur API-Funktion ExitWindowsEx() irgendwelche einstellungen vorgenommen hat, ohne das mir das klar wäre. Denn ich meine, dass das Phänomen auftritt, seit ich das Programm mal laufen lies. Es sieht so aus: (weis nur gerade nicht, wo ich es her habe, also ob aus der msdn oder aus einem WinAPI-Buch. )
C++: |
#include <windows.h> #include "ExitWnd.h"
#if defined (WIN32) #define IS_WIN32 TRUE #else #define IS_WIN32 FALSE #endif
#define IS_NT IS_WIN32 && (BOOL)(GetVersion() < 0x80000000) #define IS_WIN32S IS_WIN32 && (BOOL)(!(IS_NT) && (LOBYTE(LOWORD(GetVersion()))<4)) #define IS_WIN95 (BOOL)(!(IS_NT) && !(IS_WIN32S)) && IS_WIN32
HINSTANCE hInst; // current instance
LPCTSTR lpszAppName = "MyApp"; LPCTSTR lpszTitle = "My Application";
BOOL RegisterWin95( CONST WNDCLASS* lpwc );
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { MSG msg; HWND hWnd; WNDCLASS wc;
// Register the main application window class. //............................................ wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon( hInstance, lpszAppName ); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszMenuName = lpszAppName; wc.lpszClassName = lpszAppName;
if ( IS_WIN95 ) { if ( !RegisterWin95( &wc ) ) return( FALSE ); } else if ( !RegisterClass( &wc ) ) return( FALSE );
hInst = hInstance;
// Create the main application window. //.................................... hWnd = CreateWindow( lpszAppName, lpszTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL );
if ( !hWnd ) return( FALSE );
ShowWindow( hWnd, nCmdShow ); UpdateWindow( hWnd );
while( GetMessage( &msg, NULL, 0, 0) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); }
return( msg.wParam ); }
BOOL RegisterWin95( CONST WNDCLASS* lpwc ) { WNDCLASSEX wcex;
wcex.style = lpwc->style; wcex.lpfnWndProc = lpwc->lpfnWndProc; wcex.cbClsExtra = lpwc->cbClsExtra; wcex.cbWndExtra = lpwc->cbWndExtra; wcex.hInstance = lpwc->hInstance; wcex.hIcon = lpwc->hIcon; wcex.hCursor = lpwc->hCursor; wcex.hbrBackground = lpwc->hbrBackground; wcex.lpszMenuName = lpwc->lpszMenuName; wcex.lpszClassName = lpwc->lpszClassName;
// Added elements for Windows 95. //............................... wcex.cbSize = sizeof(WNDCLASSEX); wcex.hIconSm = LoadImage(wcex.hInstance, lpwc->lpszClassName, IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR ); return RegisterClassEx( &wcex ); }
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch( uMsg ) { case WM_COMMAND : switch( LOWORD( wParam ) ) { case IDM_TEST : // Start the logoff procedure. //............................ if ( ExitWindowsEx( EWX_LOGOFF, 0 ) ) DestroyWindow( hWnd ); break;
case IDM_ABOUT : DialogBox( hInst, "AboutBox", hWnd, (DLGPROC)About ); break;
case IDM_EXIT : DestroyWindow( hWnd ); break; } break; case WM_QUERYENDSESSION : // Last chance to stop the log off from happening. // This is only sent in Windows NT, Windows 95 does // not send this to the application that called ExitWindows(). //............................................................ if ( MessageBox( hWnd, "Logoff Windows?", lpszAppName, MB_YESNO | MB_ICONQUESTION ) == IDYES ) { return( TRUE ); } break;
case WM_DESTROY : PostQuitMessage(0); break;
default : return( DefWindowProc( hWnd, uMsg, wParam, lParam ) ); }
return( 0L ); }
LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: return (TRUE);
case WM_COMMAND: if ( LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, TRUE); return (TRUE); } break; }
return (FALSE); }
|
Die zugehörige .h-Datei:
C++: |
#define IDM_EXIT 100 #define IDM_TEST 200 #define IDM_ABOUT 301
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK About (HWND, UINT, WPARAM, LPARAM);
|
Hat da jemand 'ne Idee?
Hans -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. |