shaun5
Как захватить недоступного текст (например, текст в окне командной строки , но я не имею что-то вроде Edit => опции Mark в командной строке) ...
у меня есть несколько примеров:
Получить несколько строк:
ptr:=A_PtrSize ? "Ptr":"UInt", suffix:=A_IsUnicode ? "W":"A", numReaded:=data:=""
INVALID_HANDLE_VALUE:=-1, STD_INPUT_HANDLE:=-10, STD_OUTPUT_HANDLE:=-11
VarSetCapacity(buffer, (size:=1030)*(A_IsUnicode ? 2:1))
Run, % "cmd.exe",,, procID
WinWaitActive, % "ahk_pid"procID
;~ Input, dummyVar, % "I", % "{vk20}" ; wait a space button to press
;~ WinGet, procID, PID, A
SendEvent, % "{Raw}TEST WRITE TO CONSOLE"
If !DllCall("AttachConsole", "UInt", procID, A_PtrSize ? "UInt":"")
{
WinClose, % "ahk_pid"procID
MsgBox, 262192, % A_LineNumber, % "Fail attach to console", % 2.5
ExitApp
}
If (hConsole:=DllCall("GetStdHandle", "Int", STD_OUTPUT_HANDLE
, A_PtrSize ? "Ptr":""))=INVALID_HANDLE_VALUE
{
DllCall("FreeConsole")
WinClose, % "ahk_pid"procID
MsgBox, 262192, % A_LineNumber, % "Fail retrive a handle of console", % 2.5
ExitApp
}
If !DllCall("ReadConsoleOutputCharacter"suffix, ptr, hConsole
, ptr, &buffer
, "UInt", size
, "UInt", 0 ; begin read from first row
, "UInt*", numReaded
, A_PtrSize ? "UInt":"")
{
DllCall("FreeConsole")
WinClose, % "ahk_pid"procID
MsgBox, 262192, % A_LineNumber, % "Fail get data from console", % 2.5
ExitApp
}
; line width is 320 pixels (property/layout/screen buffer size),
; here I cut the unnecessary white spaces in each row
Loop, % numReaded
Mod(A_Index, 320) ? data.=Chr(NumGet(buffer, (A_Index-1)*(A_IsUnicode ? 2:1)
, A_IsUnicode ? "UShort":"UChar"))
. "" : data:=RTrim(data)"`r"
MsgBox, 262208, % A_LineNumber, % RTrim(data) ;, % 2.5
DllCall("FreeConsole")
WinClose, % "ahk_pid"procID
Retrieve указанную строку:
ptr:=A_PtrSize ? "Ptr":"UInt", suffix:=A_IsUnicode ? "W":"A", numReaded:=""
INVALID_HANDLE_VALUE:=-1, STD_INPUT_HANDLE:=-10, STD_OUTPUT_HANDLE:=-11
VarSetCapacity(buffer, (size:=319)*(A_IsUnicode ? 2:1))
Run, % "cmd.exe",,, procID
WinWaitActive, % "ahk_pid"procID
;~ Input, dummyVar, % "I", % "{vk20}" ; wait a space button to press
;~ WinGet, procID, PID, A
SendEvent, % "{Raw}TEST WRITE TO CONSOLE"
If !DllCall("AttachConsole", "UInt", procID, A_PtrSize ? "UInt":"")
{
WinClose, % "ahk_pid"procID
MsgBox, 262192, % A_LineNumber, % "Fail attach to console", % 2.5
ExitApp
}
If (hConsole:=DllCall("GetStdHandle", "Int", STD_OUTPUT_HANDLE
, A_PtrSize ? "Ptr":""))=INVALID_HANDLE_VALUE
{
DllCall("FreeConsole")
WinClose, % "ahk_pid"procID
MsgBox, 262192, % A_LineNumber, % "Fail retrive a handle of console", % 2.5
ExitApp
}
If !DllCall("ReadConsoleOutputCharacter"suffix, ptr, hConsole
, ptr, &buffer
, "UInt", size
, "UInt", 3<<16 ; skip some rows
, "UInt*", numReaded
, A_PtrSize ? "UInt":"")
{
DllCall("FreeConsole")
WinClose, % "ahk_pid"procID
MsgBox, 262192, % A_LineNumber, % "Fail get data from console", % 2.5
ExitApp
}
; cut the unnecessary white spaces and show
MsgBox, 262208, % A_LineNumber, % RTrim(StrGet(&buffer, numReaded
, A_IsUnicode ? "UTF-16":"CP0"))
DllCall("FreeConsole")
WinClose, % "ahk_pid"procID
Можете ли вы быть более конкретным? Каков точный тип окна, из которого вы пытаетесь получить текст? Как вы открываете это окно в первую очередь? Не могли бы вы также предоставить соответствующий код Perl? – MCL
Кажется, что вы хотите, чтобы ваш сценарий AHK записывался в stdout. Этого можно достичь с помощью [FileAppend] (http://www.autohotkey.com/docs/commands/FileAppend.htm). Пример: 'FileAppend, это тест stdout, *' Поскольку я не очень разбираюсь в Perl, я не знаю, как и как вы можете записать процесс stdout. Кроме того, некоторые ERP-системы предлагают функциональность для экспорта контента в буфер обмена. В частности, SAP позволяет вам это делать в некоторых случаях. Если вы уже проанализировали окно ERP с помощью шпиона окна, я полагаю, что вы ничего не можете сделать. – MCL
FileAppend - это решение 1/2! Для чего это стоит, переменная '$ data' в моем коде Perl получает все stdout. Не SAP и нет такой удачи при экспорте данных из системы ERP. В настоящее время у меня есть решение с использованием плагина OCR (http://www.autohotkey.com/forum/viewtopic.php?t=74227) – shaun5