Le informazioni sullo stato delle estensioni sono raggruppate nel file "Preferences" presente nel percorso %userprofile%\AppData\Local\Google\Chrome\User Data\Default .
E' possibile recuperare lo stato di attivazione/disattivazione di un'estensione andando a leggere particolari informazioni contenute in una sequenza di stringhe. Proviamo qui ad utilizzare le espressioni regolari (regular expression) che permettono di generalizzare quanto possibile eventuali informazioni dinamiche all'interno di cotesti con determinate caratteristiche.
Vediamo un esempio.
Nel nostro file Preferences abbiamo queste sequenze di stringhe:
"path":"pjkljhegncpnkpknbcohdijeoejaedia\\8.2_1","preferences":{},"regular_only_preferences":{},"state":0
"path":"kglbdihdcnciobeihioplammnkknjmbd\\15.0.2.3123_0","preferences":{},"regular_only_preferences":{},"state":1
Si possono notare alcune stringhe fisse, che sono i nomi delle chiavi, a cui corrispondono dei valori. Per il nostro caso partiremo in realtà dall'id dell'estensione, il valore alfabetico molto lungo che si può tranquillamente vedere navigando su chrome alla pagina chrome://extensions/ .
La struttura segue quindi questo pattern: ID+\\\\[\d-\.\_]{1,}\W{1,}\w{1,}\W{1,}\{\}\W{1,}\w{1,}\W{1,}\{\}\W{1,}\w{1,}\W{1,}\d{1} Sono abbastanza certo si possa migliorare ma le espressioni regolari sono sempre state una brutta bestia per gli sviluppatori.
Vediamo adesso il codice del vbscript che consisterà in una funzione che restituisce una stringa che indica se l'estensione è Attiva o Non Attiva.
'Program to check Extension Chrome State
'Information about chrome extensions are under %userprofile%\AppData\Local\Google\Chrome\User Data\Default into Preferences file
'Const CHRM_EXT_ID = "pjkljhegncpnkpknbcohdijeoejaedia" 'Extension ID
Const CHRM_EXT_ID = "kglbdihdcnciobeihioplammnkknjmbd" 'Extension ID
Const CHRM_STD_PATTERN = "\\\\[\d-\.\_]{1,}\W{1,}\w{1,}\W{1,}\{\}\W{1,}\w{1,}\W{1,}\{\}\W{1,}\w{1,}\W{1,}\d{1}"
Const CHRM_PATH = "\AppData\Local\Google\Chrome\User Data\Default\"
Const CHRM_PREF_FILE = "Preferences"
'Creation of objects to interact with file and to read the value of %userprofile% environment variable
Dim fso : set fso = createobject("Scripting.FileSystemObject")
Dim myShell : set myShell = WScript.CreateObject("WScript.Shell")
'definition and initialization of the variable that will contain the value of the environment variable
Dim usrProfPath : usrProfPath = myShell.ExpandEnvironmentStrings("%userprofile%")
'message that give us the information we need.
wscript.echo "Status of " & CHRM_EXT_ID & " is: " & ReadChromeExtensionStatus(CHRM_EXT_ID, CHRM_STD_PATTERN)
set myShell = nothing
set fso = nothing
wscript.quit
'CORE: this function returns a string ("Active|NotActive") about the state of the plugin (0=NotActive, 1=Active)
Function ReadChromeExtensionStatus(plugin, ptrn)
Dim strRes : strRes = "Not Active" 'return value of the function - default is "Not Active"
Dim PATTERN_CHROME : PATTERN_CHROME = plugin & ptrn 'this is the complete pattern to use for the Regular Expression test
dim RE : set RE = CreateObject("VBScript.RegExp") 'Regular Expression object
dim colMatch 'the match collection
'Open the file Preferences for reading
Dim myFile : set myFile = fso.opentextfile(usrProfPath & CHRM_PATH & CHRM_PREF_FILE, 1)
'Create the loop to read the file
Do while not(myFile.AtEndOfStream)
tmpLine = myFile.ReadLine 'it is a looong line
with RE
.Pattern = PATTERN_CHROME
.IgnoreCase = True
.Global = True
end with
if (RE.Test(tmpLine)) then 'I test if in the line there is almost a match
set colMatch = RE.Execute(tmpLine) 'load the collection
for m=0 to colMatch.Count-1 'Do a for cycle for each match (there should only be one match)
'the colMatch.Item(0).Value returns all the string, but I need only the last value (0/1)
if int(right(colMatch.Item(m).Value,1)) = 1 then
strRes = "Active" 'update the result
end if
next
end if
Loop
myFile.close
set myFile = nothing
ReadChromeExtensionStatus = strRes 'return the value
End Function