Entwickler-Ecke

Windows API - Standardprogramm für dateien festlegen


Filewalker - Mi 24.11.04 16:06
Titel: Standardprogramm für dateien festlegen
Hi,

ich hoffe das ich in der richtigen kategorie stecke...

kann mir bitte jemand helfen habe folgendes Problem:

Ich hab einen Image Editor geschrieben und möchte das wenn ich auf nen Button klicke, das alle Bildformate (oder nur jpeg) automatisch mit diesem Programm geöffnet wird.. Also eigentlich sodass ich das Symbol von meinem Programm auf dem Image hab und wenn ich doppelt klicke das programm aufgerufen wird..

weiss jemand da weiter...

Mit freundlichem Gruss

Filewalker


matze - Mi 24.11.04 17:07

schau mal in die FAQs rein, da müsste ein beitrag von MathiasSimmak sein, der dir das beschreibt !


Filewalker - Mi 24.11.04 17:15

sorry, kannst du mir freundlicherweise schreiben in welchem FAQ ich schauen soll..

danke.


Filewalker - Mi 24.11.04 18:03
Titel: Filewalker
finde dazu leider nichts


JayEff - Mi 24.11.04 18:54

da guckst du mal in der registry, wo alle dateiformate registriert sind. suche z.B. einfach mal nach ".jpg".

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
Windows Registry Editor Version 5.00

[HKEY_USERS\S-1-5-21-1229272821-299502267-839522115-1004\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg]

[HKEY_USERS\S-1-5-21-1229272821-299502267-839522115-1004\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\OpenWithList]
"a"="Skype.exe"
"MRUList"="bhefcjdga"
"b"="mspaint.exe"
"c"="Photoshop.exe"
"d"="opera.exe"
"e"="delphi32.exe"
"f"="msnmsgr.exe"
"g"="IEXPLORE.EXE"
"h"="photopnt.exe"
"i"="msmsgs.exe"
"j"="trillian.exe"

[HKEY_USERS\S-1-5-21-1229272821-299502267-839522115-1004\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\OpenWithProgids]
"jpegfile"=hex(0):
"CorelPhotoPaint.Image.7"=hex(0):


Das hab ich z.B. dazu gefunden. ich glaube, es reicht, diese Registrierung einfach nach belieben ab zuändern. (wenn mans checkt, was ich aber nicht tue...) ich hab aber auch iwo ein tutorial... moment... Ah ja hier: keine ahnung von wem, es ist jedenfalls englisch kommentiert.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
uses 
  registry, shlobj; 

procedure TForm1.RegisterFileType(prefix: string; exepfad: string); 
var 
  reg: TRegistry; 
begin 
  reg := TRegistry.Create; 
  try 
    reg.RootKey := HKEY_CLASSES_ROOT; 
    //create a new key  --> .pci 
    reg.OpenKey('.' + prefix, True); 
    try 
      //create a new value for this key --> pcifile 
      reg.Writestring('', prefix + 'file'); 
    finally 
      reg.CloseKey; 
    end
    //create a new key --> pcifile 
    reg.CreateKey(prefix + 'file'); 
    //create a new key pcifile\DefaultIcon 
    reg.OpenKey(prefix + 'file\DefaultIcon', True); 
    //and create a value where the icon is stored --> c:\project1.exe,0 
    try 
      reg.Writestring('', exepfad + ',0'); 
    finally 
      reg.CloseKey; 
    end
    reg.OpenKey(prefix + 'file\shell\open\command', True); 
    //create value where exefile is stored --> c:\project1.exe "%1" 
    try 
      reg.Writestring('', exepfad + ' "%1"');
    finally 
      reg.CloseKey; 
    end
  finally 
    reg.Free; 
  end
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nilnil); 
end


procedure TForm1.Button1Click(Sender: TObject); 
begin 
  RegisterFileType('pci''c:\project1.exe'); 
end;


Such mal in der delphi hilfe, wenn du einen der Befehle nicht kennst, denn das könnte interessant sein.


matze - Mi 24.11.04 18:56

also z.b.:
http://www.delphi-forum.de/viewtopic.php?t=78
ok das ist nicht von mathiasismack. ich dacjte da gabs mal was. evtl hab ich mich auch getäuscht !


matze - Mi 24.11.04 19:01

OK gefunden !
war kein FAQ beitrag sondern ne eigene Klasse:
http://www.delphi-forum.de/viewtopic.php?t=27630


Delete - Mi 24.11.04 19:34

Na ja, mit der Klasse wäre es "SetDefaultHandler". Wer´s unbedingt selbst machen will, der öffnet den Dateischlüssel und schreibt den Schlüssel der gewünschten Aktion als (Standard) bei "shell" rein.


Filewalker - Do 25.11.04 12:11
Titel: Next Problem
Hi,

erstmal möchte ich mich für die schnelle und konkrete Hilfe bedanken.

Die Funktion 'RegisterFileType' ist genau das was ich gesucht habe, vielen dank JayEff... Das Problem ist nur das die Funktion in HKEY_CLASSES_ROOT schreibt und ich mit einem normalen Benutzer da nichts eintragen kann. Kennt jemand eine Lösung für das Problem wie ich als standard Benutzer da etwas eintragen kann?

vielen dank
Filewalker


Delete - Do 25.11.04 13:09

Sorry, aber es gibt keine Lösung. Und lass dir nichts anderes einreden.

1. Du könntest zwar dem Standardbenutzer mehr Rechte erteilen, so dass er schreiben kann, aber das würde dann erst mal nur auf deinem Rechner funktionieren. Solltest du dein Programm mal veröffentlichen, und sollte ich es zufälligerweise gut finden und nutzen (wäre ja möglich), würde es auf meinem Rechner schon nicht mehr funktionieren.

2. Ab Windows 2000 kannst du Dateitypen auch unter HKEY_CURRENT_USER registrieren. Aber genau das ist auch der Haken: Es funktioniert erst ab Windows 2000. Sollte ein NT-Nutzer mal an dein Programm geraten, bzw. ein 9x/ME-User, dann guckt der in die Röhre.


Du könntest prüfen, ob der aktuelle User Suche in: Delphi-Forum, Delphi-Library ADMIN-Rechte hat. Wenn nicht, dann deaktiviere die Funktion bzw. verzichte auf den Versuch, den Eintrag zu ändern.


Filewalker - Do 25.11.04 15:26

vielen dank Mathias für deine leistungsstarke unterstützung..

Delphi-Forum ist ein eine gute Plattform für fragen und anregungungen..

MfG

Filewalker