PDA

Показать полную графическую версию : показать устройства призраки


yuv
05-02-2014, 00:16
set devmgr_show_nonpresent_devices=1
start devmgmt.msc
Как этот BAT переделать в VBS?
Мне не нравится чёрное окно, мелькающее при запуске командного файла.

Iska
05-02-2014, 02:01
Я когда-то делал так — Show Detail & Hidden Devices.vbs:
Option Explicit

Const SW_HIDE = 0


Dim elem
Dim strNewEnvironment

Dim objSWbemObjectEx
Dim lngProcessID

Dim objMenuItem

Dim strTempFileName


If Not WScript.Arguments.Named.Exists("ShowDevMgmt") Then
With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
strNewEnvironment = _
"DEVMGR_SHOW_NONPRESENT_DEVICES=1" & vbCrLf & _
"DEVMGR_SHOW_DETAILS=1"

For Each elem In WScript.CreateObject("WScript.Shell").Environment("Process")
If Left(elem, 1) <> "=" Then
strNewEnvironment = strNewEnvironment & vbCrLf & elem
End If
Next


Set objSWbemObjectEx = .Get("Win32_ProcessStartup").SpawnInstance_

objSWbemObjectEx.ShowWindow = SW_HIDE
objSWbemObjectEx.EnvironmentVariables = Split(strNewEnvironment, vbCrLf)

If .Get("Win32_Process").Create( _
"wscript.exe """ & WScript.ScriptFullName & """ /ShowDevMgmt", Null, objSWbemObjectEx, lngProcessID _
) <> 0 Then

WScript.Echo "Process [wscript.exe """ & WScript.ScriptFullName & """] could not be created."
End If

Set objSWbemObjectEx = Nothing
End With
Else
With WScript.CreateObject("MMC20.Application")
.Load "devmgmt.msc"

With .Document
With .ActiveView
.Frame.Maximize

For Each objMenuItem In .ScopeNodeContextMenu
If objMenuItem.Path = "Вид->Показать скрытые устройства" Then
If objMenuItem.Enabled = 1 Then
objMenuItem.Execute

Exit For
End If
End If
Next
End With

If .IsSaved = 0 Then
strTempFileName = GetTemporaryFileName()
.SaveAs strTempFileName

WScript.CreateObject("Scripting.FileSystemObject").DeleteFile strTempFileName, True
End If
End With

.UserControl = 1
End With
End If

WScript.Quit 0
'=============================================================================

'=============================================================================
Function GetTemporaryFileName()
Const TEMP_FOLDER = 2

Dim strTempFile


With WScript.CreateObject("Scripting.FileSystemObject")
Do
strTempFile = .BuildPath(.GetSpecialFolder(TEMP_FOLDER), .GetTempName)
Loop While .FileExists(strTempFile)
End With

GetTemporaryFileName = strTempFile
End Function
'=============================================================================

Рассчитано было на локализованную версию Windows XP. В отличном случае исправьте выделенное под текст Вашей ОС.

torauma
05-02-2014, 11:12
Мне не нравится чёрное окно, мелькающее при запуске командного файла. »
Если проблема только в этом, то посмотрите тему из соседнего раздела (http://forum.oszone.net/thread-131397.html).

yuv
06-02-2014, 00:47
Iska
Ваш сценарий сам себя запускает повторно. Это не очень хорошо.
torauma
Не хочу использовать сторонние программы.

Iska
06-02-2014, 01:19
Iska
Ваш сценарий сам себя запускает повторно. Это не очень хорошо. »
Покажете мне способ, как можно в текущее окружение, скриптом же, добавить новые переменные окружения — перезапускать самого себя скрипту более не понадобится.

yuv
01-03-2014, 16:15
Покажете мне способ, как можно в текущее окружение, скриптом же, добавить новые переменные окружения — перезапускать самого себя скрипту более не понадобится.
А как же тогда bat-ник выполняется? Он ведь сам себя повторно не запускает.

Iska
01-03-2014, 16:55
А как же тогда bat-ник выполняется? »
Вот Вы настырный, дружище ;). Чёрта с два б я когда-нибудь к этому вернулся.

Пробуйте:
Option Explicit

Dim objMenuItem
Dim strTempFileName


With WScript.CreateObject("WScript.Shell").Environment("Process")
.Item("DEVMGR_SHOW_NONPRESENT_DEVICES") = "1"
.Item("DEVMGR_SHOW_DETAILS") = "1"
End With

With WScript.CreateObject("MMC20.Application")
.Load "devmgmt.msc"

With .Document
With .ActiveView
.Frame.Maximize

For Each objMenuItem In .ScopeNodeContextMenu
If objMenuItem.Path = "Вид->Показать скрытые устройства" Then
If objMenuItem.Enabled = 1 Then
objMenuItem.Execute

Exit For
End If
End If
Next
End With

If .IsSaved = 0 Then
strTempFileName = GetTemporaryFileName()
.SaveAs strTempFileName

WScript.CreateObject("Scripting.FileSystemObject").DeleteFile strTempFileName, True
End If
End With

.UserControl = 1
End With

WScript.Quit 0
'=============================================================================

'=============================================================================
Function GetTemporaryFileName()
Const TEMP_FOLDER = 2

Dim strTempFile


With WScript.CreateObject("Scripting.FileSystemObject")
Do
strTempFile = .BuildPath(.GetSpecialFolder(TEMP_FOLDER), .GetTempName)
Loop While .FileExists(strTempFile)
End With

GetTemporaryFileName = strTempFile
End Function
'=============================================================================

yuv
02-03-2014, 18:01
Iska
Наверное можно сделать проще. Вот мой аналог пакетного файла:
Dim Act
Set Act = WScript.CreateObject("WScript.Shell")
Dim Env
Set Env = Act.Environment("Process")
Env.Item("devmgr_show_nonpresent_devices") = 1
Set Env = Nothing
Act.Run "devmgmt.msc"
Set Act = Nothing

Iska
02-03-2014, 18:15
yuv, не совсем ;). В Вашем варианте надо ещё «ручками» выбирать:
Вид->Показать скрытые устройства »




© OSzone.net 2001-2012