1

Тема: AHK: Запрет открытия файла (группы файлов)

Подскажите, можно ли с помощью АНК запретить локальному пользователю только открытие любого видео на ПК с любого диска (копировать и т.д. не запрещается)?
Если поставить скрипт в автозагрузку то рано или поздно пользователь догадается и сможет его отрубить..
Как быть? Были ли у вас заготовки подобного рода? Возможно есть более адекватные меры и решения??

Почему я выбрал этот раздел для топика? Ну наверное мне понравилось, что скрипт можно отрубить всегда безболезненно для ОС и мгновенно, . Правда есть опасения, что значек виден и его можно отключить не имея даже прав админа...

/Сегодня пожаловался один начальник на своих подчиненных, что те украдкой стали смотреть кино во время рабочего времени, мол обнаглели совсем... ладно если бы просто музон слушали./

Любители построили Ковчег, а профессионалы - Титаник.

2

Re: AHK: Запрет открытия файла (группы файлов)

ПК в сети есть с ХП и 7. У более половины нет прав админа - только опытные пользователи.

Любители построили Ковчег, а профессионалы - Титаник.

3

Re: AHK: Запрет открытия файла (группы файлов)

Наверно никак не запретишь. Особенно, если Вы пытаетесь сделать это средствами AutoHotkey.

4

Re: AHK: Запрет открытия файла (группы файлов)

Я предполагал, что нельзя. Значит остается только единственный путь -  лезть в ОСь...
Спасибо за ответ.

Любители построили Ковчег, а профессионалы - Титаник.

5

Re: AHK: Запрет открытия файла (группы файлов)

stir пишет:

Подскажите, можно ли с помощью АНК запретить локальному пользователю только открытие любого видео на ПК с любого диска (копировать и т.д. не запрещается)?

Это всё равно, что запретить человеку запоминать написанное в книге, при этом не запрещая её читать. Можно запретить запуск через проводник и взять под контроль основные проигрыватели или даже мониторить вызовы DirectShow, но лазейки всё равно останутся. В любом случае это не скриптовая задача.

6

Re: AHK: Запрет открытия файла (группы файлов)

Можно мониторить процессы и убивать те, которые имеют отношение к плеерам (естественно, список оных должен быть в скрипте). Такая защита подойдет от не слишком искушенных пользователей.

7

Re: AHK: Запрет открытия файла (группы файлов)

А если так: проверять заголовок и командную строку каждого нового окна на наличие видео расширений и при совпадении — рубить с плеча.
Для пущей верности — запоминать заголовки убитых плееров в файл (ибо шибко опытные через какое-то время примутся изменять расширения), и рубить также сверяясь с его содержимым.
Целесообразно выводить какое-нибудь последнее предупреждение о том, что-де при следующей попытке просмотра видео файл будет удалён с содержимым флешки (а слово мы держим ).
Процессов придется сделать два (взаимоследящих) и запускать отсюда (многие работающие с автозагрузкой приложения эту ветку не видят):

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"Userinit"="C:\\WINDOWS\\system32\\userinit.exe,, ПравильныйПуть\\ФайлСПравильнойИконкойИВызывающимДовериеИменем.exe"

8

Re: AHK: Запрет открытия файла (группы файлов)

Шибко опытные изменят расширение.

9 (изменено: Александр_, 2011-12-01 18:25:43)

Re: AHK: Запрет открытия файла (группы файлов)

DD пишет:

А если так: проверять заголовок и командную строку каждого нового окна на наличие видео расширений и при совпадении — рубить с плеча.

ага, открываем в проводнике папку "тралала.avi" и рубим "explorer.exe" .

DD пишет:

Процессов придется сделать два (взаимоследящих) и запускать отсюда (многие работающие с автозагрузкой приложения эту ветку не видят):

взаимоследящие легко рубятся скриптом и пофиг откуда запустил- в диспетчере найдём. А ещё есть виртуалки...
P.S. Можно настоящую войну скриптов устроить- задача одного запустить фильм в плеере и охранять, а другого- выследить плеер и убить .

10

Re: AHK: Запрет открытия файла (группы файлов)

Александр_ пишет:

ага, открываем в проводнике папку "тралала.avi" и рубим "explorer.exe" .

А вот не надо было "тралала.avi" открывать . Не сложно проверить — файл это или папка.

Александр_ пишет:

взаимоследящие легко рубятся скриптом и пофиг откуда запустил- в диспетчере найдём.

Согласен, процесс почти всегда слабое место.

Кстати еще можно проверять первые символы сигнатуры активного файла.

11 (изменено: DD, 2011-12-03 05:11:51)

Re: AHK: Запрет открытия файла (группы файлов)

Вот еще пример (срабатывает почти всегда):


#Persistent

SetTimer, VC, 1000
Return

VC:
  MouseGetPos, xC, yC, id, controlUnder
  If controlUnder contains Video
  {
    Tooltip, %controlUnder%
    Sleep,900
    Tooltip
    Return
  }
  Return

12

Re: AHK: Запрет открытия файла (группы файлов)

DD пишет:

Не сложно проверить — файл это или папка.

Не в этом проблема, а в большой вероятности ложного срабатывания.

DD пишет:

