Re: [WIN] GetLogicalDrives returns drives NOT present
- Posted by CChris <christian.cuvier at a?riculture.go?v.fr> Jan 29, 2008
- 1110 views
Dan Moyer wrote: > > > When trying to use: > }}} <eucode> > if equal(dir( aDrive & "://" ) , -1) then > puts(1, "drive not ready") > end if > </eucode> {{{ > to check if a listed drive is "ready" (actually present when some drives > are reported present when they're not), I get error messages when the > routine encounters drives that are NOT ready. > > Searching for how to suppress the error message, I find the following, in > what I think I recognize as Pascal code. > > Does it seem like it's likely to do what I want, and does anyone have any > suggestions for translating it into Euphoria code? :) > > Dan > > You can use the Windows API Function SetErrorMode() To suppress the > Window's critical Error dialog. > > Function IsDriveReady(DriveLetter : char) : bool; > var > OldErrorMode : Word; > OldDirectory : String; > begin > OldErrorMode := SetErrorMode(SEM_NOOPENFILEERRORBOX); > GetDir(0, OldDirectory); > {$I-} > Chdir(DriveLetter + ':\'); > {$I+} > If IoResult <> 0 Then > Result := False > Else > Result := True; > > Chdir(OldDirectory); > SetErrorMode(OldErrorMode); > End; > > procedure TForm1.Button1Click(Sender: TObject); > begin > If Not IsDriveReady('A') then > ShowMessage('Drive Not Ready') else > ShowMessage('Drive is Ready'); > End; That would work too. Suppressing system errors is something you have to do at some point while developing a piece of software, most importantly a driver, so the command has to be there. But I certainly wouldn't recommand doing that as part of normal code operation. Try perhaps something cleaner using GetLogicalDriveStrings() and GetVolumePathNamesFromVolumeName() APIs. CChris