1 (изменено: taravasya, 2016-03-15 07:16:08)

Тема: AHK: Регистрация скомпилированного скрипта в качестве службы

Задался таким вопросом... Есть скомпилированный скрипт, функционал которого меня полностью устраивает. Не хватает только "одной мелочи", которая обсуждалась уже 100500 раз. Необходима реакция на хоткей до входа в систему. Много разговоров велось о том, что можно запустить такой скомпилированный в exe-шник скрипт, в качестве win-службы.

Всё бы ничего, но только регистрация службы при помощи посредников(ака servany, runassvc....) не даёт ничего, потому как запущенная служба не реагирует на хоткеи даже на рабочем столе, а не то, что в процессе логона.

Запуск же службы прямым указанием на мой exe-шник, оборачиваетcя ошибкой 1053. Погуглив, понял, что exe-шник работающий в качестве службы, должен иметь специальные директивы, на основании которых он и опознаётся как "правильная служба". В противном же случае, Windows грохает процесс.

Я так же уже ознакомился с тем, что начиная с Win Vista, службы не могут иметь GUI, однако мой скрипт в нём и не нуждается. Полагаю, что есть ограничение и на взаимодействия через клавиатуру(в нашем случае через хоткеи). Это так?

Вот здесь:
https://autohotkey.com/boards/viewtopic … 017#p76017
я нашёл пример скрипта, в котором как я понимаю обрабатываются указанные выше директивы:

CreateService(lpServiceName,lpDisplayName,lpBinaryPathName,dwServiceType="0x10",dwStartType="0x2",dwErrorControl="0x0")
{
	/*
	;------------dwServiceType--------------------
	0x00000001 ;SERVICE_KERNEL_DRIVER
	0x00000002 ;SERVICE_FILE_SYSTEM_DRIVER
	0x00000010 ;SERVICE_WIN32_OWN_PROCESS
	0x00000020 ;SERVICE_WIN32_SHARE_PROCESS
	;------------------------------------------------
 
	;------------dwStartType-----------------------
	0x00000000 ;SERVICE_BOOT_START
	0x00000001 ;SERVICE_SYSTEM_START
	0x00000002 ;SERVICE_AUTO_START
	0x00000003 ;SERVICE_DEMAND_START
	;------------------------------------------------
 
	;------------dwErrorControl-----------------------
	0x00000000 ;SERVICE_ERROR_IGNORE
	0x00000001 ;SERVICE_ERROR_NORMAL
	0x00000002 ;SERVICE_ERROR_SEVERE
	0x00000003 ;SERVICE_ERROR_CRITICAL
	;------------------------------------------------
	*/	
	SC_MANAGER_CREATE_SERVICE := 0x0002
	SERVICE_ALL_ACCESS := 0xF01FF
	hSC := DllCall("Advapi32\OpenSCManager","Uint",0,"Uint",0,"Uint",SC_MANAGER_CREATE_SERVICE,"Uint")
	if not hSC
	{
		ErrorLevel := -1
		return,A_LastError
	}
	hCS := DllCall("Advapi32\CreateService","Uint",hSC
	,"Str",lpServiceName
	,"Str",lpDisplayName
	,"Uint",SERVICE_ALL_ACCESS 								
	,"Uint",dwServiceType
	,"Uint",dwStartType
	,"Uint",dwErrorControl
	,"Str",lpBinaryPathName
	,"Uint",0
	,"Uint",0
	,"Uint",0
	,"Uint",0
	,"Uint",0
	,"Uint")
	if not hCS
	{
		DllCall("Advapi32\CloseServiceHandle","Ptr",hSC)
		ErrorLevel := -2
		return,A_LastError
	}	
	DllCall("Advapi32\CloseServiceHandle","Ptr",hSC)
	DllCall("Advapi32\CloseServiceHandle","Ptr",hCS)
	ErrorLevel := 0
	return
}

однако вставка этого кода в начало моего скрипта ничем не помогает..(((

Уже давно отказался бы от этой навязчивой идеи... но вот загвоздка... ))) по интернету полно примеров скриптов AHK, которые будто бы всё же запускаются как службы. И если кто то это делал, значит они всё-таки могут взаимодействовать через клавиатуру, иначе какой в этом смысл? В любом случае или кривые руки или устаревшие примеры(многие из примеров в сети были рассчитаны на XP и Win7), мне же нужен рабочий вариант для Win8.1 и Win10.

Может ли кто-то что-нибудь подсказать по этой теме? Был бы весьма признателен....

2

Re: AHK: Регистрация скомпилированного скрипта в качестве службы

А почему бы просто не создать в планировщике задачу с триггером при запуске/входе в систему/блокировании раб. станции?

3 (изменено: chippp, 2016-03-21 00:33:27)

Re: AHK: Регистрация скомпилированного скрипта в качестве службы

Присоединяюсь к вопросу, нашел интересное описание http://www.achatfs.narod.ru/create_services_api.html осталось разобраться но в этом не силен.

4 (изменено: chippp, 2016-03-21 00:33:48)

Re: AHK: Регистрация скомпилированного скрипта в качестве службы

Тут вполне рабочий пример
https://autohotkey.com/board/topic/6668 … -service/

5 (изменено: chippp, 2016-03-21 00:33:58)

Re: AHK: Регистрация скомпилированного скрипта в качестве службы

Ну и для дополнения тут
https://autohotkey.com/board/topic/3202 … ces/page-2

6

Re: AHK: Регистрация скомпилированного скрипта в качестве службы

chippp, ознакомьтесь с этой темой, отредактируйте свои посты.

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