[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/09/09(Fri) 14:33
投稿者名:うえ
URL :
タイトル:
API使用時のOS環境による問題
はじめまして。
現在、APIのGetDriveTypeを使用し、コンボボックスで指定されたドライブタイプを取得しています。
そこでOS環境を変え試してみている(Windows98,98SE,2000,XP)のですが
Windows98の時に内蔵のハードディスク(通常C:とか)がルートディレクトリなしとして
判断されます。他のOS環境の場合は固定ディスクとして判断されます。
これはDLLとかの問題なのでしょうか?
どなたか分かる方がいらっしゃいましたらお願いします。

投稿時間:2005/09/09(Fri) 18:51
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: API使用時のOS環境による問題
> そこでOS環境を変え試してみている(Windows98,98SE,2000,XP)のですが
> Windows98の時に内蔵のハードディスク(通常C:とか)がルートディレクトリなしとして
> 判断されます。他のOS環境の場合は固定ディスクとして判断されます。

単にその os の C ドライブが無いだけでは。
マイコンピュータでドライブを確認して見て下さい。

Windows98 も WindowsXP も C ドライブがハードディスクなら 3 が返ってきて
いるはずです。

投稿時間:2005/09/12(Mon) 09:11
投稿者名:うえ
URL :
タイトル:
Re^2: API使用時のOS環境による問題
> > そこでOS環境を変え試してみている(Windows98,98SE,2000,XP)のですが
> > Windows98の時に内蔵のハードディスク(通常C:とか)がルートディレクトリなしとして
> > 判断されます。他のOS環境の場合は固定ディスクとして判断されます。
>
> 単にその os の C ドライブが無いだけでは。
> マイコンピュータでドライブを確認して見て下さい。
>
> Windows98 も WindowsXP も C ドライブがハードディスクなら 3 が返ってきて
> いるはずです。

お返事ありがとうございます。
Windows98の os で確認しましたが、ちゃんと C ドライブはありました。
外付けのハードディスクでも試そうとしましたが
所持しているものが Windows98SE 以降のものしか対応出来ないので
試せませんでした。
やはりソース上で os のバージョンを調べて Windows98の時だけの
対応をした方がいいでしょうか?

投稿時間:2005/09/12(Mon) 10:07
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: API使用時のOS環境による問題
> やはりソース上で os のバージョンを調べて Windows98の時だけの
> 対応をした方がいいでしょうか?

私の実行結果も Windows98 SE VB6.0(SP6)、Windows98 VB6.0(SP6)、Windows95 VB5.0(SP3) で
問題なく取得できております。
関数の実行結果の戻り値は幾つになっていますか?
コードになにか問題があるという事はないですか?
うまく取得できない Windows98 のパソコンの詳しい仕様は、メーカ名・機種 等は?
実際のドライブの構成はどのようになっていますか?(OS はどのドライブにありますか)

投稿時間:2005/09/12(Mon) 10:34
投稿者名:うえ
URL :
タイトル:
Re^4: API使用時のOS環境による問題
> > やはりソース上で os のバージョンを調べて Windows98の時だけの
> > 対応をした方がいいでしょうか?
>
> 私の実行結果も Windows98 SE VB6.0(SP6)、Windows98 VB6.0(SP6)、Windows95 VB5.0(SP3) で
> 問題なく取得できております。
> 関数の実行結果の戻り値は幾つになっていますか?
> コードになにか問題があるという事はないですか?
> うまく取得できない Windows98 のパソコンの詳しい仕様は、メーカ名・機種 等は?
> 実際のドライブの構成はどのようになっていますか?(OS はどのドライブにありますか)

関数の実行結果の戻り値は1で返ってきました。
コードには問題ないようです。
Windows98のメーカ名・機種は以下です。
メーカ名:Fujitsu
機種:FMV DESKPOWER CIX35L
ちなみに、Windows98SEも同じです。
OSは C ドライブにありました。

投稿時間:2005/09/12(Mon) 11:07
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: API使用時のOS環境による問題
私の場合は、前記の通り問題なく、貴方の場合に問題があるようなので
もっと詳しい状況を書いて頂かないと判断できないのでは。
使用VBのバージョンも書いていないし、SPにしたって、Aドライブ〜Fドライブ
までの取得結果と実際の構成等。(実際にテストした機種それぞれについて)
(特に、 C と D の結果)
プログラムに間違いがないと言われても他の人は見たわけではないし、何をもって
間違いなしとおっしゃっているのか解らないし。
私の場合Win95 VB5.0 で取得しても、ハードディスクは 3 が返ってくるので
貴方の言っている DLL とかの問題ではないと思いますよ。

投稿時間:2005/09/12(Mon) 11:39
投稿者名:うえ
Eメール:
URL :
タイトル:
Re^6: API使用時のOS環境による問題
返信ありがとうございます。
確かにわかりませんね。
製造環境ではWindowsXP,VB6.0です。
今回はAccessのシステムをVBのインストーラで作成するために作られています。
なので他の OS ではパッケージソフトとしてテストしました。
SPはバージョン情報を見て、「Microsoft Visal Basic 6.0」の
横に書いてあるものですか?書いてないのでSPは何も更新してないかと…。
その辺、ちょっとよく分からないのですが。
取得結果は以下の通りです。
WindowsXP
C:ローカルディスク・・・3
D:ローカルディスク・・・3
E:DVD/CD-RWドライブ・・・5
T:ネットワークドライブ・・・1

Windows2000
A:フロッピードライブ・・・2
C:ローカルディスク・・・3
D:ローカルディスク・・・3
E:DVD/CD-RWドライブ・・・5
T:ネットワークドライブ・・・1

Windows98SE
A:フロッピードライブ・・・2
C:ローカルディスク・・・3
E:CD-RWドライブ・・・5
T:ネットワークドライブ・・・1

Windows98
A:フロッピードライブ・・・2
C:ローカルディスク・・・1
E:CD-RWドライブ・・・5
T:ネットワークドライブ・・・1

投稿時間:2005/09/12(Mon) 11:46
投稿者名:うえ
Eメール:
URL :
タイトル:
Re^7: API使用時のOS環境による問題
前記の続きです。
プログラムは以下の通りに作成しました。
一部ですが・・・。

Private Declare Function GetDriveType Lib "kernel32" _
    Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Const DRIVE_TYPE_UNDTERMINED = 0 'ドライブが不明
Private Const DRIVE_NO_ROOT_DIR = 1      'ルートディレクトリなし
Private Const DRIVE_REMOVABLE = 2        'フロッピー又はリムーバブルディスク
Private Const DRIVE_FIXED = 3            '固定ディスク(ハードディスク)
Private Const DRIVE_REMOTE = 4           'リモート又はネットワークドライブ
Private Const DRIVE_CDROM = 5            'CD-ROMドライブ
Private Const DRIVE_RAMDISK = 6          'RAM ディスク

Private Sub drvDrives_Change()
    Dim ret As Long
    
    ret = GetDriveType(drvDrives.Drive)
    Select Case ret
        Case DRIVE_TYPE_UNDTERMINED
            Call MsgBox("ドライブが不明", vbOKOnly)
        Case DRIVE_NO_ROOT_DIR
            Call MsgBox("ルートディレクトリなし", vbOKOnly)
        Case DRIVE_REMOVABLE
            Call MsgBox("フロッピー又はリムーバブルディスク", vbOKOnly)
        Case DRIVE_FIXED
            Call MsgBox("固定ディスク(ハードディスク)", vbOKOnly)
        Case DRIVE_REMOTE
            Call MsgBox("リモート又はネットワークドライブ", vbOKOnly)
        Case DRIVE_CDROM
            Call MsgBox("CD-ROMドライブ", vbOKOnly)
        Case DRIVE_RAMDISK
            Call MsgBox("RAM ディスク", vbOKOnly)
    End Select
End Sub

このように取得したドライブごとにメッセージを出力しています。

投稿時間:2005/09/12(Mon) 13:41
投稿者名:YK
Eメール:
URL :
タイトル:
Re^8: API使用時のOS環境
こんにちは。
横から失礼します。

下記のようにしたらどうなりますか。

>     ret = GetDriveType(drvDrives.Drive)
ret = GetDriveType(Left(drvDrives.Drive, 2) & "\")

投稿時間:2005/09/12(Mon) 13:48
投稿者名:だい
Eメール:dee_bassist@hotmail.com
URL :http://homepage2.nifty.com/Dee/
タイトル:
Re^8: API使用時のOS環境
hhttp://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/jpfileio/html/_win32_getdrivetype.asp
によれば、
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
となっているので、Win98(無印)でも使用できるはずです。

とりあえず、問題切り分けのため、もっと単純化しましょう。
GetDriveType("c:\")                              
の実行結果を確認してみてください。
これでAPIの問題なのかアプリの問題なのかはっきりすると思いますよ。

もし、上記で正常であれば、 GetDriveTypeへ渡している文字列に
問題がある可能性があります。
APIの仕様上、「最後に円記号が必要」と明記されていますが、

>ret = GetDriveType(drvDrives.Drive)

がドライブリストボックスのDriveプロパティであった場合、
末尾に「\」がつきませんし、
ボリュームラベルを設定したハードディスクドライブの場合は、
「C: [VOLUMELABEL名] 」
のように余計な文字列がつく場合もあります。
(この場合は、DRIVE_NO_ROOT_DIRになります。Win98だけでなく、どのOSであってもです。)
その辺を今一度確認してみてください。

投稿時間:2005/09/12(Mon) 14:49
投稿者名:うえ
Eメール:
URL :
タイトル:
Re^9: API使用時のOS環境
返信ありがとうございます。
確かに引数を drvDrives.Drive だけだと C: しかもってきてませんでした。
YKさんのように ret = GetDriveType(drvDrives.Drive & "\")
としたところ、ちゃんと読み込めました。
しかし 98以外の os の時はハードディスクと読み込み
98だけ DRIVE_NO_ROOT_DIR となったのは何故なのでしょうか?

投稿時間:2005/09/12(Mon) 15:46
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re:API使用時のOS
> YKさんのように ret = GetDriveType(drvDrives.Drive & "\")
> としたところ、ちゃんと読み込めました。
だからコードが間違っていませんか? と確認したのに.....!
ここの逆引きヘルプに記載されているコードは確認されなかったのですか?

> しかし 98以外の os の時はハードディスクと読み込み
> 98だけ DRIVE_NO_ROOT_DIR となったのは何故なのでしょうか?

だい さんが回答されているかと。
マイコンピュータのドライブ名を良く見比べて見て下さい。

投稿時間:2005/09/12(Mon) 16:01
投稿者名:うえ
Eメール:
URL :
タイトル:
Re:API使用時の
すみませんでした。
もっと逆引きヘルプを見ておくべきでしたね。
全て問題は解決しました。
長々とありがとうございました。

投稿時間:2005/09/12(Mon) 12:01
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^7: API使用時のOS環境による問題
> SPはバージョン情報を見て、「Microsoft Visal Basic 6.0」の
> 横に書いてあるものですか?書いてないのでSPは何も更新してないかと…。
最新のサービスパックは、6 です、少なくても 5 以上は当てておいて下さい
それから、再確認して見て下さい。

又、下記 コードは試されたのでしょうね。 
hhttp://www.bcap.co.jp/hanafusa/VBHLP/Drive.htm



> Windows98
> A:フロッピードライブ・・・2
> C:ローカルディスク・・・1
> E:CD-RWドライブ・・・5
> T:ネットワークドライブ・・・1

D ドライブもあったと思うのですが? **通 のCIX35L ですよね。
hhttp://www.fmworld.net/product/former/dp9901/cm.html
何か変更されているのでしょうか?
その他のWin98 で確認できませんか。