Jump to content

checking if a specific device is exist in device manager - (Moved)

Recommended Posts

  • Developers

Moved to the appropriate forum, as the Developer General Discussion forum very clearly states:


General development and scripting discussions. If it's super geeky and you don't know where to put it - it's probably here.

Do not create AutoIt-related topics here, use the AutoIt General Help and Support or AutoIt Technical Discussion forums.

Moderation Team

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
Live for the present,
Dream of the future,
Learn from the past.

Link to post
Share on other sites

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.

  • Similar Content

    • By ModemJunki
      The below code works (requires DevCon / Windows 7) - an array of device ID strings and their names comes - but it doesn't seem right to have to manipulate the drive letter strings in the array to "fix them up" as I have done.
      I need a list of all devices from Devcon (including non-present devices). At the end I will check for both present and non-present devices filtered against a list of known devices so I can see which are unplugged from the computer, but first I am building the list of all devices (plugged in or not).
      I am doing this workaround because DevCon outputs a list with ":" delimiter and if a filter driver (for some softwares) populates a drive letter they also have ":" in the description. See my comments in the "_RunDevcon" functions for where I do this manipulation.
      Is there a better/smarter way to do this?
      #include <String.au3> #include <Constants.au3> #include <Array.au3> Global $path_Devcon = @ScriptDir & '\devcon.exe' Global $aRemovable, $strRun, $foundall $foundall = _RunDevcon('"' & $path_Devcon & '" findall *'); the findall means we will see "non present devices" _ArrayDisplay($foundall, "List of devices and their PnP IDs", -1, 0, "", "", "Index|Device String|Device Name") ; Builds a device list using devcon ; by BugFix in 2009 and modified for this script Func _RunDevcon($strRun) Local $data, $dvcn = Run("cmd.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD) StdinWrite($dvcn, $strRun & @CRLF) StdinWrite($dvcn) While True $data &= StdoutRead($dvcn) If @error Then ExitLoop Sleep(25) WEnd Local $split = StringSplit($data, @LF) $data = '' For $i = 5 To $split[0] If StringStripWS($split[$i], 8) == '' Then ExitLoop $data &= $split[$i] Dim $devices[1][1] $devices = StringSplit($data, @CRLF) Next _ArrayDelete($devices, $devices[0] - 1); because the last line is "<number> matching device(s) found." $devices[0] = UBound($devices, 1) ;~ Some hoops to jump because Devcon returns a list of devices with ;~ a ":" in their descriptions and the delimiter between the devices is a ":"! $dvstr = _ArrayToString($devices, "'"); split array to string $dvstr_fixed = StringReplace($dvstr, ":", "!", 0, 2); replace the colons with something else $devarray = _String_Split($dvstr, "'", ":"); put all back into an array For $j = 1 To $devarray[0][0] - 1; we remove leading whitespace from second column If $devarray[$j][2] = "\" Then; now we fix the drive letters to have a colon again $Noblank = StringReplace($devarray[$j][1] & ":" & $devarray[$j][2], " ", "", 1) $devarray[$j][1] = $Noblank Else $Noblank = StringReplace($devarray[$j][1], " ", "", 1) $devarray[$j][1] = $Noblank EndIf Next _ArrayDeleteCol($devarray, 2); now we can delete the not-needed column _ArrayDelete($devarray, $devarray[0][0] - 1); we ended up with a blank at the end $devarray[0][0] = UBound($devarray, 1) Return $devarray EndFunc ;==>_RunDevcon ;~ Splits a string into an multidimensional array ;~ By wolf9228 in 2009 Func _String_Split($string, $delimiters1, $delimiters2) $Array1 = StringSplit($string, $delimiters1) Dim $MAXUBound = 0, $OutArray2[1][1] For $i = 1 To $Array1[0] Step 1 $OutArray = StringSplit($Array1[$i], $delimiters2) If $MAXUBound < $OutArray[0] Then ReDim $OutArray2[$i][$OutArray[0]] $MAXUBound = $OutArray[0] Else ReDim $OutArray2[$i][UBound($OutArray2, 2)] EndIf For $j = 1 To $OutArray[0] Step 1 $OutArray2[$i - 1][$j - 1] = $OutArray[$j] Next Next Return $OutArray2 EndFunc ;==>_String_Split ;~ Deletes column from array ;~ By PsaltyDS in 2008 Func _ArrayDeleteCol(ByRef $avWork, $iCol) If Not IsArray($avWork) Then Return SetError(1, 0, 0); Not an array If UBound($avWork, 0) <> 2 Then Return SetError(1, 1, 0); Not a 2D array If ($iCol < 0) Or ($iCol > (UBound($avWork, 2) - 1)) Then Return SetError(1, 2, 0); $iCol out of range If $iCol < UBound($avWork, 2) - 1 Then For $c = $iCol To UBound($avWork, 2) - 2 For $r = 0 To UBound($avWork) - 1 $avWork[$r][$c] = $avWork[$r][$c + 1] Next Next EndIf ReDim $avWork[UBound($avWork)][UBound($avWork, 2) - 1] Return 1 EndFunc ;==>_ArrayDeleteCol
  • Create New...