喫茶XRAYトップページ

[スレッド全体
]

[12810] Windows XP 元号対応返信 削除
2019/5/6 (月) 22:48:35 Mr.XRAY
こんな感じで.
後でコードをその他のページに掲載しておきます.
Windows XP の System32 内の locale.nls というファイルを操作するんですが,
それが System32 内のファイルということで,ちょっと問題が.
そのことも記事に書いておきます.
リストに明治がありませんが.う〜ん.今のところ分かりません.

※ ねつ造画像ではありません.


[12833] Re:Windows XP 元号対応返信 削除
2019/5/7 (火) 22:53:35 Mr.XRAY
▼ Mr.XRAYさん
> 後でコードをその他のページに掲載しておきます.

ということで,謹んで記事を掲載させて頂きました.

[ Windows XP の元号追加と locale.nls ファイル ]
http://mrxray.on.coocan.jp/Delphi/Others/WindowsXP_AddEraName.htm


[12878] Re2:Windows XP 元号対応返信 削除
2019/5/21 (火) 23:09:07 Mr.XRAY
> ということで,謹んで記事を掲載させて頂きました.

以下の項目で,参考リンクの記事の情報を元に,と書いていますが,
実際にはデータ調査用のプログラムを作成して調べています.
バイナリデータを眺めているだけで理解できるほどの能力がありませんので.
 
[ locale.nls ファイルに元号の情報を追加するプログラム ]
http://mrxray.on.coocan.jp/Delphi/Others/WindowsXP_AddEraName.htm#01

文字列の後の 0 は Null 終端文字です.後は数値です.
こういうデータを眺めて,あるいはアドレスを調べて判定していくわけです.
参考までに.
でも,こんなこと,もう二度とすることはなでいしよう (笑)



[12881] 専用アプリ ?返信 削除
2019/5/25 (土) 18:19:06 Mr.XRAY
> [ locale.nls ファイルに元号の情報を追加するプログラム ]
> http://mrxray.on.coocan.jp/Delphi/Others/WindowsXP_AddEraName.htm#01


ここのリンクの記事にある「専用アプリ」てすが,分かりません.
https://okamerin.com/nc/title/gengou_2019_winxp_howto.htm

「令和追加くん」というのが該当するような気もします.
同じサイトの別のページに

> 元号の専用アプリで変更可能です

という記述もあるので,どこかにあるのかも知れません.
一応 Vector を探してみましたが,見つかりませんでした.

# そんだらこと私に訊いても無駄だがや,世田谷,千駄ヶ谷,雑司ヶ谷,


[12882] 意地と根性で修正返信 削除
2019/5/27 (月) 17:11:10 Mr.XRAY
意地と根性で修正して更新しました.

[ locale.nls ファイルに元号の情報を追加するプログラム ]
http://mrxray.on.coocan.jp/Delphi/Others/WindowsXP_AddEraName.htm#01

> ここのリンクの記事にある「専用アプリ」てすが,分かりません.
> https://okamerin.com/nc/title/gengou_2019_winxp_howto.htm



↑ の記事の内容も気になっていました.MD5 ハッシュの値を列挙するぐらいなら,
具体的な場所と値を提示してしまえばいいのに.
ということはさておいて.

気になって長い形式を調べたら

gg y'年'M'月'


というが追加されていました.もちろん,元号追加前にはありません.
で,意地と根性で調べました.元号の数が,

> 年号の個数: オフセット: 3F8D4
> 4 → 5


というのは違うようです.私も 4 という数字に惑わされてしまいました.
何故こんなところに元号の数があるんだ ? とは思っていたことはいたのですが.
以下は,短い形式と長い形式を調べるために使用したコードです.
EXE 作成は Windows 7 U64(SP1) + Delphi XE5(UP2) Pro VCL-32 です.

  TFNDateFmtEnumProcEx = TFarProc;

  function EnumDateFormatsExW(lpDateFmtEnumProc: TFNDateFmtEnumProcEx;
    Locale: LCID; dwFlags: DWORD): BOOL; stdcall; external 'kernel32.dll';

var
  Form1: TForm1;

implementation

var
  FStrList : TStringList;

{$R *.dfm}

//------------------------------------------------------------------------------
//  EnumDateFormatsExW 関数のコールバック関数
//  日付の形式の書式文字列を列挙
//
//  引数の  CalendarID の値は以下の通り
//  [和暦] [西暦 (英語(] [西暦 (日本語)] の個別のリストを取得する場合に使用する
//
//  1:  CAL_GREGORIAN  Gregorian (localized)
//  2:  CAL_GREGORIAN_US  Gregorian (English strings always)
//  3:  CAL_JAPAN Japanese Emperor Era
//------------------------------------------------------------------------------
function EnumDateFormatsProcEx(lpDateFormatString : PChar;
  CalendarID: CALID) : integer; stdcall;
begin
  FStrList.Add(lpDateFormatString);
  Result := 1;
end;

