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

1

08.07.2007, 22:31

Er möchte nicht herunterfahren

Zitat

"Ich hoffe die Überschrift passt soweit" :D


Nun, ich programmier gerade als Übung ein kleines Windows Programm, mit dessen Hilfe man seinen PC zeitbasierend herunterfahren kann.

Nun habe ich schön "system ("shutdown t XXX") mit eingebungen (die X`e stehen dabei für die gewünschte Zeit) um das Herunterfahren des PC zu ermöglichen. Das Problem ist nur, das er nicht herunterfahren möchte. Ich erhalte immer die Nachricht im Konsolenfenster (vom PC) das dies nicht möglich sein weil : "Lange Liste" <-soll heißen, mir werden sehr viele Hinweisen gegeben weshalb er nicht herunterfahren möchte.
Ich hoffe ihr könnt mir weiterhelfen!?

Update: "Da ich Doppelpost vermeiden möchte hänge ich die neue Nachricht an meine Alte an"


Hier der Quelltext zur Übung:

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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
#include <windows.h>

// Funktionsprototypen

//

// Liefert das Handle auf das Hauptfenster 

HWND ErstelleHauptfenster   (HINSTANCE hInst); 

// Erstellt die Steuerelemente (Procedure)

void ErstelleChilds         (HINSTANCE hINst, HWND hWnd);

// Wertet die Nachrichten aus

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam);

// Die Identifier der Child-Fenster

#define  ID_LABEL       102
#define  ID_BEENDEN     103
#define  ID_MINUTE1     104
#define  ID_MINUTE2     105
#define  ID_MINUTE3     106
#define  ID_MINUTE4     107


// Handle der Steuerelemente

HWND hLabel;       // Handle für das Label

HWND hMinuten1;     // Handle für Minute1

HWND hMinuten2;     // Handle für Minute2

HWND hMinuten3;     // Handle für Minute3

HWND hMinuten4;     // Handle für Minute4

HWND hBeenden;     // Hanlde für Button "Beenden"



// Hauptfunktion

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE a,
                    LPSTR lpstr, int b)
{
    HWND hWnd;    // Handle auf das Fenster

    MSG message;  // Nachricht


    // Aufruf der Funktion "ErstelleHauptfenster"

    hWnd = ErstelleHauptfenster (hInst);

    // Alle Steuerelemente erstellen

    ErstelleChilds (hInst, hWnd);

    // Das Herz der Funktion

    // die while-Schleife zum abholen und

    // weiterreichen der Nachrichten

    while (GetMessage (&message, NULL, 0, 0))
    {
        TranslateMessage (&message);
        DispatchMessage (&message);
    }

    // Das Programm Beenden

    //

    return (int) (message.wParam);
} // WinMain


// Erstelle Childs

//

// Steuerelemente Erstellen 

//

void ErstelleChilds (HINSTANCE hInst, HWND hWnd)
{
    // Erstellung vom Label

    hLabel= CreateWindow ("STATIC",
                          "Zeit bis zum Herunterfahren",
                          WS_CHILD | WS_VISIBLE | ES_CENTER,
                          0, 5,
                          235, 20,
                          hWnd,
                          (HMENU) ID_LABEL,
                          hInst,
                          NULL);


    // Erstellung von "Beenden" Button

    hBeenden = CreateWindow ("BUTTON",
                             "Beenden",
                             WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                             125, 50,
                             95, 40,
                             hWnd,
                             (HMENU) ID_BEENDEN,
                             hInst,
                             NULL);

    // Erstellung von "Übernehmen" Button

    hMinuten1 = CreateWindow     ("BUTTON",
                                 "2.5 Minuten",
                                 WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                                 0, 50,
                                 95, 40,
                                 hWnd,
                                 (HMENU) ID_MINUTE1,
                                 hInst,
                                 NULL);
// Erstellung von "Übernehmen" Button

    hMinuten2 = CreateWindow     ("BUTTON",
                                 "5 Minuten",
                                 WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                                 0, 100,
                                 95, 40,
                                 hWnd,
                                 (HMENU) ID_MINUTE2,
                                 hInst,
                                 NULL);
// Erstellung von "Übernehmen" Button

    hMinuten3 = CreateWindow     ("BUTTON",
                                 "7.5 Minuten",
                                 WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                                 0, 150,
                                 95, 40,
                                 hWnd,
                                 (HMENU) ID_MINUTE3,
                                 hInst,
                                 NULL);
// Erstellung von "Übernehmen" Button

    hMinuten4 = CreateWindow     ("BUTTON",
                                 "10 Minuten",
                                 WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                                 0, 200,
                                 95, 40,
                                 hWnd,
                                 (HMENU) ID_MINUTE4,
                                 hInst,
                                 NULL);
}// ErstelleChilds


