Что нового

Запоминание координат мышки при нажатии на определенную клавишу.

SurikenTSD

Новичок
Сообщения
67
Репутация
1
Версия AutoIt: 3.

Описание: Помогите, пожалуйста, советом: необходимо при нажатии определенной клавиши, к примеру бекспейс и\или пробел, передать координаты мышки в переменную (одну и ту же), а при нажатии на эскейп прервать цикл.. Не знаю, с чего начать, задачка плевая, но отсутствие опыта и набитой логики мышления вводят меня в ступор. Заранее благодарю.

Примечания:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
HotKeySet("{SPACE}", "SaveCoords")
HotKeySet("^{PAUSE}", "_Exit")
Global $MousePos[2]

While 1
	Sleep(10)
	ToolTip("X:"&$MousePos[0]&" Y:"&$MousePos[1])
WEnd
Func SaveCoords()
	$MousePos = MouseGetPos()
EndFunc

Func _Exit()
	Exit
EndFunc
 
Автор
S

SurikenTSD

Новичок
Сообщения
67
Репутация
1
Спасибо, но тут же еще один вопрос - сидел, ломал голову, но сам не смог придумать решения: exit полностью завершает работу скрипта, а я скрипт делаю сразу с gui, как вместо выхода вернуться "на исходную" в ожидание нажатия пользователем той или иной кнопки в gui?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
#include <Misc.au3>

$dll = DllOpen("user32.dll")

HotKeySet("{SPACE}", "SaveCoords")
HotKeySet("^{PAUSE}", "_Exit")
Global $MousePos[2]

While 1
	Sleep(10)
	ToolTip("X:"&$MousePos[0]&" Y: "&$MousePos[1])
WEnd
Func SaveCoords()
	If _IsPressed("20", $dll) Then $MousePos = MouseGetPos()
EndFunc

Func _Exit()
	Exit
EndFunc
 
Автор
S

SurikenTSD

Новичок
Сообщения
67
Репутация
1
Вы меня не правильно поняли.

Код:
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $GGInfo
			GetWinSize()
			GetStarMenuPos()
		Case $S1BuffList
			$S = 1
			GetBuffSpots()
		Case $S2BuffList
			$S = 2
			GetBuffSpots()
		Case $S3BuffList
			$S = 3
			GetBuffSpots()
		Case $S4BuffList
			$S = 4
			GetBuffSpots()
		Case $S5BuffList
			$S = 5
			GetBuffSpots()
		Case $S6BuffList
			$S = 6
			GetBuffSpots()
		Case $S7BuffList
			$S = 7
			GetBuffSpots()
		Case $S8BuffList
			$S = 8
			GetBuffSpots()
		Case $S9BuffList
			$S = 9
			GetBuffSpots()
	EndSwitch
WEnd


Вот тело моей проги, откуда идет реакция на нажатие тех или иных кнопок. Нажав на кнопку $S2BuffList я перехожу к функции:

Код:
Func GetBuffSpots()
	$cnt = 1
	WinActivate($GameWindowName)
	If WinActivate ($GameWindowName) Then
		IniDelete($BuffListPath, "Sector "&$S)
		HotKeySet("{SPACE}", "BuildingsCoordsToIni")
		HotKeySet("{ESC}", "BackToGUI")
		While 1
			Sleep(10)
			ToolTip("Нажмите SPACE для записи координат здания." & @CRLF & "Нажмите ESC для завершения.")
		WEnd
	Else
		MsgBox(0, "Ошибка!", $gwnf)
		Exit
	EndIf
EndFunc

Func BuildingsCoordsToIni()
	Local $MousePos[2]
    $MousePos = MouseGetPos()
	IniWrite($BuffListPath, "Sector "&$S, "Building #"&$cnt& " x", $MousePos[0])
	IniWrite($BuffListPath, "Sector "&$S, "Building #"&$cnt& " y", $MousePos[1])
	$cnt = $cnt + 1
EndFunc


И загвоздка заключается в том, что если при нажатии на escape будет загружаться функция

Код:
Func _Exit()
    Exit
EndFunc


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

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Дак а зачем тебе жать на эскейп? В данный момент функция определения координат мыши работает только когда нажат пробел. Сейчас ты в начале функции: GetBuffSpots() биндишь кнопку на функцию определения, и сохранения координат. Просто в конце этой функции, когда она отработает, сними бинд с кнопки и всё, чтобы программа больше на неё не реагировала пока не будет снова вызвана функция GetBuffSpots()
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Вот где-то так

Код:
Global $GetBuffSpots_flag

Func GetBuffSpots()
    $cnt = 1
    WinActivate($GameWindowName)
    If WinActivate ($GameWindowName) Then
        IniDelete($BuffListPath, "Sector "&$S)
        HotKeySet("{SPACE}", "BuildingsCoordsToIni")
        HotKeySet("{ESC}", "BackToGUI")
		$GetBuffSpots_flag = True
        While $GetBuffSpots_flag
            Sleep(10)
            ToolTip("Нажмите SPACE для записи координат здания." & @CRLF & "Нажмите ESC для завершения.")
        WEnd
    Else
        MsgBox(0, "Ошибка!", $gwnf)
        Exit
    EndIf
EndFunc

Func BackToGUI()
   $GetBuffSpots_flag = False
EndFunc
 
Верх