![]() |
Registry: Verknüpfen mit Programm
Habe einen Verknüpfungs-Dialog für mein Programm.
Habe dazu eine TCheckListBox mit dem Inhalt: .php .html ... Quellcode:
Delphi-Quellcode:
Probleme:
unit unit_shortcuts;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Registry, StdCtrls, CheckLst; type TfrmFileShortcuts = class(TForm) listShortcuts: TCheckListBox; btnClose: TButton; btnSave: TButton; procedure FormCreate(Sender: TObject); procedure btnCloseClick(Sender: TObject); procedure btnSaveClick(Sender: TObject); procedure FormShow(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var frmFileShortcuts: TfrmFileShortcuts; implementation uses unit_main; {$R *.dfm} function AddCommand(Extension, Command, OpenWith, ParamString: STRING; Asdefault: BOOLEAN):BOOLEAN; var Reg: TRegistry; ExtType: String; begin Reg := TRegistry.Create; try with Reg do begin RootKey := HKEY_CLASSES_ROOT; OpenKey(Extension, True); ExtType := ReadString(''); if ExtType = '' then begin if Reg.KeyExists('\' + Extension + '\Shell\' + Command + '\Command') = FALSE then Reg.CreateKey('\' + Extension + '\Shell\' + Command + '\Command'); OpenKey('\' + Extension + '\Shell\' + Command + '\Command', True); WriteString('', '"' + OpenWith + '" "' + ParamString + '"'); if Reg.KeyExists('\' + Extension + '\DefaultIcon') = FALSE then Reg.CreateKey('\' + Extension + '\DefaultIcon'); OpenKey('\' + Extension + '\DefaultIcon', True); WriteString('', Application.ExeName + ',0'); if AsDefault then begin OpenKey('\' + Extension + '\Shell', True); WriteString('', Command); end; end else begin if Reg.KeyExists('\' + Extension + '\Shell\' + Command + '\Command') = FALSE then Reg.CreateKey('\' + Extension + '\Shell\' + Command + '\Command'); OpenKey('\' + ExtType + '\Shell\'+Command+ '\Command', True); WriteString('', '"' + OpenWith + '" "' + ParamString + '"'); if Reg.KeyExists('\' + Extension + '\DefaultIcon') = FALSE then Reg.CreateKey('\' + Extension + '\DefaultIcon'); OpenKey('\' + Extension + '\DefaultIcon', True); WriteString('', Application.ExeName + ',0'); if AsDefault then begin OpenKey('\' + ExtType + '\Shell', True); WriteString('', Command); end; end; end; result := true; except result := False; end; Reg.Free; end; function ShowCommand(Extension, OpenWith: STRING):BOOLEAN; var Reg: TRegistry; ExtType: String; begin Reg := TRegistry.Create; try with Reg do begin RootKey := HKEY_CLASSES_ROOT; OpenKey(Extension, True); ExtType := ReadString(''); if ExtType = '' then begin OpenKey('\' + Extension + '\Shell\Open\Command', True); if Pos(Application.ExeName, ReadString('')) > 0 then result := true else result := false; end else result := false; end; except result := false; end; Reg.Free; end; procedure TfrmFileShortcuts.FormCreate(Sender: TObject); begin AddCommand('.php', 'Open', Application.ExeName, '%1', TRUE); end; procedure TfrmFileShortcuts.btnCloseClick(Sender: TObject); begin Close; end; procedure TfrmFileShortcuts.btnSaveClick(Sender: TObject); var i: Integer; begin for i:=0 to (listShortcuts.Count - 1) do if listShortcuts.Checked[i] = TRUE then AddCommand(listShortcuts.Items.Strings[i], 'Open', Application.ExeName, '%1', TRUE); Close; end; procedure TfrmFileShortcuts.FormShow(Sender: TObject); var i: Integer; begin for i:=0 to (listShortcuts.Count - 1) do listShortcuts.Checked[i] := ShowCommand(listShortcuts.Items.Strings[i], Application.ExeName); end; end. 1. Wenn der Dialog geöffnet wird, soll er die Items anhaken, die bereits mit meinem Programm verknüpft sind (macht er nicht) 2. Das verknüpfen beim Schließen erfolgt auch nicht (vielleicht fehlerhaft) |
Re: Registry: Verknüpfen mit Programm
Hast du dich denn schon mal mit diesem Thema beschäftigt?
1. Extensions (".php" meinetwegen) verweisen üblicherweise auf einen anderen internen Schlüssel ("PHPFile" von mir aus), dem die eigentlichen Shell-Einträge untergeordnet sind. 2. Beim Prüfen ob dein Programm mit einer Endung verknüpft ist, musst du die Registry weder mit Vollzugriff öffnen: Zitat:
Zitat:
Generell ein bisschen Lesestoff zum Thema: ![]() |
Re: Registry: Verknüpfen mit Programm
Ok, hab das ganze vielmehr abgespeckt.
Besteht jetzt nur noch aus je 5 Zeilen Code, funktioniert wunderbar und wird sowieso nur auf Wunsch des Anwenders aufgerufen (also muss der wissen, ob er Zugriff hat) |
Re: Registry: Verknüpfen mit Programm
Zitat:
![]() |
Re: Registry: Verknüpfen mit Programm
Zitat:
Zitat:
Eine saubere Fehlerbehandlung hat noch nie geschadet :) |
Re: Registry: Verknüpfen mit Programm
Zitat:
|
Re: Registry: Verknüpfen mit Programm
Zitat:
(Copyright, hm - so oft wie ich die mal eben neu geschrieben habe, gibt es bestimmt schon etliche Varianten... :)) ps: was ich sagen wollte: entweder der Benutzer kann den Schlüssel zum Schreiben öffnen oder nicht (ob er Admin ist spielt keine Rolle) |
Re: Registry: Verknüpfen mit Programm
Zitat:
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz