1

Тема: AHK: Изменение курсора при наведении на картинку

Здравствуйте, у меня загружается картинка (.png) в мой интерфейс. Я добавил функцию, что при нажатии на эту картинку нас перенаправляет на определённый URL. Код написанный мною прекрасно справляется с данной задачей (т.е. загружает картинку, а также при нажатии отправляет нас на страницу в браузере), однако не каждый пользователь поймёт, что картинка кликабельна. Я решил показать пользователю, что картинка кликабельна, изменением курсора (допустим стандартную стрелочку изменить на похожую по стилю ручку). Придумал я, так придумал, а как реализовать вообще идей нет (пробовал посмотреть в ahk-wiki, но кроме как PixelSearch не нашёл, но даже вариант с PixelSearch не подойдёт).

2

Re: AHK: Изменение курсора при наведении на картинку

Ну так есть же встроенные переменные типа:

A_Cursor

3 (изменено: yakmuve, 2022-04-13 10:59:42)

Re: AHK: Изменение курсора при наведении на картинку

svoboden, я знаю, но мне нужно чтобы курсор изменялся при наведении на картинку, а не при нажатии и т.д. Я либо вас не понял, либо вы не поняли, что мне нужно.

4

Re: AHK: Изменение курсора при наведении на картинку

SS_NOTIFY := 0x100
Gui, Add, Text, w200 h150 Border hwndhPic %SS_NOTIFY%, My picture here
Gui, Show, 
OnMessage(0x20, Func("WM_SETCURSOR").Bind(hPic))
Return

GuiClose:
   ExitApp

WM_SETCURSOR(hPic, wp) {
   static hCursor, IDC_HAND := 32649
   ( !hCursor && hCursor := LoadCursor(IDC_HAND) )
   if (wp = hPic)
      Return DllCall("SetCursor", "Ptr", hCursor)
}

LoadCursor(cursorId) {
   static IMAGE_CURSOR := 2, flags := (LR_DEFAULTSIZE := 0x40) | (LR_SHARED := 0x8000)
   Return DllCall( "LoadImage", "Ptr", 0, "UInt", cursorId, "UInt", IMAGE_CURSOR
                              , "Int", 0, "Int", 0, "UInt", flags, "Ptr" )
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Изменение курсора при наведении на картинку

teadrinker, а можно сделать более универсальный метод, дабы не привязывать каждый раз hwnd определенного элемента?

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

6

Re: AHK: Изменение курсора при наведении на картинку

Кхм.. Вроде понял, но остается вопрос, зачем нужен "0x100"?

global hBtn1, hBtn2, hSlider

gui, margin, 15, 15

gui, add, button, hwndhBtn1, Кнопка с курсором
gui, add, button, hwndhBtn2, Кнопка с курсором
gui, add, button,, Кнопка без курсора
gui, add, Text,, Слайдер с курсором:
gui, add, slider, range0-5 TickInterval1 hwndhSlider, 3
gui, add, Text,, Слайдер Без курсора:
gui, add, slider, range0-5 TickInterval1, 3

gui, show
OnMessage(0x20, "WM_SETCURSOR")
Return

GuiClose:
	ExitApp

WM_SETCURSOR(wParam)
{
	static hCursor, IDC_HAND := 32649
	( !hCursor && hCursor := LoadCursor(IDC_HAND) )

	switch (wParam)
	{
		case hBtn1, hBtn2, hSlider:
		{
			return DllCall("SetCursor", "Ptr", hCursor)
		}
	}
}

LoadCursor(cursorId)
{
	static IMAGE_CURSOR := 2, flags := (LR_DEFAULTSIZE := 0x40) | (LR_SHARED := 0x8000)
	return DllCall( "LoadImage", "Ptr", 0, "UInt", cursorId, "UInt", IMAGE_CURSOR, "Int", 0, "Int", 0, "UInt", flags, "Ptr" )
}
Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

7

Re: AHK: Изменение курсора при наведении на картинку

Это только для контролов Static (Text или Picture), без этого стиля хендл контрола не будет передаваться в wParam.

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