Thats great software but it doesn't have one vital feature: reconnect automatically when phone is connected via USB. On other hand it have such an option as "Connect on start".
So my idea was to write some program/script to kill MyPhoneExplorer's process on disconnect and start it on connect.
This script just sitting and watching when "Android ADB Interface" device get connected or disconnected via USB executing corresponding action on each event.
Const DEVICENAME = "Android ADB Interface"
Const EXENAME = "MyPhoneExplorer.exe"
Dim lastOperation
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}\\.\root\cimv2")
'Exit if already running
If alreadyRunning() Then: WScript.Quit
Set objSink = WScript.CreateObject("WBemScripting.SWbemSink","event_")
Set objShell = CreateObject("WScript.Shell")
Set deviceIDs = CreateObject("Scripting.Dictionary")
'Set event hook
objWMIService.ExecNotificationQueryAsync objSink, "Select * from __InstanceOperationEvent within 1 where TargetInstance ISA 'Win32_PnPEntity'"
'Get device IDs by name
EnumerateDevices DEVICENAME
objShell.Popup "USB monitoring started",2
'Infinite loop
Do
WScript.Sleep 1000
Loop
'USB insert/remove hook procedure
Sub event_OnObjectReady( objEvent, objContext )
With objEvent
If deviceIDs.Exists(.TargetInstance.DeviceId) Then
Select Case .Path_.Class
Case "__InstanceCreationEvent"
If lastOperation <> "Insert" Then
lastOperation = "Insert"
OnInsert
End If
Case "__InstanceDeletionEvent"
If lastOperation <> "Remove" Then
lastOperation = "Remove"
OnRemove
End If
End Select
End If
End With
End Sub
Sub OnInsert
objShell.Run EXENAME,1,0
End Sub
Sub OnRemove
objShell.Run "taskkill /f /im " & EXENAME,0,0
End Sub
Sub EnumerateDevices(name)
Set objDevices = objWMIService.ExecQuery("SELECT DeviceId FROM Win32_PnPSignedDriver WHERE Description='" & name & "'")
For Each dev in objDevices
deviceId = dev.DeviceId
If Not deviceIDs.Exists(deviceId) Then
deviceIDs.Add deviceId, deviceId
End If
d = d + 1
Next
End Sub
Function alreadyRunning()
alreadyRunning = False
wscrCount = ProcessCount( "%wscript%" & WScript.ScriptName & "%" )
cscrCount = ProcessCount( "%cscript%" & WScript.ScriptName & "%" )
If wscrCount > 1 or cscrCount > 1 Then:alreadyRunning = True
End Function
Public Function ProcessCount(likestr)
Set colItems = objWMIService.ExecQuery("SELECT Name,CommandLine FROM Win32_Process WHERE CommandLine Like '" & likestr & "'")
ProcessCount = colItems.Count
End Function
No comments:
Post a Comment