Вот еще пример (срабатывает почти всегда):

Вот это уже юзабельно, но против "опытных" не прокатит- детект по классу слишком очевиден, опытный пользователь додумается скачать плеер в исходных кодах и скомпилировать, изменив классы и заголовки.
Если исходников нет, то на том же AHK можно написать своеобразный скрипт-охранник, который в роли отладчика запустит процесс и поставит прерывание на CreateWindowEx. И если увидит, что создаётся окно с "палевным" классом, то "суперклассит" это окно, просто регистрируя другое имя класса. Хотя это уже для программиста задачка .
Кстати, "рубить с плеча" в таких случаях не надо- это позволяет легко вычислить "агрессора". Нужно как-нибудь подгадить, чтобы процесс в будущем упал по непонятным причинам. Нет нужды с пользователем воевать, если можно нае...
И еще непонятно зачем текст контрола получать, если мы его всё равно не используем.

13

Re: AHK: Запрет открытия файла (группы файлов)

Александр_ пишет:

Не в этом проблема, а в большой вероятности ложного срабатывания.

Проверка файл-папка не стабильна?

Александр_ пишет:

опытный пользователь додумается скачать плеер в исходных кодах

Наши киноманы несознательные, сдаётся мне, не додумаются .

Александр_ пишет:

Нет нужды с пользователем воевать, если можно нае...

Верно подмечено.

Александр_ пишет:

И еще непонятно зачем текст контрола получать, если мы его всё равно не используем.

Такой уж я "программист" .

А скажите, Александр_, знаете ли Вы команду для запуска файла из потока?

14

Re: AHK: Запрет открытия файла (группы файлов)

DD пишет:

Проверка файл-папка не стабильна?

Если у программы в заголовке указано имя видеофайла, то это ещё не значит, что она его воспроизводит- может она просто какую-то информацию извлекает, вроде используемых кодеков или на диск его записывает.

DD пишет:

А скажите, Александр_, знаете ли Вы команду для запуска файла из потока?

Если из альтернативного NTFS-потока, то как и обычный файл:

run ИмяФайла:Имя_Потока

15

Re: AHK: Запрет открытия файла (группы файлов)

Александр_ пишет:

может она просто какую-то информацию извлекает

Могу ошибаться, но подозреваю что работа с кодеками и прочим релаксом находится вне сферы их обязанностей.

Александр_ пишет:
run ИмяФайла:Имя_Потока

Это запустит файл, а требуется выполнить прикреплённый к нему поток. Или не предусмотрено?

16

Re: AHK: Запрет открытия файла (группы файлов)

DD пишет:

Могу ошибаться, но подозреваю что работа с кодеками и прочим релаксом находится вне сферы их обязанностей.

По условию нужно препятствовать только просмотру видеофайлов.

DD пишет:

Это запустит файл, а требуется выполнить прикреплённый к нему поток. Или не предусмотрено?

Значит баг, там те же api, что и с обычными файлами. Вот пример на WinApi:

FileName := a_scriptdir . "\1.txt"
StreamName := "calc"
FileAppend , , %FileName%
FileGetSize szcalc, %A_WinDir%\system32\calc.exe
hStream:=DllCall("CreateFile", "str", A_WinDir . "\system32\calc.exe", "uint", 0x80000000, "uint", 0, "uint", 0, "uint", 3, "uint", 0x80, "uint", 0)
VarSetCapacity(calc, szcalc)
VarSetCapacity(lpNumberOfBytesWritten, 4)
DllCall("ReadFile", "uint", hStream, "uint", &calc, "uint", szcalc, "uint", &lpNumberOfBytesWritten, "uint", 0)
DllCall("CloseHandle", "uint", hStream)
hStream:=DllCall("CreateFile", "str", FileName . ":" . StreamName, "uint", 0x40000000|0x80000000, "uint", 0, "uint", 0, "uint", 2, "uint", 0x80, "uint", 0)
DllCall("WriteFile", "uint", hStream, "uint", &calc, "uint", szcalc, "uint", &lpNumberOfBytesWritten, "uint", 0)
DllCall("CloseHandle", "uint", hStream)
VarSetCapacity(calc, 0)
VarSetCapacity(lpNumberOfBytesWritten, 0)
VarSetCapacity(si, 68, 0)
VarSetCapacity(pi, 16, 0)
DllCall("GetStartupInfo", "uint", &si)
DllCall("CreateProcess", "str", FileName . ":" . StreamName, "uint", 0, "uint", 0, "uint", 0, "uint", 0, "uint", 0, "uint", 0, "uint", 0, "uint", &si, "uint", &pi)
DllCall("CloseHandle", "uint", NumGet(&pi))
DllCall("CloseHandle", "uint", NumGet(&pi, 4))
FileDelete %FileName%
return

создаём(если его нет) в директории со скриптом файл "1.txt", затем копируем ему в поток "calc" файл калькулятора и запускаем его. Удалям файл 1.txt.

17 (изменено: mih, 2011-12-04 04:56:28)

Re: AHK: Запрет открытия файла (группы файлов)

Маленький offtop. А есть ли какой способ либо вообще запретить эти "калькуляторы в текстовых файлах" в ntfs, либо быстро избавляться от них везде?
Я иногда запускаю streams.exe по всем дискам, но есть одна мелочь: она не хочет удалять потоки у файлов с "readonly" (ну и у файлов с длинным путём), а у меня они откуда-то появляются. Есть ли другой способ надёжно и быстро грохнуть всё это безобразие, и без всяких условий?

18 (изменено: DD, 2011-12-04 06:13:07)

Re: AHK: Запрет открытия файла (группы файлов)

Странное дело: запускаю прилаженный к невидимому в процессах exe'шнику калькулятор и вижу в Диспетчере — "MPK.exe:calc". Иного не дано?
mih, я не в курсе.

19 (изменено: mih, 2011-12-05 21:23:14)

Re: AHK: Запрет открытия файла (группы файлов)

удалил

20

Re: AHK: Запрет открытия файла (группы файлов)

Похоже, что предоставить в распоряжение stir`а (потерявшему веру в AHK) более-менее надёжный процесс пока не светит. Без него против бывалых не попрёшь...
mih, Ваш 19-й мудрено понять .

21 (изменено: Александр_, 2011-12-05 21:40:43)

Re: AHK: Запрет открытия файла (группы файлов)

mih пишет:

Маленький offtop. А есть ли какой способ либо вообще запретить эти "калькуляторы в текстовых файлах" в ntfs, либо быстро избавляться от них везде?
Я иногда запускаю streams.exe по всем дискам, но есть одна мелочь: она не хочет удалять потоки у файлов с "readonly" (ну и у файлов с длинным путём), а у меня они откуда-то появляются. Есть ли другой способ надёжно и быстро грохнуть всё это безобразие, и без всяких условий?

Атрибуты можно менять. Я думаю, что следить за ними(альтернативными потоками) можно как и за обычными файлами, хотя не проверял. Предотвратить же их появление без сторонних инструментов нельзя.

DD пишет:

Странное дело: запускаю прилаженный к невидимому в процессах exe'шнику калькулятор и вижу в Диспетчере — "MPK.exe:calc". Иного не дано?

Чего же тут странного? Мы создали процесс(функция так и называется- CreateProcess), указав имя файла "FileName:StreamName"- естественно имя у процесса и будет "FileName:StreamName".

22 (изменено: mih, 2011-12-05 21:28:21)

Re: AHK: Запрет открытия файла (группы файлов)

DD, что-то съело мой текст, но я тут повторил по смыслу.

Александр_,
"и вижу в Диспетчере — "MPK.exe:calc" — я этого не писал.
"Атрибуты можно менять" — выходит, чтоб воспользоваться streams.exe и иметь гарантированный результат без ручного вмешательства, я должен сначала все эти диски просканировать на наличие атрибута readonly, и снять его везде. Я к тому: есть ли альтернатива этой streams.exe, чтоб уничтожала всё безусловно: запустил — и чисто по всем дискам?

Сейчас глупость скажу, но стратегию защиты от кино мне видится так: с одной стороны — очень тихое ведение лога, и тихое же предупреждение сотрудников, с другой — жёсткая перезагрузка сразу после обнаружения характерных контролов проигрывателей. Понятно, что всё это не абсолютно, тем более, что половина — с правами админа. Недостаток инструмента — не запоминает задание, после перезагрузки системы надо либо заново вручную вводить, либо — приспособить ahk.

23

Re: AHK: Запрет открытия файла (группы файлов)

mih, пока не будет исправлено это:

mih пишет:

…тем более, что половина — с правами админа.

абсолютно любые прочие действия будут бессмысленны.

24

Re: AHK: Запрет открытия файла (группы файлов)

Ну да, можно и свою систему временно поставить, для кино.

25 (изменено: DD, 2011-12-05 23:11:17)

Re: AHK: Запрет открытия файла (группы файлов)

Александр_ пишет:

Чего же тут странного?

Мне-то по простоте душевной казалось что раз процесс "MPK.exe" сам по себе после запуска невидим, то и содержимое его потока должно быть невидимым.
Может быть это решаемо запуском потока уже запущенного процесса "MPK.exe"?

mih пишет:

очень тихое ведение лога

Разве не просто выяснить его местонахождение и сотворить всё что хотел?

mih пишет:

тихое же предупреждение сотрудников

Коль скоро начальник "жалуется", — ребята эти, надо думать, такие строптивцы, против которых токмо калёное железо — больше ничего!
По поводу "жёсткой перезагрузки" очень ёмко Александр_ сформулировал:

Александр_ пишет:

Нет нужды с пользователем воевать, если можно нае...

Как он прав!

26 (изменено: mih, 2011-12-05 23:44:01)

Re: AHK: Запрет открытия файла (группы файлов)

DD пишет:

Разве не просто выяснить его местонахождение

Я там ссылку дал.
По поводу перезагрузки — я писал именно о совокупности двух мер, первая — по-возможности максимально усложняет (ну, это мне так кажется, могу ошибаться) исследование, а вторая — должна остаться вообще незамеченной. Хотя, сейчас подумал, м. б. достаточно незаметного лога. Реагировать можно не сразу, но жёстко. Один-два серьёзных штрафа — и желание отпадёт.
А вообще, всё это ерунда, — последний способ сам по себе будет работать, заметил — шарах одного, а можно и весь зоопарк — и проблема решена.

27

Re: AHK: Запрет открытия файла (группы файлов)

Штрафовать за тихую любовь к синематографу?! Жестковато !
Ссылку смотрел: ничё не понял .

28 (изменено: mih, 2011-12-06 07:41:14)

Re: AHK: Запрет открытия файла (группы файлов)

Ну если к синематографу, то один рабочий день — непрерывный просмотр прибывающего поезда.
Сурово? А кто написал: "Коль скоро начальник "жалуется", — ребята эти, надо думать, такие строптивцы, против которых токмо калёное железо — больше ничего!", ?

Это драйвер такой. Надо весь комплект "BSA" скачать, из него нужно только два файла: .sys и ...gui.exe — через него запускается .sys и даётся ему конкретное задание. Результат — тю-тю заданные файлы, ку-ку указанные процессы (последние наблюдаются только в PH в спецокне; и не помню только насчёт папок). А вообще — всё это — добавок к Sandboxie, песочница интересная такая (см. ру-борд).

29

Re: AHK: Запрет открытия файла (группы файлов)

А драйвер этот процесс скрыть смогёт?
И что есть PH?

Мой 27-й всерьёз воспринимать не надо, — конечно же я помнил фразу, которую обронил часом ранее.

30 (изменено: mih, 2011-12-06 11:14:06)

Re: AHK: Запрет открытия файла (группы файлов)

— Какой "этот процесс"? Драйвер этим и занимается. Сам он может иметь любое имя. A где он виден? Только в специальных таблицах наряду с кучей других, а чем он занимается — там не доложено.
— Process Hacker.

31 (изменено: stir, 2011-12-06 11:38:17)

Re: AHK: Запрет открытия файла (группы файлов)

Ребят, очень интересно, как вы пытаетесь мне помочь, спасибо.
Вы правы, что молодые люди могут найти лекарство, но на это понадобится время, а это наше преимущество! За это время необходимо просто получать логи об их действиях (сейчас ознакомили об этом всех пользователей - лишение премии за просмотр, именно просмотр кино), так что мне просто надо вести мониторинг открытия файлов, а не их копировании, ну и возможно какие-то серьезные действия, самое простое - окно с уведомлением и подсчетом, 3 раза и хана - удаление инфы с флехи, у многих кто попался на шутках или просмотре я права уже забрал, сделал себе удаленное управление с правами админа. Смысл есть. Не заню как реализовать, ведь есть ХП и 7, они малось поразному могут среагировать на автодействия скрипта...
Может есть еще идеи ненавороченного алгоритма? / права админа все равно буду убирать, постепенно/
В моем распоряжении сервак 2008 (32 бит), для управления скриптом могу там создавать все что вздумается с парольной защитой под каждого юзера / я их туда уже внес почти всех, ввел новые логины и пароли/
Одно радует, эти ребята инженера, а не программеры, .

Одно плохо, я сам както дал им наводку, а они ее использовали в более широком смысле: я против нелицензионного софта и все выкосил собственноручно, мало ли вдруг проверка а тут такое под твоим носом! Рекомендовал портабле версию проигрывателя музыки, на крайний случай виндозовский плейер, но потом появился фотошоп и прочий портабле софт без возможности засирания оси, для меня это нормально, ось не гробится ненужными записями в реестр и т.д. НО пришли с этим и видеоплейеры.. то что стало мешать иногда работе...

Любители построили Ковчег, а профессионалы - Титаник.

32 (изменено: stir, 2011-12-06 11:43:27)

Re: AHK: Запрет открытия файла (группы файлов)

и еще - мне понравилась идея двух взаимоследящих процессах от убивания юзером!
Хорошая идея, если нет прав админа - они будут стабильно работать!!!
А откат по паролю или еще как можно будет предусмотреть? Так на всякий случай, не переустанавливать же потом ось, если все будет нормально или потребуется для работы прокрутить видео ролик.
Я даже названия процессам могу придумать - начинаются с dw***, т.к. на всех пк стоит др веб, так что закамуфлировать под процесс антивируса в общем списке можно, лишь бы цифр в названии не было.

Скрывать процесссы мне кажется на начальном этапе такого антихакерского" скрипта думаю не стоит. Смею предположить, что трудлнее всего найти видимое на самом видном месте (сам этим часто пользуюсь в жизни и страдаю, когда не могу что-то найти)

Любители построили Ковчег, а профессионалы - Титаник.

33

Re: AHK: Запрет открытия файла (группы файлов)

mih пишет:

"и вижу в Диспетчере — "MPK.exe:calc" — я этого не писал.

Извиняюсь, исправил.

DD пишет:

Мне-то по простоте душевной казалось что раз процесс "MPK.exe" сам по себе после запуска невидим, то и содержимое его потока должно быть невидимым.
Может быть это решаемо запуском потока уже запущенного процесса "MPK.exe"?

Нет, легально нельзя сделать "невидимый" процесс.

mih пишет:

— Какой "этот процесс"? Драйвер этим и занимается. Сам он может иметь любое имя. A где он виден? Только в специальных таблицах наряду с кучей других, а чем он занимается — там не доложено.
— Process Hacker.

Любой антируткит этот примитив спалит. Процесс очень сложно спрятать- ведь система-то его видеть должна, иначе он просто корректно работать не будет. И если есть драйвер, то зачем создавать процесс? Чтоб потом его прятать?

stir пишет:

Одно радует, эти ребята инженера, а не программеры, .

Ну тогда норм- даём драйверу(службе) имя типа "Управление цифровыми подписями" и никто не рискнёт его отключать . Но это уже далеко не AHK, может перенести тему в "Script-Coding.com community" и там уже решать проблему всеми доступными способами? Правда до виртуалок они всё же могут додуматься(конечно если железо позволяет ).

34 (изменено: DD, 2011-12-09 19:08:42)

Re: AHK: Запрет открытия файла (группы файлов)

(AHK_L):


#Persistent
#SingleInstance Force
SendMode, Input
SetTitleMatchMode, 2
SetBatchLines, -1


GroupAdd, ExplorerGrp, ahk_class CabinetWClass
GroupAdd, ExplorerGrp, ahk_class ExploreWClass

 
; ЧЁРНЫЙ СПИСОК ВИДЕО-РАСШИРЕНИЙ
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
; ФОРМАТ ДАТЫ
 
 
SetTimer, VdCtrl, 1000  ;так часто необязательно
Return
 
 
VdCtrl:
  FormatTime, Cur_Date,, dd.MM.yyyy [H.mm.ss]
  IfWinActive, ahk_group ExplorerGrp
     return
  MouseGetPos, xC, yC, id, controlUnder
  WinGetActiveTitle, WinTtl  ;получение заголовка окна
 
  WinGet, hWnd, PID, % "ahk_id " WinExist("A")
  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 ( WinTtlPrevious = WinTtl )
    Return
  Else
  {
Tooltip, Запись
    FileAppend, %Cur_Date%`n%WinTtl%`n%Com_Line%`n, %A_ScriptDir%\VdCtrl.log
