Avatar billede michdan Nybegynder
29. juni 2005 - 23:12 Der er 10 kommentarer og
2 løsninger

lave en service der kan overvåge mappe indhold.

Jeg har brug for at kunne overvåge en bestemt mappe for indhold.

Når der ankommer filer  (txt-filer) i mappen skal disse behandles hvordan kan jeg gøre dette ??

Hvordan får jeg lavet det som en service der starter op med Pc'en ??


michael
Avatar billede kroning Nybegynder
30. juni 2005 - 08:03 #1
Kik på FindFirstChangeNotification, FindNextChangeNotification og WaitForSingleObject. Du kan evt. også benytte TShellChangeNotifier som du finder under fanen Samples.
Servicen kan jeg ikke lige hjælpe med da jeg ikke prøvet før.
Avatar billede nca Juniormester
30. juni 2005 - 08:35 #2
Når du skal lave en service, skal du lave den via File|New|Other|Service Application?

Så skal du installerer din service. Kør exe filen med en /INSTALL parameter

Se hjælpen under Service Applications
Avatar billede michdan Nybegynder
30. juni 2005 - 10:09 #3
Har i/du nogle små eksemler/source/projekter på en service og brug af FindFirstChangeNotification funktionen ??
Avatar billede kroning Nybegynder
30. juni 2005 - 10:13 #4
Ja, smid en Memo og en Button på en form, programmet vil skrive "Der er sket en ændring" i memoen hver gang en fil i mappen ændre navn, oprettes eller slettes.
Du skal så selv holde styr på txt filerne, eller spørg her igen.
Se i win32 hjælpen for andre værdier i stedet for FILE_NOTIFY_CHANGE_FILE_NAME

----------

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    WatchHandle : THandle;
  public
    { Public declarations }
  end;

TWatchThread = class(TThread)
  private
    { Private declarations }
        WatchHandle : THandle;
        Besked : string;
    procedure SendBesked;
  protected
    procedure Execute; override;

  public
    constructor Create(aWatchHandle : THandle);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TWatchThread }

constructor TWatchThread.Create(aWatchHandle : THandle);
begin
    inherited Create(False);
    WatchHandle:=aWatchHandle;
    FreeOnTerminate:=true;
end;

procedure TWatchThread.SendBesked;
begin
    Form1.Memo1.Lines.Add(Besked);
end;

procedure TWatchThread.Execute;
var result : integer;
begin
    Besked:='Thread startet';
    Synchronize(SendBesked);

  while not terminated do
  begin
    result:=WaitForSingleObject(WatchHandle,100);
    if result=WAIT_OBJECT_0 then
        begin
        Besked:='Der er sket en ændring';
        Synchronize(SendBesked);
            if not FindNextChangeNotification(WatchHandle) then
      begin
            Besked:='Fejl i FindNextChangeNotification, thread afsluttes';
            Synchronize(SendBesked);
            Terminate;
            end;
        end;
    end;
end;

{ end TWatchThread }

procedure TForm1.Button1Click(Sender: TObject);
var
    lpPathName : string;
begin
    lpPathName:='c:\hk'; // mappen der skal overvåges
    WatchHandle:=FindFirstChangeNotification(PChar(lpPathName),false,FILE_NOTIFY_CHANGE_FILE_NAME);
  if WatchHandle=INVALID_HANDLE_VALUE then
        Memo1.Lines.Add('fejl i FindFirstChangeNotification')
    else
        TWatchThread.Create(WatchHandle);
end;

end.
Avatar billede kroning Nybegynder
30. juni 2005 - 10:20 #5
Lige en detalje, du kan også overvåge alle undermapper ved blot at ændre false til true i FindFirstChangeNotification.
Avatar billede michdan Nybegynder
30. juni 2005 - 11:08 #6
hej kroning...

jeg har lige afprøvet din kode, men jeg ser ingenting i memo1, hverken når det starter eller når jeg rykker på button1.
Avatar billede michdan Nybegynder
30. juni 2005 - 11:14 #7
hej kroning...min fejl havde glemt at tildele event til button1click.....
Avatar billede michdan Nybegynder
30. juni 2005 - 11:29 #8
Er der nogen mulighed for at se hvilke threads der er startet fra et program ??

Mener.. man kan have flere forskellige thredas der bliver startet fra et program, men hvordan kan jeg se hvilke af disse threads der nu kører og hvilke der er blevet stoppet igen ????

PS husk at smide et svar for point...:-)
Avatar billede kroning Nybegynder
30. juni 2005 - 15:17 #9
Ja jeg mener at der er mulighed for at se hvilke threads man har kørende kan dog ikke lige svare på hvordan. Men jeg vil nok til enhver tid foretrække at styrer det manuelt i programmet ved at have en variable til hver thread jeg har kørende, men nu har jeg normalt heller ikke mere end 1-3 threads kørende af gangen.
Avatar billede nca Juniormester
30. juni 2005 - 18:35 #10
Er det muligt at skifte ikon for mappen, så man på den måde kan se, om der er sket ændringer?
Avatar billede kroning Nybegynder
30. juni 2005 - 20:14 #11
>>Er det muligt at skifte ikon for mappen
http://bdn.borland.com/article/0,1410,27508,00.html
Avatar billede nca Juniormester
01. juli 2005 - 00:19 #12
>>Kroning
Tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester