purebasic.info

PureBasic forum
Текущее время: Пн окт 22, 2018 10:16 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
СообщениеДобавлено: Чт мар 23, 2017 2:08 am 
Не в сети
доцент

Зарегистрирован: Пн фев 24, 2014 1:13 pm
Сообщений: 25
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Нужна такая фишка. сразу скажу не для вирусов. нужно получить событие о том, что запустилась программа. потом получить её название.
через снимок процессов - это не для этого случая, ибо даже если дёргать каждую секунду - это жесть. я писал говорящие часики, и так же через снимки находил запущен ли скринсейвер. нужно было это, чтоб молчали когда он запущен. так потом через несколько часов куча памяти утекло. конечно я понял свою ошибку, и поставил получать снимок только тогда когда хотим сказать. но ниже описанное - \это другой случай.
да и логичней будет получить событие. находил я пару функций, но они режима ядра. мне нужно, желательно юзерский уровень, ибо софтом будут пользоваться обычные юзеры и всяческие сообщения будут пугать.
для ясности, хотим мы с другом написать инструментарий доступности для незрячих. дело в том, что бывают такие приложения, которые имеют только один класс окна. соответственно нет привычной иерархии окон, контролов, поэтому остается выяснять координаты кнопок, юзер нажимает горячую клавишу и мышка кликает в нужное место. идея такова, стартует приложение, наша программа перехватывает его название, и грузит соответствующий скрипт или код.
если функция будет перехватывать attach dll - это будет находка, нам как раз в музыкальной студии reaper это ух как пригодиться. тогда можно будет отлавливать загружаемый плагин и так же запускать соответствующий скрипт. а vst инструменты вообще страдают плохой доступностью на 99 процент. как правило у них один класс главного окна, а что внутри, там рисованное, нет тебе ни listbox ни syslistview32.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт мар 23, 2017 2:43 am 
Не в сети
профессор

Зарегистрирован: Чт авг 05, 2010 2:36 pm
Сообщений: 469
Откуда: Донецк
Благодарил (а): 47 раз.
Поблагодарили: 11 раз.
Я для себя писал на autohotkey скрипт который постоянно висит в трее и при открытии окна плагина вызывает процедуру с набором хоткеев с их координатами куда мышом тыкать.
После того как мою предыдущую задумку одно чмо попыталось продавать хрен кому теперь код дам, могу только общую идею описать как работает.

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

_________________
PureBasic 5.60 X86, RfoBasic 90, Tinycc 0.97, Asus K54C Intel i7 2.7 ghz, 8 gb ddr3, Intel HD 3000, Windows XP SP3, Windows 10 x64, Nexus 4 and v5.1.1.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт мар 23, 2017 10:54 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11303
Благодарил (а): 4 раз.
Поблагодарили: 436 раз.
electrik писал(а):
через несколько часов куча памяти утекло.
Это из-за ошибки в коде. Что-где-то не освобождалось.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт мар 23, 2017 4:09 pm 
Не в сети
доцент

Зарегистрирован: Пн фев 24, 2014 1:13 pm
Сообщений: 25
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Это не тот ли скрипт к autohotkey, который в семплере kontakt мог нажимать кнопку вызова загрузки банков? он у меня есть. идея такова, чтоб не использовать скриптовые языки.
поповоду экшенов в рипере, уже всё придумано. есть опенсурс проект:
https://www.nvaccess.org/files/osara/snapshots.html
эта штука предназначена для незрячих, но если не запускать скринридер и без него работает. по F4 открывается такая куча экшенов и на них можно назначать горячки. у меня друг тотально незрячий пишет в рипере и не нарадуется.
я сам пользуюсь рипером, так для развлечения, поиграть, в sylenth1 или spire накрутить какой-нибудь пресет. слава богу, что в osara предусмотрен такой экшен, который выводит все параметры автоматизации синта в список.
а вот недоступность синтов типа kontakt, вынуждает людей покупать сторонние скрипты для скринридеров, которые иногда криво работают и работают далеко не на всех читалках экрана. вот и возникла идея, создать хотябы простой инструментарий, чтоб сел человек со зрячим, тот ему на кнопки мышкой по наводил, а тот запомнил координаты. мне друг говорит, давай сделаем типа dll с функциями и пусть люди пишут. я хочу же в этой цели уйти как можно дальше от кодинга и сделать такой инструментарий, чтоб любой мог сделать доступный синт. естественно всё бесплатно, ибо моя цель не зарабатывать на своих, а помогать.
вопрос остается открытым, как при помощи winapi перехватить стартуемое приложение. сам тоже буду искать.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт мар 23, 2017 6:44 pm 
Не в сети
профессор

