Avatar billede kennethv Nybegynder
14. september 2006 - 09:22 Der er 24 kommentarer og
1 løsning

ShellChangeNotifier i Delphi 2006

Hej

Er der nogen der kan svare mig på om der er et alternativ til ShellChangeNotifier i Delphi 2006?

I Delphi 2005 og Delphi 7 kunne man finde den i gruppen samples, men det er den ikke i Delphi 2006.

PFT
Avatar billede kennethv Nybegynder
18. september 2006 - 09:14 #1
Er der ingen der har en ide?
Avatar billede kroning Nybegynder
18. september 2006 - 15:58 #2
Avatar billede kennethv Nybegynder
19. september 2006 - 09:08 #3
Hej Kroning,
Den side kender jeg godt, men den giver mig ikke en alternativ til ShellChangeNotifier i Delphi 2006. Men måske du kan hjælpe mig med et tillægs svar på en opgave jeg har lavet tidligere, som du har svaret på.

http://www.eksperten.dk/spm/619421

Jeg har afprøvet dit eksempel, men forstår ikke lige hvordan jeg "fanger" hvilken fil der er blevet oprettet. Måske du kan hjælpe mig med det?
Avatar billede kroning Nybegynder
19. september 2006 - 09:32 #4
Jeg troede du ville have et alternativ til ShellChangeNotifier fordi den ikke fantes i 2006 og jeg mente at siden fortalte hvordan man fik den frem i 2006 for jeg tror ikke på at den helt er fjernet fra 2006.

Jeg kikker lige på det andet.
Avatar billede kennethv Nybegynder
19. september 2006 - 09:44 #5
Det er korrekt at jeg vil gerne have ShellChangeNotify, så jeg kigger lige på siden igen. Så vent lidt med mit spørgsmål.
Avatar billede kennethv Nybegynder
19. september 2006 - 09:50 #6
Men du må da gerne lige fortælle mig hvordan man skulle installeret componenten. Det synes jeg ikke lige at det fremgår særligt godt.
Avatar billede kroning Nybegynder
19. september 2006 - 09:58 #7
Det kan jeg ikke svare på, har aldrig brugt D2006.
Avatar billede kennethv Nybegynder
19. september 2006 - 10:03 #8
Ok, men du må gerne hjælpe mig med det spørgsmål.
Avatar billede kroning Nybegynder
19. september 2006 - 10:19 #9
Jeg har kikket lidt på det og kan ikke lige komme med en løsning, man får at vide at der er sket en ændring men ikke i hvilken fil, måske findes der en enkelt løsning eller også skal man manuelt holde styr på filerne og så sammenligne hver gang der sker en ændring.
Avatar billede kennethv Nybegynder
19. september 2006 - 10:32 #10
Lige præcis, men hvordan? :)
Avatar billede kennethv Nybegynder
19. september 2006 - 10:48 #11
Nu lykkedes det mig ren faktisk at få ShellChangeNotify installeret i Delphi 2006, men gud hjælpe mig. Den kan ikke checke på UNC stier eller anden form for netværksdrev. Damn.
Avatar billede kroning Nybegynder
19. september 2006 - 18:36 #12
Har lige testet og det virker fint med UNC stier her.
Avatar billede kennethv Nybegynder
20. september 2006 - 09:53 #13
ShellChangeNotify? Er det i en application eller i en service du har testet? Jeg er interesseret i en service.
Avatar billede kroning Nybegynder
20. september 2006 - 10:33 #14
Det er i en application.
Avatar billede kennethv Nybegynder
20. september 2006 - 10:37 #15
Kan du prøve en service?
Avatar billede kennethv Nybegynder
21. september 2006 - 11:08 #16
Kroning. Har du mulighed for det?
Avatar billede kennethv Nybegynder
21. september 2006 - 15:21 #17
Nå, Kroning. Jeg fandt løsning på hvordan jeg kunne få ShellChangeNotify "ind" i D2006, men da du trods alt hjalp mig lidt på vej. Så får du point. Du må smide et svar.
Avatar billede kroning Nybegynder
21. september 2006 - 19:43 #18
ok
Avatar billede kennethv Nybegynder
21. september 2006 - 21:25 #19
Lige tilsidst. Jeg kan også lave en ShellChangeNotify som tjekker biblioteker i en application, men kan ikke med en service. Måske gør jeg noget forkert. Har du mod på at hjælpe mig?
Avatar billede kroning Nybegynder
21. september 2006 - 23:58 #20
Jeg har aldrig prøvet at lave en service så har du evt. noget kode der viser hvordan.
Avatar billede kennethv Nybegynder
22. september 2006 - 09:43 #21
En ShellChangeNotify på en service og husk at installer service med /install i parameter.

Den kan godt være at jeg ikke kan se skoven for bare af træer. Jeg er ihvertfald total blank.

Dette er koden:

unit MainUnit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
  ShellCtrls;

type
  TService1 = class(TService)
    ShellChangeNotifier1: TShellChangeNotifier;
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ShellChangeNotifier1Change;
  private
    { Private declarations }
  public
    function GetServiceController: TServiceController; override;
    { Public declarations }
  end;

var
  Service1: TService1;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  Service1.Controller(CtrlCode);
end;

function TService1.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
  TShellChangeThread.Create(Service1.ShellChangeNotifier1Change);
end;

procedure TService1.ShellChangeNotifier1Change;
begin
  ShowMessage('Yes BOSS');
end;

end.
Avatar billede kroning Nybegynder
22. september 2006 - 14:07 #22
Hvis jeg bruger ShowMessage i ShellChangeNotifier1Change bliver ShellChangeNotifier1Change kun kaldt en gang og ShowMessage vises ikke, hvis jeg i stedet skriver f.eks. Beep i ShellChangeNotifier1Change så kan jeg høre at ShellChangeNotifier1Change bliver kaldt hver gang der sker en ændring. Så ShowMessage kan åbenbart ikke benyttes i ShellChangeNotifier1Change men bortset fra det så virker det fint.
Avatar billede kroning Nybegynder
22. september 2006 - 14:11 #23
Her er koden:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
  ShellCtrls;

type
  TService1 = class(TService)
    ShellChangeNotifier1: TShellChangeNotifier;
    procedure ShellChangeNotifier1Change;
    procedure ServiceStart(Sender: TService; var Started: Boolean);
  private
    { Private declarations }
  public
    function GetServiceController: TServiceController; override;
    { Public declarations }
  end;

var
  Service1: TService1;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  Service1.Controller(CtrlCode);
end;

function TService1.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TService1.ShellChangeNotifier1Change;
begin
    beep;
end;

procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
    Started:=true;
end;

end.
Avatar billede kennethv Nybegynder
22. september 2006 - 14:41 #24
Er det så også med UNC path?
Avatar billede kroning Nybegynder
22. september 2006 - 15:25 #25
Jeg havde glemt at det skulle være med UNC. Det virker ikke med UNC? Måske har det noget med rettigheder at gøre?
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