You are not logged in.

  • Login

1

Tuesday, July 14th 2009, 12:55am

MessageBox vor beenden der konsole

halli hallo :)
ist es möglich, das ich vor beenden meiner konsole (sei es durch den taskmanager oder durch den X button) eine nachfrage bekomme, ob ich wirklich beenden will?
ich hab mich schon mit Windows Application auseinander gesetzt, doch leider blick ich da nicht durch, zb wo mein eigener code hinkommt usw. (bin ex-vbler) ~.~
danke für die antworten

2

Tuesday, July 14th 2009, 10:11am

Also es ist schon ewig her, dass ich WinAPI gemacht habe, aber ich glaube es ging so: Beim beenden durch den X-Button, oder das "Programm beenden" im Taskmanager schickt dir eine WM_QUIT oder WM_CLOSE. Beim beenden durch Herunterfahren bekommst du mindestens eine der beiden folgenden messages: WM_ENDSESSION & WM_QUERYENDSESSION. Die musst du in deiner WindowProc entsprechend verarbeiten und dort den MessageDlg anzeigen.

3

Tuesday, July 14th 2009, 11:04am

danke :) allerdings weiß ich nicht, wie ich das abfrage, wenn mein programm beendet wird ..,.
hast du auch ne idee zu meiner zweiten frage, wo ich meinen code hinpacke in einer windows application?
und wie is das wenn ich in einem projekt mehrere *.cpp files haben möchte, sozusagen einzelne module, wie kann ich die aufrufen?

This post has been edited 1 times, last edit by "DerCoder" (Jul 14th 2009, 11:17am)


4

Tuesday, July 14th 2009, 12:56pm

Ich würde dir das durcharbeiten eines Tutorials empfehlen.

5

Tuesday, July 14th 2009, 4:20pm

ich hasse englisch ^^ aber egal
danke :)

6

Tuesday, July 14th 2009, 9:09pm

oaky ich hab mich ein bisschen durchgearbeitet, aber gibt das WM_CLOSE auch für die console, also wenn die konsole beendet wird (egal ob taskmanager oder shutdown)

7

Thursday, July 16th 2009, 9:44pm

Konsolenprogramme können keine FENSTERnachrichten (WindowMessages) bekommen. Es gibt auch nur zwei Möglichkeiten, wie ein Konsolenprogramm endet: Entweder es endet weil du es so programmiert hast (dann weißt du es eh, egal ob du eine Nachricht bekommst) oder es wird im TaskManager "abgeschossen". Dagegen kannst du nichts machen, auch keine Popups. Dein Programm ist dann einfach zuende.

8

Friday, July 17th 2009, 4:16pm

wie macht das dann vb? da funktioniert das schließlich

9

Friday, July 17th 2009, 6:56pm

Beschreib mal genau was da wie funktioniert und welche Nachricht kommt?

10

Saturday, July 18th 2009, 6:56am

also, das programm läuft in einer while schleife
wenn das programm beendet wird, soll noch eine email versandt werden
so wie es jetzt läuft, kommt, wenn das programm geschlossen wird, kommt, ne meldung, dass das programm
nicht mehr antwortet und entweder sofort beendet werden muss oder das beenden abgebrochen wird.

11

Saturday, July 18th 2009, 8:49am


so wie es jetzt läuft, kommt, wenn das programm geschlossen wird, kommt, ne meldung, dass das programm
nicht mehr antwortet und entweder sofort beendet werden muss oder das beenden abgebrochen wird.


Das klingt mir eher nach einem Bug als nach einem Feature.

12

Saturday, July 18th 2009, 9:20am

hmm okay.
ich poste einfach mal den code

Source code

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
#include <stdio.h>
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;

bool closing = false;
CRITICAL_SECTION cs;
string stri;
int i;

BOOL WINAPI consolehandler(DWORD _event)
{
 switch(_event) {
 case CTRL_C_EVENT:
  break;
 case CTRL_BREAK_EVENT:
  break;
 case CTRL_CLOSE_EVENT:
  EnterCriticalSection(&cs);
  closing = true;
 LeaveCriticalSection(&cs);
  break;
 case CTRL_LOGOFF_EVENT:
  break;
 case CTRL_SHUTDOWN_EVENT:
  break;
 }
 return TRUE;
} 
int main() {
 SetConsoleCtrlHandler((PHANDLER_ROUTINE)consolehandler, 1);
 InitializeCriticalSection(&cs);
 bool t_closing;
 while (1)
 {
  i++;
  cout << i;
  /* Programmende Event***************** */
  EnterCriticalSection(&cs);
  t_closing = closing;
  LeaveCriticalSection(&cs);
  if (t_closing) break;
  Sleep(5);
 }
 MessageBox(HWND_DESKTOP, "Das Programm wird beendet", MB_OK, MB_ICONQUESTION);
 return 0;
}

13

Saturday, July 18th 2009, 5:00pm

ah okay bin zu blöd...
ich progge jetzt mit winapi, da bin ich richtig ;)

14

Sunday, July 19th 2009, 10:25am

also, das programm läuft in einer while schleife
wenn das programm beendet wird, soll noch eine email versandt werden
so wie es jetzt läuft, kommt, wenn das programm geschlossen wird, kommt, ne meldung, dass das programm
nicht mehr antwortet und entweder sofort beendet werden muss oder das beenden abgebrochen wird.


Die Nachricht kommt nicht von deinem Programm, sondern von Windows. Den Inhalt kannst du auch nicht beeinfussen. Das passiert wenn Anwendungen nicht auf Nachrichten Antworten - bei Konsolenanwendungen halt immer wenn sie sich nicht selber beenden oder jemand sie abschießt - da dort keine Nachrichten verarbeitet werden und sie niemals auf Nachrichten antworten.

Similar threads

Social bookmarks