Du bist nicht angemeldet.

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

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

1

14.12.2005, 20:44

Wie macht man ein Programm dass das WinXP einfriert?

Ich möchte gerne ein Programm schreiben, welches mir z.B. alle 45Min mein WinXP für eine gewissen Zeitspanne komplett sperrt (So wie Ubuntu [Linuxdistribution] das macht).
Der Grund dafür ist, dass ich Stundenlang ohne Pause am Computer sitze und mich dann am Abend über brennende Augen und sonstige physiche Schäden freuen darf.
Weiß einer von euch, wie man soetwas realisieren könnte, bzw. wenn nicht, ob es irgendwo so ein Programm zum Download gibt?

mfg Philipp

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

14.12.2005, 21:25

Das Problem ist, wenn man schon nicht von selbst sowas macht, dann umgeht man sowas ganz einfach. Wenn du nur einen Zeitgeber brauchst stell dir nen Wecker :P
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Anonymous

unregistriert

3

14.12.2005, 21:37

Nun, XP sperren ist relativ "komplex", da man die Hauptkontrollen von Windows sogut wie gar nicht deaktivieren kann z.B. TaskManager, ServiceManager, usw.

Du kannst mit "hooks" die Windowstasten abfragen um darauf entsprechend reagieren zu können, in der MSDN findest Du da sicherlich tonnenweise Infos.

Am einfachsten ist Du testest ab Wann das OS gestartet wurde indem Du das Programm startest und nach 45 Min schaltet sich das OS ab und der PC fährt runter (Wenn schon, dann richtig!)

Das Programm stopfst Du in den Autostart (oder schreibst nen Service) und stellst ihn auf 45 Minuten. Wenn die Erreicht sind kann eine Abfrage gestellt werden ob der PC ausgemacht werden soll, wenn nicht: Zeige ein Fenster an, das alles überlappt im Vordergrund und die Windowstasten speert per Hooks.

Wie das mit dem Timer geht, siehe hier:

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; 
}
Du solltest in der lage sein das entsprechend anzupassen ;)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

14.12.2005, 21:40

hmmkay "shutdown -s -t TimeInSec" mit Adminrechten reicht glaube ich aus ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

5

14.12.2005, 21:53

Der PC soll auf keinen Fall runterfahren.
Es soll lediglich wirklich der Schirm eingefroren werden.
Anscheinend kennt keiner von euch Ubuntu :o
Die haben das wirklich genial gelöst.
Nach einer festgelegten Arbeitszeit wird das System für eine festgelegte Pause gesperrt.
Man kann über einen Button das System für eine Minute wieder freigeben (die einzige Möglichkeit, die Sperre zu umgehen - um wichtige Daten zu sichern etc.) jedoch wird das System nach dieser Minute wieder gesperrt, das wird so lange gemacht, bis man das System zum ersten mal die ganze Pause lang "in Ruhe lässt" erst dann, kann das System wieder für die festgelegte Arbeitszeit genutzt werden.
Gibt es wirklich keine Möglichkeit sowas zu machen?

mfg Philipp

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

14.12.2005, 21:59

ganz ehrlich, ich sehe da wenig Sinnhaftigkeit für, solange man in der Lage ist sein Handeln auch nur ein wenig zu beherrschen...
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

7

14.12.2005, 22:36

Zitat von »"Nox"«

ganz ehrlich, ich sehe da wenig Sinnhaftigkeit für, solange man in der Lage ist sein Handeln auch nur ein wenig zu beherrschen...

Diese Mitteilung hilft mir nicht besonders ;)

Aber anscheinend gibt es neben mir auch noch andere Leute, die soetwas sehr wohl für Sinnhaft ansehen, ansonsten wäre diese Funktion nicht Bestandteil eines OS.
Auch viele in meinem Freundeskreis finden dass die Funktion genial ist, da man meistens meint, diese eine Funkton mach ich noch schnell und das noch schnell, und siehe da, man hat plötzlich schon wieder 3 Studen ohne richtige Pause geprogt...

Ich wollte nur wissen ob einer von euch weiß, wie man soetwas implementieren kann, wenn nicht ist es auch in Ordnung, aber dann lasst bitte diese unnötigen Kommentare

mfg Philipp

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

8

14.12.2005, 22:54

ENDLOSSCHLEIFE:
friert zwar nicht ein, nervt aber ^^

C-/C++-Quelltext

1
while(1);

CW_Kovok

Alter Hase

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

9

14.12.2005, 23:02

oder benutzerabmelden und beim hochfahren direkt wieder eine automatische benutzerabmeldung

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

10

15.12.2005, 00:31

Was mir derzeit im Kopf rumschwebt, ist eine Vollbild D3D-Applikation, die alle Sondertastenkombinationen (Alt-Tab, Alt-F4, Strg-Alt-Entf etc.) abfängt, und somit es dem User unmöglich macht, aus dieser Applikation wieder raus zu kommen.
Das müsste doch möglich sein, da ich glaube, mich erinnern zu können, Spiele gespielt zu haben, bei denen alle Möglichen Keykombinationen gar nichts bewirkt haben?

mfg Philipp

Werbeanzeige