Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Prgramm verhindert herunterfahren (https://www.delphipraxis.net/92862-prgramm-verhindert-herunterfahren.html)

ghost007 27. Mai 2007 21:40


Prgramm verhindert herunterfahren
 
Hallo,
ich habe ein problem mit einem programm von mir.
Wenn man den PC herunterfahren will, muss man den heruterfarhen command (sprich start->herunterfahren->ausschalten) 2mal machen.
Ich hab festgestellt, das nach dem erstenmal, das programm, welches im tray mitläuft beendet wird, und erst beim 2ten mal windows heruntergefahren wird. Leider hab ich keine ahnung woran das leigen könnte. Was mach ich nun, damit mein programm nicht das herunterfahren behindert?

MfG - Ghost007

Matze 27. Mai 2007 21:41

Re: Prgramm verhindert herunterfahren
 
Hi,

reagierst du auf Messages, die das Herunterfahren betreffen oder hast du etwas im OnClose/OnCloseQuery, dass dafür verantwortlich sein könnte?

ghost007 27. Mai 2007 21:47

Re: Prgramm verhindert herunterfahren
 
nein, eben nicht :(

hab jetzt profisorisch was drinen.
wenn man herunterfährt, führt das proggi einfach nochmal einen heruterfahr command aus, aber das kanns ja net sein.
Außerdem wird auf dieseweise immer heruntergefahren, auch wenn man einen reboot will oder sich nur abmelden will.

MfG - Ghost007

Dezipaitor 28. Mai 2007 11:21

Re: Prgramm verhindert herunterfahren
 
hi

schau mal lieber, welche Komponenten du verwendest, dann machst du ein Backup vom Projekt. Danach entfernst du immer ein oder zwei Komponenten und testest das Programm beim Heruterfahren. Wenn du dann die Problemkomponente gefunden hast (z.b. TrayIcon Komponente), dann schreibst du das wieder hier :D

Daniel G 28. Mai 2007 11:27

Re: Prgramm verhindert herunterfahren
 
Zitat:

Zitat von ghost007
führt das proggi einfach nochmal einen heruterfahr command aus, aber das kanns ja net sein.

Nicht? Dann zeig mal etwas Code.. ;)

ghost007 28. Mai 2007 12:59

Re: Prgramm verhindert herunterfahren
 
Liste der Anhänge anzeigen (Anzahl: 1)
also,
ich denk das ich die komponente gefunden hab.
Es is die, die ich benutz um mit der Logitech G15 tastatur zu kommunizieren ... aber wie mach ich nun das die das herunterfahren nicht mehr behindert?

MfG - Ghost007

P.S.:Im Anhang die komponente.

Dezipaitor 28. Mai 2007 13:52

Re: Prgramm verhindert herunterfahren
 
wenn du quellcode hast, dann must du jetzt genau schauen, wo das problem liegt.
Wenn der Quellcode nicht dabei ist, dann solltest du mal die Komponente per Laufzeit im Quelltext erzeugen
und dort auch wieder zerstören, wenn das Prog beendet werden soll. Vielleicht funkz es ja dann.

Manchmal wird das herunterfahren verhindert (unter <= WinXP), wenn beim Beenden des Progs, eine Exception auftritt
und die Nachrichtenschleife dadurch nicht beendet wird. Diese Exception sollte man abfangen.

ghost007 28. Mai 2007 14:01

Re: Prgramm verhindert herunterfahren
 
öhm, ja. :gruebel:
wie zurlaufzeit erstellen ?!

MfG - Ghost007

Apollonius 28. Mai 2007 14:02

Re: Prgramm verhindert herunterfahren
 
zur Laufzeit erstellen

ghost007 28. Mai 2007 14:41

Re: Prgramm verhindert herunterfahren
 
hm, also ich hab nun mal die Komponente zur laufzeit erstellt und auch die properties gesetzt.
Im onClose ereigniss hab ich nun das destroyen der komponente drin.
Hattest du das gemeint?

MfG - Ghost007

[EDIT]
hab das nun so getestet, das proggi verhindert weiterhin das herunterfahren.
[/EDIT]

ghost007 29. Mai 2007 13:44

Re: Prgramm verhindert herunterfahren
 
*PUSH*

hoika 29. Mai 2007 13:51

Re: Prgramm verhindert herunterfahren
 
Hallo,

ja,

aber nimm OnDestroy statt OnClose
Dort sollte dann stehen

MyComponent.Free;


Heiko

Luckie 29. Mai 2007 14:02

Re: Prgramm verhindert herunterfahren
 
Eventuell liegt es daran: http://www.delphipraxis.net/internal...=728408#728408

ghost007 29. Mai 2007 14:24

Re: Prgramm verhindert herunterfahren
 
Zitat:

Zitat von hoika
Hallo,

ja,

aber nimm OnDestroy statt OnClose
Dort sollte dann stehen

MyComponent.Free;


Heiko

Hab ich schon ausprobiert ... :(
Das Problem ist, das wenn ich heruterfahren will, beim ersten versuch, alle programme beendet werden, wenn dann windows zu meine programm zum beenden kommt, wird es auch noch beendet, aber dann gehts nicht weiter, dann muss man nochmal herunterfahren drücken.

MfG - Ghost007

ah63 2. Jul 2007 19:58

Re: Prgramm verhindert herunterfahren
 
Hallo,

habe das gleiche Problem mit Programmen, die in der TNA liegen.
Das Herunterfahren wird durch das Ereignis WM_QUERYENDSESSION gemeldet.

Dieses Ereignis kann mit einer Botschaftsmethode abgefangen werden:
Code:
    procedure shutdownevent(var Msg:TWMQUERYENDSESSION); message WM_QUERYENDSESSION;

procedure TForm1.shutdownevent(var Msg:TWMQUERYENDSESSION);
begin
  Msg.Result:=1;
  close; // <= ohne dieses zusätzliche Schliessen ging es nicht
  Inherited;
end;
Laut Win32.hlp dürfte das Programm mit dem Rückgabewert 1 das Runterfahren nicht mehr blockieren,
tut es aber trotzdem, mit dem bekannten Resultat.
Erst ein zusätzliches close; löste das Problem.

ghost007 2. Jul 2007 21:43

Re: Prgramm verhindert herunterfahren
 
danke :) werde das gleich mal testen

MfG - Ghost007

ghost007 11. Nov 2007 19:00

Re: Prgramm verhindert herunterfahren
 
Hallo,
ich hatte das problem damals mit einem plugin gelöst. jetzt hab ich aber wieder ein programm, welches das herunterfahren verhindert.
Das mit dem abfangen der herhunterfahr msg geht ja wie oben beschreiben. Das Windows nicht herunterfährt liegt doch dran, das es von der anwendung kein "ok" zurückbekommt, das die alle ungesicherten daten gesichert hat, oder liege ich da falsch? Wenn ich richtig liegen, kann man das "ok" nich selber senden?

MfG - Ghost007

C.Schoch 11. Nov 2007 21:44

Re: Prgramm verhindert herunterfahren
 
Klar kann man das:
Delphi-Quellcode:
procedure WMQUERYENDSESSION(var msg : TMessage);
begin
msg.Result := Integer(true);
end;

procedure WMENDSESSION(var msg : TMessage);
begin
msg.Result := Integer(true);
end;
Ich weis nicht ob Delphi das Programm selbst schließt oder man dies händisch übernehmen muss, ich machs jedenfalls händisch

ghost007 11. Nov 2007 23:09

Re: Prgramm verhindert herunterfahren
 
danke,
werde das ma beim runterfahren jetzt dann testen ;)
meld mich morgen wieder ob es geklappt hat