Sleep, 1000
Tooltip
    WinTtlPrevious := WinTtl
  }
  Return
 
 
;константы
ProcessBasicInformation   := 0
PROCESS_QUERY_INFORMATION := 0x0400
PROCESS_VM_READ           := 0x0010
;функции
;открытие процесса
OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId)
{
   return DllCall("OpenProcess", "uint", dwDesiredAccess, "int", bInheritHandle, "uint", dwProcessId, "uint")
}
;получение информации о процессе
ZwQueryInformationProcess(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength, ReturnLength)
{
   return DllCall("ntdll.dll\ZwQueryInformationProcess","uint", ProcessHandle, "uint", ProcessInformationClass, "uint", ProcessInformation, "uint", ProcessInformationLength, "uint", ReturnLength, "uint")
}
;чтение данных из процесса
ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead)
{
   return DllCall("ReadProcessMemory", "uint", hProcess, "uint", lpBaseAddress, "uint", lpBuffer, "uint", nSize, "uint", 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, &ProcessInformation, 0x18, &ReturnLength)
   ;по смещению 4 располагается адрес PEB
   ReadProcessMemory(hProc, NumGet(&ProcessInformation, 4)+16, &Buffer, 4, &ReturnLength)
   ;по смещению 16 в PEB находится адрес структуры RTL_USER_PROCESS_PARAMETERS
   ReadProcessMemory(hProc, NumGet(&Buffer)+64, &Buffer, 8, &ReturnLength)
   ; слово по смещению 0 содержит длину строки в байтах
   ; двойное слово по смещению 4 содержит адрес строки
   ; строка НЕ заканчивается нулём
   x:=NumGet(&Buffer, 0, "ushort")
   VarSetCapacity(str, x) ; выделяем необходимое место
   ReadProcessMemory(hProc, NumGet(&Buffer, 4), &str, x, &ReturnLength)
   x:=StrGet(&str, x/2, "UTF-16")
 
   VarSetCapacity(ProcessInformation, 0) ; освобождаем память
   VarSetCapacity(str, 0)
   VarSetCapacity(Buffer, 0)
   VarSetCapacity(ReturnLength, 0)
   return x
}

