<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; WSH: слежение за использованием CD/DVD-привода]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=217</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=217&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «WSH: слежение за использованием CD/DVD-привода».]]></description>
		<lastBuildDate>Sun, 10 May 2009 21:35:02 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: WSH: слежение за использованием CD/DVD-привода]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=22782#p22782</link>
			<description><![CDATA[<p>Дальнейшее развитие предыдущей идеи выполнено на VB.NET. Небольшой код VB.NET предназначен для слежения за вставкой/извлечением диска в CDROM накопитель и основан на интерфейсе WMI. События вставки/извлечения диска отслеживаются в синхронном режиме и подтверждаются соответствующими сообщениями выводимыми в консоль, а также записью в файл протокола. Чтобы остановить наблюдение за CDROM активируйте консольное окно приложения и нажмите Ctrl+C. Рекомендуется запускать при извлеченном CD/DVD диске.<br />---------------------------------------<br /> Lang. VB.NET<br /> NET Framework v2.0.50727<br /> OC WinMe/XP<br />---------------------------------------<br />Чтобы получить исполняемый модуль (консольное приложение) откомпиллируйте файл CDPolling.vb примерно следующей командой:</p><p>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\vbc.exe C:\...\CDPolling.vb /out:C:\...\CDPolling.exe /target:exe<br />---------------------------------------</p>]]></description>
			<author><![CDATA[null@example.com (Poltergeyst)]]></author>
			<pubDate>Sun, 10 May 2009 21:35:02 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=22782#p22782</guid>
		</item>
		<item>
			<title><![CDATA[Re: WSH: слежение за использованием CD/DVD-привода]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=22550#p22550</link>
			<description><![CDATA[<p>----------------------------------------------------------------<br />---- Без гарантий. Используете на свой страх и риск. -<br />----------------------------------------------------------------<br />Скрипт предназначен для слежения за вставкой/извлечением диска в CDROM накопитель и основан на интерфейсе WMI. События вставки/извлечения диска, подтверждаются соответствующими сообщениями, а также записью в файл протокола. <br />----------------------------------------------------------------<br /> Lang. VBScript<br /> Потребуется установленный <a href="http://www.script-coding.com/LangMF.html">LangMF 7.7</a> и выше<br /> OC WinMe/XP<br />----------------------------------------------------------------<br />Для начала работы запустите CDRWatch.vbs. Рекомендуется запускать скрипт при извлеченном CD/DVD диске. Чтобы остановить наблюдение за приводом CDROM выберите соответствующий пункт в меню трей-иконки.<br />----------------------------------------------------------------</p>]]></description>
			<author><![CDATA[null@example.com (Poltergeyst)]]></author>
			<pubDate>Mon, 04 May 2009 20:43:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=22550#p22550</guid>
		</item>
		<item>
			<title><![CDATA[WSH: слежение за использованием CD/DVD-привода]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=1129#p1129</link>
			<description><![CDATA[<p>Как показала жизнь, иногда такая необходимость возникает. <img src="//forum.script-coding.com/img/smilies/roll.png" width="15" height="15" /><br />Предлагаю два решения. Первое попроще - из одного скрипта. Недостаток в том, что остановить работу такого скрипта в произвольный момент можно только через Диспетчер задач, завершив процесс wscript.exe. Но если следить надо всё время от включения компьютера до выключения, то сгодится.<br />Скрипт периодически проверяет привод на готовность и так отслеживает моменты загрузки и выгрузки диска. Время этих событий записывает в лог-файл.<br /></p><div class="codebox"><pre><code>/*****************
 Имя: CdRomSpy.js
*****************/

// VARIABLES

ws=WScript;
sh=ws.CreateObject(&quot;WScript.Shell&quot;);
fso=ws.CreateObject(&quot;Scripting.FileSystemObject&quot;);
driveName=&quot;P:&quot;;  // Буква cd-rom&#039;a.
drive=fso.GetDrive(driveName);
checkTime=3000;  // Время между проверками (в миллисекундах). Не рекомендую
                  // ставить меньше 1000. Смысла никакого.
logFilePath=&quot;C:\\cd-rom.log&quot;;  // Путь к файлу с логом.


// FUNCTIONS

function waitForLoad()
{
  while(!drive.IsReady) ws.Sleep(checkTime);
  var time=new Date().toLocaleString();
  with (fso.OpenTextFile(logFilePath,8))
    WriteLine(&quot;Загрузка диска: &quot;+time), Close();
  waitForUnload();
}

function waitForUnload()
{
  while(drive.IsReady) ws.Sleep(checkTime);
  var time=new Date().toLocaleString();
  with(fso.OpenTextFile(logFilePath,8))
    WriteLine(&quot;Выгрузка диска: &quot;+time), WriteBlankLines(1), Close();
  waitForLoad();
}


// MAIN CODE

sh.Popup(&quot;Запуск&quot;,1);
if(!fso.FileExists(logFilePath)) fso.CreateTextFile(logFilePath);
if(!drive.IsReady) waitForLoad();
else waitForUnload();</code></pre></div><p>Второе решение - пара скриптов. Второй служит для остановки первого. Первый при запуске создаёт в реестре раздел-маркёр и дальше делает свою работу, периодически проверяя существование раздела. Второй скрипт при запуске удаляет этот раздел. Первый, обнаружив это, завершается.<br />Не советую делать паузу между проверками меньше 1000 миллисекунд. Во-первых, время всё равно пишется с точностью до секунды, а во-вторых, очень часто будет проверяться реестр. Может, оно ему и ничего, но кто его знает. А до раза в секунду, думаю, нормально.<br />Первый скрипт:<br /></p><div class="codebox"><pre><code>/*****************
 Имя: CdRomSpy.js
*****************/

// VARIABLES

ws=WScript;
sh=ws.CreateObject(&quot;WScript.Shell&quot;);
fso=ws.CreateObject(&quot;Scripting.FileSystemObject&quot;);
driveName=&quot;P:&quot;;  // Буква cd-rom&#039;a.
drive=fso.GetDrive(driveName);
checkTime=3000;  // Время между проверками (в миллисекундах). Не рекомендую
                  // ставить меньше 1000. Смысла никакого.

logFilePath=&quot;C:\\cd-rom.log&quot;;  // Путь к файлу с логом.
regKey=&quot;HKCU\\_marker\\&quot;;  // Раздел в реестре, для общения между скриптами.


// FUNCTIONS

function waitForLoad()
{
  while(!drive.IsReady) {
    ws.Sleep(checkTime); if(!keyExists()) ws.Quit() }
  var time=new Date().toLocaleString();
  with (fso.OpenTextFile(logFilePath,8))
    WriteLine(&quot;Загрузка диска: &quot;+time), Close();
  waitForUnload();
}

function waitForUnload()
{
  while(drive.IsReady) {
    ws.Sleep(checkTime); if(!keyExists()) ws.Quit() }
  var time=new Date().toLocaleString();
  with(fso.OpenTextFile(logFilePath,8))
    WriteLine(&quot;Выгрузка диска: &quot;+time), WriteBlankLines(1), Close();
  waitForLoad();
}

function keyExists()
{
  try { sh.RegRead(regKey); return(1) }
  catch(e) { return(0) }
}


// MAIN CODE

sh.Popup(&quot;Запуск&quot;,1);
if(!fso.FileExists(logFilePath)) fso.CreateTextFile(logFilePath);
sh.RegWrite(regKey,&quot;&quot;);
if(!drive.IsReady) waitForLoad();
else waitForUnload();</code></pre></div><p>Второй скрипт:<br /></p><div class="codebox"><pre><code>/*****************
 Имя: StopSpy.js
*****************/

// VARIABLES

ws=WScript;
sh=ws.CreateObject(&quot;WScript.Shell&quot;);
regKey=&quot;HKCU\\_marker\\&quot;;


// MAIN CODE

sh.Popup(&quot;Остановка&quot;,1);
try { sh.RegRead(regKey); sh.RegDelete(regKey) }
catch(e) { }</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Tue, 14 Nov 2006 11:28:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=1129#p1129</guid>
		</item>
	</channel>
</rss>
