Jump to content

Recommended Posts

Posted

I guys, i trying check if current system HD have a "D" partition. To do something like:

 

If true then Drivesetlabel "C" -> Operational System, Drivesetlabel "D" -> User FIles

else

Drivesetlabel "C" -> Operational System

 

but i cannot do a rellation between c and d to cehck if are from same hd. Thanks in advance

Posted

Check first example in HelpFile:

DriveGetDrive()

 

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted
  On 3/18/2016 at 8:09 PM, mLipok said:

Check first example in HelpFile:

DriveGetDrive()

 

Expand  

Thanks but when i run this code return an array containing (C,D and H). H is my external HD usb that not have relation with my PC HD. If i am in other PC with only C partition with my external USB HD connected it probably will get the D letter and it will rename my external HD with "User Files"

#include <Array.au3>

$aArray = DriveGetDrive("FIXED")

_ArrayDisplay($aArray)

 

Posted (edited)
Func _TEST($aArray, $sDriverLetter)
    For $i = 1 To $aArray[0]
        If StringInStr($aArray[$i], $sDriverLetter) then Return True
    Next
    Return False
EndIf

 

Edited by mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted

I'm not sure I entirely understand the situation, do you want to make sure that C: and D: are actual physically different drives (not a logical partition on a single disk)?  You could rule out USB Drives by doing something like this:

#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>

; Check the drive type for D:\
$DType = DriveGetType("D:\")
MsgBox($MB_SYSTEMMODAL, "", "Drive Type: " & $DType)

; Check the bus type status for D:\
$DBus = DriveGetType("D:\", $DT_BUSTYPE)
MsgBox($MB_SYSTEMMODAL, "", "Drive Bus: " & $DBus)

If $DType = "FIXED" AND $DBus <> "USB" Then
    ; Do Whatver
EndIf

Maybe if you used DriveGetSerial you could tell if C: and D: were physically different drives?  I don;t have a logical partition to test on.

Posted
  On 3/18/2016 at 8:42 PM, MuffinMan said:

I'm not sure I entirely understand the situation, do you want to make sure that C: and D: are actual physically different drives (not a logical partition on a single disk)?  You could rule out USB Drives by doing something like this:

#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>

; Check the drive type for D:\
$DType = DriveGetType("D:\")
MsgBox($MB_SYSTEMMODAL, "", "Drive Type: " & $DType)

; Check the bus type status for D:\
$DBus = DriveGetType("D:\", $DT_BUSTYPE)
MsgBox($MB_SYSTEMMODAL, "", "Drive Bus: " & $DBus)

If $DType = "FIXED" AND $DBus <> "USB" Then
    ; Do Whatver
EndIf

Maybe if you used DriveGetSerial you could tell if C: and D: were physically different drives?  I don;t have a logical partition to test on.

Expand  

I want check if the physical drive that Windows are installed and current running have a second partition.

Posted

You want to use DriveGetType

#include <Array.au3>
Local $aDrives = DriveGetDrive("ALL")
Local $aDrivesWithType = DriveGetDriveAndType($aDrives)

_ArrayDisplay($aDrivesWithType)

Func DriveGetDriveAndType($aDriveGetDrive)
    Local $aReturn[UBound($aDriveGetDrive, $UBOUND_ROWS)][2]

    For $i = 0 To UBound($aDriveGetDrive, $UBOUND_ROWS) - 1
        $aReturn[$i][0] = $aDriveGetDrive[$i]
        $aReturn[$i][1] = DriveGetType($aDriveGetDrive[$i])
    Next
    Return $aReturn
EndFunc   ;==>DriveGetDriveAndType

On mine my HDDs an SSD come up as FIXED, 1 CDROM and my usb comes up as Removable

Posted

_WinAPI_DeviceIoControl in combination with _WinAPI_CreateFileEx.

 

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

  Reveal hidden contents

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Posted

Hi. Just for fun.

#include <WinAPIFiles.au3>
#include <WinAPI.au3>
#include <Memory.au3>
Global Const $sTag_STORAGE_DEVICE_NUMBER = "dword DeviceType;dword DeviceNumber;int PartitionNumber"

Local $sMainDisk=@HomeDrive
Local $sPartition="D:"
Local $DiskNumber1 = _GetDiskNumber($sMainDisk)
Local $DiskNumber2 = _GetDiskNumber($sPartition)

If $DiskNumber1 And $DiskNumber2 Then
    If $DiskNumber1=$DiskNumber2 Then
    ConsoleWrite("Current system HD(" & $sMainDisk & ") contains a partition " & $sPartition  & @CRLF)
;~     do something
    EndIf
Else
;~     do something
EndIf

Func _GetDiskNumber($sDrive)

    Local $hDevice = _WinAPI_CreateFile("\\.\" & $sDrive, $FILE_SHARE_READ, 0)
    Local $tStorageDevNumber = DllStructCreate($sTag_STORAGE_DEVICE_NUMBER)
    Local $bRet = _WinAPI_DeviceIoControl($hDevice, $IOCTL_STORAGE_GET_DEVICE_NUMBER, 0, 0, $tStorageDevNumber, DllStructGetSize($tStorageDevNumber))
    _WinAPI_CloseHandle($hDevice)

    If Not $bRet Then Return 0

    If DllStructGetData($tStorageDevNumber, "DeviceType") = $FILE_DEVICE_DISK Then; FILE_DEVICE_DISK
        Return SetError(0, 0, DllStructGetData($tStorageDevNumber, "DeviceNumber")+1)
    EndIf

    Return 0

EndFunc   ;==>_GetDiskNumber

Saludos

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...