Зарегистрирован: Чт авг 05, 2010 2:36 pm
Сообщений: 469
Откуда: Донецк
Благодарил (а): 47 раз.
Поблагодарили: 11 раз.
electrik
За Osara я прекрасно все знаю вплоть до ее кода))) Так как сам пользуюсь этим плагином совместно с NVDA.
И на сайте blindgamers проводил курс для незрячих по основам рипера.

То что я писал было расчитано на управление несколькими синтами без запуска разных скриптов, просто при открытии окна fx считывался заголовок внутреннего окна плагина и запускалась одноименная процедура.

У меня есть еще пара идей как управлять плагинами через их родное окно, но есть куча подводных камней. Например таблично-волновые синты которыми я пользуюсь типа Nemesis и Icarus у меня управляются через отслеживание изменения пикселей в определенных координатах, иначе курсор может тыкнуть в волновую форму или менюшку в зависимости какая страница синта будет открыта. В синтах Blade, Predator и Blue2 можно и средствами nvda посмотреть что отображается но это очень долго. Тут я опять реализовывал отслеживание цвета пикселей чтобы по горячкам открывались менюшки только с нужной страницы а не тыкать курсор без толку.

PS: Контактом непользовался и не собираюсь так как я увлекаюсь саунд-дизайном а не извращением над семплами. У меня только 35 vst синтов и железный korg oasys.
По поводу друга, это не Артем случайно? Eric_S.
Лет пять назад с ним частенько в аське общались по поводу freebasic и тогда я ему пытался пурик подкинуть а он обзывался на него...

_________________
PureBasic 5.60 X86, RfoBasic 90, Tinycc 0.97, Asus K54C Intel i7 2.7 ghz, 8 gb ddr3, Intel HD 3000, Windows XP SP3, Windows 10 x64, Nexus 4 and v5.1.1.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт мар 23, 2017 7:11 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Пора уже отдельный раздел создавать для саунд дизайнеров :D

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

В юзермоде по моему нет таких событий. Только через ядро.
electrik писал(а):
если функция будет перехватывать attach dll

В обще-то так же, через снимок находишь процесс и по его пиду получаешь список загруженных длл.

Но по моему вы не в ту сторону копаете. Более менее нормальный плагин отдает дав весь список регулируемых параметров, которые потом можно автоматизировать. И если у дав есть скриптовой движок, то эти параметры можно регулировать через него. По моему это будет намного практичней, чем использовать кликер. Не проще ли написать утилиту, которая будет настраивать скрипт под нужный плагин?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт мар 23, 2017 11:37 pm 
Не в сети
профессор

Зарегистрирован: Чт авг 05, 2010 2:36 pm
Сообщений: 469
Откуда: Донецк
Благодарил (а): 47 раз.
Поблагодарили: 11 раз.
MrF
В рипере все намного проще)))) У него два встроеных скриптовых двигла, eel и lua, функций для управления рипером ну шоб не сп* соврать так полторы тысячи при установке sws и там можно получать все данные хоть за рипер и его окружение хоть за любые действия которые в нем происходят.
У меня западло с виндой сейчас и немогу большие мессаги писать, послезавтра винду переустановлю и Электрику распишу где брать лопату и где копать в рипере))))
И вообще недоганяю нахрена козе баян, у рипера есть апи на c++ под внешние плагины на котором можно реализовать приблуду так чтобы под каждый определенный плагин сохраняла файл с необходимыми координатами.
Короче надо будет мыслю развить...

_________________
PureBasic 5.60 X86, RfoBasic 90, Tinycc 0.97, Asus K54C Intel i7 2.7 ghz, 8 gb ddr3, Intel HD 3000, Windows XP SP3, Windows 10 x64, Nexus 4 and v5.1.1.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт мар 24, 2017 12:25 am 
Не в сети
доцент

Зарегистрирован: Пн фев 24, 2014 1:13 pm
Сообщений: 25
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
MrF писал(а):
Пора уже отдельный раздел создавать для саунд дизайнеров :D

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

В юзермоде по моему нет таких событий. Только через ядро.
electrik писал(а):
если функция будет перехватывать attach dll

В обще-то так же, через снимок находишь процесс и по его пиду получаешь список загруженных длл.

Но по моему вы не в ту сторону копаете. Более менее нормальный плагин отдает дав весь список регулируемых параметров, которые потом можно автоматизировать. И если у дав есть скриптовой движок, то эти параметры можно регулировать через него. По моему это будет намного практичней, чем использовать кликер. Не проще ли написать утилиту, которая будет настраивать скрипт под нужный плагин?


это я знаю, и прекрасно. может я не правильно сформулировал вопрос, извините. дело в том, что мне надо не регулируемые параметры, а кнопки управления стандартных действий в фейсе, к примеру: load bank, open bank menu и т.д.
эти фишки не отдаются по автоматизации ибо являются частью интерфейса, который к сожалению недоступен ввиду нестандартных контролов или вообще весь рисованный. там даже нельзя плагину событие контрола отправить, ибо его как бы нет в стандартном понимании.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт мар 24, 2017 1:02 am 
Не в сети
доцент

Зарегистрирован: Пн фев 24, 2014 1:13 pm
Сообщений: 25
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Apokalipsis писал(а):
electrik Тут я опять реализовывал отслеживание цвета пикселей чтобы по горячкам открывались менюшки только с нужной страницы а не тыкать курсор без толку.


естественно цвет желательно определять, я бы тоже так делал, ибо больше возможностей.

Цитата:
PS: Контактом непользовался и не собираюсь так как я увлекаюсь саунд-дизайном а не извращением над семплами. У меня только 35 vst синтов и железный korg oasys.


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

нас заносит не по теме!

Цитата:
По поводу друга, это не Артем случайно? Eric_S.
Лет пять назад с ним частенько в аське общались по поводу freebasic и тогда я ему пытался пурик подкинуть а он обзывался на него...


нет - это дениска оутсайдер.

а артём впал в новую религию: c++. молодец, но плохо когда люди принципиально против другого. сам люблю на разных языках фигнёй пострадать, но почему бы на пурике не пописать, ведь удобно, быстрый код, и недолгая реализация приложения, при условии если не переписываешь с C заголовочные файлы. когда я увидел реализацию json, вообще офигел, ну классно ведь!
самое хорошее, знать несколько языков и в зависимости от задачи выбирать наиболее удобное решение в данный момент.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт мар 24, 2017 1:52 am 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Apokalipsis писал(а):
В рипере все намного проще)))) У него два встроеных скриптовых двигла, eel и lua, функций для управления рипером ну шоб не сп* соврать так полторы тысячи при установке sws и там можно получать все данные хоть за рипер и его окружение хоть за любые действия которые в нем происходят.

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

electrik писал(а):
это я знаю, и прекрасно. может я не правильно сформулировал вопрос, извините. дело в том, что мне надо не регулируемые параметры, а кнопки управления стандартных действий в фейсе, к примеру: load bank, open bank menu и т.д.

Да нет, это я сказал только про регулируемые параметры. Плагином отдается намного больше. Можно, например, не открывая окно плагина загрузить в него банк или пресет, т.е. не взаимодействовать с контролами плагина. По крайней мере в битвиге так, думаю в рипере тоже так можно.

Только мне не понятно, зачем ловить запуск программы и загрузку длл? Можно же самому через RunProgram запускать рипер, если его ловить собрался.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт мар 24, 2017 5:29 am 
Не в сети
профессор

Зарегистрирован: Чт авг 05, 2010 2:36 pm
Сообщений: 469
Откуда: Донецк
Благодарил (а): 47 раз.
Поблагодарили: 11 раз.
MrF
Если банки и пресеты идут в fxb и fxp то их рипер хавает и не кашляет, а вот например Synthmaster со своим менеджером пресетов или Gladiator со своим собственным форматом то тут изврат нужен,
вот смотри мой кусок кода на ahk:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
SetTitleMatchMode 2
 
#IfWinActive, FX:
p::click left, 550, 130
b::click left, 450, 130
^i::click left, 414, 155
^s::click left, 460, 155
; s::click left, 550, 150
i::click left, 500, 150
r::click left, 510, 175
; i::  ; init preset
; click left, 600, 175
; return
#IfWinNotActive, FX:
#x::exitapp
return
 



Это отдельно без процедуры может работать, только проверка что окно FX открыто, но если будет другой плаг стоять курсор будет по горячкам тыкаться куда не следует, Электрик хочет чтобы автоматом с рипером стартовала приблуда которая будет заточена под каждый плаг в отдельности.
У меня есть мысля как это сделать, но увы я на приплюснутом уже лет семь не пишу а на Python и пурике такое писать геморройно.
Я тут пару раз поглядывал в сторону Pureautoit но там десяток функций работают как-то не так... По крайней мере Tooltip скринридером вообще неловится.

