AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SHChangeNotifyRegister + NT (W2k3) Dienst
Thema durchsuchen
Ansicht
Themen-Optionen

SHChangeNotifyRegister + NT (W2k3) Dienst

Ein Thema von Impulse · begonnen am 7. Jun 2005 · letzter Beitrag vom 23. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Impulse

Registriert seit: 7. Jun 2005
7 Beiträge
 
#1

SHChangeNotifyRegister + NT (W2k3) Dienst

  Alt 7. Jun 2005, 12:23
Servus!

Ich hab ne Frage zur Windows API mit der Funktion SHChangeNotifyRegister.
Ist es möglich SHChangeNotifyRegister in nem Dienst zu benutzen? Es braucht ja nen HWnd, nen Dienst hat aber keins...

Hintergrund:
Da es (laut Microsoft) nicht möglich ist, dem "Owner" eines Verzeichnisses die Rechte zum Berechtigungen vergeben zu entziehen, möchte ich gerne einen Dienst haben, der, wenn jemand einen Ordner erstellt, den Besitzer auf z.B. die Administratoren Gruppe umbiegt.

Ich hab das ganze schon als normale Win32-App und es funktioniert, wie ich mir das vorgestellt hab: Ordner wird im Dateisystem erstellt, SHChangeNotify wird ausgelöst und ich setze den Besitzer auf "Adminstrators".

Problem:
Als Dienst nicht möglich, da SHChangeNotifyRegister kein HWnd gegeben werden kann ...
siehe Delphi Hilfe -> Windows Shell and Controls.

Versionen:
Delphi 2005
Windows Server 2003

Danke im vorraus, Imp
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: SHChangeNotifyRegister + NT (W2k3) Dienst

  Alt 7. Jun 2005, 14:37
Natürlich kannst du ein Fensterhandle übergeben. Ich würde dir empfehlen mit CreateWindowEx() ein Fenster zu erstellen und es an einen Thread zu übergeben, der dann die Nachrichtenschleife startet.

Kann auch sein, daß eine Nachrichtenschleife ohne Fenster ausreicht (mußt du aber selber testen!).
  Mit Zitat antworten Zitat
Impulse

Registriert seit: 7. Jun 2005
7 Beiträge
 
#3

Re: SHChangeNotifyRegister + NT (W2k3) Dienst

  Alt 8. Jun 2005, 13:31
Hi.

Im Moment benutze ich die "TSHChangeNotify component by Elliott Shevin", die biegt ja die WindowProc-Schleife vom Owner um und ich bin garnicht direkt an der API Funktion dran. Das würde heissen, ich muß mir die Komponente schnappen und umschreiben oder am besten nen eigenen Wrapper für die ChangeNotifyRegister Geschichte machen... Aber das mit der Nachrichtenschleife war schonmal ein guter Tip für die weitere Vorgehensweise, danke.

Ok, ich werd das mal versuchen, ich poste dann nochma hier.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

Re: SHChangeNotifyRegister + NT (W2k3) Dienst

  Alt 8. Jun 2005, 14:46
Alles Klar. Dann bin ich mal gespannt.

Aber solltest du (bei dieser Kompo) nicht auch in der Lage sein ein Fenster zu erstellen - mit VCL-Mitteln und dann als Owner zu übergeben?

Einzige Sache ist doch, daß von einem Service das Fenster in der jeweiligen WinSta (und Desktop) des Services nicht interaktiv sichtbar ist.
  Mit Zitat antworten Zitat
Impulse

Registriert seit: 7. Jun 2005
7 Beiträge
 
#5

Re: SHChangeNotifyRegister + NT (W2k3) Dienst

  Alt 8. Jun 2005, 17:07
Zitat von Olli:
Alles Klar. Dann bin ich mal gespannt.
.... und ich erst... bis jetzt noch nicht viel mit Diensten gemacht...

Zitat von Olli:
Aber solltest du (bei dieser Kompo) nicht auch in der Lage sein ein Fenster zu erstellen - mit VCL-Mitteln und dann als Owner zu übergeben?
...hab ich auch gedacht, ging aber nicht... Dann hab ich noch en bisschen rumprobiert bin aber nich weiter gekommen...

Zitat von Olli:
Einzige Sache ist doch, daß von einem Service das Fenster in der jeweiligen WinSta (und Desktop) des Services nicht interaktiv sichtbar ist.
Ja, was aber nicht schlimm wäre, weil ich ja eh kein Fenster bräuchte sondern nur schnell Ownership an mich reissen und vielleicht noch ne Log-Datei schreiben will...

Ich poste hier den Status und, wenn es soweit ist, die Lösung, falls noch mehr Leute Dienste mit "HWnd-Brauchenden" Funktionen schreiben wollen..

Bis denne
  Mit Zitat antworten Zitat
Impulse

Registriert seit: 7. Jun 2005
7 Beiträge
 
#6

Re: SHChangeNotifyRegister + NT (W2k3) Dienst

  Alt 14. Jun 2005, 20:09
GRRRR, ich kriegs nich hin... Ich hab zwar ne Form und alles aber SHChangeNotifyRegister gibt kein Notification Handle zurück sondern immer 0...

Kann mir jemand auf die Sprünge helfen?
(Hab jetzt erstmal keinen Code geposted, um den Thread nich so vollzumüllen...)

Danke, Imp
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: SHChangeNotifyRegister + NT (W2k3) Dienst

  Alt 14. Jun 2005, 22:02
Moin Imp,

die Funktion gibt ja auch kein Handle zurück.
0 bedeutet, dass ein Fehler aufgetreten ist. Entweder Speichermangel, oder es liegt ein Paramterfehler vor.

Zitat von Impulse:
(Hab jetzt erstmal keinen Code geposted, um den Thread nich so vollzumüllen...)
Das verbuch' ich mal unter der Rubrik: "Sparen am falschen Platz"
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Impulse

Registriert seit: 7. Jun 2005
7 Beiträge
 
#8

Re: SHChangeNotifyRegister + NT (W2k3) Dienst

  Alt 15. Jun 2005, 10:57
Nochmal hallo!

Also:

Ich hab die "TSHChangeNotify component by Elliott Shevin" [1] und möchte diese gerne auch benutzen, weil da genau das richtige Event (sprich: MkDir) drinne ist. Das Problem ist, dass ich die gerne in nem Dienst benutzen möchte (also in nem Standard Delphi Dienst TService) und da aber kein Owner, wie es die Komponente braucht, existiert.

Delphi-Quellcode:
   
  OwnerWindowProc := (Owner as TWinControl).WindowProc;
  (Owner as TWinControl).WindowProc := WndProc;
Und dann kommt auch noch das WindowHandle von dem Owner für SHChangeNotifyRegister dran:

Delphi-Quellcode:
     NotifyHandle := SHChangeNotifyRegister(
                               (Owner as TWinControl).Handle,
                                SHCNF_ACCEPT_INTERRUPTS +
                                    SHCNF_ACCEPT_NON_INTERRUPTS,
                                EventMask,
                                fMessageNo,
                                NotifyCount,
                                NotifyPtr);
Das hab ich in nem Dienst ja alles nich
Wenn ich die Komponente einfach auf diese Dienst-Pseudo-Form draufmache gibts nen invalid Typecast (beim WindowProc umbiegen), was ja auch irgendwie einleuchtet und wenn ich ne TForm (oder wie Olli vorgeschlagen hat mit CreateWindowEx) mache kann SHChangeNotifyRegister irgendwie nix registern (NotifyHandle bleibt 0).
Das Ganze funktioniert einwandfrei wenn ich ne normale Win32-Anwendung mache. Aber es muss, wie gesagt, auch ohne das jemand angemeldet ist laufen und ich mag nicht wirklich so ein "Lass-meine-Anwendung-als-Dienst-laufen"-Programm benutzen...

Danke im voraus, Imp

Edit: P.S. Diese ShellControls-Beispiel Komponente funktioniert in nem Dienst aber die springt immer an und ich weiss nicht, wie ich rauskriegen soll, ob jetzt nen Verzeichnis angelegt worden ist oder nur irgendwas anderes passiert is.. GRRR

[1] http://www.torry.net/quicksearchd.ph....3.0&Title=Yes
  Mit Zitat antworten Zitat
Impulse

Registriert seit: 7. Jun 2005
7 Beiträge
 
#9

Re: SHChangeNotifyRegister + NT (W2k3) Dienst

  Alt 16. Jun 2005, 15:55
*push*
  Mit Zitat antworten Zitat
Impulse

Registriert seit: 7. Jun 2005
7 Beiträge
 
#10

Re: SHChangeNotifyRegister + NT (W2k3) Dienst

  Alt 22. Jun 2005, 08:48
Hallo.

Wollte nur kurz bescheid sagen: Habs dann jetzt doch ohne die Komponente gemacht, funktioniert aber trotzdem.

Danke für alles, Imp
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:30 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