// ErstelleHauptfenster

// 

// Erstellt Hauptfenster und liefert ein Handle zurück

//

HWND ErstelleHauptfenster (HINSTANCE hInst)
{
    WNDCLASSEX windowclass;  // Fensterklasse

    HWND hWnd;               // Fenster-Handle


    // Name der Fensterklasse

    const char windowname[] = "Shutdown";

    // Größe der Struktur zwischenspeichern

    windowclass.cbSize = sizeof (WNDCLASSEX);

    // Fenster beim verschieben neu zeichnen

    windowclass.style = CS_HREDRAW | CS_VREDRAW;

    // Zeiger auf eigenen Callback-Funktion

    windowclass.lpfnWndProc = WindowProc;

    // Es muss kein Speicher reserviert werden

    windowclass.cbClsExtra = NULL;
    windowclass.cbWndExtra = NULL;

    // Ein Menue brauchen wir nicht

    windowclass.lpszMenuName = NULL;

    // Name der Klasse festlegen

    windowclass.lpszClassName = windowname;

    // Icons und Cursor festlegen

    windowclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    windowclass.hCursor = LoadCursor (NULL, IDI_HAND);

    // Farbe für den Hintergrund festlegen

    windowclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND+7;

    // Instanz zwischenspeichern

    windowclass.hInstance = hInst;

    // Fensterklasse bei Windows registirieren

    if (!RegisterClassEx (&windowclass))
        return (0);

    // Fenster erzeugen

    hWnd = CreateWindowEx (NULL,
                           windowname,
                           "Shutdown",
                           WS_VISIBLE | WS_OVERLAPPEDWINDOW,
                           CW_USEDEFAULT, CW_USEDEFAULT,
                           235, 275,
                           NULL,
                           NULL,
                           hInst,
                           NULL);

    // Fensterhandle zurückgeben

    return (hWnd);
} // ErstelleHauptfenster


// Callback-Funktion zur Nachrichtenverarbeitung

//

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam)
{
    // Message auswerten

    switch (message)
    {
        // Fenster schließen ?

    case (WM_DESTROY):
        {
            PostQuitMessage (0);
            return (0);
        }

        // Ab hier werden Child-Fenster Nachrichten behandelt

    case (WM_COMMAND):
        {
            switch (wParam)
            {
                // Wurde "Übernehmen" angeklickt?

            case ID_MINUTE1:
                {
                    system ("shutdown /t 150");
    

                    return (0);
                }
            
            case ID_MINUTE2:
                {
                    system ("shutdown /t 300");
    

                    return (0);
                }
            
            case ID_MINUTE3:
                {
                    system ("shutdown /t 450");
    

                    return (0);
                }
            
            case ID_MINUTE4:
                {
                    system ("shutdown /t 600");
    

                    return (0);
                }
                // Wurde "Beenden" angeklickt?

            case ID_BEENDEN:
                {
                    int Result; // Rückgabewert der Messagebox


                    // Messagebox für Sicherheitsabfrage

                    Result = MessageBox (hWnd, "Wirklich Beenden?",
                                         "Programm beenden",
                                         MB_YESNO | MB_ICONQUESTION);

                    // Wurde "Ja" angeklickt?

                    if (Result == IDYES)
                    {
                        PostQuitMessage (0);
                        return (0);
                    }

                    // Wurde "Nein" angeklickt?

                    return (0);
                }
            }break;
        }break;
    }

    // Die Nachricht wurde nicht von uns verarbeitet, also

    // von Windows verarbeiten lassen

    return (DefWindowProc (hWnd, message, wParam, lParam));
} // WindowProc
"Wenn es keine Milch gäbe, würde ich auf Kaffee verzichten."

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