35 (изменено: mih, 2011-12-07 08:17:37)

Re: AHK: Запрет открытия файла (группы файлов)

Ребята могут ведь и на принесённом с собой устройстве фильм смотреть. Если что-то нужно запретить, то это нужно именно запретить.

Александр_ пишет:

Любой антируткит этот примитив спалит

Это бесконечно; как ни усложняй, а примитив станет только сложно устроенным примитивом. "Любители построили Ковчег, а профессионалы - Титаник", — интересные подписи бывают.

36 (изменено: stir, 2011-12-07 11:07:36)

Re: AHK: Запрет открытия файла (группы файлов)

DD, при запуске вышла ошибка в строке 64 -

return DllCall("OpenProcess", "uint", dwDesiredAccess, "int", bInheritHandle, "uint", dwProcessId, "uint")

, не понял почему? я только его еще запускаю..

mih, про подпись отдельная история берущая свое начало в далеком 2002 году... но она мне нравится до сих пор.

Любители построили Ковчег, а профессионалы - Титаник.

37

Re: AHK: Запрет открытия файла (группы файлов)

DD, возможна ли опечатка? "int" заменил на "int&quot", тут же вывалились другие ошибки с 88 по 107 строки одним сообщением... может от того, что я сохранил код в кодировке 1251, а может еще от чего??
Сильно не ругайте, просто с такими скриптами я еще дел не имел.

