お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"Wininit.iniの使用例 (注意:長文です)"

この発言に対し以下のコメントが寄せられています
#00806 Satobe さん RE:Wininit.iniの使用例

Wininit.iniはWindows再起動時の初期化時にファイル を削除またはリネームをするための設定ファイルです。 実現法を指南してくださった JCG00336 Satobeさん、 ご助言くださった FMSDEV/MES/7のみなさんありがとう ございました。 ● Wininit.iniの内容 *************************************************** [rename] NUL=削除したいファイル 上書きされるファイル = リネームしたいファイル *************************************************** 例1)C:\MSDOS.001というファイルを削除する設定を書 き込みます。 InitFile.WriteString ('Rename', 'NUL', 'C:\MSDOS.001'); 例2)C:\MSDOS.001を、MSDOS.SYSとリネームする設定を 書き込みます。 InitFile.WriteString ('Rename', 'C:\MSDOS.SYS', 'C:\MSDOS.001'); なお、Wininit.iniの内容は再起動後のWindows起動の 際、「設定ファイルを更新しています」のメッセージの 時に処理され、Wininit.bakにバックアップされた後、 削除されます。 何かのアプリケーションのインストール時、「今すぐ 再起動しますか?」のメッセージが出ますね。その時、 NOを押して、C:\Windows\Wininit.iniを覗いてみたらい かがでしょう? ● 以下、Wininit.iniの使用例です。プロジェクトを作成 しプロジェクトマネージャでUnit1を削除後、dprファイル のuse節以下をコピー、gosafeという名前で保存してくだ さい。 n-tack HZY01767 /////////////////// gosafe.dpr /////////////////// program gosafe; // < ここは自動で変更される。 {******* 使用する場合はここ以後をコピー *******} uses IniFiles, SysUtils, Windows, ShellAPI; var WinPath,BootDrv:String; Result1:Integer; Param:String; {------- WritePrivateProfileString API-------} procedure UpdateFile(Filename:String); begin WritePrivateProfileString(nil, nil, nil, PChar(Filename)); end; {------- MSDOS.SYS -------} function SetMsdos:Integer; var SysFile:TIniFile; begin SysFile:= TIniFile.Create(BootDrv + ':\MSDOS.SYS'); try // Get Windows Directory. (c:\windows or a:\windows ???) WinPath:= SysFile.ReadString('Paths','WinDir','ERROR'); if WinPath='ERROR' then begin Result:= 10; Exit; end; // Get Host Windows BootDrive. (c:\ or a:\ ???) BootDrv:= SysFile.ReadString('Paths','HostWinBootDrv','ERROR'); if BootDrv='ERROR' then begin Result:= 11; Exit; end; // MSDOS.SYS を MSDOS.001 という名前でBackupする CopyFile(PChar(BootDrv + ':\MSDOS.SYS'), PChar(BootDrv + ':\MSDOS. 001'), False); // Change MSDOS.SYS Attr. if not (FileSetAttr(BootDrv + ':\MSDOS.SYS',faArchive)=0) then begin Result:= 12; Exit; end; // Wait; UpdateFile(BootDrv + ':\MSDOS.SYS'); // MSDOS.SYS に BootSafe=1を追加する SysFile.WriteBool('Options','BootSafe',True); // Wait; UpdateFile(BootDrv + ':\MSDOS.SYS'); // SetBack MSDOS.SYS Attr. FileSetAttr(BootDrv + ':\MSDOS.SYS',faReadOnly + faHidden); finally SysFile.Free; end; Result:= 0; end; {------- ERROR SETBACK -------} function SetBack:Integer; var SysFile:TIniFile; begin Result:= 13; SysFile:= TIniFile.Create(BootDrv + ':\MSDOS.SYS'); try // Change MSDOS.SYS Attr. if not (FileSetAttr(BootDrv + ':\MSDOS.SYS',faArchive)=0) then begin Result:= 99; Exit; end; // Wait UpdateFile(BootDrv + ':\MSDOS.SYS'); // MSDOS.SYS に BootSafe=0を追加する SysFile.WriteBool('Options','BootSafe',False); // Wait UpdateFile(BootDrv + ':\MSDOS.SYS'); // SetBack MSDOS.SYS Attr. FileSetAttr(BootDrv + ':\MSDOS.SYS',faReadOnly + faHidden); finally SysFile.Free; end; end; {------- Wininit.ini -------} function SetWininit:Integer; var InitFile:TIniFile; begin try // Change .\Windows\Wininit.ini Attr. if FileExists(WinPath + '\Wininit.ini') then if not (FileSetAttr(WinPath + '\Wininit.ini',faArchive)=0) then Exit; except Result:= SetBack; // エラーのためMSDOS.SYSの内容の書き戻し Exit; end; InitFile:= TIniFile.Create(WinPath + '\Wininit.ini'); try // C:\MSDOS.001をC:\MSDOS.SYSにリネームする設定をWininit.iniへ書き 込む InitFile.WriteString('Rename', BootDrv + ':\MSDOS.SYS', BootDrv + ':\MSDOS.001'); finally InitFile.Free; end; Result:= 0; end; {------- Entry Point -------} begin if FileExists('C:\MSDOS.SYS') then BootDrv:='C' else if FileExists('A:\MSDOS.SYS') then BootDrv:='A'; // When ERROR:99 Case, Running with Param '-setback'. Param:= LowerCase(ParamStr(1)); if Param='-setback' then begin Result1:= SetBack; MessageBox(0,PChar('SetBack Success.'),'Message Box', mb_OK); Exit; end; // Set MSDOS.SYS Result1:= SetMsdos; if Result1>0 then begin MessageBox(0,PChar('ERROR (' + IntToStr(Result1) + ')'),'Message Box', mb_OK); Exit; end; // Set Wininit.ini Result1:= SetWininit; if Result1= 99 then begin MessageBox(0,PChar('ERIOUS ERROR(99) : Look ''Error.txt'' File, and Edit MSDOS.SYS.'),'Message Box', mb_OK); Exit; end else if Result1>0 then begin MessageBox(0,PChar('ERROR (' + IntToStr(Result1) + ')'),'Message Box', mb_OK); Exit; end; // Reboot ExitWindowsEx(EWX_REBOOT, 0); end. Original document by n-tack 氏 ID:(HZY01767)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum