NT と 95 を判断する方法No.00642
Micky さん 99/07/13 23:59
 
毎度お世話になります。(質問ばかりですが。)

マクロの中から WindowsNT で動いているか、Windows95で
動いているかを判断したいのですが、
どうやるのが簡単なんでしょう?
やはりレジストリを見るのが正規の方法なんでしょうか?

ずっとWindows95で使っていたのですが、動作が不安定に
なったので、最近WindowsNT 4.0 に入れ替えました。
runsync2 "command.com /c xxxx"
としていたところを
runsync2 "cmd /c xxxx"
に変更したのですが、汎用性を持たせたいと思っています。

[ ]
RE:00642 NT と 95 を判断する方法No.00644
安久津 さん 99/07/14 06:33
 

はじめまして Micky さん、安久津といいます。

>マクロの中から WindowsNT で動いているか、Windows95で
>動いているかを判断したいのですが、
>どうやるのが簡単なんでしょう?
以下は、カラー秀丸ベータテストの時に、ぢぇいさんから教わりました。
run "cmd.exe"; //(1)
##NT = result; //(2)
 if( ##NT ) runsync2 "cmd /c xxxx";
 else runsync2 "command.com /c xxxx";

私の環境は 95 ですが、(1)の実行時にちょっとマクロがもたつきます。
ので、結果の(2)は、INIファイルやレジストリに保存したほうが良いです。

ではでは。
# 遅ればせながら、ぢぇいさんありがとうございました。m(__)m

[ ]
RE:00644 NT と 95 を判断する方法No.00647
Micky さん 99/07/14 09:40
 
>run "cmd.exe"; //(1)
>##NT = result; //(2)
> if( ##NT ) runsync2 "cmd /c xxxx";
> else runsync2 "command.com /c xxxx";
なるほど、これは気がつきませんでした。
runsync2 "cmd /c xxxx";
##NT = result;
if( !##NT ) runsync2 "command.com /c xxxx";
でつかってみることにします。
95では試していませんが、NTでは期待どうりの
どうさをしてくれました。

ありがとうございました。

ところで、メールでの投稿ってどうするんでしたっけ?

[ ]
RE:00647 NT と 95 を判断する方法No.00648
安久津 さん 99/07/14 18:47
 
こんにちは安久津です。

>ところで、メールでの投稿ってどうするんでしたっけ?
WWWブラウザーでアクセスしているのなら、
秀シリーズサポートフォーラムのトップページにある
http://www.maruo.co.jp/hidesoft/setup.asp
で、設定できます。

# |秀ネット|フォーラムトップ| 【設定】<-これ |チャットルーム[n]人|
# □投稿された内容をメールで受け取る にチェック

ではでは。

[ ]
RE:00648 NT と 95 を判断する方法No.00649
Micky さん 99/07/15 21:42
 
毎度お世話になります。
タイトルとは関係ないは無しになってしまって、恐縮です。

>>ところで、メールでの投稿ってどうするんでしたっけ?
>WWWブラウザーでアクセスしているのなら、
>秀シリーズサポートフォーラムのトップページにある
>http://www.maruo.co.jp/hidesoft/setup.asp
>で、設定できます。
>
># |秀ネット|フォーラムトップ| 【設定】<-これ |チャットルーム[n]人|
># □投稿された内容をメールで受け取る にチェック

これはチェックしているのですが、
確かにメールで受け取れて、便利です。

で、リプライを書くときは単にメーラーの「返信」で
書けばよいのですかね?

それとも、どこか別のところにメールを送るのでしょうか?

どこかで読んだような気がするのですが、見つからなくて・・・

[ ]
RE:00642 NT と 95 を判断する方法No.00654
杉浦 まさき さん 99/07/19 01:38
 
Micky さん、こんばんは。
杉浦 まさき です。

>マクロの中から WindowsNT で動いているか、Windows95で
>動いているかを判断したいのですが、
>どうやるのが簡単なんでしょう?
>やはりレジストリを見るのが正規の方法なんでしょうか?

ほぼ同じ事ですが、getenv("OS") の返り値を見る、
という手でもいけそうですね。
#Win9X でどういう値が返ってくるかは??ですが、
 WinNT では "Windows_NT" という文字列が返ってくるはずです。

あと、cmd.exe で判断する方法が紹介されていましたが、
実行させるよりは existfile(winsysdir+"\\cmd.exe")
の返り値で判断した方が、速度的に有利だと思います。

ではでは。


[ ]
RE:00654 NT と 95 を判断する方法No.00659
安久津 さん 99/07/19 13:40
 
こんにちは杉浦さん、安久津です。

>ほぼ同じ事ですが、getenv("OS") の返り値を見る、
>という手でもいけそうですね。
>#Win9X でどういう値が返ってくるかは??ですが、
Win95では、NULLが帰ってきます。
というか、Win95では getenv()は使えないみたいです。
Win98はどうなんでしょうか?>98ユーザー

> WinNT では "Windows_NT" という文字列が返ってくるはずです。
Win98でも、NULLなら getenv()の戻り値で OS の判定は決まりですね。

>実行させるよりは existfile(winsysdir+"\\cmd.exe")
あちゃー、決定打。

ではでは。

[ ]
RE:00659 NT と 95 を判断する方法No.00661
杉浦 まさき さん 99/07/19 23:44
 
安久津さん、こんばんは。
杉浦 です。

>>#Win9X でどういう値が返ってくるかは??ですが、
>Win95では、NULLが帰ってきます。

Win9X には "OS" という環境変数が登録されていないみたいですね…。
というわけで、安久津さんの言う通り、
getenv("OS") の返り値が "" かどうかで
Win9X 系と WinNT を区別できると思いますが…。

>Win98はどうなんでしょうか?>98ユーザー

Win98 では getenv() 関数そのものは正常に動作しています。
Win95 で駄目だったのが??です。

#そういえば…田楽鯖にもOSのバージョンetc.の情報を返す、
 そんなコマンドを入れた覚えが…<しかし既に忘却の彼方(^^;


[ ]
RE:00661 NT と 95 を判断する方法No.00662
安久津 さん 99/07/20 05:39
 
こんにちは杉浦さん、安久津です。

>getenv("OS") の返り値が "" かどうかで
>Win9X 系と WinNT を区別できると思いますが…。
自力で環境変数 OS を設定している人がいたりして。(^^;
しかも、勝手なやつ。
SET OS=i_mac_strawberry \(--;)ソレハ OS デナイ。

やっぱり正確に getenv( "OS" ) == "Windows_NT" ですね。

>Win98 では getenv() 関数そのものは正常に動作しています。
>Win95 で駄目だったのが??です。
これ再確認したら、ちゃんと正常に動きました。
BLASTER、PATH、TMP、TZ 他、みんな取得できました。
# 発言00626の時には、動かなかったのに。(?_?)
# それ以前も動かなかったんで、ふてくされていたんです。

ではでは。
#「Win95ではgetenv()が使えない」と思わないで。>98/NTユーザー

[ ]
RE:00649 NT と95 を判断する方法No.00663
Micky さん 99/07/23 21:12
 


Micky wrote:
> これはチェックしているのですが、
> 確かにメールで受け取れて、便利です。
>
> で、リプライを書くときは単にメーラーの「返信」で
> 書けばよいのですかね?
単にリプライで書くと良いようですね。

新規の場合はわかりませんが。
xxxxxxxxxx@maruo.co.jp
あたりに新規で送れば良いのかも・・・

[ ]
RE:00663 NT と95 を判断する方法No.00665
安久津 さん 99/07/23 23:03
 
こんにちは Micky さん、安久津です。

>新規の場合はわかりませんが。
>xxxxxxxxxx@maruo.co.jp
>あたりに新規で送れば良いのかも・・・
その通りです。

秀ネットサポートフォーラムあたりで詳しい情報が得られるかも。
http://www.maruo.co.jp/hidenet/
http://www.maruo.co.jp/hidenet/1/index.html

ではでは。
# てっきり自力で解決したのかと思っていました。(^^;

[ ]
RE:00642 NT と 95 を判断する方法No.00869
ENCODINGSHIFTJIS さん 99/12/01 16:03
 
>に変更したのですが、汎用性を持たせたいと思っています。

コマンドプロセッサ起動だけなら判断しない方法も
x.bat
%COMPEC% %1 %2 %3 %4 %5
x.bat を空実行させて x.lnk アイコンを作っておく

runXXX "x.bat ......";
または
runXXX "start x ....";

runXXX "%COMSPEC% ...";これは? %COMPSEC% は展開されているが。

NTの事はわかりませんが。



[ ]
RE:00869 NT と 95 を判断する方法No.00870
ENCODINGSHIFTJIS さん 99/12/01 16:30
 
>>に変更したのですが、汎用性を持たせたいと思っています。
>
>コマンドインタープリタだけなら判断しない方法も 2

runsync2 "start command %comspec% /c dir";
runsync  "start command %comspec% /k dir";
run      "start command %comspec% /c dir";

動きます。

>NTの事はわかりませんが。
>
>□

[ ]
RE:00870 NT と 95 を判断する方法No.00872
ENCODINGSHIFTJIS さん 99/12/01 17:48
 

疑問
run = start/r
runsync = start/m/w
runsync2= start/r/w

同等ですか?



[ ]
RE:00870 NT と 95 を判断する方法No.00874
杉浦 まさき さん 99/12/01 23:48
 
こんばんは。
杉浦 まさき です。

>>NTの事はわかりませんが。

NT にも ComSpec の値はあります。
#cmd.exe へのフルパスが。


[ ]
RE:00872 NT と 95 を判断する方法No.00875
杉浦 まさき さん 99/12/01 23:53
 
再び 杉浦 です。

>疑問
>run = start/r
>runsync = start/m/w
>runsync2= start/r/w
>同等ですか?

実行ファイルを指定した場合は同等だと思いますが、
start は何らかのアプリに関連付けられたファイルを
指定すると、ちゃんとそのアプリを実行してくれますね。
#C:\>start foo.txt で *.txt に関連付けられたアプリで
 foo.txt が開かれる、と。

#ちなみに、田楽鯖の run** は start .. と「同等」です。


[ ]
RE:00662 NT と 95 を判断する方法No.00876
える さん 99/12/02 00:06
 
>>getenv("OS") の返り値が "" かどうかで
>>Win9X 系と WinNT を区別できると思いますが…。
>自力で環境変数 OS を設定している人がいたりして。(^^;

Win95 のバックアップを見ると

SET OS=Windows_NT

って、書いてありました。
Win95/NT 用のコマンドラインツールが、子プロセスを呼び出す場合に、その子プロ
セスを NT だとだまして動かすというもので、必要があってつけてたんだと思います。
# が、\HOME\BIN のどのファイルが使っているかわからなかった(汗

他にも複数台の PC で Win95/NT を使っていて移動プロフィールを利用されている場
合には OS が設定されている場合もありえるでしょう.

DLL 対応版なら return _winmajor, return _winminor, return _osver といった値
を戻すだけの関数がある DLL でも作ればよいとして、現状のものにはなんか違いを
利用したものが必要でしょうか。

たとえば、Win95/98 では INI ファイルに TAB 文字が含まれるとそれ以降を無視す
るという仕様があるので、writeinistr で "test\ttest" と書き込んでから readini
str で読み出して比較するなんてのが1つの案として考えられます。

[ ]
RE:00875 NT と 95 を判断する方法No.00877
える さん 99/12/02 00:16
 
>start は何らかのアプリに関連付けられたファイルを
>指定すると、ちゃんとそのアプリを実行してくれますね。
>#C:\>start foo.txt で *.txt に関連付けられたアプリで
> foo.txt が開かれる、と。

他にも修飾のない CMD というリテラルを現在のコンソールシェルとして扱う機能が
あるようです

CMD.EXE hoge

とすると .\CMD.EXE や、環境変数 PATH 上の CMD.EXE が検索されますが、

CMD hoge

とすると、現在のコンソールシェル(cmd.exe や command.com)をパラメータ hoge を
つけて実行します。
.\cmd.exe より優先的になるため偽の同名ファイル実行による誤動作を防ぐためにあ
る機能でしょう。

UNIX 系の OS で、path に . を含めないのと同じ理由ですね。

[ ]
RE:00876 NT と 95 を判断する方法No.00879
杉浦 まさき さん 99/12/03 00:37
 
えるさん、こんばんは。
杉浦 まさき です。

>DLL 対応版なら return _winmajor, return _winminor, return _osver といった値
>を戻すだけの関数がある DLL でも作ればよいとして、現状のものにはなんか違いを
>利用したものが必要でしょうか。

宣伝モードで恐縮ですが、
現在β公開中の田楽DLLに用意されてます↑。
#田楽鯖にもありますが、このためだけに使うのは
 ちょっと…という気もします(^^;。


[ ]
RE:00876 NT と 95 を判断する方法No.00901
安久津 さん 99/12/07 18:29
 
こんにちは えるさん、安久津といいます。

>たとえば、Win95/98 では INI ファイルに TAB 文字が含まれるとそれ以降を無視す
>るという仕様があるので、writeinistr で "test\ttest" と書き込んでから readini
>str で読み出して比較するなんてのが1つの案として考えられます。
うっ、TAB保存できないのは Win95/98 だけの「仕様」だったんですか。

  $$tmp = getenv( "TEMP" );
  if( rightstr($$tmp, 1) != "\\" ) $$tmp = $$tmp + "\\";
  $$INI = $$tmp + "tmp.ini";

  writeininum $$INI,"CAN","WRITE",1;
  ##yes = getininum( $$INI,"CAN","WRITE" );
  if( ! ##yes ){ beep; endmacro; }
  writeinistr $$INI,"CAN",0,0;// セクション削除

  $$tab[0] = "A\tA";
  $$space[0] = " A ";
  writeinistr $$INI,"TEST","tab",$$tab[0];
  writeinistr $$INI,"TEST","space",$$space[0];
  $$tab[1] = getinistr($$INI,"TEST","tab");
  $$space[1] = getinistr($$INI,"TEST","space");
  if( $$tab[0] != $$tab[1] )
   message "(1)\n|" + $$tab[0] + "|\n|" + $$tab[1] + "|";// (1)
  if($$space[0] != $$space[1] )
   message "(2)\n|" + $$space[0] + "|\n|" + $$space[1] + "|";// (2)
endmacro;

Win95実行結果。
(1)
|A\tA|
|A|
(2)
| A |
| A|

ではでは。

[ ]
RE:00901 NT と 95 を判断する方法No.00903
える さん 99/12/08 03:25
 
>>たとえば、Win95/98 では INI ファイルに TAB 文字が含まれるとそれ以降を無視す
>>るという仕様があるので、writeinistr で "test\ttest" と書き込んでから readini
>>str で読み出して比較するなんてのが1つの案として考えられます。
>うっ、TAB保存できないのは Win95/98 だけの「仕様」だったんですか。

INI ファイルの仕様は

[SECTION]
KEY=VALUE

という形式で値を保持できます。

・ 1 つのファイルは 64k bytes までが利用できます。

・ 1 つのセクションは 32k bytes までが利用できます。

・WinNT4/2K ではファイル名によってはディスクの上に保存されない可能性がありま
す。

・WinNT4/2K では書き込んだ後でバッファをフラッシュしないと書いた後で読み込ん
でも書き込んだ内容と同じ内容が得られないことがある。
  (バッファフラッシュは WritePrivateProfileString(NULL, NULL, NULL, NULL) で
行う)

・Win95/98 ではタブ文字以降は無視される。

・値の最も外側にあるダブルクオーテーションは取得時に自動的にトリムされる

程度だったと思います。

[ ]