Любители построили Ковчег, а профессионалы - Титаник.

38

Re: AHK: Запрет открытия файла (группы файлов)

DD, будь так любезен, поимей такую привычку: запостил код, тут же скопировал, и запустил! Зачем народ без толку смущать? И ведь это уже в который раз!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

39

Re: AHK: Запрет открытия файла (группы файлов)

Как же я виноват, stir!
По правде, для меня самого загадка, каким образом произошла замена программистской кавычки на «"» (вызвавшая ошибку). Возможно, после редактирования мной её произвёл на каком-то этапе браузер либо ещё что-то...
Пост обновил.
Извините за неудобства!

teadrinker пишет:

DD, будь так любезен, поимей такую привычку...

Буду. Поимею. И в который раз я скажу тебе: во второй.
Смущать же народ, пожалуй, даже с толком не стоит.

40 (изменено: stir, 2011-12-08 07:28:50)

Re: AHK: Запрет открытия файла (группы файлов)

DD, а у вас скрипт работает? Не имеет значения из какой папки его запускать надо??
Меня смущает эта часть кода:

   x:=NumGet(Buffer, 0, "ushort")
   VarSetCapacity(str, x) ; выделяем необходимое место
   ReadProcessMemory(hProc, NumGet(Buffer, 4), str, x, ReturnLength)
   x:=StrGet(str, x/2, "UTF-16")

