AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Programme beim Shutdown des PC's ausführen.
Thema durchsuchen
Ansicht
Themen-Optionen

Programme beim Shutdown des PC's ausführen.

Ein Thema von Teracon · begonnen am 3. Jul 2002 · letzter Beitrag vom 27. Nov 2004
 
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#4
  Alt 3. Jul 2002, 19:40
Hi Teracon,

Ich hab mal zur Verdeutlichung und weil mir langweilig war (die Ferien haben in SH heute begonnen *g*) so ein Programm geschrieben:
Code:
{
--------------------------------------------------------------------------------

     Shutdown Spy v 0.1

     Copyright (c) 2002/07/03 by Benedikt Gollatz

     This program is free software; you can redistribute it and/or
     modify it under the terms of the GNU General Public License
     as published by the Free Software Foundation; either version 2
     of the License, or (at your option) any later version.

     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     GNU General Public License for more details.

--------------------------------------------------------------------------------
}

program ShutdownSpy;

uses
  Windows,
  Messages,
  ShellAPI,
  SysUtils;

const
  WINDOW_CLASS = 'ShutdownSpy';
  WINDOW_TITLE = 'Shutdown Spy v. 0.1';
  WM_TRAYEVENT = WM_USER + 1;

var
  WndClass: TWndClassEx;
  Msg: TMsg;
  hPopupMenu: HMENU;
  nid: TNotifyIconData;

function LeadingZero(n: Integer): String;
begin
  Str(n, Result);
  if (n < 9) then
    Result := '0' + Result;
end;

function WndProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM;
                 lParam: LPARAM): LRESULT; stdcall;
var
  p: TPoint;
  SystemTime: _SYSTEMTIME;
  f: TextFile;
begin
  Result := 0;
  case uMsg of
    WM_CREATE:
      begin
        hPopupMenu := CreatePopupMenu();
        AppendMenu(hPopupMenu, MF_STRING, 1000, 'Exit');
        SetMenuDefaultItem(hPopupMenu, 1000, 0);

        with nid do begin
          cbSize := SizeOf(TNotifyIconData);
          uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
          uCallbackMessage := WM_TRAYEVENT;
          uID := 2000;
          hIcon := LoadIcon(0, IDI_APPLICATION);
          szTip := 'ShutdownSpy v 1.0';
          Wnd := hWnd;
        end;

        Shell_NotifyIcon(NIM_ADD, @nid);
      end;
    WM_TRAYEVENT:
      if (lParam = WM_RBUTTONUP) then begin
        GetCursorPos(p);
        TrackPopupMenu(hPopupMenu, TPM_RIGHTALIGN or TPM_RIGHTBUTTON, p.x, p.y,
                       0, hWnd, nil);
      end;
    WM_COMMAND:
      if (LoWord(wParam) = 1000) then
        SendMessage(hWnd, WM_CLOSE, 0, 0);
    WM_QUERYENDSESSION:
      begin
        AssignFile(f, 'log.txt');
        if (FileExists('log.txt')) then
          Append(f)
        else
          Rewrite(f);

        GetSystemTime(SystemTime);
        if (lParam or Integer(ENDSESSION_LOGOFF) = lParam) then
          WriteLn(f, 'The user has logged off at ',
                     LeadingZero(SystemTime.wYear), '/',
                     LeadingZero(SystemTime.wMonth), '/',
                     LeadingZero(SystemTime.wDay), ' ',
                     LeadingZero(SystemTime.wHour), ':',
                     LeadingZero(SystemTime.wMinute), ':',
                     LeadingZero(SystemTime.wSecond), '.')
        else
          WriteLn(f, 'The system was shut down at ',
                     LeadingZero(SystemTime.wYear), '/',
                     LeadingZero(SystemTime.wMonth), '/',
                     LeadingZero(SystemTime.wDay), ' ',
                     LeadingZero(SystemTime.wHour), ':',
                     LeadingZero(SystemTime.wMinute), ':',
                     LeadingZero(SystemTime.wSecond), '.');

        CloseFile(f);
        SendMessage(hWnd, WM_CLOSE, 0, 0);
      end;
    WM_DESTROY:
      begin
        DestroyMenu(hPopupMenu);
        Shell_NotifyIcon(NIM_DELETE, @nid);
        PostQuitMessage(0);
      end;
  else
    Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
  end;
end;

begin
  with WndClass do begin
    cbSize := SizeOf(TWndClassEx);
    style := 0;
    lpfnWndProc := @WndProc;
    cbClsExtra := 0;
    cbWndExtra := 0;
    hInstance := SysInit.hInstance;
    hIcon := LoadIcon(0, IDI_APPLICATION);
    hCursor := LoadCursor(0, IDC_ARROW);
    hbrBackground := COLOR_APPWORKSPACE;
    lpszMenuName := '';
    lpszClassName := WINDOW_CLASS;
    hIconSm := 0;
  end;

  RegisterClassEx(WndClass);

  CreateWindowEx(0,
                 WINDOW_CLASS,
                 WINDOW_TITLE,
                 0,
                 Integer(CW_USEDEFAULT),
                 Integer(CW_USEDEFAULT),
                 0,
                 0,
                 0,
                 0,
                 hInstance,
                 nil);

  while (GetMessage(Msg, 0, 0, 0)) do begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
    Sleep(150);
  end;
end.
MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  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 00:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz