1 (изменено: taravasya, 2023-01-14 18:43:40)

Тема: AHK: ControlClick вызов скрипта из реестра

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

#InstallKeybdHook
Menu, Tray, Icon, icopy.ico
DetectHiddenWindows, on
SetFormat, Float, 0.1
OnMessage(0x201, "WM_LBUTTONDOWN")
Gui, +hwndhGui
Gui, -Caption +AlwaysOnTop +Lastfound +ToolWindow HwndGUIhWnd
Gui, Margin, 0, 0
Gui, Color, a1a1a1
Gui, Font, w900 cRed s12
Gui, Add, Text, +Center x37 y0 w25 h20
Gui, Add, Text, +Center x75 y0 w25 h20
Gui, Add, Text, +Center x118 y0 w25 h20
Gui, Font, w900 cBlue s14
Gui, Add, Text, +Center x5 y0 w25 h25
Gui, Font, w900 cBlue s7
Gui, Add, Text, +Center x5 y25 w25 h20
Gui, Add, Picture, x30 y0, 0001.png
;Gui, Add, Picture, x40 y20, go.png
Gui, Add, Picture, x40 y20 vFireStatic gCopy, quantity.png
Gui, Show, % "x"A_ScreenWidth-150 "y"A_ScreenHeight-70

curQuantity := 0
curPrice := 0
NcurQuantity := 0
NcurPrice := 0

ifnotexist, xeroxsettings.ini
{
	IniWrite, 1, xeroxsettings.ini, trayicon, showicon
	IniWrite, -15, xeroxsettings.ini, settings, brightness
	IniWrite, 40, xeroxsettings.ini, settings, contrast
	IniWrite, 1, xeroxsettings.ini, settings, copies
	IniWrite, 7, xeroxsettings.ini, accountsystem, price
}

IniRead, iconvalue, xeroxsettings.ini, trayicon, showicon, 1
IniRead, curBright, xeroxsettings.ini, settings, brightness, -15
IniRead, curContrast, xeroxsettings.ini, settings, contrast, 40
IniRead, curCopies, xeroxsettings.ini, settings, copies, 1
IniRead, curPrice, xeroxsettings.ini, accountsystem, price, 7

ControlSetText, Static1, %curCopies%, % "ahk_id"GUIhWnd
ControlSetText, Static2, %curBright%, % "ahk_id"GUIhWnd
ControlSetText, Static3, %curContrast%, % "ahk_id"GUIhWnd
ControlSetText, Static4, 0, % "ahk_id"GUIhWnd
ControlSetText, Static5, 0, % "ahk_id"GUIhWnd

Return
;################################################################################################################################################
;Начать копирование
Copy:
SetTimer, Reset, Off
GuiControl, Hide, FireStatic
Run, "d:\Documents\PSoft\iCopy\iCopy.exe" /copy /r 300 /nc %curCopies% /b %curBright% /cnt %curContrast% /quality 75 /scaling 98 /printer "Canon LBP2900 Virtual"
;Run, "d:\Documents\PSoft\iCopy\iCopy.exe" /copy /r 300 /nc %curCopies% /b %curBright% /cnt %curContrast% /quality 75 /scaling 98 /printer "Canon LBP2900 3"
WinWait, Загрузка данных, , 6
WinWaitClose, Загрузка данных
GuiControl, Show, FireStatic
WinWait, Идет печать, , 2
IfWinExist, Идет печать
{
	NcurQuantity += curQuantity + curCopies
	NcurPrice := NcurQuantity * curPrice
	ControlSetText, Static4, %NcurQuantity%, % "ahk_id"GUIhWnd
	ControlSetText, Static5, %NcurPrice%, % "ahk_id"GUIhWnd
	SetTimer, Reset, 600000
}
Return
;################################################################################################################################################
;Сброс счётчика
Reset:
curQuantity := 0
NcurQuantity := 0
ControlSetText, Static4, 0, % "ahk_id"GUIhWnd
ControlSetText, Static5, 0, % "ahk_id"GUIhWnd
SetTimer, Reset, Off
;################################################################################################################################################
;Управление настройками
#If CursorOverControl(hGui)
LButton::
RButton::
MButton::
	MouseGetPos,,, hwnd, controlname
	if controlname = Static1
	{
		GuiControl,, Static1, % A_ThisHotkey = "LButton" ? ++curCopies : --curCopies
		IniWrite, %curCopies%, xeroxsettings.ini, settings, copies
	}
	
	if controlname = Static2
	{
		GuiControl,, Static2, % A_ThisHotkey = "LButton" ? curBright += 10 : curBright -= 10
		IniWrite, %curBright%, xeroxsettings.ini, settings, brightness
	}
	
	if controlname = Static3
	{
		GuiControl,, Static3, % A_ThisHotkey = "LButton" ? curContrast += 10 : curContrast -= 10
		IniWrite, %curContrast%, xeroxsettings.ini, settings, contrast
	}

	if controlname = Static4
	{
		GuiControl,, Static4, % A_ThisHotkey = "LButton" ? NcurQuantity += 1 : NcurQuantity -= 1
		GuiControl,, Static5, % A_ThisHotkey = "LButton" ? NcurPrice += curPrice : NcurPrice -= curPrice
		GuiControl,, Static4, % A_ThisHotkey = "MButton" ? NcurQuantity := 0 : NcurQuantity := NcurQuantity
		GuiControl,, Static5, % A_ThisHotkey = "MButton" ? NcurPrice := 0 : NcurPrice := NcurPrice
	}	
	Return		
#If
CursorOverControl(hGui)
{
	MouseGetPos,,, hwnd, controlname
	Return hwnd = hGui && controlname ~= "^Static(1|2|3|4)$"
}
;################################################################################################################################################
;Перетасиквание окна
WM_LBUTTONDOWN()
{
	If A_Gui
	PostMessage, 0xA1, 2
}
Return
;################################################################################################################################################
;Печать пробелом
~SC029 & 1::
ifWinExist, % "ahk_id"GUIhWnd
{
	GoSub, Copy
}
Return

Захотел сделать ControlClick по одной из картинок в данной GUI, при нажатии на хардверную кнопку сканера.
Сделал такой скриптик:

IfWinExist, XeroxNew3
{
		SetControlDelay -1
        ControlClick, x50 y30, XeroxNew3,, Left, 1,  NA
        SetControlDelay, 0
}
Return
Exit

Сам по себе он работает чётко.
Скомпилировал exe, который так же, при запуске "кликает" в нужном месте.
По мотивам этой: https://habr.com/ru/post/200528/ статьи, повесил на нужную мне кнопку вызов скомпилированного exe-шника. Он успешно вызывается, но не "кликает" в картинку. Пробовал оба способа, указанные в статье по ссылке, результат идентичный.

Что тут можно поделать?
Может быть, есть возможность "перехватывать" нажатие кнопки без реестра?
Спасибо!

2

Re: AHK: ControlClick вызов скрипта из реестра

taravasya
ControlClick и Click часто блокируются. Можно использовать сочетание MouseMove и Send, если такое происходит.

3

Re: AHK: ControlClick вызов скрипта из реестра

Мне кажется, что проблема в том, от которого пользователя запускается скомпилированный скрипт. Скорее всего этот SYSTEM. А у этого "пользователя" могут быть проблемы с тем, чтобы взаимодействовать с окнами текущего пользователя.

4

Re: AHK: ControlClick вызов скрипта из реестра

Отправка оконного сообщения вроде как правами не регламентируется.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5

Re: AHK: ControlClick вызов скрипта из реестра

taravasya пишет:

всё нормально, можно его особо не изучат

Не изучал. При чём тут реестр?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6 (изменено: taravasya, 2023-01-14 22:07:18)

Re: AHK: ControlClick вызов скрипта из реестра

ypppu пишет:

