1 (изменено: OmTatSat, 2016-09-17 18:53:07)

Тема: AHK: Виртуализация значения реестра для одного приложения

Здравствуйте, есть программа FS VideoBox - Онлайн каталог фильмов/сериалов, она под андроид, довольно удобная и большая база. Захотелось такое на windows, но такого приложения нет, по этому захотелось запустить это же приложение на виндовсе. Быстрая виртуальная машина реализована в браузере Chrome https://xakep.ru/2014/09/21/chromeos-apk/
В общем запустил FS VideoBox в хроме, когда открываю фильм он передаёт команду открытия браузеру по умолчанию так как команда это ссылка http. Но мне нужно открывать эту ссылку в видеоплеере, конечно можно сделать видеоплеер браузером по умолчанию, но как-то это не правильно.

Как понимаю работать нужно с HKCU\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice\Progid .
Как сделать для всех программ браузером по умолчанию firefox а для хрома potplayer?

Прошу помощи, как можно решить вопрос?

2 (изменено: stealzy, 2016-09-17 18:48:25)

Re: AHK: Виртуализация значения реестра для одного приложения

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

3 (изменено: OmTatSat, 2016-09-17 18:53:24)

Re: AHK: Виртуализация значения реестра для одного приложения

stealzy тоже думал о этом решении, почему-то показалось что с реестром более правильно вот и задал вопрос.
Если никто не подскажет вариант с реестром, буду пробовать как вы предложили.

4

Re: AHK: Виртуализация значения реестра для одного приложения

наверняка есть закономерность в ссылках сервиса?

PID: 1988, Command line: "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -osint -url "http://fs.to/get/playvideo/6jw62supagrjo86s676frocja.0.1139013157.2185543202.1474046214_hd.mp4"
PID: 6860, Command line: "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -osint -url "http://p0.edge12.moonwalk.cc/sec/1474146242/3934373449a63cf17b15ed7eb6591c2c1177f6a0357e5012/ivs/0a/85/8c44026068fd/hls/tracks-1,5/index.m3u8"

5

Re: AHK: Виртуализация значения реестра для одного приложения

OmTatSat, злостно требую поставить точки в конце предложенияй.

6

Re: AHK: Виртуализация значения реестра для одного приложения

Домены разные, но вроде по расширению можно (.mp4, .m3u8).
По реестру можно брать такие ключи:
HKEY_USERS\*\Software\Classes\http\shell\open\command
HKEY_USERS\*_Classes\http\shell\open\command
Для https аналогично.

7

Re: AHK: Виртуализация значения реестра для одного приложения

Да, можно по форматам пробовать.
Chrome почему-то лезет в HKCU\Software\Classes\FirefoxURL\shell\open\command\(Default).
А там "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -osint -url "%1".
Пробовал менять "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" на путь к плееру, html, php и прочие файлы откроются в firefox но вот ярлык с ссылкой на сайт открывается уже в плеере.

8 (изменено: stealzy, 2016-09-17 19:12:58)

Re: AHK: Виртуализация значения реестра для одного приложения

Определить PID родительского процесса:

ParentID := ComObjGet("winmgmts:").Get("Win32_Process.Handle=" DllCall("GetCurrentProcessId")).ParentProcessId

Если это chrome, (делаем, что задумали) находим текущий url, если это chrome://extensions, делаем, что задумали.
Наверняка по заголовку активного окна можно определить, что запущено целевое приложение, и url не нужен.

9

Re: AHK: Виртуализация значения реестра для одного приложения

stealzy можете чуть больше расписать команду, а то я чёт не пойму как использовать. Какая команда выведет названия родителя? MsgBox ... ?

10 (изменено: stealzy, 2016-09-17 21:09:08)

Re: AHK: Виртуализация значения реестра для одного приложения

ParentID := ComObjGet("winmgmts:").Get("Win32_Process.Handle=" DllCall("GetCurrentProcessId")).ParentProcessId
WinGet firefoxPID, PID, ahk_class MozillaWindowClass
WinGet chromePID, PID, ahk_class Chrome_WidgetWin_1
If !chromePID
	WinGet chromePID, PID, ahk_class Chrome_WidgetWin_0
MsgBox PID родительского процесса: %ParentID%`nPID firefox: %firefoxPID%`nPID chrome: %chromePID%

FilePath := GetProcessPathByPID(ParentID)
SplitPath FilePath, FileName
MsgBox Имя родительского процесса %FileName%

GetProcessPathByPID(PID) {
	VarSetCapacity(FilePath, A_IsUnicode ? 600 : 300)
	PROCESS_QUERY_INFORMATION := (0x400)
	hProc := DllCall("OpenProcess", UInt, PROCESS_QUERY_INFORMATION, UInt, 0, UInt, PID)
	if !DllCall("GetProcessImageFileName" . (A_IsUnicode ? "W" : "A"), UInt, hProc, Str, FilePath, UInt, 300)
		DllCall("Psapi\GetProcessImageFileName" . (A_IsUnicode ? "W" : "A"), UInt, hProc, Str, FilePath, UInt, 300)
	DllCall("CloseHandle", UInt, hProc)
	Return FilePath
}

PID процессов можно глянуть в диспетчере задач Меню → Вид → Выбрать столбцы → PID.

Offtop: проект то уже года 2 не развивался, почему не ARC Welder?

11 (изменено: OmTatSat, 2016-09-17 20:41:47)

Re: AHK: Виртуализация значения реестра для одного приложения

stealzy, спасибо! Работает.
Ну ARC Welder это только конвертер андроид приложений который потом запускает приложения с помощью ARChon Runtime её и задействовал, просто конвертировал в рукопашку).

12 (изменено: OmTatSat, 2016-09-17 21:15:24)

Re: AHK: Виртуализация значения реестра для одного приложения

MsgBox PID родительского процесса: %ParentID%`nPID firefox: %firefoxPID%`nPID chrome: %chromePID% 1 - %1%

Получаю такое сообщение.

PID родительского процесса: 7840
PID firefox: 4728
PID chrome: 7840 1 - -osint

Соответственно код:

if (chromePID = ParentID)
	run "C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe" -osint -url %1%

Не работает, почему потерялась переменная и как её вернуть?

13 (изменено: stealzy, 2016-09-17 21:19:23)

Re: AHK: Виртуализация значения реестра для одного приложения

Вы уверены что скрипт запущен с параметром?
Как вы его запускаете, прописали в реестре? Если да, то приведите ключ из реестра.
Может все это лишнее, если у FS VideoBox есть свой уникальный заголовок окна, достаточно определять title активного окна.

14 (изменено: OmTatSat, 2016-09-17 21:18:03)

Re: AHK: Виртуализация значения реестра для одного приложения

stealzy пусть будет, работает и хорошо, вот как вернуть переменную это важный момент.
Я опечатку сделал, сейчас поправил, посмотрите какое сообщение выдал скрипт.

15 (изменено: stealzy, 2016-09-17 21:27:40)

Re: AHK: Виртуализация значения реестра для одного приложения

"C:\Program Files\AutoHotkey\AutoHotkey.exe" "D:\Scripts\MyScript.ahk" "%1"

P.S. Так вы только первый параметр взяли в скрипте, почему не все?

16 (изменено: OmTatSat, 2016-09-17 21:28:19)

Re: AHK: Виртуализация значения реестра для одного приложения

stealzy пишет:

Если да, то приведите ключ из реестра

"C:\Users\Sat\Desktop\url.exe" -osint -url "%1"

По умолчанию

"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -osint -url "%1"

Похоже в ветке какую выбрал уже нет переменной так как попробовал "C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe" -osint -url %1%
плеер открылся но видео не запустилось, нужно искать другое место входа.

17 (изменено: stealzy, 2016-09-17 21:31:36)

Re: AHK: Виртуализация значения реестра для одного приложения

if (%0% != 0) { ; command line extraction
	Loop, %0%
	{
		param := %A_Index%
		if Summ
			Summ := Summ . " " . param
		Else
			Summ := param
	}
}

Впрочем, вам достаточно написать %1% %2% %3%.
P.S. Компилировать необязательно, если прописать путь к AutoHotkey . В браузере у меня работает и без "-osint -url".

18

Re: AHK: Виртуализация значения реестра для одного приложения

stealzy пишет:

Впрочем, вам достаточно написать %1% %2% %3%.

Красота!) правда если вставляю все три параметра то плеер не включается, а если только 3ий - в котором http адрес то всё хорошо! Ура!) Огромное Спасибо!

19

Re: AHK: Виртуализация значения реестра для одного приложения

stealzy пишет:

В браузере у меня работает и без "-osint -url".

Так и сделал, иначе не хочет почему-то.

