Windows2000なのにWin32sと出るのは?

解決


みけにゃん  URL  2002-10-30 20:14:17  No: 1859

メーラと同時進行でメーラの文章を外部から編集できるメモ帳を
一緒に作っているのですが、その時にMemoコンポーネントの
Windows9x系での32KBの制限をチェックしようとOSのバージョンと
ファイルサイズの取得をしてWindows9x系で32KB以上のファイルを
読み込もうとしたらメッセージを表示してNT(2000等)の場合は
事実上の制限がないのでそのまま読み込むと言う条件を作って
Windows2000Professionalでやってみたのですが、なぜか
何度やってもWIN32s(Windows3.1+Win32s)に条件が飛んでしまうのですが
これはどうして起こるのでしょうか?

// ファイルを読み込む
procedure TForm1.Open1Click(Sender: TObject);
var
  Rec      : TSearchRec;
  intSize  : Integer;
  DataSize : Integer;
  OsType   : Integer;
begin
  if OpenDialog1.Execute then
  begin
    GetVersionEx(OSver);
    FindFirst(OpenDialog1.FileName, faAnyFile, Rec);
    intSize  :=   Rec.Size;
    DataSize := intSize div 1024;

    ShowMessage(IntToStr(DataSize));

    case OSver.dwPlatformId of
      VER_PLATFORM_WIN32s: OsType := 0;         // Windows3.1+Win32s
      VER_PLATFORM_WIN32_WINDOWS: OsType := 1; // Windows9x(95&98&Me)
      VER_PLATFORM_WIN32_NT: OsType := 2;      // WindowsNT(3.51&4.0&2000&XP)
    else
      OsType := 3;
    end;

    if OsType < 1 then
    begin
      if DataSize > 32 then
      begin
        ShowMessage('Windows95,98,Meでは32KB以上のファイルは開けません!!');
        Exit;
      end;
    end;

    Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
    SaveDialog1.Filename := OpenDialog1.FileName;
    Caption := ExtractFileName(OpenDialog1.FileName) + ' - NyantaPad';
    bMod := False;
  end;
end;


にしの  2002-10-30 20:26:02  No: 1860

GetVersionExに失敗しているからでしょう。
if GetVersionEx(OSver) = 0 then ShowMessage('失敗');
として、失敗とダイアログが出れば失敗しています。
考えられるのは、「OSVerの構造体サイズが未設定」です。
ちゃんと設定してありますか?


みけにゃん  URL  2002-10-30 20:40:13  No: 1861

構造体のサイズの設定をしないまま取得をしていたようです。
あとは32KB以上ファイルを読み込めるエディッタにファイル名を
渡してShellExecuteで呼び出してみます。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加