2

08.07.2007, 23:53

machs doch direkt und nicht über irgendwelche CMD Umwege

=>ExitWindows(), ExitWindowsEx()
(für Details siehe MSDN)

3

09.07.2007, 00:18

Danke, ich probiers gleich mal aus :D :D :D

Update: Er beendet zwar die Anwendungen, aber er meldet mich lediglich nur ab, und bootet auch gleich im Anschluss wieder.

Update: Problem gelöst :D :D

Update: Ich habe zwar nun alle Funktion richtig eingebunden, aber außer ExitWindow (), das lediglich eine Abmeldung bewirkt, funktioniert nichts. Vielleicht könnte mir jemand helfen?


//

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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
#include <windows.h>

// Funktionsprototypen

//

// Liefert das Handle auf das Hauptfenster zurück

HWND ErstelleHauptfenster   (HINSTANCE hInst); 

// Erstellt die Steuerelemente (Procedure)

void ErstelleChilds         (HINSTANCE hINst, HWND hWnd);

// Wertet die Nachrichten aus

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam);

// Die Identifier der Child-Fenster

#define  ID_LABEL       102
#define  ID_BEENDEN     103
#define  ID_CLOSE1     104
#define  ID_CLOSE2     105
#define  ID_CLOSE3     106
#define  ID_CLOSE4     107


// Handle der Steuerelemente

HWND hLabel;       // Handle für das Label

HWND hClose1;      // Handle für Minute1

HWND hClose2;      // Handle für Minute2

HWND hClose3;      // Handle für Minute3

HWND hClose4;      // Handle für Minute4

HWND hBeenden;     // Hanlde für Button "Beenden"



// Hauptfunktion

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE a,
                    LPSTR lpstr, int b)
{
    HWND hWnd;    // Handle auf das Fenster

    MSG message;  // Nachricht


    // Aufruf der Funktion "ErstelleHauptfenster"

    hWnd = ErstelleHauptfenster (hInst);

    // Alle Steuerelemente erstellen

    ErstelleChilds (hInst, hWnd);

    // Das Herz der Funktion

    // die while-Schleife zum abholen und

    // weiterreichen der Nachrichten

    while (GetMessage (&message, NULL, 0, 0))
    {
        TranslateMessage (&message);
        DispatchMessage (&message);
    }

    // Das Programm Beenden

    //

    return (int) (message.wParam);
} // WinMain


// Erstelle Childs

//

// Steuerelemente Erstellen 

//

void ErstelleChilds (HINSTANCE hInst, HWND hWnd)
{
    // Erstellung vom Label

    hLabel= CreateWindow ("STATIC",
                          "Systembefehle",
                          WS_CHILD | WS_VISIBLE | ES_CENTER | WS_BORDER,
                          0, 5,
                          235, 20,
                          hWnd,
                          (HMENU) ID_LABEL,
                          hInst,
                          NULL);


    // Erstellung von "Beenden" Button

    hBeenden = CreateWindow ("BUTTON",
                             "Beenden",
                             WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                             120, 50,
                             100, 40,
                             hWnd,
                             (HMENU) ID_BEENDEN,
                             hInst,
                             NULL);

    // Erstellung von "Übernehmen" Button

    hClose1 = CreateWindow ("BUTTON",
                            "Abmelden",
                            WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                            0, 50,
                            100, 40,
                            hWnd,
                            (HMENU) ID_CLOSE1,
                            hInst,
                            NULL);
// Erstellung von "Übernehmen" Button

    hClose2 = CreateWindow ("BUTTON",
                            "Herunterfahren",
                            WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                            0, 100,
                            100, 40,
                            hWnd,
                            (HMENU) ID_CLOSE2,
                            hInst,
                            NULL);
// Erstellung von "Übernehmen" Button

    hClose3 = CreateWindow ("BUTTON",
                            "Neustart",
                            WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                            0, 150,
                            100, 40,
                            hWnd,
                            (HMENU) ID_CLOSE3,
                            hInst,
                            NULL);
// Erstellung von "Übernehmen" Button

    hClose4 = CreateWindow ("BUTTON",
                            "Alles aus",
                            WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                            0, 200,
                            100, 40,
                            hWnd,
                            (HMENU) ID_CLOSE4,
                            hInst,
                            NULL);
}// ErstelleChilds


