<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Запрет открытия файла (группы файлов)]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6504&amp;type=atom" />
	<updated>2011-12-12T18:40:09Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6504</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54532#p54532" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>DD пишет:</cite><blockquote><p>Кажись, закрыл <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p></blockquote></div><p>Нет, нужно вызвать CloseHandle для хэндла, который мы в начале получили через OpenProcess. В данном случае DllCall(&quot;CloseHandle&quot;, &quot;uint&quot;, hProc).<br /></p><div class="quotebox"><cite>DD пишет:</cite><blockquote><p>А интересно, есть возможность прописать строки</p></blockquote></div><p>Да, через функцию <a href="http://www.autohotkey.com/docs/Functions.htm#InStr">InStr</a>:<br /></p><div class="codebox"><pre><code>If InStr(controlUnder, &quot;Video&quot;) or InStr(Com_Line, ExtLst) or ...</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2011-12-12T18:40:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54532#p54532</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54517#p54517" />
			<content type="html"><![CDATA[<p>А интересно, есть возможность прописать строки<br /></p><div class="codebox"><pre><code>  If controlUnder contains Video
  {
    Gosub, Write
    Return
  }
  Else If Com_Line contains %ExtLst%
  {
    Gosub, Write
    Return
  }
  Else If WinTtl contains %ExtLst%
  {
    Gosub, Write
    Return
  }</code></pre></div><p>одной строкой, как-то так:<br /></p><div class="codebox"><pre><code>  If controlUnder contains Video or Com_Line contains %ExtLst% or WinTtl contains %ExtLst%
  {
    Gosub, Write
    Return
  }</code></pre></div><p>?</p>]]></content>
			<author>
				<name><![CDATA[DD]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25263</uri>
			</author>
			<updated>2011-12-12T14:26:10Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54517#p54517</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54494#p54494" />
			<content type="html"><![CDATA[<p>У меня в логе скрипта есть много символов в строчке такие - а, но это не мешает смотреть лог, <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p><p>У меня для корректного исполнения всего задуманного пришлось малость повозиться с разрешениями на папки и т.п., если все верно настроено - все работает сразу, если нет, то из папки не будет уходить лог-файл созданный скриптом, поэтому вам необходимо еще раз все перепроверить.</p>]]></content>
			<author>
				<name><![CDATA[stir]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26486</uri>
			</author>
			<updated>2011-12-12T07:35:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54494#p54494</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54486#p54486" />
			<content type="html"><![CDATA[<p>Впринципе пока вопросов нет. Большое спасибо автору скрипта - DD (за проявленное терпение ко мне и свой труд). Скрипт работоспособен.</p><p>Если кому интересно то как вариант работы всего этого получился такой:<br />1. Устанавливаем на ПК юзера AutoHotkey110504_Install.exe с офсайта.<br />2. Запускаем скрипт АНК (c:\AHK\) и помещаем в автозагрузку , но в фоновом режиме - без иконки... с правами админа.<br />3. Копируем батник для пересылки инфы от нарушителя и ставим его на выполнение по расписанию (c:\AHK\).<br />4. Проверяем исправность работы. Не забываем создать нулевой файл в директории сборщике данных и выставить права на запись под существующий в батнике логин и пароль! Файл должен быть этот неудаляемым и служит для проверки связи ПК юзера с сервером.</p><p>Версия батника 0.0.4:</p><div class="codebox"><pre><code>@echo off
CLS
net use \\192.168.x.z\DW_log /user:drweb drweb
if exist \\192.168.x.z\DW_log\readme.txt {
set newname=%COMPUTERNAME%_%DATE%_%RANDOM%%RANDOM%.txt
rename c:\AHK\VdCtrl.log %newname%
move c:\AHK\%newname%  \\192.168.x.z\DW_log\
} else {
exit
}
net use \\192.168.x.z\DW_log /delete</code></pre></div><p>Пояснения: На сервере есть тестовый нулевой файл в папке DW_log, доступный под логином и паролем к антивирусу, это так для отвода глаз несведующих.. Если локальная сеть выключена или недоступна по какойлибо причине - батник завершает работу, а т.к. скрипт имеет накопительную статистику, то это нестрашно - как только связь наладится и сработает время отсылки данных, то на сервер будет перенесен файл юзера. Если файла нет для отправки на сервре - ничего страшного - батник не будет висеть в &quot;ступоре&quot; черным окном у юзера.<br />Хотел в имя пересылаемого файла включить время для лучшей идентификации, но мой ПК не проглотил такое, пришлось рандомить и на всякий случай - дважды.<br />И еще для уверенной работы такого решения необходимо убрать права админа у юзера, иначе он в диспетчере задач может выявить процесс для скрипта под АНК, а это принципиально недопустимо.<br />Итог: при запуске видеофайла скрипт накапливает информацию и позже она попадает в нужные руки. Если у вас возникли более инетресные идеи и/или их реализация - не стесняйтесь, выкладывайте здесь, возможно кроме меня это еще кто-то использует в своих незлых целях.</p><br /><p>УФФ!! Вроде все написал.</p>]]></content>
			<author>
				<name><![CDATA[stir]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26486</uri>
			</author>
			<updated>2011-12-12T02:03:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54486#p54486</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54408#p54408" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>stir пишет:</cite><blockquote><p>Подскажите, под новые версии АНК всегда придется перелопачивать ранее созданные скрипты?</p></blockquote></div><p>Те, что в ANSI-кодировке (если, конечно, не использовать ANSI-вариант AHK_L).<br /></p><div class="quotebox"><cite>stir пишет:</cite><blockquote><p>ДД, а почему время и дата идентичная? Это время запуска скрипта и оно фиксировалось в момент его запуска или что-то другое тут?</p></blockquote></div><p>Это &quot;кодер&quot; такой. Смотрите 34-ый, исправил.</p>]]></content>
			<author>
				<name><![CDATA[DD]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25263</uri>
			</author>
			<updated>2011-12-09T15:42:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54408#p54408</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54395#p54395" />
			<content type="html"><![CDATA[<p>написал батник, но пока еще не устранил ошибку с формированием имени файла..</p><div class="codebox"><pre><code>@echo off
CLS
rem net use \\192.168.130.100\DW_log /user:drweb drweb
set p/ name=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\AltDefaultUserName
rename c:\AHK\*.log *+%DATE%+%name%.txt
rem copy c:\AHK\*.txt  \\Serverpko\DW_log\
rem del c:\AHK\*.txt
rem net use \\192.168.130.100\DW_log /delete</code></pre></div><p>не хочет добавлять имя юзера - name, а я непонимаю почему. Подскажите...</p><p>а в АНК код я вставил почти в начале </p><div class="codebox"><pre><code>#NoTrayIcon</code></pre></div><p>теперь в системном трее нет значка для любопытных, <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[stir]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26486</uri>
			</author>
			<updated>2011-12-09T08:39:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54395#p54395</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54393#p54393" />
			<content type="html"><![CDATA[<p>на всякий случай напишу какой из ваших скриптов сейчас у меня на тесте:</p><div class="codebox"><pre><code>#Persistent
#SingleInstance Force
SendMode, Input
SetTitleMatchMode, 2
SetBatchLines, -1

 
; ЧЁРНЫЙ СПИСОК ВИДЕО-РАСШИРЕНИЙ
ExtLst = .3g2,.3gp,.3gp2,.3gpp,.asf,.asx,.avi,.flv,.dif,.dv,.IVF,.m1v,.m2v,.m4e,.mkv,.mov,.mp2,.mp2v,.mp4,.mpa,.mpe,.mpeg,.mpg,.mps,.mpv,.mpv2,.ogm,.qt,.ram,.rv,.wm,.wmp,.wmv,.wmx,.wvx
; ФОРМАТ ДАТЫ
FormatTime, Cur_Date,, dd.MM.yyyy [H.mm.ss]
 
 
SetTimer, VdCtrl, 1000  ;так часто необязательно
Return
 
 
VdCtrl:
  MouseGetPos, xC, yC, id, controlUnder
  WinGetActiveTitle, WinTtl  ;получение заголовка окна
 
  WinGet, hWnd, PID, % &quot;ahk_id &quot; WinExist(&quot;A&quot;)
  Com_Line := GetCommandLine(hWnd)  ; вызываем функцию получения ком. строки ОКНА
 
  If controlUnder contains Video
  {
    Gosub, Write
    Return
  }
  Else If Com_Line contains %ExtLst%
  {
    Gosub, Write
    Return
  }
  Else If WinTtl contains %ExtLst%
  {
    Gosub, Write
    Return
  }
  Return
 
 
Write:
  If ( hWndPrevious = WinTtl )
    Return
  Else
  {
Tooltip, Запись
    FileAppend, %Cur_Date%`n%WinTtl%`n%Com_Line%`n, %A_ScriptDir%\VdCtrl.log
Sleep, 1000
Tooltip
    hWndPrevious := WinTtl
  }
  Return
 
 
;константы
ProcessBasicInformation   := 0
PROCESS_QUERY_INFORMATION := 0x0400
PROCESS_VM_READ           := 0x0010
;функции
;открытие процесса
OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId)
{
   return DllCall(&quot;OpenProcess&quot;, &quot;uint&quot;, dwDesiredAccess, &quot;int&quot;, bInheritHandle, &quot;uint&quot;, dwProcessId, &quot;uint&quot;)
}
;получение информации о процессе
ZwQueryInformationProcess(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength, ReturnLength)
{
   return DllCall(&quot;ntdll.dll\ZwQueryInformationProcess&quot;,&quot;uint&quot;, ProcessHandle, &quot;uint&quot;, ProcessInformationClass, &quot;uint&quot;, ProcessInformation, &quot;uint&quot;, ProcessInformationLength, &quot;uint&quot;, ReturnLength, &quot;uint&quot;)
}
;чтение данных из процесса
ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead)
{
   return DllCall(&quot;ReadProcessMemory&quot;, &quot;uint&quot;, hProcess, &quot;uint&quot;, lpBaseAddress, &quot;uint&quot;, lpBuffer, &quot;uint&quot;, nSize, &quot;uint&quot;, lpNumberOfBytesRead)
}
 
 
GetCommandLine(pid)
{
   global ProcessBasicInformation, PROCESS_QUERY_INFORMATION, PROCESS_VM_READ
   hProc := OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, pid)
   if (hProc=0)
   {
      return Error
   }
   VarSetCapacity(ProcessInformation, 0x18) ; под PROCESS_BASIC_INFORMATION
   VarSetCapacity(Buffer, 8)
   VarSetCapacity(ReturnLength, 4) ; формальность
   ZwQueryInformationProcess(hProc, ProcessBasicInformation, &amp;ProcessInformation, 0x18, &amp;ReturnLength)
   ;по смещению 4 располагается адрес PEB
   ReadProcessMemory(hProc, NumGet(&amp;ProcessInformation, 4)+16, &amp;Buffer, 4, &amp;ReturnLength)
   ;по смещению 16 в PEB находится адрес структуры RTL_USER_PROCESS_PARAMETERS
   ReadProcessMemory(hProc, NumGet(&amp;Buffer)+64, &amp;Buffer, 8, &amp;ReturnLength)
   ; слово по смещению 0 содержит длину строки в байтах
   ; двойное слово по смещению 4 содержит адрес строки
   ; строка НЕ заканчивается нулём
   x:=NumGet(&amp;Buffer, 0, &quot;ushort&quot;)
   VarSetCapacity(str, x) ; выделяем необходимое место
   ReadProcessMemory(hProc, NumGet(&amp;Buffer, 4), &amp;str, x, &amp;ReturnLength)
   x:=StrGet(&amp;str, x/2, &quot;UTF-16&quot;)
 
   VarSetCapacity(ProcessInformation, 0) ; освобождаем память
   VarSetCapacity(str, 0)
   VarSetCapacity(Buffer, 0)
   VarSetCapacity(ReturnLength, 0)
   return x
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[stir]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26486</uri>
			</author>
			<updated>2011-12-09T06:07:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54393#p54393</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54392#p54392" />
			<content type="html"><![CDATA[<p>Блинннн, теперь не запускаются game-life.ahk и cpu_load.ahk, взятые с форума..<br />Подскажите, под новые версии АНК всегда придется перелопачивать ранее созданные скрипты? А то как то это не очень.. удобно.<br />/Установил - AutoHotkey110504_Install.exe./</p>]]></content>
			<author>
				<name><![CDATA[stir]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26486</uri>
			</author>
			<updated>2011-12-09T04:12:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54392#p54392</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54391#p54391" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>..теперь вместо адресов переменных могут использоваться их значения</p></blockquote></div><p>Сожалею за такое&quot;, но я только приступил к изучению этого языка и не прочитал (! уф!!!) еще и половины учебника по АНК.<br />Впредь буду внимательней и после изучения нужного объема инфы я на такое не буду способен, <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p><p>Последнюю найденную версию я не смог установить из-за антивируса, который в скаченном мною откуда-то архиве нашел угрозу. Попробую по вашей ссылке скачать...<br />Скачал - антивирус не ругается, все нормально.</p><p>После установки обновленной версии пришлось запускать вашу версию (предыдущую) - работает.<br />Сейчас подумаю, как сделать отчет скрытым, как поместить скрипт в автозагрузку и как посылать отчет от нарушителей и как идентифицировать нарушителя...<br />Позже отпишусь как реализовал все на практике.<br />Спасибо за помощь!</p><p>Если внести идентификацию нарушителя в скрипт, то его можно и в коллекцию помещать, как считаете, автор (DD) заслуживает этого?</p><p>ДД, а почему время и дата идентичная? Это время запуска скрипта и оно фиксировалось в момент его запуска или что-то другое тут? Вот лог:</p><div class="codebox"><pre><code>09.12.2011 [12.31.44]
Zeleniy.fonar.2011.D.HDRip.avi - MPC-HC v1.4.2689.0

09.12.2011 [12.31.44]
C:\AHK

09.12.2011 [12.31.44]
Zeleniy.fonar.2011.D.HDRip.avi - MPC-HC v1.4.2689.0

09.12.2011 [12.31.44]
Player Window

09.12.2011 [12.31.44]
Zeleniy.fonar.2011.D.HDRip.avi - MPC-HC v1.4.2689.0

09.12.2011 [12.31.44]
Общая громкость

09.12.2011 [12.31.44]
Zeleniy.fonar.2011.D.HDRip.avi - MPC-HC v1.4.2689.0

09.12.2011 [12.31.44]
C:\AHK

09.12.2011 [12.31.44]
Zeleniy.fonar.2011.D.HDRip.avi - MPC-HC v1.4.2689.0</code></pre></div><p>текущее время 13-06</p>]]></content>
			<author>
				<name><![CDATA[stir]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26486</uri>
			</author>
			<updated>2011-12-09T03:22:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54391#p54391</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54390#p54390" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>файлы с видео надёжнее находить проверкой сигнатур</p></blockquote></div><p>Да, но получить командную строку не всегда удаётся.</p><div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>Я бы предложил такой подход к решению средствами AHK-</p></blockquote></div><p>Чтобы провернуть такое, неопытному DD пришлось бы покорпеть, однако ж, порядком <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p><div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>недавно этот код обсуждался- он не на всех системах будет работать</p></blockquote></div><p>Другим под базовую не распологаю.</p><div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>хендл потока нужно закрыть в конце</p></blockquote></div><p>Кажись, закрыл <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[DD]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25263</uri>
			</author>
			<updated>2011-12-09T02:14:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54390#p54390</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54384#p54384" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>mih пишет:</cite><blockquote><p><strong>Александр_</strong>, <br />&quot;Атрибуты можно менять&quot; — выходит, чтоб воспользоваться streams.exe и иметь гарантированный результат без ручного вмешательства, я должен сначала все эти диски просканировать на наличие атрибута readonly, и снять его везде. Я к тому: есть ли альтернатива этой streams.exe, чтоб уничтожала всё безусловно: запустил — и чисто по всем дискам?</p></blockquote></div><p>Самому нужно писать, у NTFS есть функция протоколирования изменений.<br /></p><div class="quotebox"><cite>mih пишет:</cite><blockquote><p>Это бесконечно; как ни усложняй, а примитив станет только сложно устроенным примитивом.</p></blockquote></div><p>Естественно. Я уже говорил- если хочешь спрятать процесс, то не создавай его. Я думаю переход к руткитам и драйверам режима ядра является слишком сильным отступлением от темы.<br /></p><div class="quotebox"><cite>stir пишет:</cite><blockquote><p>Еще я подкорректировал - убрал все &amp;</p></blockquote></div><p>Ага и теперь вместо адресов переменных могут использоваться их значения.<br /></p><div class="quotebox"><cite>stir пишет:</cite><blockquote><p>, заменил</p></blockquote></div><p>Не важно, там всё равно будет 0 или 1.<br /></p><div class="quotebox"><cite>stir пишет:</cite><blockquote><p>/думается переменная или же функция х не может иметь зависимость от себя же - х/2</p></blockquote></div><p>Может, называется &quot;<a href="http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D0%B0">рекуррентная формула</a>&quot;<br /><strong>DD</strong>, недавно этот код обсуждался- он не на всех системах будет работать, код функции GetCommandLineA менялся. Нужно действовать как в вашем посте 34, только хендл потока нужно закрыть в конце.<br />И, кстати, файлы с видео надёжнее находить проверкой сигнатур, а не расширения.<br />Я бы предложил такой подход к решению средствами AHK- для каждого видимого окна проводить процедуру исследования- проверить на наличие определённых шаблонов в текстах окон и именах классов, проверка загруженных модулей(если нет графических библиотек, то навряд ли процесс воспроизводит видео) и анализ открытых файлов. Всё что подпадает под подозрение- пишем в лог, для последующего ручного анализа. Для ускорения желательно создать базу доверенных и не очень программ.</p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2011-12-08T21:09:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54384#p54384</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54363#p54363" />
			<content type="html"><![CDATA[<p><em>AHK BASE</em>:</p><div class="codebox"><pre><code>#Persistent
#SingleInstance Force
 
; ЧЁРНЫЙ СПИСОК ВИДЕО-РАСШИРЕНИЙ (ЛИШНИЕ МОЖНО УБРАТЬ)
ExtLst = .3g2,.3gp,.3gp2,.3gpp,.asf,.asx,.avi,.flv,.dif,.dv,.IVF,.m1v,.m2v,.m4e,.mkv,.mov,.mp2,.mp2v,.mp4,.mpa,.mpe,.mpeg,.mpg,.mps,.mpv,.mpv2,.ogm,.qt,.ram,.rv,.wm,.wmp,.wmv,.wmx,.wvx
; ФОРМАТ ДАТЫ
FormatTime, Cur_Date,, dd.MM.yyyy [H.mm.ss]


SetTimer, VdCtrl, 1000  ;так часто необязательно
Return


VdCtrl:
  MouseGetPos, xC, yC, id, controlUnder
  WinGetActiveTitle, WinTtl  ;получение заголовка окна


  WinGet, hWnd, PID, % &quot;ahk_id &quot; WinExist(&quot;A&quot;)
  Exe_Path := GetModuleFileNameEx( hWnd ) ; вызываем функцию получения пути процесса ОКНА
  Com_Line := GetRemoteCommandLine( hWnd ) ; вызываем функцию получения ком. строки ОКНА
  If Not Com_Line ; если что-то не так...
    Return
  StringReplace, File_Path, Com_Line, %Exe_Path% ; удаляем из строки путь к ОКНУ
  StringReplace, File_Path, File_Path, &quot;,, All ; удаляем из строки все кавычки, если они есть

  Com_Line=%Com_Line%

  If controlUnder contains Video
  {
    Gosub, Write
    Return
  }
  Else If Com_Line contains %ExtLst%
  {
    Gosub, Write
    Return
  }
  Else If WinTtl contains %ExtLst%
  {
    Gosub, Write
    Return
  }
  Return


Write:
  If ( WinTtlPrevious = WinTtl )
    Return
  Else
  {
Tooltip, Запись
    FileAppend, %Cur_Date%`n%WinTtl%`n%Com_Line%`n`n, %A_ScriptDir%\VdCtrl.log
Sleep, 1000
Tooltip
    WinTtlPrevious := WinTtl
  }
  Return


GetRemoteCommandLine( p_hWnd ) ; функция получения командной строки для процесса (по его PID&#039;у)
{
    hp_target := DllCall( &quot;OpenProcess&quot;, &quot;UInt&quot;, 0x10, &quot;Int&quot;, false, &quot;UInt&quot;, p_hWnd ) ; открываем хэндл для PID процесса...
    ; ...с правами для чтения 0x10 = PROCESS_VM_READ (нужны для ReadProcessMemory) и без наследования хэндла
    If ( ErrorLevel OR hp_target = 0 ) ; если почему-либо не удалось открыть хэндл (или он открыт для несуществующего PID&#039;а)...
        Goto, Return_2 ; перейти к закрытию хэндла и выйти из функции

    hm_kernel32 := DllCall( &quot;GetModuleHandle&quot;, &quot;Str&quot;, &quot;kernel32.dll&quot; ) ; узнаем хэндл библиотеки kernel32.dll
    pGetCommandLineA := DllCall( &quot;GetProcAddress&quot;, &quot;UInt&quot;, hm_kernel32, &quot;Str&quot;, &quot;GetCommandLineA&quot; ) ; получаем указатель...
    ; ...на адрес функции GetCommandLineA (ANSI), содержащейся в kernel32.dll

    buffer_size = 6 ; количество байт для переменной
    VarSetCapacity( buffer, buffer_size ) ; обеспечиваем достаточную вместимость переменной
    DllCall( &quot;ReadProcessMemory&quot;, &quot;UInt&quot;, hp_target, &quot;UInt&quot;, pGetCommandLineA, &quot;UInt&quot;, &amp;buffer, &quot;UInt&quot;, buffer_size, &quot;UInt&quot;, 0 )
    ; для хэндла PID&#039;а получаем перенаправление функцией GetCommandLineA на указатель на адрес командной строки...
    ; ...и кладем его по адресу &quot;buffer&quot; в памяти

    Loop, 4 ; преобразовываем указатель на адрес командной строки в целое число
        ppCommandLine += ( ( *( &amp;buffer+A_Index ) ) &lt;&lt; ( 8*( A_Index-1 ) ) ) ; создаем целое число, складывая его байты

    buffer_size = 4 ; количество байт для переменной
    VarSetCapacity( buffer, buffer_size, 0 ) ; обеспечиваем достаточную вместимость переменной, и очищаем её
    DllCall( &quot;ReadProcessMemory&quot;, &quot;UInt&quot;, hp_target, &quot;UInt&quot;, ppCommandLine, &quot;UInt&quot;, &amp;buffer, &quot;UInt&quot;, buffer_size, &quot;UInt&quot;, 0 )
    ; для хэндла PID&#039;а читаем адрес командной строки, и кладем его по адресу &quot;buffer&quot; в памяти

    Loop, 4 ; преобразовываем адрес в целое число
        pCommandLine += ( ( *( &amp;buffer+A_Index-1 ) ) &lt;&lt; ( 8*( A_Index-1 ) ) ) ; создаем целое число, складывая его байты

    ; Адрес командной строки получен, теперь извлекаем его содержимое
    buffer_size = 520 ; столько символов будем читать из командной строки (мне кажется, длиннее быть не может)
    VarSetCapacity( result, buffer_size, 1 ) ; обеспечиваем достаточную вместимость переменной, делаем её побайтной
    DllCall( &quot;ReadProcessMemory&quot;, &quot;UInt&quot;, hp_target, &quot;UInt&quot;, pCommandLine, &quot;UInt&quot;, &amp;result, &quot;UInt&quot;, buffer_size, &quot;UInt&quot;, 0 )
    ; для хэндла PID&#039;а читаем командную строку, и кладем её по адресу &quot;result&quot; в памяти (просто помещаем значение в переменную)

    Return_2: ; метка перехода к закрытию хэндла
    DllCall( &quot;CloseHandle&quot;, &quot;UInt&quot;, hp_target ) ; закрываем хэндл
    Return, result ; возвращаем полную командную строку для PID&#039;а процесса
} ; конец функции

GetModuleFileNameEx(PID) { ; shimanov - www.autohotkey.com/forum/viewtopic.php?p=54838#54838
hpr := DllCall( &quot;OpenProcess&quot;, UInt,1040, Int,0, UInt,PID )
If ( ErrorLevel or !hpr )
    Return
VarSetCapacity( Name,255 )
DllCall( &quot;psapi.dll\GetModuleFileNameExA&quot;, UInt,hPr, UInt,0, Str,Name, UInt,255 )
DllCall( &quot;CloseHandle&quot;, hPr )
Return, Name
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[DD]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25263</uri>
			</author>
			<updated>2011-12-08T13:13:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54363#p54363</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54358#p54358" />
			<content type="html"><![CDATA[<p>Текущая актуальная версия ahk <a href="http://l.autohotkey.net/">1.1.05.04</a><br />«пробовать сохранять…»&nbsp; в различных кодировках не обновившись не имеет смысла <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Если желаете использовать ahk basic – любой скрипт расчитанный на актуальную версию придётся адаптировать исходя из <a href="http://l.autohotkey.net/docs/Compat.htm">рекомендаций</a></p><p>//edit:basik-&gt;basic</p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2011-12-08T11:12:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54358#p54358</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54353#p54353" />
			<content type="html"><![CDATA[<p>Использовал инсталятор AutoHotkey104805 - Version 1.0.48.05</p><p>Вот было мое сообщение оставленное без внимания вами </p><div class="quotebox"><blockquote><p>я сохранил код в кодировке 1251</p></blockquote></div><p>использовал Алкепад редактор.. теперь значит надо попробовать сохранить в : 1200 (UTF-16 LE), 1201 (UTF-16 BE), Unicode ...</p><p>Все перепробовал - ошибка 1 строки = аю#</p>]]></content>
			<author>
				<name><![CDATA[stir]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26486</uri>
			</author>
			<updated>2011-12-08T08:32:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54353#p54353</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Запрет открытия файла (группы файлов)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54346#p54346" />
			<content type="html"><![CDATA[<p>Только что перепроверил — работает.<br />Возможно, забыли в UNICODE сохранить? Какую версию AHK используете?</p>]]></content>
			<author>
				<name><![CDATA[DD]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25263</uri>
			</author>
			<updated>2011-12-08T05:21:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54346#p54346</id>
		</entry>
</feed>
