Re: AHK: Замена "Window Spy"
У кого нибудь наблюдается такое.
Win10x64 AhkSpy, Hotkey, ClockGui
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы Назад 1 … 11 12 13 14 15 … 19 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
У кого нибудь наблюдается такое.
У меня не наблюдается, но у меня Win10 LTSC с отключенными шашечками.
Баг с получением IE страницы:
https://developer.mozilla.org/en-US/doc … e#Example2
Так работает:
Pwb:= ComObjCreate( "InternetExplorer.Application" )
Pwb.Navigate("https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#Example2")
Pwb.Visible:= True
While ( Pwb.Busy || Pwb.ReadyState != 4 )
Sleep 10
oIE := IEGet()
iFrame := ComObject( 9, ComObjQuery(oIE.document.parentWindow.frames["frame_Example2"],"{332C4427-26CB-11D0-B483-00C04FD90119}","{332C4427-26CB-11D0-B483-00C04FD90119}"), 1)
msgbox % iFrame[0].document.documentElement.OuterHtml
IEGet(name="") {
IfEqual, Name,, WinGetTitle, Name, ahk_class IEFrame ;// Get active window if no parameter
Name := (Name="New Tab - Windows Internet Explorer")? "about:Tabs":RegExReplace(Name, " - (Windows|Microsoft)? ?Internet Explorer$")
for wb in ComObjCreate("Shell.Application").Windows()
if wb.LocationName=Name and InStr(wb.FullName, "iexplore.exe")
return wb
}
А что за баг, у меня получает код, только вот есть проблема с его отображением в программе.
Так он у тебя рамкой обводит?
У меня обводит, и если после
oPubObj.IEElement := {Pos:[sX + x1, sY + y1, x2 - x1, y2 - y1], hwnd:hwnd}
вставить
ToolTip % HTML
то видно что код получает.
Нагляднее
ToolTip % pelt.OuterHtml
Да, значит проблема с отображением.
Да, почему то именно с этой страницей, а не даже с самим фреймом. По другим ссылкам с этого ресурса всё норм.
Возможно дело в:
https://www.w3schools.com/html/html_entities.asp
Ты там про что конкретное?
Все данные с заранее неизвестным содержим проходит через TransformHTML.
Если вставить
Topic := regexreplace(Topic, "[<>&""'¢£¥€©®]")
Info := regexreplace(Info, "[<>&""'¢£¥€©®]")
HTML := regexreplace(HTML, "[<>&""'¢£¥€©®]")
Text := regexreplace(Text, "[<>&""'¢£¥€©®]")
Frame := regexreplace(Frame, "[<>&""'¢£¥€©®]")
после
oPubObj.IEElement := {Pos:[sX + x1, sY + y1, x2 - x1, y2 - y1], hwnd:hwnd}
то отображает нормально.
Как то не очень нормально.
Тут мистика какая то.
Например если навести на ссылку слева "<applet>", будет получен код который далее встраивается в общий код интерфейса, и происходит глюк.
Но, если этот же код отправить в "своей" переменной, то всё нормально.
ToolTip % Clipboard := HTML
Topic =
(
<span class='box'><span class='line'><span class='hr'></span><span class='con'><span class='title' id='P__Outer_HTML' style='color: #189200' > ( Outer HTML ) </span><a></a><span class='button' unselectable='on' oncontextmenu='return false' onmouseleave='OnButtonOut (this)' onmousedown='OnButtonDown (this)' onmouseup='OnButtonUp (this)' onmouseover='OnButtonOver (this)' contenteditable='false' id='copy_button'> copy </span></span></span></span><br><pre contenteditable='true' class='lpre'><code>&lt;applet&gt;</code></pre>
)
Return Topic
А нет, ошибаюсь насчёт переменной.
Не знаю в чем там ошибка, но видно скобки воспринимаются как таги, так-как так показывает нормально:
Topic := regexreplace(Topic, "[<]")
Info := regexreplace(Info, "[<]")
HTML := regexreplace(HTML, "[<]")
Text := regexreplace(Text, "[<]")
Frame := regexreplace(Frame, "[<]")
Frame .= "<br>"
Ну а в чем тут ошибка?
У тебя просто где-то не все переведено в TransformHTM.
Если мы будем возвращать только topic, то будет глюк.
А так сработает:
Topic := TransformHTML(Topic)
Return Topic
Вроде нашёл свой косяк, не хватало TransformHTML в формировании Topic, Frame.
Topic := TransformHTML(Topic)
Return Topic
Нет, так он уберёт обёртку в PRE, и заголовки Title, URL.
Неудобно, что по двойному клику нету привязки заголовка к верху окна - в зависимости от наполнености заголовок прыгает.
3.92.
Вроде придумал по простому.
А нет, мигает.
После innerHTML требуется иногда много время на подгонку размеров скролла перед перемоткой.
Нашёл только это, но ничего не понял.
Надо как то выполнять код (или хотя бы узнать размер скролла и позицию якоря) до отображения нового содержимого, но после innerHTML.
В общем пока только так:
Full scroll with existing anchor - Увеличивает вертикальную зону прокрутки когда есть выделенный заголовок (якорь) для перемотки нижних заголовков вверх.
3.95 - размер скролла должен быть ровно по необходимому размеру, мельканий не заметил.
АП:
Хотя нет, иногда проскакивает мелькание.
Но стало определенно лучше.
Так себе, ты по ссылке из 1222 не смотрел?
Смотрел, но тоже мало, что понял.
А по какому алгоритму у тебя сейчас работает?
После innerHTML, то есть уже после отображения в окне новых данных, получаются координаты Body, clientHeight, и якоря, если необходимо увеличивается Body, и в конце снова получение позиции якоря, и перемотка.
То есть мелькает потому что сначала новое отображается в прежней позиции скролла, а потом перематывается.
Собственно так было и раньше, просто перемотка происходила сразу, точнее после получения позиции якоря, и мелькания не были заметны.
Выходит что получение позиций Body, clientHeight и якоря вносит иногда ощутимую задержку.
А нельзя рассчитать позицию якоря и перемотки до показа?
А как? До innerHTML есть только HTML код, после данные уже отображены.
А если body вставлять как hidden, потом делать расчеты и показывать.
Так вставка заменяет весь код, если body будет hidden, то появится белый лист.
А если через iframe?
Это как?
Не соображу, что это даёт?
#SingleInstance Force
#NoEnv
FixIE()
html =
( %
<iframe id="gameIFrame1" style="width: 200px; height: 200px; display: block; position: absolute;" src="http://www.guguncube.com">
</iframe>
<iframe id="gameIFrame2" style="width: 100px; height: 100px; top: 50px; left: 50px; display: block; position: absolute;" src="http://www.guguncube.com">
</iframe>
)
Gui, -DPIScale +ReSize
Gui, Margin, 0, 0
Gui, Add, ActiveX, w444 h444 voDoc, HTMLFile
oDoc.body.innerHTML := html
Gui, Show
return
FixIE() {
Key := "Software\Microsoft\Internet Explorer\MAIN"
. "\FeatureControl\FEATURE_BROWSER_EMULATION", ver := 8000
If A_IsCompiled
ExeName := A_ScriptName
Else
SplitPath, A_AhkPath, ExeName
RegRead, value, HKCU, %Key%, %ExeName%
If (value != ver)
RegWrite, REG_DWORD, HKCU, %Key%, %ExeName%, %ver%
}
Esc::
GuiEscape:
GuiClose:
IE := ""
ExitApp
Вначале вставляем body в iframe который либо спрятан, либо находится под нашим документом, производим расчеты, после чего вставляем в окно.
Это движку тогда надо будет два раза всё отрисовать.
Я запустил 2 ahkspy - тормозов не заметил.
У меня 1 уже нормально грузит.
А если body вставлять как hidden
Кстати почему то не получается.
#SingleInstance Force
#NoEnv
FixIE()
html =
( Ltrim C
<html>
<body>
<span id='text'></span>
</body>
<style>
#text {
border: 2px dotted;
border-color: red;
position: absolute;
width: 200`%;
top: 333px;
height: 222px;
}
body {
border: 5px dotted;
border-color: black;
font-size: 33px;
visibility: hidden;
}
</style>
</html>
)
Gui, -DPIScale +ReSize
Gui, Margin, 0, 0
Gui, Add, ActiveX, w444 h444 voDoc, HTMLFile
Gui, Show
Return
1::
oDoc.body.innerHTML := html
oDoc.getElementById("text").InnerText := A_TickCount
MsgBox
oDoc.body.style.visibility := "visible"
Return
FixIE() {
Key := "Software\Microsoft\Internet Explorer\MAIN"
. "\FeatureControl\FEATURE_BROWSER_EMULATION", ver := 8000
If A_IsCompiled
ExeName := A_ScriptName
Else
SplitPath, A_AhkPath, ExeName
RegRead, value, HKCU, %Key%, %ExeName%
If (value != ver)
RegWrite, REG_DWORD, HKCU, %Key%, %ExeName%, %ver%
}
Esc::
GuiEscape:
GuiClose:
ExitApp
Не совсем понимаю, чего ты хочешь добиться, но правильно вроде так:
#SingleInstance Force
#NoEnv
FixIE()
html =
(
<!doctype html>
<html>
<head>
<style>
#text {
border: 2px dotted;
border-color: red;
position: absolute;
width: 200`%;
top: 333px;
height: 222px;
}
body {
border: 5px dotted;
border-color: black;
font-size: 33px;
visibility: hidden;
}
</style>
</head>
<body>
<span id="text"></span>
</body>
</html>
)
Gui, -DPIScale +ReSize
Gui, Margin, 0, 0
Gui, Add, ActiveX, w444 h444 voDoc, HTMLFile
Gui, Show
Return
1::
oDoc.write(html)
oDoc.getElementById("text").InnerText := A_TickCount
MsgBox
oDoc.body.style.visibility := "visible"
Return
FixIE() {
Key := "Software\Microsoft\Internet Explorer\MAIN"
. "\FeatureControl\FEATURE_BROWSER_EMULATION", ver := 8000
If A_IsCompiled
ExeName := A_ScriptName
Else
SplitPath, A_AhkPath, ExeName
RegRead, value, HKCU, %Key%, %ExeName%
If (value != ver)
RegWrite, REG_DWORD, HKCU, %Key%, %ExeName%, %ver%
}
Esc::
GuiEscape:
GuiClose:
ExitApp
По идее innerHTML создаёт элементы заново уничтожая предыдущие, на Jquery видел примеры с евентом DOMNodeInserted, но из кода Jquery не смог его выудить.
teadrinker
write не подходит из соображений производительности, с ним вариантов много.
В своём коде ты пытаешься тегу BODY присвоить html всего документа, включая BODY, не удивительно, что не работает как надо.
Правильно, это если бы у тебя после write был бы close.
А ты что имеешь ввиду под правильно?
тегу BODY присвоить html всего документа, включая BODY
Посмотри
MsgBox % oDoc.body.outerHTML
после innerHTML, я там не вижу ошибок.
А ты что имеешь ввиду под правильно?
Как должен выглядеть html-код.
после innerHTML, я там не вижу ошибок.
Завтра уже посмотрю.
teadrinker, дело не в том, каким способом заполняется html, а в том какой версией он эмулируется.
У serzh82saratov эмуляции вообще не происходит, то есть IE-5.
У тебя после метода write эмуляция меняется с IE-5 на IE-8.
Это можно посмотреть через:
msgbox % oDoc.documentMode
Чтобы изначально было IE-8 надо после создания контрола вписать ему DOCTYPE.
То есть, после:
Gui, Add, ActiveX, w444 h444 voDoc, HTMLFile
вставить:
oDoc.Write("<!DOCTYPE html>")
oDoc.Close()
И, кстати, HtmlFile ActiveX нельзя эмулировать как IE-9 и IE-10 (во всяком случае у меня не получилось), только если через WebBrowser ActiveX контрол.
https://blogs.msdn.microsoft.com/patric … atibility/
вставить:
oDoc.Write("<!DOCTYPE html>")
Ну да, у меня оно в html. Я заметил разницу без него и с ним.
serzh82saratov, если не хочется заворачиваться с iframe попробуй, может, создать второй контрол HTMLFILE под первым и вначале вставлять информацию туда, после чего делать расчёты и вставлять уже в первый контрол - может заметных тормозов и не будет.
Забыл, в программе у меня тоже <!DOCTYPE html>. WebBrowser не подходит, я вспомнил мы с тобой это всё обсуждали когда полосы переделывали.
Насчёт второго HtmlFile я тоже думал, как вариант. Но всё равно это большие ресурсы для одной фичи, и это решает не все проблемы.
Хотелось бы докопаться до истины: innerHTML обновляет содержимое Body, пока он это делает старое содержимое отображается, это можно заметить если в блокноте открыть большой файл, обновление отображения происходит всегда моментально при смене кадров. Старые элементы в Body уничтожаются, и начинают создаваться новые с просчётом их позиций и размеров, надо как то запустить JScript в момент создания последнего элемента DOM (эвент DOMNodeInserted), и тогда может быть даже можно прокрутить скролл до отображения, что я выше обозначил проблемой.
Ап:
Может из css запустить как то jscript в момент применения стиля к последнему элементу.
Если ты видел примеры на Jquery, то почему не хочешь использовать Jquery в html?
Не, так не интересно, да и большой он.
надо как то запустить JScript в момент создания последнего элемента DOM (эвент DOMNodeInserted),
Через addeventlistener.
Только почему ты думаешь, что удастся прокрутить скролл до появления изображения?
А подробнее, какой эвент указывать...
<!DOCTYPE html>
<html>
<head>
<title>DOMNodeInserted event example</title>
<meta charset="utf-8" />
<meta name="AUTHOR" content="Dottoro">
<meta name="ROBOTS" content="noindex">
<script type="text/javascript">
function AddTextToContainer () {
var textNode = document.createTextNode ("My text");
if (textNode.addEventListener) {
textNode.addEventListener ('DOMNodeInserted', OnNodeInserted, false);
}
var container = document.getElementById ("container");
container.appendChild (textNode);
}
function OnNodeInserted (event) {
var textNode = event.target;
alert ("The text node '" + textNode.data + "' has been added to an element.");
}
</script>
</head>
<body>
<div>
<table cellpadding="0px" cellspacing="0px" style="width:100%">
<tr>
<td height="30" align="center" style="background-color:#ffffff; border-bottom:1px solid #000000; padding-bottom:5px;">
<span style="font-size:20px;">DOMNodeInserted event example</span>
</td>
</tr>
<tr height="230">
<td align="center" valign="middle" style="padding-top:15px; padding-bottom:10px;">
<div id="container" style="background-color:#e0d0a0; width:300px; height:100px;"></div>
<br /><br />
<button onclick="AddTextToContainer ();">Add a text node to the container!</button>
</td>
</tr>
<tr>
<td align="center" class="copyright">
<a target="_blank" rel="nofollow" href="http://www.dottoro.com/tou.php">© 2011 Dottoro.com. All rights reserved. Terms of use.</a>
</td>
</tr>
</table>
</div>
</body>
</html>
У меня такой ошибки нет. IE11.
А причём тут код HTML вне контекста АНК?
А как ты на ахк это запускаешь?
#SingleInstance Force
#NoEnv
FixIE()
FixIE() {
Key := "Software\Microsoft\Internet Explorer\MAIN"
. "\FeatureControl\FEATURE_BROWSER_EMULATION", ver := 8000
If A_IsCompiled
ExeName := A_ScriptName
Else
SplitPath, A_AhkPath, ExeName
RegRead, value, HKCU, %Key%, %ExeName%
If (value != ver)
RegWrite, REG_DWORD, HKCU, %Key%, %ExeName%, %ver%
}
html =
( Ltrim C %
<!DOCTYPE html>
<html>
<head>
<title>DOMNodeInserted event example</title>
<meta charset="utf-8" />
<meta name="AUTHOR" content="Dottoro">
<meta name="ROBOTS" content="noindex">
<script type="text/javascript">
function AddTextToContainer () {
var textNode = document.createTextNode ("My text");
if (textNode.addEventListener) {
textNode.addEventListener ('DOMNodeInserted', OnNodeInserted, false);
}
var container = document.getElementById ("container");
container.appendChild (textNode);
}
function OnNodeInserted (event) {
var textNode = event.target;
alert ("The text node '" + textNode.data + "' has been added to an element.");
}
</script>
</head>
<body>
<div>
<table cellpadding="0px" cellspacing="0px" style="width:100%">
<tr>
<td height="30" align="center" style="background-color:#ffffff; border-bottom:1px solid #000000; padding-bottom:5px;">
<span style="font-size:20px;">DOMNodeInserted event example</span>
</td>
</tr>
<tr height="230">
<td align="center" valign="middle" style="padding-top:15px; padding-bottom:10px;">
<div id="container" style="background-color:#e0d0a0; width:300px; height:100px;"></div>
<br /><br />
<button onclick="AddTextToContainer ();">Add a text node to the container!</button>
</td>
</tr>
<tr>
<td align="center" class="copyright">
<a target="_blank" rel="nofollow" href="http://www.dottoro.com/tou.php">© 2011 Dottoro.com. All rights reserved. Terms of use.</a>
</td>
</tr>
</table>
</div>
</body>
</html>
)
; html=%Clipboard%
Gui, -DPIScale +ReSize
Gui, Margin, 0, 0
Gui, Add, ActiveX, w444 h444 voDoc, HTMLFile
Gui, Show
oDoc.Write("<!DOCTYPE html>")
oDoc.Close()
oDoc.body.innerHTML := html
Return
#SingleInstance Force
#NoEnv
FixIE()
html =
(%
<!DOCTYPE html>
<html>
<head>
<title>DOMNodeInserted event example</title>
<meta charset="utf-8" />
<meta name="AUTHOR" content="Dottoro">
<meta name="ROBOTS" content="noindex">
<script type="text/javascript">
function AddTextToContainer () {
var textNode = document.createTextNode ("My text");
if (textNode.addEventListener) {
textNode.addEventListener ('DOMNodeInserted', OnNodeInserted, false);
}
var container = document.getElementById ("container");
container.appendChild (textNode);
}
function OnNodeInserted (event) {
var textNode = event.target;
alert ("The text node '" + textNode.data + "' has been added to an element.");
}
</script>
</head>
<body>
<div>
<table cellpadding="0px" cellspacing="0px" style="width:100%">
<tr>
<td height="30" align="center" style="background-color:#ffffff; border-bottom:1px solid #000000; padding-bottom:5px;">
<span style="font-size:20px;">DOMNodeInserted event example</span>
</td>
</tr>
<tr height="230">
<td align="center" valign="middle" style="padding-top:15px; padding-bottom:10px;">
<div id="container" style="background-color:#e0d0a0; width:300px; height:100px;"></div>
<br /><br />
<button onclick="AddTextToContainer ();">Add a text node to the container!</button>
</td>
</tr>
<tr>
<td align="center" class="copyright">
<a target="_blank" rel="nofollow" href="http://www.dottoro.com/tou.php">© 2011 Dottoro.com. All rights reserved. Terms of use.</a>
</td>
</tr>
</table>
</div>
</body>
</html>
)
Gui, -DPIScale +ReSize
Gui, Margin, 0, 0
Gui, Add, ActiveX, w444 h444 voDoc, HTMLFile
Gui, Show
oDoc.write(html)
Return
FixIE() {
Key := "Software\Microsoft\Internet Explorer\MAIN"
. "\FeatureControl\FEATURE_BROWSER_EMULATION", ver := 11001
If A_IsCompiled
ExeName := A_ScriptName
Else
SplitPath, A_AhkPath, ExeName
RegRead, value, HKCU, %Key%, %ExeName%
If (value != ver)
RegWrite, REG_DWORD, HKCU, %Key%, %ExeName%, %ver%
}
Esc::
GuiEscape:
GuiClose:
ExitApp
teadrinker
write не подходит из соображений производительности, с ним вариантов много.
И onclick не подходит, мы же не кликаем, мы загружаем.
Тебе всё-равно этот вариант не подойдет нужен режим совместимости IE>=9.
Но его же не получится добится в контексте этой темы?
Почему? Просто придётся переделывать html gui под IE11.
Предположим. Каков тогда будет пример кода для вызова события при применении innerHTML в момент создания последнего элемента?
Можно джаваскрит прописывать сразу через write, тогда ошибки не будет.
Пример.
В AhkSpy есть LoadJScript() там и джаваскрит и css.
#SingleInstance Force
#NoEnv
FixIE()
FixIE() {
Key := "Software\Microsoft\Internet Explorer\MAIN"
. "\FeatureControl\FEATURE_BROWSER_EMULATION", ver := 11001
If A_IsCompiled
ExeName := A_ScriptName
Else
SplitPath, A_AhkPath, ExeName
RegRead, value, HKCU, %Key%, %ExeName%
If (value != ver)
RegWrite, REG_DWORD, HKCU, %Key%, %ExeName%, %ver%
}
script =
(
<script type="text/javascript">
function AddTextToContainer () {
var textNode = document.createTextNode ("My text");
if (textNode.addEventListener) {
textNode.addEventListener ('DOMNodeInserted', OnNodeInserted, false);
}
var container = document.getElementById ("container");
container.appendChild (textNode);
}
function OnNodeInserted (event) {
var textNode = event.target;
alert ("The text node '" + textNode.data + "' has been added to an element.");
}
</script>
)
html =
( Ltrim C %
<!DOCTYPE html>
<html>
<head>
<title>DOMNodeInserted event example</title>
<meta charset="utf-8" />
<meta name="AUTHOR" content="Dottoro">
<meta name="ROBOTS" content="noindex">
</head>
<body>
<div>
<table cellpadding="0px" cellspacing="0px" style="width:100%">
<tr>
<td height="30" align="center" style="background-color:#ffffff; border-bottom:1px solid #000000; padding-bottom:5px;">
<span style="font-size:20px;">DOMNodeInserted event example</span>
</td>
</tr>
<tr height="230">
<td align="center" valign="middle" style="padding-top:15px; padding-bottom:10px;">
<div id="container" style="background-color:#e0d0a0; width:300px; height:100px;"></div>
<br /><br />
<button onclick="AddTextToContainer ();">Add a text node to the container!</button>
</td>
</tr>
<tr>
<td align="center" class="copyright">
<a target="_blank" rel="nofollow" href="http://www.dottoro.com/tou.php">© 2011 Dottoro.com. All rights reserved. Terms of use.</a>
</td>
</tr>
</table>
</div>
</body>
</html>
)
; html=%Clipboard%
Gui, -DPIScale +ReSize
Gui, Margin, 0, 0
Gui, Add, ActiveX, w444 h444 voDoc, HTMLFile
Gui, Show
oDoc.Write(script)
oDoc.Close()
oDoc.body.innerHTML := html
Return
Так тут снова onclick.
Я просто перевел код, который ты 1,243 привел в сообщении.
В общем это тоже ничего не даёт.
Это кажется хорошим решением.
#SingleInstance Force
#NoEnv
FixIE()
htmldiv1 =
( Join<br>
<span id='text'>
div1 1
div1 2
=====================
div1 3
</span>
)
htmldiv2 =
( Join<br>
<span id='text'>
div2 1
div2 2
div2 3
div2 4
div2 5
div2 6
div2 7
</span>
)
htmldiv3 =
(
<span id='text'>
div3
</span>
)
html =
( Ltrim C
<!DOCTYPE html>
<html>
<body>
<div id=d1></div>
<div id=d2></div>
<div id=d3></div>
</body>
<style>
#d1, #d2, #d3 {
background-color: #454545;
position: absolute;
width: 100`%;
height: 100`%;
top: 0px;
left: 0px;
visibility: hidden;
overflow: auto;
}
body {
font-size: 133px;
overflow: hidden;
}
</style>
</html>
)
Gui, -DPIScale +ReSize
Gui, Margin, 0, 0
Gui, Add, ActiveX, w444 h444 voDoc HWNDhDoc, HTMLFile
Gui, Show
oDoc.Write("<!DOCTYPE html><meta http-equiv=""X-UA-Compatible"" content=""IE=8"">")
oDoc.Close()
oDoc.body.innerHTML := html
new = 3
Return
1::
new := {1:2, 2:3, 3:1}[new]
old := {1:3, 2:1, 3:2}[new]
elnew := oDoc.getElementById("d" new)
elnew.innerHTML := htmldiv%new%
elnew.scrollTop := {1:233, 2:100, 3:0}[new]
elnew.style.zIndex := 1
elold := oDoc.getElementById("d" old)
elold.style.zIndex := 0
elnew.style.visibility := "visible"
elold.innerHTML := ""
Return
GuiSize:
If A_EventInfo = 1
Return
WinMove, ahk_id %hDoc%, , 0, 0, A_GuiWidth, A_GuiHeight
Return
FixIE() {
Key := "Software\Microsoft\Internet Explorer\MAIN"
. "\FeatureControl\FEATURE_BROWSER_EMULATION", ver := 8000
If A_IsCompiled
ExeName := A_ScriptName
Else
SplitPath, A_AhkPath, ExeName
RegRead, value, HKCU, %Key%, %ExeName%
If (value != ver)
RegWrite, REG_DWORD, HKCU, %Key%, %ExeName%, %ver%
}
Esc::
GuiEscape:
GuiClose:
ExitApp
3.95 - размер скролла должен быть ровно по необходимому размеру, мельканий не заметил.
АП:
Хотя нет, иногда проскакивает мелькание.
3.96 - мелькает.
Мелькания так и не удалось победить?
Удалось, в 1278. Внедрять некогда, я тогда начал, но закончу не знаю когда, до октября времени точно не будет.
Видимо только заметил, на десятке некоторые скрипты в том числе этот, грузят проц на 5 - 7 процентов в простое. Listlines не показывает выполнения чего либо. Антивирус avast, екзешник анк и папка с ним добавлены в исключения. Есть идеи?
У меня на десятке если навести курсор на своё окно, не грузит. Однако если навести на любое другое — начинает грузить. Но точно такое же поведение и на семёрке, только грузит чуть меньше.
А что значит в простое?
У тебя же он простаивает только в режиме Button, в котором потребляет 0%.
В других режимах у меня не более 3% с переодичностью опроса в 100ms.
В том то и дело, что в простое это когда он ничего не определяет, когда окно скрипта активно или на паузе. У меня включена опция Spot only Shift+Tab, и грузить начинает сразу при запуске потихоньку кушая память. Всю голову сломал каким образом можно определить что происходит.
Ну значит грузит html форма гуи.
У тебя же как-то отслеживается положение мыши при активном окне, даже если всё стоит на паузе.
Думаю дело не в этом, есть другой скрипт без гуи, но также грузит в простое, но это ладно.
Мышь отслеживается только по событиям хтмл. И на семёрке в простое всегда был ноль. И если ты думаешь дело в этом, то у тебя тоже грузит проц в простое?
Причины загрузки еще одного скрипта и этого могут быть разные.
У меня грузит только когда активировано окно, находящегося в простое скрипта, если по нему водить мышью.
Но это касается любого гуи, например калькулятора.
Только у калькулятора максимум 0.5, а у твоего скрипта до 2.5.
У меня грузит постоянно без движений мыши, и курсором не над окном.
Если у тебя была бы ситуация что не понятно из за чего скрипт грузит процессор, хотя по алгоритму он ничего в данный момент не выполняет, какими средствами дебага ты бы воспользовался?
Я бы просто последовательно отключал/включал части скрипта.
Проблема была в драйвере джойстика хвох, надо было его подключить заново в юсб. Там где были хоткеи на него в итоге грузили комп по самое не балуй.
Осталось понять почему у меня тормозит перемещение окна лупы.
Acc path показывается с запятыми типа - 4,28,7,1.
А надо бы с точками.
Сделал.
А почему точки? Я встречал где-то с запятыми.
Потому что библиотека, которую мы используем использует в качестве разделителя точку.
Loop Parse, ChildPath, ., %A_Space%
Кстати, то ли забыл, то ли не знал.
Указываю хэндл контрола или окна
Acc_Init()
Acc_Error(1)
Acc_Get("Object", "10.4.6", 0, "ahk_id " 0x300e9a)
Пишет
Cannot access ChildPath Item #1 -> 10
У меня путь не правильно определяет?
Должен правильно определять.
Можешь через accexplorer перепроверить (вручную пересчитать).
https://github.com/blackrosezy/gui-insp … orer32.exe
Спасибо за наводку.
В accexplorer путь "4.4.4.1.10.4.6". Работает в Acc_Get если указать окно, и "4.1.10.4.6" работает если указать контрол.
Я уже сталкивался что путь нельзя применить. В основном это в таких случаях WindowsForms10.Window.8.app.0.2d65957_r9_ad1.
И например в Notepad++ оба показывают 4.7 до первого язычок страницы в список табуляций, но так accName пусто.
oAcc := Acc_Get("Object", "4.7", 0, "ahk_id " SysTabControl325)
MsgBox, % !!oAcc "`n" ErrorLevel "`n" oAcc.accName(0)
Не совсем понимаю.
По идее путь должен определяться от родительского окна для данного хендла.
Можешь пример привести, где путь определяется от контрола.
Не знаю, например если длинный путь, и контрол можно найти быстрее, и далее от него искать.
От окна в Notepad++ accexplorer посчитал "4.9.4.7", но тоже Acc_Get не работает.
Алгоритм определения пути точно неправильный.
jethrow, конечно, много чего хорошего написал, но его неверный алгоритм в Accessible Info Viewer только всех сбивает с толку.
А обозначения типов объектов в AhkSpy.ahk (child-parent) меня лично тоже, так как все Parent являются Child для десктопа.
Я бы сделал, как в AccExplorer - 3 типа Container, Simple Element, Real Object.
ChildCount писал бы только у Container.
Добавил бы информацию о хендле окна от которого идет отсчет, его мы получаем в Acc_WindowFromObject(Parent := Acc_Parent(Acc).
Добавил бы во время просчета вместо старого значения пути надпись calculated... с анимированными точками, так как иногда подсчет занимает много времени, например в firefox.
И функции поправил бы на такие:
GetAccPath(Acc, child) {
path := Acc_GetPath(Acc)
if path !=
Return path
Else
Return "object not found"
}
Acc_GetPath(Acc) {
static DesktopHwnd := DllCall("User32.dll\GetDesktopWindow", "ptr")
While Acc_WindowFromObject(Parent := Acc_Parent(Acc)) != DesktopHwnd {
t1 := GetEnumIndex(Acc)
if (t1 = "")
break
t2 := t1 "." t2
Acc := Parent
}
return SubStr(t2, 1, -1)
}
Также информация о родительских окнах, типа "Parent child count" мне кажется лишней.