// ErstelleHauptfenster

// 

// Erstellt Hauptfenster und liefert ein Handle zurück

//

HWND ErstelleHauptfenster (HINSTANCE hInst)
{
    WNDCLASSEX windowclass;  // Fensterklasse

    HWND hWnd;               // Fenster-Handle


    // Name der Fensterklasse

    const char windowname[] = "Shutdown";

    // Größe der Struktur zwischenspeichern

    windowclass.cbSize = sizeof (WNDCLASSEX);

    // Fenster beim verschieben neu zeichnen

    windowclass.style = CS_HREDRAW | CS_VREDRAW;

    // Zeiger auf eigenen Callback-Funktion

    windowclass.lpfnWndProc = WindowProc;

    // Es muss kein Speicher reserviert werden

    windowclass.cbClsExtra = NULL;
    windowclass.cbWndExtra = NULL;

    // Ein Menue brauchen wir nicht

    windowclass.lpszMenuName = NULL;

    // Name der Klasse festlegen

    windowclass.lpszClassName = windowname;

    // Icons und Cursor festlegen

    windowclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    windowclass.hCursor = LoadCursor (NULL, IDI_HAND);

    // Farbe für den Hintergrund festlegen

    windowclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND+7;

    // Instanz zwischenspeichern

    windowclass.hInstance = hInst;

    // Fensterklasse bei Windows registirieren

    if (!RegisterClassEx (&windowclass))
        return (0);

    // Fenster erzeugen

    hWnd = CreateWindowEx (NULL,
                           windowname,
                           "Shutdown",
                           WS_VISIBLE | WS_OVERLAPPEDWINDOW,
                           CW_USEDEFAULT, CW_USEDEFAULT,
                           235, 275,
                           NULL,
                           NULL,
                           hInst,
                           NULL);

    // Fensterhandle zurückgeben

    return (hWnd);
} // ErstelleHauptfenster


// Callback-Funktion zur Nachrichtenverarbeitung

//

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam)
{
    // Message auswerten

    switch (message)
    {
        // Fenster schließen ?

    case (WM_DESTROY):
        {
            PostQuitMessage (0);
            return (0);
        }

        // Ab hier werden Child-Fenster Nachrichten behandelt

    case (WM_COMMAND):
        {
            switch (wParam)
            {
                // Wurde "Übernehmen" angeklickt?

            case ID_CLOSE1:
                {
                    ExitWindows();
                    return (0);
                    
                }
            
            case ID_CLOSE2:
                {
                    ExitWindowsEx (EWX_SHUTDOWN | SHTDN_REASON_FLAG_PLANNED, 0);
                    return (0);
                    
                }
            
            case ID_CLOSE3:
                {
                    ExitWindowsEx (EWX_REBOOT | SHTDN_REASON_FLAG_PLANNED, 0);
                    return (0);
                }
            
            case ID_CLOSE4:
                {
                    ExitWindowsEx (EWX_POWEROFF | SHTDN_REASON_FLAG_PLANNED, 0);
                    return (0);
                }
                // Wurde "Beenden" angeklickt?

            case ID_BEENDEN:
                {
                    int Result; // Rückgabewert der Messagebox


                    // Messagebox für Sicherheitsabfrage

                    Result = MessageBox (hWnd, "Wirklich Beenden?",
                                         "Programm beenden",
                                         MB_YESNO | MB_ICONQUESTION);

                    // Wurde "Ja" angeklickt?

                    if (Result == IDYES)
                    {
                        PostQuitMessage (0);
                        return (0);
                    }

                    // Wurde "Nein" angeklickt?

                    return (0);
                }
            }break;
        }break;
    }

    // Die Nachricht wurde nicht von uns verarbeitet, also

    // von Windows verarbeiten lassen

    return (DefWindowProc (hWnd, message, wParam, lParam));
} // WindowProc
"Wenn es keine Milch gäbe, würde ich auf Kaffee verzichten."

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

4

30.07.2007, 12:48

versuch mal die funktion Shutdown(ich glaube so hiess sie und vergess deisen ganzen system kack


Socke

EDIT
Korrektur...

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

30.07.2007, 13:37

Bei WinNT muss das Privileg SE_SHUTDOWN_NAME aktiviert werden.
@D13_Dreinig

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

30.07.2007, 15:39

http://www.c-plusplus.de/forum/viewtopic-var-t-is-184753-and-highlight-is-.html

7

04.08.2007, 22:21

so ... erstmal deinen Code aufräumen:

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
98
#include <windows.h>

bool create_window_main(HINSTANCE, HWND);
bool create_window_child(HINSTANCE, HWND);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

#define  IDC_LB_SYSTEMCTRL  141
#define  IDC_BTN_CLOSE      151
#define  IDC_BTN_LOG_OFF    152
#define  IDC_BTN_SHUTDOWN   153
#define  IDC_BTN_RESTART    154


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
    HWND hWndParent;
    if (create_window_main(hInstance, hWndParent) == false || create_window_child(hInstance, hWndParent) == false)
        MessageBoxA(NULL, "Das Programm konnte nicht gestartet werden!", NULL, 0);

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return static_cast<int>(msg.wParam);
}

bool create_window_child(HINSTANCE hInstance, HWND hWndParent)
{
    return (CreateWindowA("STATIC", "Systembefehle", WS_CHILD | WS_VISIBLE | ES_CENTER | WS_BORDER, 0, 5, 235, 20, hWndParent, static_cast<HMENU>(IDC_LABEL), hInstance, NULL) == NULL ||
        CreateWindowA("BUTTON", "Beenden", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 120, 50, 100, 40, hWndParent, static_cast<HMENU>(IDC_BTN_CLOSE), hInstance, NULL) == NULL ||
        CreateWindowA("BUTTON", "Abmelden", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 0, 50, 100, 40, hWndParent, static_cast<HMENU>(IDC_BTN_LOG_OFF), hInstance, NULL) == NULL ||
        CreateWindowA("BUTTON", "Herunterfahren", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 0, 100, 100, 40, hWndParent, static_cast<HMENU>(IDC_BTN_SHUTDOWN), hInstance, NULL) == NULL ||
        CreateWindowA("BUTTON", "Neustart", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 0, 150, 100, 40, hWndParent, static_cast<HMENU>(IDC_BTN_RESTART), hInstance, NULL) == NULL) ? false : true;
}

bool create_window_main(HINSTANCE hInstance, HWND hWnd)
{
    WNDCLASSEXA wcex;
    wcex.cbSize         = sizeof (WNDCLASSEXA);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = wcex.cbWndExtra = wcex.lpszMenuName = NULL;
    wcex.lpszClassName  = "ShutdownWnd";
    wcex.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
    wcex.hIconSm        = LoadIcon(NULL, IDI_APPLICATION); // LoadImage!

    wcex.hCursor        = LoadCursor(NULL, IDI_HAND);
    wcex.hbrBackground  = reinterpret_cast<HBRUSH>(COLOR_BACKGROUND + 7);
    wcex.hInstance      = hInstance;

    if (RegisterClassExA(&wcex) == 0)
        return false;

    hWnd = CreateWindowExA(NULL, "ShutdownWnd", "Shutdown", WS_VISIBLE | WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 235, 275, NULL, NULL, hInstance, NULL);

    return hWnd != NULL;
}

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_DESTROY:
        {
            PostQuitMessage(0);
        } break;
        case WM_COMMAND:
        {
            switch (wParam)
            {
                case IDC_BTN_LOG_OFF:
                {
                    ExitWindows();
                } break;
                case IDC_BTN_SHUTDOWN:
                {
                    ExitWindowsEx(EWX_SHUTDOWN | SHTDN_REASON_FLAG_PLANNED, 0);
                } break;
                case IDC_BTN_RESTART:
                {
                    ExitWindowsEx(EWX_REBOOT | SHTDN_REASON_FLAG_PLANNED, 0);
                } break;
                case IDC_BTN_CLOSE:
                {
                    if (MessageBoxA(hWnd, "Programm wirklich beenden?", "Shutdown", MB_YESNO | MB_ICONQUESTION) == IDYES)
                        PostQuitMessage(0);
                } break;
            }
        }break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }

    return 0;
}
... ist nicht kontrolliert ...

