<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript & COM: Очистка истории Проводника]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10461&amp;type=atom" />
	<updated>2015-03-01T01:45:12Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=10461</id>
		<entry>
			<title type="html"><![CDATA[VBScript & COM: Очистка истории Проводника]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92086#p92086" />
			<content type="html"><![CDATA[<p><em>Без гарантий. Используете на свой страх и риск.</em><br />Скрипт предназначен для очистки журнала истории Проводника и Internet Explorer, и основан на вызове функций интерфейса IUrlHistoryStg2 средствами COM API.</p><p>Потребуется зарегистрированная библиотека <a href="http://forum.script-coding.com/viewtopic.php?id=8082">scrsvc.dll</a><br />ОС WinXP/7</p><p><strong>ClearHistory.vbs</strong><br /></p><div class="codebox"><pre><code>
 
 &#039;Скрипт предназначен для очистки журнала истории Internet Explorer,
 &#039;и основан на вызове интерфейса IUrlHistoryStg2 средствами COM API.
 &#039;ОС WinXP/7

 Option Explicit 

 Dim iAnsw
 Dim oScrSvc, oShellApp
 Dim r
 Dim sPath
 Dim oWindow
 Dim GUID1, GUID2, pVarRes
 Dim lData
 
 &#039;/Контрольное сообщение/
 &#039;---------------------------------------------------------------
 iAnsw = MsgBox(&quot;Очистить журнал Explorer?&quot;, vbYesNo + vbSystemModal + vbInformation, &quot;Очистка журнала&quot;)
 If iAnsw = vbNo Then QuitMe()
 
 &#039;Интерфейс [IUrlHistoryStg2]
 &#039;---------------------------------------------------------------
 Const CLSID_Url = &quot;{3C374A40-BAE4-11CF-BF7D-00AA006946EE}&quot;
 Const UUID_IUrlHistoryStg2 = &quot;{AFA0DC11-C313-11D0-831A-00C04FD5AE38}&quot;

 &#039;Методы интерфейса IUrlHistoryStg2;
 Const IUrlHistoryStg2_Release = 8
 Const IUrlHistoryStg2_ClearHistory = 36

 Const CLSCTX_INPROC_SERVER = 1
 Const CC_STDCALL = 4
 Const S_OK = 0

 &#039;---------------------------------------------------------------
 Set oScrSvc = CreateObject(&quot;ScriptService.Service&quot;)
 Set oShellApp = CreateObject(&quot;Shell.Application&quot;)

 &#039;---------------------------------------------------------------
 
 sPath = WScript.ScriptFullName
 sPath = Left(sPath,InStrRev(sPath,&quot;\&quot;) - 1)

	&#039;/Навигация, поиск заданного окна Shell Explorer и отображение журнала/
	&#039;-------------------------------------------------------
	oShellApp.Open sPath

	For Each oWindow In oShellApp.Windows
		If InStr(1, LCase(TypeName(oWindow.Document)), &quot;ishellfolderviewdual&quot;) &lt;&gt; 0 Then
			If StrComp(oWindow.Document.Folder.Self.Path, sPath, 1) = 0 Then
				oWindow.Application.ShowBrowserBar &quot;{EFA24E62-B078-11D0-89E4-00C04FC9E26E}&quot;, True
				Exit For
			End If
		End If
	Next            
	WScript.Sleep(500) 	


&#039;/Запрос интерфейса IUrlHistoryStg2 и вызов его функций/
&#039;---------------------------------------------------------------
 With oScrSvc

	&#039;Выделение памяти
	&#039;-------------------------------------------------------
 	GUID1 = .struct_setval(String(8,Chr(32)))	&#039;8*2=16 итоговое количество байт
 	GUID2 = .struct_setval(String(8,Chr(32)))	&#039;8*2=16 итоговое количество байт
 	pVarRes = .struct_setval(String(2,Chr(32)))	&#039;2*2=4 итоговое количество байт
 
	&#039;-------------------------------------------------------
		.set_vararg 0, 0
		.api_call &quot;OLE32.DLL&quot;,&quot;CoInitialize&quot;, 1

	&#039;Запрос интерфейса
	&#039;-------------------------------------------------------
	.set_strarg 0, CLSID_Url, True	
	.set_vararg 1, GUID1
	r = .api_call(&quot;OLE32.DLL&quot;,&quot;CLSIDFromString&quot;,2)
	CheckResult r, &quot;CLSIDFromString&quot;

	.set_strarg 0, UUID_IUrlHistoryStg2, True
	.set_vararg 1, GUID2
	r = .api_call(&quot;OLE32.DLL&quot;,&quot;CLSIDFromString&quot;,2)
	CheckResult r, &quot;CLSIDFromString&quot;

	.set_vararg 0, GUID1
	.set_vararg 1, 0
	.set_vararg 2, CLSCTX_INPROC_SERVER
	.set_vararg 3, GUID2
	.set_vararg 4, pVarRes
	r = .api_call(&quot;OLE32.DLL&quot;,&quot;CoCreateInstance&quot;,5)
	CheckResult r, &quot;CoCreateInstance&quot;

	lData = .struct_getval(pVarRes, 0, 4)

	&#039;Вызов интерфейсных функций, очистка журнала
	&#039;-------------------------------------------------------
	DispCall lData, IUrlHistoryStg2_ClearHistory
	DispCall lData, IUrlHistoryStg2_Release

	&#039;-------------------------------------------------------
		.api_call &quot;OLE32.DLL&quot;,&quot;CoUninitialize&quot;,0
	&#039;-------------------------------------------------------
	WScript.Sleep(50)
	MsgBox &quot;Журнал очищен.&quot;, vbSystemModal + vbInformation, &quot;Очистка журнала&quot;
	QuitMe()
	
 End With

&#039;/Вызов функции интерфейса без аргументов/
&#039;---------------------------------------------------------------
Function DispCall(lClass, iMethod)
 
 Dim res
 res = oScrSvc.struct_setval(String(2,Chr(32)))	&#039;2*2=4 итоговое количество байт
 With oScrSvc
	
 	.set_vararg 0, lClass
	.set_vararg 1, iMethod
	.set_vararg 2, CC_STDCALL
	.set_vararg 3, 0
	.set_vararg 4, 0
	.set_vararg 5, 0
	.set_vararg 6, 0
	.set_vararg 7, res

	r = .api_call(&quot;OLEAUT32.DLL&quot;,&quot;DispCallFunc&quot;,8)
	DispCall = .struct_getval(res, 0, 4)

 End With
 CheckResult r, &quot;DispCallFunc&quot;

End Function

&#039;/Проверка ошибки/
&#039;---------------------------------------------------------------
Sub CheckResult(x, sSource)
	If x &lt;&gt; S_OK Then
		MsgBox &quot;Сбой выполнения. Источник&quot; &amp; sSource, vbSystemModal + vbExclamation, &quot;Error&quot;
		QuitMe()
	End If
End Sub

&#039;/Завершение работы/
&#039;---------------------------------------------------------------
Sub QuitMe()
	Set oShellApp = Nothing
	Set oScrSvc = Nothing
	WScript.Quit()
End Sub
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Poltergeyst]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=83</uri>
			</author>
			<updated>2015-03-01T01:45:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92086#p92086</id>
		</entry>
</feed>
