Проблема в том, что веб-сайт, который вы используете для форматирования кода, использует не <textarea>
, а этот редактор кода . Если вы посмотрите на JavaScript в нижней части исходного кода сайта, то увидите, что используются два из этих редакторов (editor
и outputeditor
). Их методы setValue
и getValue
могут использоваться для работы с их содержимым.
Чтобы сделать это в AHK, вы можете создать на странице элемент, содержимое которого будет содержать данные буфера обмена, а затем результат форматирования. pwb2.document.parentWindow.execScript
может использоваться для выполнения JavaScript для взаимодействия с редакторами с использованием данных из элемента буфера обмена.
^+b::
Clipboard := ""
Send {Ctrl Down}c{Ctrl Up}
ClipWait 1
if ErrorLevel {
MsgBox Java formatter error: Clipboard is empty
return
}
java := Clipboard
formatter := "https://www.tutorialspoint.com/online_java_formatter.htm"
pwb2 := ComObjCreate("InternetExplorer.Application")
pwb2.navigate(formatter)
while pwb2.busy
sleep 15
d := pwb2.document
ahkData := d.createElement("div")
ahkData.id := "ahkData"
ahkData.hidden := true
ahkData.innerText := java
d.body.appendChild(ahkData)
js =
(
var ahkData = document.getElementById('ahkData');
var marker = "//AHKDATA\n";
editor.setValue(marker + ahkData.innerText);
outputeditor.on("change", function(e) {
var value = outputeditor.getValue();
if (value.indexOf(marker) !== -1) {
ahkData.innerText = value.substring(marker.length);
ahkData.hidden = false;
}
});
document.getElementById("beautify").click();
)
d.parentWindow.execScript(js)
while ahkData.hidden
sleep 150
Clipboard := ahkData.innerText
Send ^v
pwb2.quit()
Return
Обратите внимание, что обработчик нажатия для кнопки beautify возвращается до обновления outputeditor
, поскольку он просто отправляет асинхронный POST-запрос с неформатированным кодом, поэтому я добавил обратный вызов в событие изменения outputeditor
, которое будет выполнено, когда Запрос завершает и обновляет редактор. marker
в этом обратном вызове служит для дифференциации событий изменения outputeditor
, которые происходят из-за кода, первоначально включенного в веб-сайт, от событий, которые происходят после форматирования нашего кода. Я предполагал, что вы не хотите видеть окно IE и удалили его видимость, но если вы действительно хотите, чтобы оно было видимым, вам нужно будет использовать WinWaitActive
или что-то подобное, чтобы дождаться закрытия окна IE и предыдущее (скопированное) окно снова станет активным перед отправкой Ctrl + v .
Поскольку форматирование действительно выполняется с помощью запроса POST, вместо этого можно использовать COM-объект WinHttp.WinHttpRequest.5.1
для репликации запроса. Однако IMO более громоздок (по крайней мере, в AHK), поскольку вам придется вручную кодировать код Java в буфере обмена.