Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   показать устройства призраки (http://forum.oszone.net/showthread.php?t=277123)

yuv 05-02-2014 00:16 2302868

показать устройства призраки
 
Код:

set devmgr_show_nonpresent_devices=1
start devmgmt.msc

Как этот BAT переделать в VBS?
Мне не нравится чёрное окно, мелькающее при запуске командного файла.

Iska 05-02-2014 02:01 2302917

Я когда-то делал так — 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 2303042

Цитата:

Цитата yuv
Мне не нравится чёрное окно, мелькающее при запуске командного файла. »

Если проблема только в этом, то посмотрите тему из соседнего раздела.

yuv 06-02-2014 00:47 2303704

Iska
Ваш сценарий сам себя запускает повторно. Это не очень хорошо.
torauma
Не хочу использовать сторонние программы.

Iska 06-02-2014 01:19 2303728

Цитата:

Цитата yuv
Iska
Ваш сценарий сам себя запускает повторно. Это не очень хорошо. »

Покажете мне способ, как можно в текущее окружение, скриптом же, добавить новые переменные окружения — перезапускать самого себя скрипту более не понадобится.

yuv 01-03-2014 16:15 2317726

Цитата:

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

Iska 01-03-2014 16:55 2317753

Цитата:

Цитата yuv
А как же тогда 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 2318156

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 2318160

yuv, не совсем ;). В Вашем варианте надо ещё «ручками» выбирать:
Цитата:

Цитата Iska
Вид->Показать скрытые устройства »



Время: 07:16.

Время: 07:16.
© OSzone.net 2001-