//============================================================================
//  [地域と言語のオプション] [カスタマイズ] のダイアログを表示
//  [日付] タブの [短い形式] の選択リスト
//  ただし [和暦] [西暦 (英語(] [西暦 (日本語)] 全てのリスト
//============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  FStrList := TStringList.Create;
  try
    EnumDateFormatsExW(@EnumDateFormatsProcEx,
                       LOCALE_SYSTEM_DEFAULT,
                       DATE_SHORTDATE);
    Memo1.Lines.Text := FStrList.Text;
  finally
    FreeAndNil(FStrList);
  end;
end;

//============================================================================
//  [地域と言語のオプション] [カスタマイズ] のダイアログを表示
//  [日付] タブの [長い形式] の選択リスト
//  ただし [和暦] [西暦 (英語(] [西暦 (日本語)] 全てのリスト
//============================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
  FStrList := TStringList.Create;
  try
    EnumDateFormatsExW(@EnumDateFormatsProcEx,
                       LOCALE_SYSTEM_DEFAULT,
                       DATE_LONGDATE);
    Memo1.Lines.Text := FStrList.Text;
  finally
    FreeAndNil(FStrList);
  end;
end;




[12883] Re:意地と根性で修正返信 削除
2019/5/27 (月) 18:38:25 Mr.XRAY
> 意地と根性で修正して更新しました.

元号はとっくのとうに変わっているのに今更,と思っている方いるでしょう ?
その通りなんですよ.
でも,全く関心がなかったんです.
サポート期間内の Windows であれば,間違いなく Update 等があると思っていましたから.
しかし,です.
ということなのでございます.

結局,南極,放送局.
私の人生,こんなもんです.ハイ.


[12884] Re2:意地と根性で修正返信 削除
2019/5/27 (月) 20:13:03 taki
▼ Mr.XRAYさん
> > 意地と根性で修正して更新しました.
>
> 元号はとっくのとうに変わっているのに今更,と思っている方いるでしょう ?
> その通りなんですよ.
> でも,全く関心がなかったんです.
> サポート期間内の Windows であれば,間違いなく Update 等があると思っていましたから.
> しかし,です.
> ということなのでございます.
>
> 結局,南極,放送局.
> 私の人生,こんなもんです.ハイ.


マスター、お疲れ様でした。

MSからいくら位ふんだくりましょうかね。


[12885] Re3:意地と根性で修正返信 削除
2019/5/27 (月) 21:58:40 Mr.XRAY
▼ takiさん

> MSからいくら位ふんだくりましょうかね。

ハハハッ.
5 月分の出力に間に合えばいいとのことですが,
本当に和暦表示が必要なのか疑問が.
元年という表示を希望する人もいるいるぐらいですから.

今回の作業は質問のレスというより,代価を頂いてもおかしくない仕事ですね.
そういう業者がいるかどうかは別として.
(代価を頂いてしまうと公開できない可能性はありますね)

locale.nls を添付してもいいというのであれば,
Microsoft Windows インストーラにしてしまう手もありますね.
まっ,いろいろ勉強にはなりました.


[12886] Re4:意地と根性で修正返信 削除
2019/5/28 (火) 18:42:06 Mr.XRAY
> で,意地と根性で調べました.元号の数が,
>
> > 年号の個数: オフセット: 3F8D4
> > 4 → 5
>
> というのは違うようです.私も 4 という数字に惑わされてしまいました.


解析結果なんか興味ないと思いますが,折角解析したのでリストしておきます.
サイズはバイト値です,4 バイトは DWORD, 2 バイトは WORD 値ということになります.
値は元号追加前の値です.

アドレス  サイズ  値  意味
------------------------------------------------------------------
$3F8D4    4        4   元号情報開始オフセット値へのオフセット
$3F8D8    2        9   文字 3 へのオフセット値
$3F8DA    2       11   文字 99 へのオフセット値
$3F8DC    2       14   元号情報開始位置オフセット
$3F8DE    2       62   日付の形式 1 の開始オフセット
$3F8E0    2      174   日付の形式 2 の開始オフセット
$3F8E2    2      186   日付の形式 3 の開始オフセット
$3F8E4    2      334   その他の日付の形式関係情報のオフセット

で,問題の 4,つまり元号の数だと思っていたのは,ということです.
ただし,Windows XP ではこの値は使用していないようです.
実際には先頭のアドレスからのオフセットで自動処理しているようです.
この値を 10 とか 50 とかにしても結果に変化はありません.
つまり,ユーザか任意に使用していいようです.
元号の数の判定に使用してもいいということになりますです.


追記
長い形式に 「gg y'年'M'月'」というのが挿入されてしまったのは,
この元号の数の設定のせいではありません.
私か,オフセットの解釈を間違えて,処理をサボったためです.


[12887] バイナリエディタでの編集がお好き ?返信 削除
2019/5/29 (水) 14:38:15 Mr.XRAY
バイナリエディタを使用して直接編集したい方もいるようですので.以下を追加

[ バイナリエディタで locale.nls に元号の情報を追加する手順 ]

追記
やっぱりどう考えても不要,と思い,↑ は削除しました.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82