20 (изменено: OmTatSat, 2016-09-17 21:51:30)

Re: AHK: Виртуализация значения реестра для одного приложения

Не могу удалить сообщение.

21 (изменено: stealzy, 2016-09-17 21:56:55)

Re: AHK: Виртуализация значения реестра для одного приложения

Проверил, все отлично открывается и в DaumPot, просто передаем url.

"C:\Program Files\PotPlayer\PotPlayerMini64.exe" "http://mantarayshawaii-vfs.cdn-ec.viddler.com/mantarayshawaii_1njdreo5hc3rgszar07bkqvico1o8m.flv?fd9f2a1c14aadf1069f046ce64f41e2b5281a36841bc0d2e2a821048b2253c7afc5200dd518915babe97871beb925a5e508295ed8922d46a45673d5742949b6348714abecee6fb3d6276f71b9f562c13a9901d48dce01a&ec_rate=656&ec_prebuf=10"

Хинт на будущее: не надо писать новые сообщения, если последним осталось ваше - редактируйте старое.
Здесь вам не чат, все таки.

22 (изменено: OmTatSat, 2016-09-17 22:08:23)

Re: AHK: Виртуализация значения реестра для одного приложения

Ага, у меня тоже всё ок, Спасибо!
Учту.

Сделал в помощь файлы реестров, чтобы не лезть в дебри в рукопашку.


Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\FirefoxURL\shell\open\command]
@="\"C:\\url.exe\" -osint -url \"%1\""
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\FirefoxURL\shell\open\command]
@="\"C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe\" -osint -url \"%1\""

Оффтоп:
Вы готовили приложение через ARC Welder?
Когда запустили приложение процесс nacl64 на сколько грузил cpu?

23 (изменено: stealzy, 2016-09-17 22:15:47)

Re: AHK: Виртуализация значения реестра для одного приложения

Offtop:
Нет, ни запускал, и не знал даже, что можно запускать apk в браузере.
Перемотка работает? Качество видео как на телефоне, наверно?

24 (изменено: OmTatSat, 2016-09-17 22:44:55)

Re: AHK: Виртуализация значения реестра для одного приложения

Offtop:

stealzy пишет:

Перемотка работает?

Работает, если инет более менее то почти мгновенно как с локальными файлами. П.С. у меня 10мбит.

stealzy пишет:

Качество видео как на телефоне, наверно?

Нет, качество видео бывает разное, зависит от фильма и какое его качество есть в сети, почти во всех фильмах есть вариант с HD качеством, часто FullHd, может быть и 12 гигов.

Вот так выглядит https://cloud.mail.ru/public/NJcd/pTL3j1odW
Что радует - база обновляется оперативно, приложение работает быстро, сказал бы даже молниеносно.

25

Re: AHK: Виртуализация значения реестра для одного приложения

Хинт на будущее: не надо писать новые сообщения, если последним осталось ваше - редактируйте старое.

http://forum.script-coding.com/rules.html

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

26

Re: AHK: Виртуализация значения реестра для одного приложения

Результат забыл выложить.

#NoEnv
ParentID := ComObjGet("winmgmts:").Get("Win32_Process.Handle=" DllCall("GetCurrentProcessId")).ParentProcessId
WinGet firefoxPID, PID, ahk_class MozillaWindowClass
WinGet chromePID, PID, ahk_class Chrome_WidgetWin_1
If !chromePID
WinGet chromePID, PID, ahk_class Chrome_WidgetWin_0
if (chromePID = ParentID)
run "C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe" "%3%"
else
run "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" "%3%"

27

Re: AHK: Виртуализация значения реестра для одного приложения

OmTatSat пишет:

\firefox.exe" "%3%"

28 (изменено: OmTatSat, 2017-12-05 01:10:27)

Re: AHK: Виртуализация значения реестра для одного приложения

stealzy, не понял, что не так?

29

Re: AHK: Виртуализация значения реестра для одного приложения

Ссылки из других программ открывать пробовали? Просто вы и для обычных ссылок передаете третий параметр вместо всех. Обычно параметр один — URL.
Мне тут еще подумалось, что распознавать ссылки для плеера можно по первым параметрам:
if (%1% = "-osint" AND %2% = "-url") {...}.

30

Re: AHK: Виртуализация значения реестра для одного приложения

stealzy перепроверил, с других приложение ссылки открываются. Может они дублируются в %3%?