Мне кажется, что проблема в том, от которого пользователя запускается скомпилированный скрипт. Скорее всего этот SYSTEM. А у этого "пользователя" могут быть проблемы с тем, чтобы взаимодействовать с окнами текущего пользователя.

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

serzh82saratov пишет:

Не изучал. При чём тут реестр?

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

7 (изменено: ypppu, 2023-01-15 00:29:48)

Re: AHK: ControlClick вызов скрипта из реестра

serzh82saratov пишет:

Отправка оконного сообщения вроде как правами не регламентируется.

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

8 (изменено: taravasya, 2023-01-14 22:26:07)

Re: AHK: ControlClick вызов скрипта из реестра

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

Через Send, так же нет результата. Однако.. в планировщике заданий, добавил галочку "Выполнить с наивысшими правами" и тогда заработало. Осталось понять, возможно ли из реестра запускать приложения с аналогичной опцией..? Но это уже для другой темы вопрос.

9

Re: AHK: ControlClick вызов скрипта из реестра

ypppu пишет:

Если на компьютера две пользовательские учётки, и оба юзера залогинились

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

taravasya пишет:

А вообще текст моего сообщения прочитали?

Прочитал теперь. Опишите под каким пользователем и правами запущено приложение Xerox, и тоже самое для скрипта из под реестра.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10 (изменено: taravasya, 2023-01-15 12:40:16)

Re: AHK: ControlClick вызов скрипта из реестра

serzh82saratov приложение Xerox, это AHK-скрипт, который я(пользователь taravasya с админ-правами) запускаю обычным двойным кликом, поэтому, скорее всего этот скрипт работает от моего имени (если на этот счёт нет каких-то подводных камней в принципе работы AHK). С какими правами запускается скрипт(а точнее скомпилированный из него exe) из реестра, я не скажу точно. Выше предположили, что вероятно там используется учётка SYSTEM. Так же я попробовал в свойствах "Совместимости приложений", указать запуск этого exe от имени администратора, но это не помогло. Вечером планирую попробовать запуск именно от своего имени, с помощью данной утилиты: https://robotronic.net/runasspcen.html
Пока, что нет доступа к компьютеру к которому подключён сканер.

11

Re: AHK: ControlClick вызов скрипта из реестра

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

Пошли дальше. taravasya захотел сделать ControlClick по одной из картинок в своём AutoHotkey GUI при нажатии на хардверную кнопку сканера. Из этого следует, что по нажатию хардверной кнопки сканера должна запуститься какая-то программка (какой-то скомпилированный AutoHotkey-скрипт). В предыдущем абзаце я описал, почему при нажатии хардверных кнопок сканера программка запускается от имени SYSTEM. Ладно, скрипт запустился от имени SYSTEM. Но кто ему даст посылать клики на рабочий стол пользователя?
Даже чисто логически такой пример приведу. Есть 2 учётки на компьютере: User1 и User2. User1 залогинился, затем заблокировал (нажал "сменить пользователя"). Затем User2 залогинился. В этой ситуации в оперативной памяти ПК крутятся одновременно процессы программ, запущенных как User1, так и User2. Но если User2 запустит скрипт, который попытается совершить ControlClick в окно программы, запущенной из-под  User1, то скрипту это не удастся, поскольку с чужим процессом взаимодействовать сама операционная система не позволяет.

12

Re: AHK: ControlClick вызов скрипта из реестра

taravasya пишет:

приложение Xerox, это AHK-скрипт

Зачем тогда что то кликать, не проще выполнить его функцию.

taravasya пишет:

С какими правами запускается скрипт(а точнее скомпилированный из него exe) из реестра, я не скажу точно.

У меня в подписи AhkSpy, им посмотрите.

ypppu пишет:

попытается совершить ControlClick в окно программы, запущенной из-под  User1

Разве окна программ видны, если они запущены от заблокированного пользователя?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

Re: AHK: ControlClick вызов скрипта из реестра

Вот и я о том же. SYSTEM, как и User2, не может взаимодействовать с окнами User1. Убить чужой процесс наверное можно. А кликнуть в окно чужого процесса нельзя.

14

Re: AHK: ControlClick вызов скрипта из реестра

ypppu пишет:

Вот и я о том же

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15 (изменено: taravasya, 2023-01-15 15:08:51)

Re: AHK: ControlClick вызов скрипта из реестра

serzh82saratov пишет:

Зачем тогда что то кликать, не проще выполнить его функцию.

Скрипт xerox, запущен постоянно и работает при взаимодействии с пользователем (путём нажатия контролов в GUI). То-есть он выполняется не во время запуска, а "интерактивно".  Теперь, вопрос, возможно ли из скрипта №2(выполняемого при нажатии на кнопке сканера), выполнить функцию крипта №1 уже запущенного в данный момент? Я так понимаю что нет, поэтому и пошёл путём "клика". Или я не прав?

PS. Кстати, с помощью указанной выше утилиты, получилось "кликнуть" из планироващика заданий от моего имени, без включения опции "Выполнить с наивысшими правами". То-есть, по идее получится и из реестра. Отпишусь о результатах.

16

Re: AHK: ControlClick вызов скрипта из реестра

taravasya пишет:

возможно ли из скрипта №2(выполняемого при нажатии на кнопке сканера), выполнить функцию крипта №1

А что мешает функцию крипта №1, засунуть в скрипт №2?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17 (изменено: taravasya, 2023-01-15 15:35:19)

Re: AHK: ControlClick вызов скрипта из реестра

serzh82saratov на это есть ряд причин. В первую очередь, то, что в процессе работы, в GUI скрипта Xerox ведётся подсчёт "ксерокопий". Если я инициирую скан+печать из другого скрипта, он ничего не будет знать о том, сколько сделано копий на данный момент в основной GUI. И опять встанет вопрос о том, как изменить эти значения в GUI скрипта №1,  из скрипта №2, который, полагаю упрётся в ту же самую проблему.

18

Re: AHK: ControlClick вызов скрипта из реестра

По идее ControlClick это оконное сообщение, но попробуйте любое другое. Или с помощью Global container можно вызвать функцию.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK: ControlClick вызов скрипта из реестра

taravasya Добавьте возможность 'общения' между скриптами, тогда думаю все проблемы решаться.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

20 (изменено: serzh82saratov, 2023-01-15 16:00:07)

Re: AHK: ControlClick вызов скрипта из реестра

Как простой костыль чтобы не разбираться во всём, можно установить резервный хоткей который ничего не затронет, например vk0A, и из второго скрипта отправлять его нажатие.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

21 (изменено: serzh82saratov, 2023-01-15 16:05:41)

Re: AHK: ControlClick вызов скрипта из реестра

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22 (изменено: taravasya, 2023-01-15 17:35:02)

Re: AHK: ControlClick вызов скрипта из реестра

serzh82saratov пишет:

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

Тоже не работает. Проверял.

serzh82saratov пишет:

с помощью Global container можно вызвать функцию.

Похоже яндекс ничего не знает про сочетание Global container и AHK. Я тоже ))

__Михаил__ пишет:

taravasya Добавьте возможность 'общения' между скриптами

Как я написал выше, думаю, что проблема решится с помощью утилиты runasspc. Если и с ней не получится, то думал налаживать взаимодействие через ini файл. В нём сейчас хранятся данные про яркость/контраст/стоимость/требуемое количество копий... Туда же, по идее, можно добавить и подсчёт общего количества копий.
Хотел избежать такого сценария. Есть один важный момент, в основном скрипте, есть хоткей, по нажатию которого, происходит скан/печать, +тоже самое происходит при клике на соответствующую картинку. В обоих случаях, работает подсчёт и изменение результирующих данных в GUI. Повесить функцию скан/печать на кнопку сканера, надо как дополнительную опцию, а не вместо имеющихся, потому, что в разных ситуациях удобнее использовать разные сценарии. И вот, что бы "синхронизировать" отображение результирующих значений, надо либо в основном скрипте какой-то повторяющийся в цикле опрос ini файла делать, либо, после использования стороннего скрипта, в GUI не будет отображаться актуальная информация, до тех пор, пока не произойдёт какое-то действие в основном скрипте.
Или можно как-то элегантнее настроить взаимодействие?

serzh82saratov пишет:

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

Разве там не будет той же самой проблемы? Имеет значение, скрытое это окно или нет?

23

Re: AHK: ControlClick вызов скрипта из реестра

taravasya пишет:

Похоже яндекс ничего не знает про сочетание Global container и AHK. Я тоже ))

http://forum.script-coding.com/viewtopi … 61#p113561

taravasya пишет:

Тоже не работает. Проверял.

SendLevel, 100 есть в скрипте с Send, и #InputLevel, 100 в основном?

taravasya пишет:

Разве там не будет той же самой проблемы? Имеет значение, скрытое это окно или нет?

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

24

Re: AHK: ControlClick вызов скрипта из реестра

serzh82saratov пишет:

У меня в подписи AhkSpy, им посмотрите.

Так что с пользователями и правами?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25

Re: AHK: ControlClick вызов скрипта из реестра

serzh82saratov пишет:

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

Вроде я понятно описал. С точки зрения учётки пользователя (человека) окно AHK-скрипта есть; но с точки зрения процесса, запущенного от имени SYSTEM, про существование у пользователя (человека) окна AHK-скрипта ничего неизвестно. Скрипт максимум что увидит, так это то, что существует процесс autohotkey.exe, но послать ControlClick в окно данного процесса, как этого хотел taravasya, скрипт не сможет. Потому что так Windows устроена.

26 (изменено: taravasya, 2023-01-15 18:35:22)

Re: AHK: ControlClick вызов скрипта из реестра

serzh82saratov пишет:
serzh82saratov пишет:

У меня в подписи AhkSpy, им посмотрите.

Так что с пользователями и правами?

Сейчас нет доступа к компьютеру со скнером.

Запустил скрипт на другом компе, AhkSpy пишет:

IsAdmin:  false  ▪  Is unicode:  true  ▪  User name:  VASYA  ▪  WindowBand:  ZBID_DESKTOP := 1

VASYA - это мой текущий пользователь с правами адимнистратора.

27

Re: AHK: ControlClick вызов скрипта из реестра

taravasya пишет:

VASYA - это мой текущий пользователь с правами адимнистратора.

IsAdmin:  false значит что скрипт не с правами.
Тут понятно, интересно что напишет про скрипт из реестра.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

28

Re: AHK: ControlClick вызов скрипта из реестра

ypppu пишет:

Вроде я понятно описал.

Мы говорили о том что текущий юзер №2, а скрипт запущен от №1. Значит окно скрипта видимым быть не может, и насколько понимаю все процессы от юзер №1 являются замороженными.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

29

Re: AHK: ControlClick вызов скрипта из реестра

Хорошо, мы сидим под юзер №2, а скрипт запущен от юзер №1.
Значит окно скрипта видимым быть не может - ДА
Все процессы от юзер №1 являются замороженными - НЕТ. Юзер №1 вполне мог запустить проигрыватель с музыкой. И музыку будет слышно что у самого юзера №1, что на экране выбора пользователя (если заблокировать Юзер №1), что при входе в Windows из-под юзер №2.

30

Re: AHK: ControlClick вызов скрипта из реестра

Тут обсуждали возможные варианты взаимодействия с system:
http://forum.script-coding.com/viewtopic.php?id=11778

31

Re: AHK: ControlClick вызов скрипта из реестра

