unit main; //{$DEFINE DEBUG} interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TApp_TOOLDspLnk = class(TForm) chkDispLnk: TCheckBox; chkDispPif: TCheckBox; btnOK: TButton; btnCancel: TButton; procedure FormCreate(Sender: TObject); procedure btnOKClick (Sender: TObject); procedure btnCancelClick(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var App_TOOLDspLnk: TApp_TOOLDspLnk; implementation uses {$IFDEF DEBUG} myDebug, {$ENDIF} Registry; {$R *.dfm} //http://www6.atpages.jp/tokunaga/windowsinfo.html const F_csSHOWVALUE = 'NeverShowExt'; F_csKEYLNK = '\lnkfile'; F_csKEYPIF = '\piffile'; procedure TApp_TOOLDspLnk.FormCreate(Sender: TObject); var l_Reg : TRegistry; begin l_Reg := TRegistry.Create(KEY_EXECUTE); try l_Reg.RootKey := HKEY_CLASSES_ROOT; try l_Reg.OpenKeyReadOnly(F_csKEYLNK); chkDispLnk.Checked := not(l_Reg.ValueExists(F_csSHOWVALUE)); finally l_Reg.CloseKey; end; try l_Reg.OpenKeyReadOnly(F_csKEYPIF); chkDispPif.Checked := not(l_Reg.ValueExists(F_csSHOWVALUE)); finally l_Reg.CloseKey; end; finally l_Reg.Free; end; end; procedure TApp_TOOLDspLnk.btnOKClick(Sender: TObject); //OK const lci_RET_FAIL = -1; //失敗。 lci_RET_SUCC = 0; //書き換え成功。 lci_RET_NONE = 1; //望みの設定だったので何もしなかった。 function lfni_DispExt(sKey: String; bDisp: Boolean): Integer; var l_Reg : TRegistry; begin Result := lci_RET_FAIL; l_Reg := TRegistry.Create; try l_Reg.RootKey := HKEY_CLASSES_ROOT; try if (l_Reg.OpenKey(sKey, False)) then begin Result := lci_RET_NONE; if (bDisp) then begin if (l_Reg.ValueExists(F_csSHOWVALUE)) then begin //チェックは表示する、レジストリは表示しない設定だった。 if (l_Reg.DeleteValue(F_csSHOWVALUE)) then begin //削除成功。 Result := lci_RET_SUCC; end else begin //失敗。 Result := lci_RET_FAIL; end; end; end else begin if not(l_Reg.ValueExists(F_csSHOWVALUE)) then begin //チェックは表示しない、レジストリは表示する設定だった try l_Reg.WriteString(F_csSHOWVALUE, ''); //値の書き込み成功。 Result := lci_RET_SUCC; except //エラー。値の書き込み失敗。 Result := lci_RET_FAIL; end; end; end; end; finally l_Reg.CloseKey; end; finally l_Reg.Free; end; end; var li_RetLnk, li_RetPif : Integer; ls_Msg : String; begin li_RetLnk := lfni_DispExt(F_csKEYLNK, chkDispLnk.Checked); li_RetPif := lfni_DispExt(F_csKEYPIF, chkDispPif.Checked); Beep; if (li_RetLnk = lci_RET_NONE) and (li_RetPif = lci_RET_NONE) then begin //両方望みの設定であったので何もしなかった。 ShowMessage('「lnk」も「pif」も希望通りの設定でした'); end else begin ls_Msg := ''; if (li_RetLnk = lci_RET_SUCC) then begin ls_Msg := '「lnk」の設定を変更しました'; end else if (li_RetLnk = lci_RET_FAIL) then begin ls_Msg := '「lnk」の設定の変更に失敗しました'; end; if (li_RetPif = lci_RET_SUCC) then begin ls_Msg := #13 + '「pif」の設定を変更しました'; end else if (li_RetPif = lci_RET_FAIL) then begin ls_Msg := #13 + '「pif」の設定の変更に失敗しました'; end; ShowMessage(Trim(ls_Msg)); end; end; procedure TApp_TOOLDspLnk.btnCancelClick(Sender: TObject); //キャンセル begin Close; end; end.