AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?
Thema durchsuchen
Ansicht
Themen-Optionen

Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

Ein Thema von Guido Eisenbeis · begonnen am 16. Sep 2011 · letzter Beitrag vom 21. Sep 2011
 
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

  Alt 19. Sep 2011, 07:53
Klar kann ich Dir dazu auch etwas mehr liefern, war nur am Wochenende nicht am Entwicklungsrechner

In InnoSetup installiere ich meine DLL so:
Code:
[Files]
Source: WinLogonExample.dll; DestDir: {win}; Flags: restartreplace overwritereadonly uninsrestartdelete

[Registry]
; http://msdn.microsoft.com/en-us/library/aa379402(VS.85).aspx
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WinLogonExample; ValueType: expandsz; ValueName: DllName; ValueData: WinLogonExample.dll; Flags: uninsdeletekey
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WinLogonExample; ValueType: string; ValueName: Logoff; ValueData: LogoffHandler
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WinLogonExample; ValueType: string; ValueName: Shutdown; ValueData: ShutdownHandler
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WinLogonExample; ValueType: dword; ValueName: Asynchronous; ValueData: 1
Oder anders gesagt, das sind drei bis vier Registry-Einträge, die nötig sind. Die Namen der Handler müssen identisch mit den DLL-Exports sein, Du findest sie hier wieder:

Delphi-Quellcode:
library WinLogonExample;

uses
  SysUtils,
  Classes,
  Messages,
  Windows;

type
   TFnMsgeCallback = function(bVerbose: Boolean; lpMessage: PWideChar): Cardinal; stdcall;

   TWlxNotificationInfo = record
      Size: Cardinal;
      Flags: Cardinal;
      UserName: PWideChar;
      Domain: PWideChar;
      WindowStation: PWideChar;
      Token: Cardinal;
      Desktop: Cardinal;
      StatusCallback: TFnMsgeCallback;
   end;
   PWlxNotificationInfo = ^TWlxNotificationInfo;

{$R *.res}

procedure LogoffHandler(Info: PWlxNotificationInfo); stdcall;
begin
   // actions take place here
end;

procedure ShutdownHandler(Info: PWlxNotificationInfo); stdcall;
begin
   // or here
end;

procedure EntryPointProc(reason: integer);
begin
   case reason of
      DLL_PROCESS_ATTACH: begin
         DisableThreadLibraryCalls(hInstance);
      end;
      DLL_THREAD_ATTACH: begin
      end;
      DLL_PROCESS_DETACH: begin
      end;
      DLL_THREAD_DETACH: begin
      end;
   end;

end;

exports
   LogoffHandler,
   ShutdownHandler;

begin
   DllProc := @EntryPointProc;
   DllProc(DLL_PROCESS_ATTACH);
end.
Diese beiden exportieren Funktionen werden dann halt einfach jedesmal aufgerufen, wenn sich ein Benutzer abmeldet oder der Rechner runterfährt.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 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-2025 by Thomas Breitkreuz