MfG - Ghost007

ghost007 12. Nov 2007 23:13

Re: Prgramm verhindert herunterfahren
 
Also,
ich hab den code nu mal getestet und folgende beobatchung gemacht.
Das porgramm verschwindet zwar aus dem taskmanager. Jedoch wird das herunterfahren trotzdem verhindert und man muss nochmal auf herunterfahren klicken. Bevor ich den code eingefügt habe, ist das programm nichmal aus dem taskmanager verschwunden.

MfG - Ghost007

ghost007 13. Nov 2007 17:48

Re: Prgramm verhindert herunterfahren
 
*PUSH*

C.Schoch 13. Nov 2007 19:19

Re: Prgramm verhindert herunterfahren
 
Hi,
Dann bleibt dir IMHO nur noch das Ausschlussverfahren.
Kopie vom Projekt machen, und Komponente für Komponente aus dem Projekt entfernen bis der Übeltäter gefunden ist.

Eine weitere Idee wären noch aktive Threads.

ghost007 29. Nov 2007 16:41

Re: Prgramm verhindert herunterfahren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von C.Schoch
Hi,
Dann bleibt dir IMHO nur noch das Ausschlussverfahren.
Kopie vom Projekt machen, und Komponente für Komponente aus dem Projekt entfernen bis der Übeltäter gefunden ist.

Eine weitere Idee wären noch aktive Threads.

Hi,
ich weiß ja an welcher kompo es liegt. Jetzt ist nur die frage, wie man die fixt ... ich hab von kompo programmieren keine ahnunge :( könnte sich die vllt ma jmd anguggen ?! in post #6 von dem topic hier is se zum download drin.

MfG - Ghost007

[EDIT]
Nochmal die kompo angehängt für alle fälle.
[/EDIT]

[EDIT #2]
das ist der destructor code aus der kompo ... falls an dem irjmd was auffällt =/ was da falsch sein könnte

Delphi-Quellcode:
destructor TG15.Destroy;
begin
  if XWndHandle <> 0 then
    DeAllocateHwnd (XWndHandle);
  inherited;
end;
[/EDIT]

[EDIT #3]
fehler gefunden und behoben so gehts:

Delphi-Quellcode:
destructor TG15.Destroy;
begin
//  if XWndHandle <> 0 then
//    DeAllocateHwnd (XWndHandle);
  inherited;
end;
[/EDIT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz