1

Тема: AHK: Управление станком беспроводной цифровой клавиатурой

Приветствую всех.

На работе работает станок под управлением ПК на Windows 7 (управляющая программа Printermanager.exe). ПК установлен в 1.5метрах от станка
Подвигать кареткой можно с клавиатуры стрелками, но остальные необходимые действия не привязаны к клавиатуре, что доставляет жуткое неудобство в работе.
Нашел вариант с помощью АНК на беспроводную цифровую клавиатуру привязать необходимые действия. Примерные координаты центров кнопок действий я выписал, после изучения мануалов накатал скрипт (пока нет возможности проверить на станке ибо пока выходные).
Вопрос такой - есть ли косяки в скрипте и что поправить необходимо? Заранее благодарен.


Run, "C:\Program Files\PrinterManager\PrinterManager.exe", , max ; Запуск программы PrinterManager.exe
WinWait, PrinterManager.exe										 ; Ожидание запуска программы PrinterManager.exe
WinActivate, PrinterManager.exe									 ; Делаем активным программу PrinterManager.exe

IfWinExist, PrinterManager.exe				 ; Проверяем активно ли программа PrinterManager.exe
{ 
		*NumpadAdd::				 ; назначение действий для Pause or resume
		MouseMove, 135, 18, 0		 ; Перемещаем курсор мыши на кнопку
		MouseClick, left,,, 1, 0  	 ; Кликать левой кнопкой мыши.
		return
		
		*NumpadSub::				 ; назначение действий для Abort job
		MouseMove, 174, 18, 0		 ; Перемещаем курсор мыши на кнопку
		MouseClick, left,,, 1, 0     ; Удерживать нажатой левую кнопку мыши.
		return
		
		*NumpadLeft::				 ; назначение действий для Left
		MouseMove, 271, 18, 0		 ; Перемещаем курсор мыши на кнопку
		MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку мыши.
		KeyWait, NumpadLeft          ; Ждать отпускания клавиши.
		MouseClick, left,,, 1, 0, U  ; Отпустить кнопку.
		return
		
		*NumpadRight::				 ; назначение действий для Right
		MouseMove, 307, 18, 0		 ; Перемещаем курсор мыши на кнопку
		MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку мыши.
		KeyWait, NumpadRight         ; Ждать отпускания клавиши.
		MouseClick, left,,, 1, 0, U  ; Отпустить кнопку.
		return
		
		*NumpadUp::					 ; назначение действий для Forward
		MouseMove, 384, 18, 0		 ; Перемещаем курсор мыши на кнопку
		MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку мыши.
		KeyWait, NumpadUp            ; Ждать отпускания клавиши.
		MouseClick, left,,, 1, 0, U  ; Отпустить кнопку.
		return
		
		*NumpadDown::				 ; назначение действий для Backward
		MouseMove, 424, 18, 0		 ; Перемещаем курсор мыши на кнопку
		MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку мыши.
		KeyWait, NumpadDown          ; Ждать отпускания клавиши.
		MouseClick, left,,, 1, 0, U  ; Отпустить кнопку.
		return
		
		*NumpadPgDn::				 ; назначение действий для Z Move Down
		MouseMove, 501, 18, 0		 ; Перемещаем курсор мыши на кнопку
		MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку мыши.
		KeyWait, NumpadPgDn          ; Ждать отпускания клавиши.
		MouseClick, left,,, 1, 0, U  ; Отпустить кнопку.
		return
		
		*NumpadPgUp::				 ; назначение действий для Z Move Up
		MouseMove, 539, 18, 0		 ; Перемещаем курсор мыши на кнопку
		MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку мыши.
		KeyWait, NumpadPgUp          ; Ждать отпускания клавиши.
		MouseClick, left,,, 1, 0, U  ; Отпустить кнопку.
		return
		
		*NumpadHome::				 ; назначение действий для Move carriage to origin X
		MouseMove, 626, 18, 0		 ; Перемещаем курсор мыши на кнопку
		MouseClick, left,,, 1, 0     ; Удерживать нажатой левую кнопку мыши.
		return
		
		*NumpadEnd::				 ; назначение действий для Move carriage to origin Y
		MouseMove, 665, 18, 0		 ; Перемещаем курсор мыши на кнопку
		MouseClick, left,,, 1, 0     ; Удерживать нажатой левую кнопку мыши.
		return
	return
}
else
{
    ExitApp									 ; завершаем работу скрипта, если программа PrinterManager.exe не запущена
    return
}

2

Re: AHK: Управление станком беспроводной цифровой клавиатурой

Если я правильно понял задумку... Первый вопрос: зачем нужна команда MouseMove? Щелчок ЛКМ по координатам может обходиться без неё.

3

Re: AHK: Управление станком беспроводной цифровой клавиатурой

ypppu, в принципе ни для чего, чисто для успокоения.

4

Re: AHK: Управление станком беспроводной цифровой клавиатурой

WinWait, PrinterManager.exe

Тут скорее всего надо

WinWait, ahk_exe PrinterManager.exe

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


#If WinActive("ahk_exe PrinterManager.exe")

*NumpadAdd::				 ; назначение действий для Pause or resume
MouseMove, 135, 18, 0		 ; Перемещаем курсор мыши на кнопку
MouseClick, left,,, 1, 0  	 ; Кликать левой кнопкой мыши.
return

*NumpadSub::				 ; назначение действий для Abort job
MouseMove, 174, 18, 0		 ; Перемещаем курсор мыши на кнопку
MouseClick, left,,, 1, 0     ; Удерживать нажатой левую кнопку мыши.
return

*NumpadLeft::				 ; назначение действий для Left
MouseMove, 271, 18, 0		 ; Перемещаем курсор мыши на кнопку
MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку мыши.
KeyWait, NumpadLeft          ; Ждать отпускания клавиши.
MouseClick, left,,, 1, 0, U  ; Отпустить кнопку.
return

*NumpadRight::				 ; назначение действий для Right
MouseMove, 307, 18, 0		 ; Перемещаем курсор мыши на кнопку
MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку мыши.
KeyWait, NumpadRight         ; Ждать отпускания клавиши.
MouseClick, left,,, 1, 0, U  ; Отпустить кнопку.
return

*NumpadUp::					 ; назначение действий для Forward
MouseMove, 384, 18, 0		 ; Перемещаем курсор мыши на кнопку
MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку мыши.
KeyWait, NumpadUp            ; Ждать отпускания клавиши.
MouseClick, left,,, 1, 0, U  ; Отпустить кнопку.
return

*NumpadDown::				 ; назначение действий для Backward
MouseMove, 424, 18, 0		 ; Перемещаем курсор мыши на кнопку
MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку мыши.
KeyWait, NumpadDown          ; Ждать отпускания клавиши.
MouseClick, left,,, 1, 0, U  ; Отпустить кнопку.
return

*NumpadPgDn::				 ; назначение действий для Z Move Down
MouseMove, 501, 18, 0		 ; Перемещаем курсор мыши на кнопку
MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку мыши.
KeyWait, NumpadPgDn          ; Ждать отпускания клавиши.
MouseClick, left,,, 1, 0, U  ; Отпустить кнопку.
return

*NumpadPgUp::				 ; назначение действий для Z Move Up
MouseMove, 539, 18, 0		 ; Перемещаем курсор мыши на кнопку
MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку мыши.
KeyWait, NumpadPgUp          ; Ждать отпускания клавиши.
MouseClick, left,,, 1, 0, U  ; Отпустить кнопку.
return

*NumpadHome::				 ; назначение действий для Move carriage to origin X
MouseMove, 626, 18, 0		 ; Перемещаем курсор мыши на кнопку
MouseClick, left,,, 1, 0     ; Удерживать нажатой левую кнопку мыши.
return

*NumpadEnd::				 ; назначение действий для Move carriage to origin Y
MouseMove, 665, 18, 0		 ; Перемещаем курсор мыши на кнопку
MouseClick, left,,, 1, 0     ; Удерживать нажатой левую кнопку мыши.
return

#If
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

5

Re: AHK: Управление станком беспроводной цифровой клавиатурой

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

6

Re: AHK: Управление станком беспроводной цифровой клавиатурой

Vits17 пишет:

и кнопки цифровой клавы работали только там

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

7

Re: AHK: Управление станком беспроводной цифровой клавиатурой

Рядом с  *NumpadHome::   и    *NumpadEnd::   написано в комментарии "удерживать". Но при чём тут удержание? По сути это щелчок мышью по тем координатам, где висел курсор. Лучше сразу научиться правильно, плюс писать правильные комментарии, так чтобы через 10 лет прочитать их и всё понять.

Двигать мышку, а потом уже щёлкать - лишняя строчка кода (две отдельные команды). Чем короче код, тем его легче воспринимать. И легче будет вспомнить, когда понадобится что-нибудь подредактировать.
Поэтому рекомендую выпилить MouseMove, добавив соответствующие параметры в MouseClick.

А так вообще код и комментарии оформлены аккуратно. Продолжайте в том же духе! https://i.smiles2k.net/aiwan_smiles/victory.gif

8

Re: AHK: Управление станком беспроводной цифровой клавиатурой

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

9

Re: AHK: Управление станком беспроводной цифровой клавиатурой

ypppu пишет:

Рядом с  *NumpadHome::   и    *NumpadEnd::   написано в комментарии "удерживать". Но при чём тут удержание?

Забыл поправить коммент. Извиняюсь.

ypppu пишет:

Двигать мышку, а потом уже щёлкать - лишняя строчка кода (две отдельные команды). Чем короче код, тем его легче воспринимать. И легче будет вспомнить, когда понадобится что-нибудь подредактировать.
Поэтому рекомендую выпилить MouseMove, добавив соответствующие параметры в MouseClick.

Это почищу. Благодарю.

10

Re: AHK: Управление станком беспроводной цифровой клавиатурой

Ещё можно постирать Return'ы лишние. Перед каждой горячей клавишей есть "встроенный" невидимый Return.
Также Return необязательно писать в конце кода - он там присутствует по умолчанию. Часто его пишут просто "для порядка", как точку в конце предложения.

11

Re: AHK: Управление станком беспроводной цифровой клавиатурой

$F1::
   MsgBox, F1
$F2::
   MsgBox, F2
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

12 (изменено: ypppu, 2019-08-12 18:04:49)

Re: AHK: Управление станком беспроводной цифровой клавиатурой

Исправлено. https://i.smiles2k.net/aiwan_smiles/blush2.gif
После каждой горячей клавиши есть "встроенный" невидимый Return при условии, что горячая клавиша умещается в одну строку.

F1:: MsgBox, F1
F2:: MsgBox, F2

Это позволяет в коде от Vits17 некоторые блоки сократить с 4 строчек до 1.

13

Re: AHK: Управление станком беспроводной цифровой клавиатурой

ypppu пишет:

Перед каждой горячей клавишей есть "встроенный" невидимый Return при условии, что горячая клавиша умещается в одну строку.

Тоже нет:

$F1::
   MsgBox, F1
$F2:: MsgBox, F2
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

14

Re: AHK: Управление станком беспроводной цифровой клавиатурой

Я переписал код с учетом ваших рекомендаций.


#If WinActive("ahk_exe PrinterManager.exe")

	*NumpadAdd:: MouseClick, left, 135, 18, 1, 0	; назначение действий для Pause or resume и клик по кнопке
	
	*NumpadSub:: MouseClick, left, 174, 18, 1, 0	; назначение действий для Abort job и клик по кнопке
	
	*NumpadLeft::					; назначение действий для Left
	MouseClick, left, 271, 18, 1, 0, D		; Удерживаем нажатой левую кнопку мыши на кнопке
	KeyWait, NumpadLeft				; Ждем отпускания клавиши
	MouseClick, left, 271, 18, 1, 0, U		; Отпускаем кнопку.
	return

	*NumpadRight::					; назначение действий для Right
	MouseClick, left, 307, 18, 1, 0, D		; Удерживаем нажатой левую кнопку мыши на кнопке
	KeyWait, NumpadRight				; Ждем отпускания клавиши
	MouseClick, left, 307, 18, 1, 0, U		; Отпускаем кнопку
	return

	*NumpadUp::					; назначение действий для Forward
	MouseClick, left, 384, 18, 1, 0, D		; Удерживаем нажатой левую кнопку мыши на кнопке
	KeyWait, NumpadUp				; Ждем отпускания клавиши
	MouseClick, left, 384, 18, 1, 0, U		; Отпускаем кнопку
	return

	*NumpadDown::					; назначение действий для Backward
	MouseClick, left, 424, 18, 1, 0, D		; Удерживаем нажатой левую кнопку мыши на кнопке
	KeyWait, NumpadDown				; Ждем отпускания клавиши
	MouseClick, left, 424, 18, 1, 0, U		; Отпускаем кнопку
	return

	*NumpadPgDn::					; назначение действий для Z Move Down
	MouseClick, left, 501, 18, 1, 0, D		; Удерживаем нажатой левую кнопку мыши на кнопке
	KeyWait, NumpadPgDn				; Ждем отпускания клавиши
	MouseClick, left, 501, 18, 1, 0, U		; Отпускаем кнопку
	return

	*NumpadPgUp::					; назначение действий для Z Move Up
	MouseClick, left, 539, 18, 1, 0, D		; Удерживаем нажатой левую кнопку мыши на кнопке
	KeyWait, NumpadPgUp				; Ждем отпускания клавиши
	MouseClick, left, 539, 18, 1, 0, U		; Отпускаем кнопку
	return

	*NumpadHome:: MouseClick, left, 626, 18, 1, 0	; назначение действий для Move carriage to origin X и клик покнопке
	
	*NumpadEnd:: MouseClick, left, 665, 18, 1, 0	; назначение действий для Move carriage to origin Y и клик по кнопке
	
#If

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


Run, "C:\Program Files\PrinterManager\PrinterManager.exe", , max ; Запуск программы PrinterManager.exe
WinWait, PrinterManager.exe										 ; Ожидание запуска программы PrinterManager.exe
WinActivate, PrinterManager.exe									 ; Делаем активным программу PrinterManager.exe

15 (изменено: teadrinker, 2019-08-12 14:18:14)

Re: AHK: Управление станком беспроводной цифровой клавиатурой

Первый параметр команды WinWait — заголовок окна. У вас окно программы имеет заголовок PrinterManager.exe?

Vits17 пишет:
WinActivate, PrinterManager.exe									 ; Делаем активным программу PrinterManager.exe

Эта строчка, скорее всего, лишняя. Разве после запуска программы её окно неактивно?

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

16

Re: AHK: Управление станком беспроводной цифровой клавиатурой

teadrinker

Первый параметр команды WinWait — заголовок окна. У вас окно программы имеет заголовок PrinterManager.exe?

Если вы про названия окна программы, то нет.
Заголовок имеет такое значение (судя по Window Spy) - BYHX  Printer Manager Ricoh_Gen5_2C_100Pin 4Head 8Color
PrinterManager.exe - исполняемый файл.

Эта строчка, скорее всего, лишняя. Разве после запуска программы её окно неактивно?

Не совсем, после запуска программы выползает внутреннее окошко калибровки станка по оси Z, которая не нужна и закрывается ручками при появлении (думаю допишу скрипт на закрытие данного окошка).

17

Re: AHK: Управление станком беспроводной цифровой клавиатурой

Vits17 пишет:

Если вы про названия окна программы, то нет.

Тогда используйте заголовок нужного окна.

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