Ошибка исполнения специфичной функции StrGet с 88 по 107 строку осталась. Еще я подкорректировал - убрал все &, заменил 

 return DllCall("OpenProcess", "uint", dwDesiredAccess, "int",

на

 return DllCall("OpenProcess", "uint", dwDesiredAccess, "uint",

но пока скрипт не захотел работать. Если получится, то на выходных попробую Ваш скрипт глубоко проанализировать и может найду решение для его запуска.

/думается переменная или же функция х не может иметь зависимость от себя же - х/2, и еще после старта этого кода у меня повис др.веб 7, а я хотел отключить мониторинг файлов вдруг из-за него код не стартует - придется веба отключать до попытки запуска скрипта/

Любители построили Ковчег, а профессионалы - Титаник.

41

Re: AHK: Запрет открытия файла (группы файлов)

Только что перепроверил — работает.
Возможно, забыли в UNICODE сохранить? Какую версию AHK используете?

42 (изменено: stir, 2011-12-08 13:26:49)

Re: AHK: Запрет открытия файла (группы файлов)

Использовал инсталятор AutoHotkey104805 - Version 1.0.48.05

Вот было мое сообщение оставленное без внимания вами

я сохранил код в кодировке 1251

использовал Алкепад редактор.. теперь значит надо попробовать сохранить в : 1200 (UTF-16 LE), 1201 (UTF-16 BE), Unicode ...

Все перепробовал - ошибка 1 строки = аю#

Любители построили Ковчег, а профессионалы - Титаник.

43 (изменено: creature.ws, 2011-12-08 17:20:20)

Re: AHK: Запрет открытия файла (группы файлов)

Текущая актуальная версия ahk 1.1.05.04
«пробовать сохранять…»  в различных кодировках не обновившись не имеет смысла

Если желаете использовать ahk basic – любой скрипт расчитанный на актуальную версию придётся адаптировать исходя из рекомендаций

//edit:basik->basic

44 (изменено: DD, 2012-03-27 02:41:12)

Re: AHK: Запрет открытия файла (группы файлов)

AHK BASE:

#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, % "ahk_id " WinExist("A")
  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, ",, 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'у)
{
    hp_target := DllCall( "OpenProcess", "UInt", 0x10, "Int", false, "UInt", p_hWnd ) ; открываем хэндл для PID процесса...
    ; ...с правами для чтения 0x10 = PROCESS_VM_READ (нужны для ReadProcessMemory) и без наследования хэндла
    If ( ErrorLevel OR hp_target = 0 ) ; если почему-либо не удалось открыть хэндл (или он открыт для несуществующего PID'а)...
        Goto, Return_2 ; перейти к закрытию хэндла и выйти из функции

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

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

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

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

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

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

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

GetModuleFileNameEx(PID) { ; shimanov - www.autohotkey.com/forum/viewtopic.php?p=54838#54838
hpr := DllCall( "OpenProcess", UInt,1040, Int,0, UInt,PID )
If ( ErrorLevel or !hpr )
    Return
VarSetCapacity( Name,255 )
DllCall( "psapi.dll\GetModuleFileNameExA", UInt,hPr, UInt,0, Str,Name, UInt,255 )
DllCall( "CloseHandle", hPr )
Return, Name
}

45 (изменено: Александр_, 2011-12-09 01:10:12)

Re: AHK: Запрет открытия файла (группы файлов)

mih пишет:

Александр_,
"Атрибуты можно менять" — выходит, чтоб воспользоваться streams.exe и иметь гарантированный результат без ручного вмешательства, я должен сначала все эти диски просканировать на наличие атрибута readonly, и снять его везде. Я к тому: есть ли альтернатива этой streams.exe, чтоб уничтожала всё безусловно: запустил — и чисто по всем дискам?

Самому нужно писать, у NTFS есть функция протоколирования изменений.

mih пишет:

Это бесконечно; как ни усложняй, а примитив станет только сложно устроенным примитивом.

Естественно. Я уже говорил- если хочешь спрятать процесс, то не создавай его. Я думаю переход к руткитам и драйверам режима ядра является слишком сильным отступлением от темы.

stir пишет:

Еще я подкорректировал - убрал все &

Ага и теперь вместо адресов переменных могут использоваться их значения.

stir пишет:

, заменил

Не важно, там всё равно будет 0 или 1.

stir пишет:

/думается переменная или же функция х не может иметь зависимость от себя же - х/2

Может, называется "рекуррентная формула"
DD, недавно этот код обсуждался- он не на всех системах будет работать, код функции GetCommandLineA менялся. Нужно действовать как в вашем посте 34, только хендл потока нужно закрыть в конце.
И, кстати, файлы с видео надёжнее находить проверкой сигнатур, а не расширения.
Я бы предложил такой подход к решению средствами AHK- для каждого видимого окна проводить процедуру исследования- проверить на наличие определённых шаблонов в текстах окон и именах классов, проверка загруженных модулей(если нет графических библиотек, то навряд ли процесс воспроизводит видео) и анализ открытых файлов. Всё что подпадает под подозрение- пишем в лог, для последующего ручного анализа. Для ускорения желательно создать базу доверенных и не очень программ.

46

Re: AHK: Запрет открытия файла (группы файлов)

Александр_ пишет:

файлы с видео надёжнее находить проверкой сигнатур

Да, но получить командную строку не всегда удаётся.

Александр_ пишет:

Я бы предложил такой подход к решению средствами AHK-

Чтобы провернуть такое, неопытному DD пришлось бы покорпеть, однако ж, порядком .

Александр_ пишет:

недавно этот код обсуждался- он не на всех системах будет работать

Другим под базовую не распологаю.

Александр_ пишет:

хендл потока нужно закрыть в конце

Кажись, закрыл .

47 (изменено: stir, 2011-12-09 10:06:05)

Re: AHK: Запрет открытия файла (группы файлов)

..теперь вместо адресов переменных могут использоваться их значения

Сожалею за такое", но я только приступил к изучению этого языка и не прочитал (! уф!!!) еще и половины учебника по АНК.
Впредь буду внимательней и после изучения нужного объема инфы я на такое не буду способен, .

Последнюю найденную версию я не смог установить из-за антивируса, который в скаченном мною откуда-то архиве нашел угрозу. Попробую по вашей ссылке скачать...
Скачал - антивирус не ругается, все нормально.

После установки обновленной версии пришлось запускать вашу версию (предыдущую) - работает.
Сейчас подумаю, как сделать отчет скрытым, как поместить скрипт в автозагрузку и как посылать отчет от нарушителей и как идентифицировать нарушителя...
Позже отпишусь как реализовал все на практике.
Спасибо за помощь!

Если внести идентификацию нарушителя в скрипт, то его можно и в коллекцию помещать, как считаете, автор (DD) заслуживает этого?

ДД, а почему время и дата идентичная? Это время запуска скрипта и оно фиксировалось в момент его запуска или что-то другое тут? Вот лог:

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

текущее время 13-06

Любители построили Ковчег, а профессионалы - Титаник.

48

Re: AHK: Запрет открытия файла (группы файлов)

Блинннн, теперь не запускаются game-life.ahk и cpu_load.ahk, взятые с форума..
Подскажите, под новые версии АНК всегда придется перелопачивать ранее созданные скрипты? А то как то это не очень.. удобно.
/Установил - AutoHotkey110504_Install.exe./

Любители построили Ковчег, а профессионалы - Титаник.

49 (изменено: stir, 2011-12-09 12:08:02)

Re: AHK: Запрет открытия файла (группы файлов)

на всякий случай напишу какой из ваших скриптов сейчас у меня на тесте:

#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, % "ahk_id " WinExist("A")
  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("OpenProcess", "uint", dwDesiredAccess, "int", bInheritHandle, "uint", dwProcessId, "uint")
}
;получение информации о процессе
ZwQueryInformationProcess(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength, ReturnLength)
{
   return DllCall("ntdll.dll\ZwQueryInformationProcess","uint", ProcessHandle, "uint", ProcessInformationClass, "uint", ProcessInformation, "uint", ProcessInformationLength, "uint", ReturnLength, "uint")
}
;чтение данных из процесса
ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead)
{
   return DllCall("ReadProcessMemory", "uint", hProcess, "uint", lpBaseAddress, "uint", lpBuffer, "uint", nSize, "uint", 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, &ProcessInformation, 0x18, &ReturnLength)
   ;по смещению 4 располагается адрес PEB
   ReadProcessMemory(hProc, NumGet(&ProcessInformation, 4)+16, &Buffer, 4, &ReturnLength)
   ;по смещению 16 в PEB находится адрес структуры RTL_USER_PROCESS_PARAMETERS
   ReadProcessMemory(hProc, NumGet(&Buffer)+64, &Buffer, 8, &ReturnLength)
   ; слово по смещению 0 содержит длину строки в байтах
   ; двойное слово по смещению 4 содержит адрес строки
   ; строка НЕ заканчивается нулём
   x:=NumGet(&Buffer, 0, "ushort")
   VarSetCapacity(str, x) ; выделяем необходимое место
   ReadProcessMemory(hProc, NumGet(&Buffer, 4), &str, x, &ReturnLength)
   x:=StrGet(&str, x/2, "UTF-16")
 
   VarSetCapacity(ProcessInformation, 0) ; освобождаем память
   VarSetCapacity(str, 0)
   VarSetCapacity(Buffer, 0)
   VarSetCapacity(ReturnLength, 0)
   return x
}
Любители построили Ковчег, а профессионалы - Титаник.

50 (изменено: stir, 2011-12-09 12:43:44)

Re: AHK: Запрет открытия файла (группы файлов)

написал батник, но пока еще не устранил ошибку с формированием имени файла..

@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

не хочет добавлять имя юзера - name, а я непонимаю почему. Подскажите...

а в АНК код я вставил почти в начале

#NoTrayIcon

теперь в системном трее нет значка для любопытных,

Любители построили Ковчег, а профессионалы - Титаник.

51

Re: AHK: Запрет открытия файла (группы файлов)

stir пишет:

Подскажите, под новые версии АНК всегда придется перелопачивать ранее созданные скрипты?

Те, что в ANSI-кодировке (если, конечно, не использовать ANSI-вариант AHK_L).

stir пишет:

ДД, а почему время и дата идентичная? Это время запуска скрипта и оно фиксировалось в момент его запуска или что-то другое тут?

Это "кодер" такой. Смотрите 34-ый, исправил.

52 (изменено: stir, 2011-12-12 11:33:12)

Re: AHK: Запрет открытия файла (группы файлов)

Впринципе пока вопросов нет. Большое спасибо автору скрипта - DD (за проявленное терпение ко мне и свой труд). Скрипт работоспособен.

Если кому интересно то как вариант работы всего этого получился такой:
1. Устанавливаем на ПК юзера AutoHotkey110504_Install.exe с офсайта.
2. Запускаем скрипт АНК (c:\AHK\) и помещаем в автозагрузку , но в фоновом режиме - без иконки... с правами админа.
3. Копируем батник для пересылки инфы от нарушителя и ставим его на выполнение по расписанию (c:\AHK\).
4. Проверяем исправность работы. Не забываем создать нулевой файл в директории сборщике данных и выставить права на запись под существующий в батнике логин и пароль! Файл должен быть этот неудаляемым и служит для проверки связи ПК юзера с сервером.

Версия батника 0.0.4:

@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

Пояснения: На сервере есть тестовый нулевой файл в папке DW_log, доступный под логином и паролем к антивирусу, это так для отвода глаз несведующих.. Если локальная сеть выключена или недоступна по какойлибо причине - батник завершает работу, а т.к. скрипт имеет накопительную статистику, то это нестрашно - как только связь наладится и сработает время отсылки данных, то на сервер будет перенесен файл юзера. Если файла нет для отправки на сервре - ничего страшного - батник не будет висеть в "ступоре" черным окном у юзера.
Хотел в имя пересылаемого файла включить время для лучшей идентификации, но мой ПК не проглотил такое, пришлось рандомить и на всякий случай - дважды.
И еще для уверенной работы такого решения необходимо убрать права админа у юзера, иначе он в диспетчере задач может выявить процесс для скрипта под АНК, а это принципиально недопустимо.
Итог: при запуске видеофайла скрипт накапливает информацию и позже она попадает в нужные руки. Если у вас возникли более инетресные идеи и/или их реализация - не стесняйтесь, выкладывайте здесь, возможно кроме меня это еще кто-то использует в своих незлых целях.


УФФ!! Вроде все написал.

Любители построили Ковчег, а профессионалы - Титаник.

53 (изменено: stir, 2011-12-12 13:05:43)

Re: AHK: Запрет открытия файла (группы файлов)

У меня в логе скрипта есть много символов в строчке такие - а, но это не мешает смотреть лог, .

У меня для корректного исполнения всего задуманного пришлось малость повозиться с разрешениями на папки и т.п., если все верно настроено - все работает сразу, если нет, то из папки не будет уходить лог-файл созданный скриптом, поэтому вам необходимо еще раз все перепроверить.

Любители построили Ковчег, а профессионалы - Титаник.

54

Re: AHK: Запрет открытия файла (группы файлов)

А интересно, есть возможность прописать строки

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

одной строкой, как-то так:

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

?

55

Re: AHK: Запрет открытия файла (группы файлов)

DD пишет:

Кажись, закрыл .

Нет, нужно вызвать CloseHandle для хэндла, который мы в начале получили через OpenProcess. В данном случае DllCall("CloseHandle", "uint", hProc).

DD пишет:

А интересно, есть возможность прописать строки

Да, через функцию InStr:

If InStr(controlUnder, "Video") or InStr(Com_Line, ExtLst) or ...