<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: HWND контекстного меню.]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=11746&amp;type=atom" />
	<updated>2016-06-22T18:47:16Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=11746</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: HWND контекстного меню.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=105465#p105465" />
			<content type="html"><![CDATA[<p>Да, как раз подобрался к этому моменту.<br /></p><div class="codebox"><pre><code>
CoordMode, Mouse, Screen
SetTitleMatchMode, 2
; ###### FUNC #######
pLclk(new_x, new_y, varControl) {
	WinGetPos, hw_x, hw_y,,, ahk_id %varControl%						; Получить координаты контрола
	l_param := % (new_x - hw_x) + ((new_y - hw_y) * 65536)				; Вычесть из положения клика позицию контрола, получив координаты внутри него
	PostMessage, 0x0201, 0x0001, %l_param%, , ahk_id %varControl%		; Нажать
	sleep 50
	PostMessage, 0x0202, 0x0000, %l_param%, , ahk_id %varControl%		; Отпустить
}
pRclck(new_x, new_y, varControl) {
	WinGetPos, hw_x, hw_y,,, ahk_id %varControl%
	l_param := % (new_x - hw_x) + ((new_y - hw_y) * 65536)
	PostMessage, 0x0204, 0x0002, %l_param%, , ahk_id %varControl%
	sleep 50
	PostMessage, 0x0205, 0x0000, %l_param%, , ahk_id %varControl%
}
Hget(x, y) {
	return % DllCall(&quot;WindowFromPoint&quot;, &quot;int64&quot;, x &amp; 0x00000000FFFFFFFF | y&lt;&lt;32)
}
; ##### EXAMPLE #####
; Сообщает контролу ЛКМ при нажатии Q
sc10::
	MouseGetPos, myX, myY
	pLclck(myX, myY, Hget(myX, myY))
return

; Сообщает контролу ПКМ при нажатии W
sc11::
	MouseGetPos, myX, myY
	pRclck(myX, myY, Hget(myX, myY))
return
</code></pre></div><p>Ещё много раз моя благодарность!</p><p>** Подправил некоторую избыточность кода.</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2016-06-22T18:47:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=105465#p105465</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: HWND контекстного меню.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=105447#p105447" />
			<content type="html"><![CDATA[<p>Читай справку по CoordMode.</p>]]></content>
			<author>
				<name><![CDATA[Alectric]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26027</uri>
			</author>
			<updated>2016-06-22T07:16:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=105447#p105447</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: HWND контекстного меню.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=105437#p105437" />
			<content type="html"><![CDATA[<p>Вот оно! Вот то волшебство, которое я ищу!<br /></p><div class="quotebox"><cite>Alectric пишет:</cite><blockquote><p>Может это поможет:<br /></p><div class="codebox"><pre><code>mx=100
my=100
WinID:=DllCall(&quot;WindowFromPoint&quot;, &quot;int64&quot;, mX &amp; 0x00000000FFFFFFFF | mY&lt;&lt;32)
</code></pre></div></blockquote></div><p>При том, работает, даже без перевода значения в HEX. Так и должно быть? И ещё момент - клик происходит в нужные координаты контекстного меню лишь в том случае, если его окно в позиции х=0 у=0. Будто меню вызывается относительно рабочего стола, в то время как все ПКМ и ЛКМ внутри окна проходят как и требуется, независимо от его положения. Но это уже детали.</p><p>За доброту, спасибо! <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2016-06-21T19:52:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=105437#p105437</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: HWND контекстного меню.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=105428#p105428" />
			<content type="html"><![CDATA[<p><strong>KusochekDobra</strong>, короче говоря... Есть некая программа, в которой Вы тем или иным образом вызываете контекстное меню.<br />Под &quot;географически корректно жмякнуть&quot; надо понимать желание послать щелчок ЛКМ / ПКМ по пункту&nbsp; контекстного меню, отталкиваясь от его координат.<br />Правильно?<br />Вы знаете, что существует также возможность выбрать пункт меню, используя клавиши-стрелки и Enter?<br />Ещё вариант - находить пункт меню с помощью конманды <em>ImageSearch</em>.<br />И ещё, контекстное меню - это точно элемент управления (контрол по-нашему), а не самостоятельное окно?</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2016-06-21T16:36:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=105428#p105428</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: HWND контекстного меню.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=105425#p105425" />
			<content type="html"><![CDATA[<p>Может это поможет:<br /></p><div class="codebox"><pre><code>mx=100
my=100
WinID:=DllCall(&quot;WindowFromPoint&quot;, &quot;int64&quot;, mX &amp; 0x00000000FFFFFFFF | mY&lt;&lt;32)
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Alectric]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26027</uri>
			</author>
			<updated>2016-06-21T16:02:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=105425#p105425</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: HWND контекстного меню.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=105422#p105422" />
			<content type="html"><![CDATA[<p>Ну как же. Для того, чтобы сообщить браузеру через контекстное меню вызываемое ПКМ, что я хочу сделать с объектом описанным на его странице, я должен в этом меню выбрать соответствующий пункт. Чтобы это было реализуемо, необходимо каждый раз при ПКМ получать его хендл, ибо это всякий раз окно с новым HWND. Хендл самого окна, как и его контрола, в котором протекает рендер страницы со всеми операциями я получаю так:<br /></p><div class="codebox"><pre><code>
WinGet, winVar, ID, Yandex
WinGet, ctrlVar, ControlListHwnd, Yandex
postRclick(100, 100, winVar, ctrlVar)
</code></pre></div><p>Сообщая вместе с этим и ПКМ в интересующем меня месте страницы. Но как мне получить хендл контекстного меню, вызываемого ПКМ? Кликните например, по любой ссылке правой кнопкой мыши, там например пункт меню &quot;Сохранить ссылку как...&quot;. Чтобы теперь сообщить в это меню функцией postLclick() что я кликаю в тот самый пункт, мне нужно сообщить ей последний параметр, в котором содержится HWND контекстного меню. Как мне его получить не перемещая курсор в область этого меню?</p><p>Возможности AHK потрясают конечно, после кажущегося теперь примитивным софта, которым я пользовался раньше и чтобы тут не оказалось возможности жмякнуть в контекстное меню не прибегая для этого к помощи указателя - НЕ ВЕРЮ!!! <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2016-06-21T15:09:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=105422#p105422</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: HWND контекстного меню.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=105421#p105421" />
			<content type="html"><![CDATA[<p>Задача не понята.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2016-06-21T14:20:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=105421#p105421</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: HWND контекстного меню.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=105420#p105420" />
			<content type="html"><![CDATA[<p>MouseGetPos - для этого тягает курсор по экрану, получая искомый хендл фокусом на нём. Если я ошибаюсь, опишите пожалуйста пример записи MouseGetPos, где этого не происходит. То о чём я упоминал выглядело примерно так:<br /></p><div class="codebox"><pre><code>
myHwnd := GetHwnd(100, 100)
</code></pre></div><p>Помещая в переменную хендл объекта в указанных координатах. С MouseGetPos это будет выглядеть примерно так:<br /></p><div class="codebox"><pre><code>
Send {Click, 100, 100, 0}
MouseGetPos,,, myHwnd,,2
</code></pre></div><p>Суть вопроса и состоит в том, чтобы не прибегать к манипуляциям с указателем. В первом примере вот приведён способ получения контрола принадлежащего основному окну посредством WinGet, а окно контекстного меню наверняка так же должно принадлежать этому окну или его контролу, относительно которого оно вызвано. Вероятно, что если то так, то нет даже необходимости искать его хендл по координатам. Но как это сделать иным способом, я бы очень хотел узнать из компетентных источников вашей мудрости, ибо вчерашний день поисков не увенчался успехом.</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2016-06-21T13:05:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=105420#p105420</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: HWND контекстного меню.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=105419#p105419" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>KusochekDobra пишет:</cite><blockquote><p>В прошлом софте, которым пользовался была функция, позволяющая получить хендл объекта имея лишь его координаты, ищу аналогию.</p></blockquote></div><p>Команда <em>MouseGetPos</em>.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2016-06-21T11:50:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=105419#p105419</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: HWND контекстного меню.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=105417#p105417" />
			<content type="html"><![CDATA[<p>Добра всем.</p><p>Чтобы географически корректно жмякнуть ПКМ или ЛКМ в поле(контрол) окна посредством PostMessage(), нужно знать хендл поля(контрола) и хендл окна, которому оно/он принадлежит, чтобы в последствии высчитать разницу координат, вычитаемую из величин координат клика.<br /></p><div class="codebox"><pre><code>
postLclick(new_x, new_y, varWin, varControl ) {
	WinGetPos, hw_x, hw_y, hw_w, hw_h, ahk_id %varControl%
	WinGetPos, hwWin_x, hwWin_y, hwWin_w, hwWin_h, ahk_id %varWin%
	l_param := % ((new_x - (hw_x - hwWin_x)) + ((new_y - (hw_y - hwWin_y)) * 65536))
	PostMessage, 0x0201, 0x0001, %l_param%, , ahk_id %varControl%
	sleep 50
	PostMessage, 0x0202, 0x0000, %l_param%, , ahk_id %varControl%
}
postRclick(new_x, new_y, varWin, varControl ) {
	WinGetPos, hw_x, hw_y, hw_w, hw_h, ahk_id %varControl%
	WinGetPos, hwWin_x, hwWin_y, hwWin_w, hwWin_h, ahk_id %varWin%
	l_param := % ((new_x - (hw_x - hwWin_x)) + ((new_y - (hw_y - hwWin_y)) * 65536))
	PostMessage, 0x0204, 0x0002, %l_param%, , ahk_id %varControl%
	sleep 50
	PostMessage, 0x0205, 0x0000, %l_param%, , ahk_id %varControl%
}
</code></pre></div><p>Например, в браузере, с этим можно легко справиться так:<br /></p><div class="codebox"><pre><code>
WinGet, winVar, ID, Yandex
WinGet, ctrlVar, ControlListHwnd, Yandex
postRclick(100, 100, winVar, ctrlVar)
</code></pre></div><p>Например, отправляя координаты найденных объектов страницы при графическом анализе. Всё достаточно просто, если в контроле окна при ПКМ по объекту генерируется контекстное меню скриптами самой страницы, потому как клик так и будет происходить в контрол текущего окна. Но если вызывать контекстное меню браузера при ПКМ, то генерируемое окно уже является новым контролом. Подскажите пожалуйста как получить хендл этого меню, не прибегая к перемещению указателя мыши?</p><p>В прошлом софте, которым пользовался была функция, позволяющая получить хендл объекта имея лишь его координаты, ищу аналогию.</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2016-06-21T11:00:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=105417#p105417</id>
		</entry>
</feed>