А тут есть пример на чистом ahk:
http://forum.script-coding.com/viewtopic.php?pid=139447
ЗЫ Жалко, что qwerty12 потерял интерес к автохотки. ((

32

Re: AHK: ControlClick вызов скрипта из реестра

Malcev пишет:

А тут есть пример на чистом ahk:

Круть. Скрипт можно запустить от любого юзера, и только в логоне будет работать хоткей? Или как должно работать?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

33

Re: AHK: ControlClick вызов скрипта из реестра

Да, работать будет только в приложениях работающих от системного аккаунта.

34

Re: AHK: ControlClick вызов скрипта из реестра

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

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

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\StillImage\Registered Applications]
"Microsoft Word"="C:\\Program Files\\Microsoft Office\\Office10\\WINWORD.EXE /IMG_STI /StiDevice:%1 /StiEvent:%2"
"Photocopier Expert Scan"="C:\\Program Files\\Photocopier Expert\\photocopierexpert.exe /PROFILESCAN /StiDevice:%1 /StiEvent:%2"

35 (изменено: taravasya, 2023-01-17 01:33:02)

Re: AHK: ControlClick вызов скрипта из реестра

ypppu пишет:

Вроде сторонней программой "RunAsService"

Тоже  в итоге пришёл к такому же решению. Только использовал runasspc.
"Будущим поколениям" может быть пригодится информация о том, что для того, чтобы всё заработало:

  • Я настроил в утилите runasspc запуск скомпилированного exe от имени своего текущего пользователя

  • Мой скомпилированный exe, должен запускаться от имени администратора(это надо включить в его свойствах, во вкладке совместимость)

  • Нельзя, чтобы в пути к этому exe были пробелы(предполагаю, что и кириллица).

36 (изменено: taravasya, 2023-02-18 17:06:28)

Re: AHK: ControlClick вызов скрипта из реестра

Придумал несколько иной способ. Проблема в том, что runasspc время от времени при запуске напоминает, что требуется лицензия и ждёт нажатия на кнопку "Continue", и кроме того, он постоянно генерирует окно консоли. Получается сплошное перемигивание.
Я воспользовался вот такой конструкцией в основном скрипте:

DllCall("RegisterShellHookWindow", Ptr, A_ScriptHwnd)
MsgNum := DllCall("RegisterWindowMessage", Str, "SHELLHOOK")
OnMessage(MsgNum, "ShellMessage")

Return

ShellMessage(wParam, lParam) 
{ 
    static HSHELL_WINDOWACTIVATED := 0x04
         , HSHELL_WINDOWCREATED := 0x01
         , HSHELL_WINDOWDESTROYED := 0x02
         , HSHELL_HIGHBIT := 0x8000
         , HSHELL_RUDEAPPACTIVATED := HSHELL_WINDOWACTIVATED | HSHELL_HIGHBIT | HSHELL_WINDOWCREATED | HSHELL_WINDOWDESTROYED
    
    if (wParam == HSHELL_RUDEAPPACTIVATED || wParam == HSHELL_WINDOWACTIVATED || wParam == HSHELL_WINDOWCREATED || wParam == HSHELL_WINDOWDESTROYED)
    {
        WinGet, PrName, ProcessName, % "ahk_id" lParam
        If InStr(PrName, "go_copy")
        {
        	GoSub, Copy
        }       
    }
}

Благодаря этому коду, можно отслеживать появляющиеся и исчезающие окна. В отличии от winwait, такой способ может работать "в фоне". То-есть остальные мои функции продолжают работать как и ранее.

Далее я создал скомпилированный в exe скрипт go_copy.exe:

#NoEnv
#NoTrayIcon

SendMode Input
SetWorkingDir %A_ScriptDir%
WinSet, Transparent, 0, click_to_copy
Gui, Show, NoActivate Hide, click_to_copy
Gui, Destroy

GuiClose:
ExitApp

И повесил его на запуск при нажатии на кнопку сканера. В итоге, никаких сторонних программ не нужно. И ничего не мелькает. Визуально, происходит нажатие на кнопку сканера, и сразу происходит запуск моей функции Copy.