Электрик, Аутсайдера тоже знаю))) В вентрилле и онтойсе пересекались последние разы.
В личку сейчас скину скайп, там поделюсь мыслей насчет реализации плагина под рипер, но кто его будет реализовывать на приплюснутом незнаю. Себекин со своим Reaear вряд ли за это возьмется, Джеймс меня вежливо послал на мелкософт.
Да и я для себя написал все что хотел для синтов и пока не парюсь. По крайней мере та экзотика которой я пользуюсь из зрячих мало кому интересна)))
Насчет контакта и пианино, советую синт True piano, а вообще ставить контакт с десятигиговыми либами у меня винта нехватит, двухтерабайтник умер и видать навсегда а на ноуте я предпочитаю хранить только самое необходимое))))

_________________
PureBasic 5.60 X86, RfoBasic 90, Tinycc 0.97, Asus K54C Intel i7 2.7 ghz, 8 gb ddr3, Intel HD 3000, Windows XP SP3, Windows 10 x64, Nexus 4 and v5.1.1.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср апр 05, 2017 2:53 pm 
Не в сети
доцент

Зарегистрирован: Пн фев 24, 2014 1:13 pm
Сообщений: 25
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Решение найдено. это конечно не перехват момента запуска приложения, но перехват событий активного окна и выяснение какому процессу принадлежит окно.
поскольку обсуждаемый случай предполагает работать именно с окнами, данный способ подходит и задача решается на юзеровском уровне.
есть замечательная функция SetWinEventHook, которая устанавливает хук для событий окон. в msdn прочитаете подробное описание констант, которые я положил в winuser.pbi. во вложении рабочий код с необходимым winuser.
все стандартно, ходите по проводнику, запускаете блокноты ну или чем вы там пользуетесь, а потом в окне отладчика смотрите, какие процессы были в фокусе.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
XIncludeFile "winuser.pbi"
 
psapi = OpenLibrary(#PB_Any  ,"psapi.dll")
If psapi = #NUL
  End
  EndIf
Prototype.i GetModuleFileNameEx_(hProcess.i,hModule.i,*lpFilename,nSize.i)
 Global GetModuleFileNameEx_.GetModuleFileNameEx_ = GetFunction(psapi,"GetModuleFileNameExW")
 If GetModuleFileNameEx_ = #Null
   End
   EndIf
   
   
   Procedure.s WinGetProcessFileName(hWnd)
         processId.i = 0
    fileName.s = Space(#MAX_PATH)
    If GetWindowThreadProcessId_(hwnd,@processId)
process = OpenProcess_(#PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ,false,processId)
If process
  If GetModuleFileNameEx_(process,#Null,@fileName,#MAX_PATH)
CloseHandle_(process)
  ProcedureReturn  fileName  
EndIf  
  EndIf  
  EndIf  
EndProcedure
 
 
Global g_hook.i
Procedure WinEventProc(hWinEventHook, event, hwnd, idObject, idChild, dwEventThread, dwmsEventTime)
  If Event = #EVENT_SYSTEM_FOREGROUND
  Debug WinGetProcessFileName(hwnd)
EndIf  
  EndProcedure
 
  g_hook = SetWinEventHook_(#EVENT_MIN, #EVENT_MAX, #Null, @WinEventProc(), 0, 0,0)
  OpenWindow(0,0,0,640,480,"test event hook")
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
 
  UnhookWinEvent_(g_hook)
  CloseHandle_(psapi)
 



Вложения:
TestEventHook.7z [1.65 KiB]
Скачиваний: 63


Последний раз редактировалось electrik Ср апр 05, 2017 4:14 pm, всего редактировалось 1 раз.
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср апр 05, 2017 3:44 pm 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 271
Благодарил (а): 14 раз.
Поблагодарили: 32 раз.
Пункты репутации: 0
У меня без #PROCESS_VM_READ не работает :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср апр 05, 2017 4:17 pm 
Не в сети
доцент

Зарегистрирован: Пн фев 24, 2014 1:13 pm
Сообщений: 25
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Исправил, но у меня работало и без этого флага. Windows 10 x64. если еще у кого-нибудь не заработает, можно попробовать открыть процесс со всеми правами доступа.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB