Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Anonymous
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
// ########################################################################### // Datei: main.cpp // ########################################################################### // Autor: Patrick Ullmann // Erstellt: 21.02.2005 // Änderungen: 21.02.2005 (Patrick) Datei erstellt // ########################################################################### // Beschreibung: Hauptdatei // I N C L U D E S ########################################################### #include <windows.h> // D E F I N I T I O N E N ################################################### const unsigned int TIMER_ID_1 = 0; // F U N K T I O N E N ####################################################### // Testet ob die maus bewegt wurde zwischen 2 Funktionsaufrufen inline bool cursormoved (void) { // Statische Objekte für die Positionen! static ::POINT pos_old; static ::POINT pos_curr; // Momentane Position holen ::GetCursorPos (&pos_curr); // Vergleichen und ggf. 'false' zurück geben if (pos_old.x == pos_curr.x && pos_old.y && pos_curr.y) return (false); // Aus neu mach alt, so ist das halt im Leben! pos_old.x = pos_curr.x; pos_old.y = pos_curr.y; // Maus wurde bewegt ;) return (true); } // Einsprungspunkt des Programmes int __stdcall WinMain (HINSTANCE__* instance, HINSTANCE__* prevInstance, char* command, int show) { // Nachrichtenstruktur ::MSG message; // Struktur nullen ::ZeroMemory (&message, sizeof(::MSG)); // Timer 'TIMER_ID_1' auf 2.000 Millisekunden stellen ::SetTimer (NULL, TIMER_ID_1, 2000, NULL); // Nachrichten holen und evtl. Fehler kompensieren while ((::GetMessage(&message, NULL, NULL, NULL) != 0) && (::GetMessage(&message, NULL, NULL, NULL) != -1)) { // Ist die Message der Timer? ACHTUNG: Hier wird die // Fensternachricht benutzt obwohl kein Fenster vorhanden ist! // Da es kein HWND gibt, wird der globale WindowsTimer benutzt // und dem Programm zur Verfügung gestellt. if (message.message == WM_TIMER) { // Wurde der Mauscursor seit der letzten Nachricht vor 2.000 // Millisekunden nicht mehr bewegt? if (!cursormoved()) { // Schöne message ausgeben! switch (::MessageBox (NULL, "Die Maus wurde seit 2.000 Millisekunden nicht mehr bewegt!\n" "Möchten Sie Windows runterfahren um Energie zu sparen?\n\n" "Denn Ihre letzte RWE-Rechnung war extrem hoch!", "Hinweis", MB_YESNOCANCEL)) { // Wenn 'JA' gedrückt wurde, geben wir einen schönen Text aus und beenden // das Programm! Hier kannst Du dann Deine ShutDown-Funktion einbauen. case IDYES: { ::MessageBox (0, "fahre runter!", "Hinweis", MB_OK); return 0; } break; // Wenn 'NEIN' gedrückt wurde beenden wir das Programm ganz einfach ohne // 'wenn und aber'. case IDNO: { return 0; } break; // Alles andere interessiert den Verlauf des Programmes nicht! // Das Programm soll weiterlaufen. default : break; } } } // Übersetze die Virtuellen Key-Codes und verarbeite diese ::TranslateMessage(&message); ::DispatchMessage(&message); } // Nicht vergessen: TIMER zerstören! ::KillTimer (NULL, TIMER_ID_1); // Hier nix mit 'EXIT_SUCCESS'! Eine 0 soll her und kein // #define, zum Xten male! ;) return 0; } |