aja und wegen der rights ...

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
bool MySystemShutdown(void)
{
    ::HANDLE hToken;
    ::_TOKEN_PRIVILEGES tkp;
 
    if(!::OpenProcessToken(::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
        return false;

    ::LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
 
    tkp.PrivilegeCount            = 1;
    tkp.Privileges[0].Attributes  = SE_PRIVILEGE_ENABLED;
 
    ::AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
 
    if(::GetLastError() != ERROR_SUCCESS)
        return false;
 
    if(!::ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_FLAG_PLANNED))
        return false;

    return true;
}  
... ist aber nen älterer code von mir ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

05.08.2007, 09:05

C-/C++-Quelltext

1
2
3
4
5
6
7
8
bool create_window_child(HINSTANCE hInstance, HWND hWndParent) 
{ 
    return (CreateWindowA("STATIC", "Systembefehle", WS_CHILD | WS_VISIBLE | ES_CENTER | WS_BORDER, 0, 5, 235, 20, hWndParent, static_cast<HMENU>(IDC_LABEL), hInstance, NULL) == NULL || 
        CreateWindowA("BUTTON", "Beenden", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 120, 50, 100, 40, hWndParent, static_cast<HMENU>(IDC_BTN_CLOSE), hInstance, NULL) == NULL || 
        CreateWindowA("BUTTON", "Abmelden", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 0, 50, 100, 40, hWndParent, static_cast<HMENU>(IDC_BTN_LOG_OFF), hInstance, NULL) == NULL || 
        CreateWindowA("BUTTON", "Herunterfahren", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 0, 100, 100, 40, hWndParent, static_cast<HMENU>(IDC_BTN_SHUTDOWN), hInstance, NULL) == NULL || 
        CreateWindowA("BUTTON", "Neustart", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 0, 150, 100, 40, hWndParent, static_cast<HMENU>(IDC_BTN_RESTART), hInstance, NULL) == NULL) ? false : true; 
}


Das nennst du aufgeräumt! :-D Wenn dann bitte so (is trotzdem noch ziemlich grauenhaft):

C-/C++-Quelltext

1
2
3
4
5
6
7
bool create_window_child(HINSTANCE hInstance, HWND hWndParent) 
{ 
    return (CreateWindowA("STATIC", "Systembefehle", WS_CHILD | WS_VISIBLE | ES_CENTER | WS_BORDER, 0, 5, 235, 20, hWndParent, static_cast<HMENU>(IDC_LABEL), hInstance, NULL) &&
        CreateWindowA("BUTTON", "Beenden", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 120, 50, 100, 40, hWndParent, static_cast<HMENU>(IDC_BTN_CLOSE), hInstance, NULL) &&
        CreateWindowA("BUTTON", "Abmelden", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 0, 50, 100, 40, hWndParent, static_cast<HMENU>(IDC_BTN_LOG_OFF), hInstance, NULL) &&
        CreateWindowA("BUTTON", "Herunterfahren", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 0, 100, 100, 40, hWndParent, static_cast<HMENU>(IDC_BTN_SHUTDOWN), hInstance, NULL) &&         CreateWindowA("BUTTON", "Neustart", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 0, 150, 100, 40, hWndParent, static_cast<HMENU>(IDC_BTN_RESTART), hInstance, NULL) ); 
}


Das andre wirkt irgendwie leicht unprofessionell. Genau wie:

C-/C++-Quelltext

1
2
if ( true ) return true;
else return false;


Bei create_window_main reicht auch: return hWnd.
@D13_Dreinig

9

05.08.2007, 09:39

Herzliches Danke an euch.
:D :D
"Wenn es keine Milch gäbe, würde ich auf Kaffee verzichten."

Werbeanzeige