Set Lang = CreateObject("Scripting.Dictionary") Lang("url") = "http://www.skaip.su/" Lang("version") = "1.0.1" Lang("runAsAdmin") = True Lang("startApp") = "Вы уверены, что хотите отключить обновление программы Skype?\\Нажмите «Отмена», если не уверены или хотите узнать, какие элементы будут удалены или изменены." Lang("skypeExeNotFound") = "Не удалось найти папку установки Skype. Вы должны указать путь к файлу Skype.exe" Lang("noStats") = "Кажется, приложение ничего не изменило (возможно, оно не было запущено в первый раз)." Lang("statsCreateDummyFile") = "Заблокированные файлы" Lang("statsKillProcess") = "Остановленные процессы" Lang("statsDeleteService") = "Удалённые службы" Lang("statsDeleteScheduledTask") = "Удалённые задачи" Lang("statsRegWrite") = "Изменённые ключи реестра" Lang("statsDeleteFolder") = "Удалённые папки" '''''''''''''''''''''''''''''''''''''' ' COMMON STRINGS Lang("done") = "ГОТОВО" Lang("error") = "ОШИБКА" Lang("giveFeedback") = "Хотите посетить блог автора и оставить отзыв или оценку?" Lang("getHelp") = "Хотите посетить блог автора и обратиться за помощью?" Lang("statsTable") = "Список изменений" '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' APPLICATION FUNCTIONS Function AppStart() KillProcess("Name Like '%Skype%'") DeleteService("Name Like '%Skype%'") DeleteScheduledTask("Skype") CreateDummyFile Fullpath("%TEMP%"), "SkypeSetup.exe" CreateDummyFile Fullpath("%USERPROFILE%\AppData\Local\Temp"), "SkypeSetup.exe" RegWrite "HKLM\SOFTWARE\Skype\Phone\DisableVersionCheck", 1, "REG_DWORD" RegWrite "HKLM\SOFTWARE\Skype\Phone\Installer\InstallUpdates", 0, "REG_DWORD" RegWrite "HKLM\SOFTWARE\Policies\Skype\Phone\DisableVersionCheck", 1, "REG_DWORD" RegWrite "HKLM\SOFTWARE\Policies\Skype\Phone\Installer\InstallUpdates", 0, "REG_DWORD" skypeExeFile = GetSkypeExePath(False) If skypeExeFile <> False Then skypeRootFolder = Fso.GetParentFolderName(Fso.GetParentFolderName(skypeExeFile)) DeleteFolder skypeRootFolder & "\Updater" End If DeleteFolder Fullpath("%ProgramFiles(x86)%\Skype\Updater") DeleteFolder Fullpath("%ProgramFiles%\Skype\Updater") End Function Function GetSkypeExePath(path) GetSkypeExePath = False If path = False Then GetSkypeExePath = Shell.ExpandEnvironmentStrings("%ProgramFiles(x86)%\Skype\Phone\Skype.exe") If Not Fso.FileExists(GetSkypeExePath) Then GetSkypeExePath = Shell.ExpandEnvironmentStrings("%ProgramFiles%\Skype\Phone\Skype.exe") End If If Not Fso.FileExists(GetSkypeExePath) Then GetSkypeExePath = Shell.RegRead("HKCU\SOFTWARE\Skype\Phone\SkypePath") End If Else GetSkypeExePath = path End If If Not Fso.FileExists(GetSkypeExePath) Then GetSkypeExePath = Prompt("skypeExeNotFound", "") If GetSkypeExePath = "" Then GetSkypeExePath = False Else GetSkypeExePath(GetSkypeExePath) End If End If End Function Function CreateDummyFile(folder, name) If Fso.FolderExists(folder) Then dummyPath = folder & "\" & name If (Fso.FileExists(dummyPath)) Then If Fso.GetFile(dummyPath).Size = 0 Then Exit Function End If Fso.GetFile(dummyPath).Attributes = 0 Fso.DeleteFile(dummyPath) End If Fso.CreateTextFile(dummyPath) Fso.GetFile(dummyPath).Attributes = 7 'ReadOnly + Hidden + System SetStats "CreateDummyFile" End If End Function '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' COMMON FUNCTIONS Function Appname() Appname = Replace(Wscript.ScriptName, ".vbs", "_" & Lang("version")) End Function Function ShowMsg(msg, style) ShowMsg = MsgBox(Tpl(msg), style, Appname()) End Function Function ShowError(msg) AskGotoUrl "{{error}}! " & msg & "\\{{getHelp}}", 16 End Function Function AskGotoUrl(msg, style) btn = ShowMsg(msg, style + 4) If btn = 6 Then GotoUrl() End If End Function Function Prompt(msg, defaultValue) Prompt = InputBox(Tpl(msg), Appname(), defaultValue) End Function Function GotoUrl() Shell.Run Lang("url") & "?utm_source=" & Appname() End Function Function RunAsAdministrator() If WScript.Arguments.Length = 0 Then Set Systems = WmiQuery("Select Caption From Win32_OperatingSystem") For Each System In Systems If InStr(System.Caption, "Windows XP") Then Exit Function End If Next App.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1 WScript.Quit End if End Function Function WmiQuery(query) Set Wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set WmiQuery = Wmi.ExecQuery(query) End Function Function SetStats(k) Stats.Item(k) = Stats.Item(k) + 1 End Function Function GetStats() GetStats = "" For Each k in Stats.Keys GetStats = GetStats & vbNewLine & "- " & Lang("stats" & k) & ": " & Stats(k) Next End Function Function Tpl(str) If Lang.Exists(str) Then str = Lang(str) End If For Each k in Lang.Keys str = Replace(str, "{{" & k & "}}", Lang(k)) Next Tpl = Replace(str, "\\", vbNewLine & vbNewLine) End Function Function Enquote(str) Enquote = Chr(34) & str & Chr(34) End Function Function CmdExec(cmd, returnOutput) If returnOutput = True Then outpath = Fullpath("%TEMP%\" & Wscript.ScriptName & Fso.GetTempName) Shell.Run "cmd /c " & cmd & ">" & Enquote(outpath), 0, 1 If Fso.FileExists(outpath) Then If Fso.GetFile(outpath).Size > 0 Then Set File = fso.OpenTextFile(outpath, 1) CmdExec = File.ReadAll File.Close End If Fso.DeleteFile(outpath) End If Else Shell.Run "cmd /c " & cmd, 0, 1 End If End Function Function KillProcess(WhereCond) Set Processes = WmiQuery("Select * From Win32_Process Where " & WhereCond) For Each Process in Processes Process.Terminate() SetStats "KillProcess" Next End Function Function DeleteService(WhereCond) Set Services = WmiQuery("Select * From Win32_Service Where " & WhereCond) For Each Service in Services Service.StopService() Service.Delete() SetStats "DeleteService" Next End Function Function DeleteScheduledTask(search) tasks = CmdExec("SchTasks /Query /FO CSV /V", True) Lines = Split(tasks, vbCr) Set Rgxp = New RegExp Rgxp.Global = True Rgxp.Pattern = Enquote("(.+?)") & "," For i = 1 to UBound(Lines) line = Lines(i) If InStr(1, line, search, 1) Then Set Matches = Rgxp.Execute(line) If Matches.Count > 0 Then taskName = Matches.Item(1).SubMatches(0) If Len(taskName) > 2 And InStr(taskName, "*") = 0 Then CmdExec "SchTasks /Delete /F /TN " & Enquote(taskName), False SetStats "DeleteScheduledTask" End If End If End If Next End Function Function RegRead(keypath) on error resume next RegRead = Shell.RegRead(keypath) on error goto 0 End Function Function RegWrite(keypath, newValue, datatype) oldValue = RegRead(keypath) ' Be aware! It can be Empty or Null If oldValue = newValue And VarType(oldValue) > 1 Then Exit Function End If Shell.RegWrite keypath, newValue, datatype SetStats "RegWrite" End Function Function Fullpath(path) Fullpath = Shell.ExpandEnvironmentStrings(path) End Function Function DeleteFolder(folder) If Fso.FolderExists(folder) Then SetStats "DeleteFolder" Fso.DeleteFolder folder, True End If End Function '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' GLOBAL VARIABLES Set App = CreateObject("Shell.Application") Set Shell = CreateObject("WScript.Shell") Set Fso = CreateObject("Scripting.FileSystemObject") Set Stats = CreateObject("Scripting.Dictionary") If Lang("runAsAdmin") Then RunAsAdministrator() End If btn = ShowMsg("startApp", 35) If btn = 6 Then AppStart() statsTable = GetStats() If Len(statsTable) = 0 Then statsTable = "{{done}}! {{noStats}}" Else statsTable = "{{done}}! {{statsTable}}:" & statsTable End If AskGotoUrl statsTable & "\\{{giveFeedback}}", 64 ElseIf btn = 2 Then GotoUrl() End If