<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; WSH: слежение за использованием CD/DVD-привода]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=217&amp;type=atom" />
	<updated>2009-05-10T21:35:02Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=217</id>
		<entry>
			<title type="html"><![CDATA[Re: WSH: слежение за использованием CD/DVD-привода]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=22782#p22782" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Poltergeyst]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=83</uri>
			</author>
			<updated>2009-05-10T21:35:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=22782#p22782</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: слежение за использованием CD/DVD-привода]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=22550#p22550" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Poltergeyst]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=83</uri>
			</author>
			<updated>2009-05-04T20:43:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=22550#p22550</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[WSH: слежение за использованием CD/DVD-привода]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=1129#p1129" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2006-11-14T11:28:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=1129#p1129</id>
		</entry>
</feed>
