<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Carlet_%EC%9D%BD%EA%B8%B0_-uiawrappers%EC%9D%B4%EC%9A%A9</id>
	<title>Carlet 읽기 -uiawrappers이용 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Carlet_%EC%9D%BD%EA%B8%B0_-uiawrappers%EC%9D%B4%EC%9A%A9"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Carlet_%EC%9D%BD%EA%B8%B0_-uiawrappers%EC%9D%B4%EC%9A%A9&amp;action=history"/>
	<updated>2026-08-17T00:18:45Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=Carlet_%EC%9D%BD%EA%B8%B0_-uiawrappers%EC%9D%B4%EC%9A%A9&amp;diff=2494&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: == Carlet 읽기 -uiawrappers이용 == &lt;source lang=autoit&gt;  #include &lt;Misc.au3&gt;  HotKeySet(&quot;^+r&quot;, &quot;ReadCurrentCaretControl&quot;) HotKeySet(&quot;^+x&quot;, &quot;_Exit&quot;)  ConsoleWrite(&quot;텍스트 입력 위치에서 Ctrl+Shift+R을 눌러주세요.&quot; &amp; @CRLF) ConsoleWrite(&quot;종료: Ctrl+Shift+X&quot; &amp; @CRLF)  While 1     Sleep(100) WEnd  Func _Exit()     Exit EndFunc  Func ReadCurrentCaretControl()     Local $aInfo = _GetCurrentCaretInfo()      If @error Or Not IsArray($aInfo) Then         ConsoleWrite(...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Carlet_%EC%9D%BD%EA%B8%B0_-uiawrappers%EC%9D%B4%EC%9A%A9&amp;diff=2494&amp;oldid=prev"/>
		<updated>2026-07-22T16:42:02Z</updated>

		<summary type="html">&lt;p&gt;새 문서: == Carlet 읽기 -uiawrappers이용 == &amp;lt;source lang=autoit&amp;gt;  #include &amp;lt;Misc.au3&amp;gt;  HotKeySet(&amp;quot;^+r&amp;quot;, &amp;quot;ReadCurrentCaretControl&amp;quot;) HotKeySet(&amp;quot;^+x&amp;quot;, &amp;quot;_Exit&amp;quot;)  ConsoleWrite(&amp;quot;텍스트 입력 위치에서 Ctrl+Shift+R을 눌러주세요.&amp;quot; &amp;amp; @CRLF) ConsoleWrite(&amp;quot;종료: Ctrl+Shift+X&amp;quot; &amp;amp; @CRLF)  While 1     Sleep(100) WEnd  Func _Exit()     Exit EndFunc  Func ReadCurrentCaretControl()     Local $aInfo = _GetCurrentCaretInfo()      If @error Or Not IsArray($aInfo) Then         ConsoleWrite(...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Carlet 읽기 -uiawrappers이용 ==&lt;br /&gt;
&amp;lt;source lang=autoit&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Misc.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HotKeySet(&amp;quot;^+r&amp;quot;, &amp;quot;ReadCurrentCaretControl&amp;quot;)&lt;br /&gt;
HotKeySet(&amp;quot;^+x&amp;quot;, &amp;quot;_Exit&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
ConsoleWrite(&amp;quot;텍스트 입력 위치에서 Ctrl+Shift+R을 눌러주세요.&amp;quot; &amp;amp; @CRLF)&lt;br /&gt;
ConsoleWrite(&amp;quot;종료: Ctrl+Shift+X&amp;quot; &amp;amp; @CRLF)&lt;br /&gt;
&lt;br /&gt;
While 1&lt;br /&gt;
    Sleep(100)&lt;br /&gt;
WEnd&lt;br /&gt;
&lt;br /&gt;
Func _Exit()&lt;br /&gt;
    Exit&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func ReadCurrentCaretControl()&lt;br /&gt;
    Local $aInfo = _GetCurrentCaretInfo()&lt;br /&gt;
&lt;br /&gt;
    If @error Or Not IsArray($aInfo) Then&lt;br /&gt;
        ConsoleWrite(&amp;quot;[오류] 현재 포커스/캐럿 정보를 가져오지 못했습니다.&amp;quot; &amp;amp; @CRLF)&lt;br /&gt;
        Return&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    Local $hActive = $aInfo[0]&lt;br /&gt;
    Local $hFocus  = $aInfo[1]&lt;br /&gt;
    Local $hCaret  = $aInfo[2]&lt;br /&gt;
&lt;br /&gt;
    ; 캐럿 HWND가 있으면 우선 사용하고, 없으면 포커스 HWND 사용&lt;br /&gt;
    Local $hTarget = $hCaret&lt;br /&gt;
    If $hTarget = 0 Then $hTarget = $hFocus&lt;br /&gt;
    If $hTarget = 0 Then $hTarget = $hActive&lt;br /&gt;
&lt;br /&gt;
    If $hTarget = 0 Then&lt;br /&gt;
        ConsoleWrite(&amp;quot;[오류] 대상 컨트롤 핸들이 없습니다.&amp;quot; &amp;amp; @CRLF)&lt;br /&gt;
        Return&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    ; 대상이 속한 최상위 프로그램 창&lt;br /&gt;
    Local $hRoot = _GetRootWindow($hTarget)&lt;br /&gt;
    If $hRoot = 0 Then $hRoot = $hActive&lt;br /&gt;
&lt;br /&gt;
    Local $iPID = _GetWindowPID($hTarget)&lt;br /&gt;
    Local $sTitle = WinGetTitle($hRoot)&lt;br /&gt;
    Local $sClass = _GetWindowClassName($hTarget)&lt;br /&gt;
&lt;br /&gt;
    ConsoleWrite(@CRLF)&lt;br /&gt;
    ConsoleWrite(&amp;quot;========================================&amp;quot; &amp;amp; @CRLF)&lt;br /&gt;
    ConsoleWrite(&amp;quot;활성 창 HWND   : &amp;quot; &amp;amp; $hActive &amp;amp; @CRLF)&lt;br /&gt;
    ConsoleWrite(&amp;quot;포커스 HWND    : &amp;quot; &amp;amp; $hFocus &amp;amp; @CRLF)&lt;br /&gt;
    ConsoleWrite(&amp;quot;캐럿 HWND      : &amp;quot; &amp;amp; $hCaret &amp;amp; @CRLF)&lt;br /&gt;
    ConsoleWrite(&amp;quot;읽기 대상 HWND : &amp;quot; &amp;amp; $hTarget &amp;amp; @CRLF)&lt;br /&gt;
    ConsoleWrite(&amp;quot;최상위 HWND    : &amp;quot; &amp;amp; $hRoot &amp;amp; @CRLF)&lt;br /&gt;
    ConsoleWrite(&amp;quot;PID            : &amp;quot; &amp;amp; $iPID &amp;amp; @CRLF)&lt;br /&gt;
    ConsoleWrite(&amp;quot;창 제목        : &amp;quot; &amp;amp; $sTitle &amp;amp; @CRLF)&lt;br /&gt;
    ConsoleWrite(&amp;quot;컨트롤 클래스  : &amp;quot; &amp;amp; $sClass &amp;amp; @CRLF)&lt;br /&gt;
    ConsoleWrite(&amp;quot;캐럿 좌표      : X=&amp;quot; &amp;amp; $aInfo[3] &amp;amp; &amp;quot;, Y=&amp;quot; &amp;amp; $aInfo[4] &amp;amp; @CRLF)&lt;br /&gt;
&lt;br /&gt;
    ; 표준 Edit/RichEdit 컨트롤의 선택 텍스트 확인&lt;br /&gt;
    Local $sSelected = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    If $hRoot &amp;lt;&amp;gt; 0 Then&lt;br /&gt;
        $sSelected = ControlCommand( _&lt;br /&gt;
                $hRoot, _&lt;br /&gt;
                &amp;quot;&amp;quot;, _&lt;br /&gt;
                $hTarget, _&lt;br /&gt;
                &amp;quot;GetSelected&amp;quot;, _&lt;br /&gt;
                &amp;quot;&amp;quot;)&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    If $sSelected &amp;lt;&amp;gt; &amp;quot;&amp;quot; Then&lt;br /&gt;
        ConsoleWrite(&amp;quot;=== 선택된 텍스트 ===&amp;quot; &amp;amp; @CRLF)&lt;br /&gt;
        ConsoleWrite($sSelected &amp;amp; @CRLF)&lt;br /&gt;
&lt;br /&gt;
        ToolTip( _&lt;br /&gt;
                &amp;quot;선택된 텍스트: &amp;quot; &amp;amp; $sSelected, _&lt;br /&gt;
                MouseGetPos(0), _&lt;br /&gt;
                MouseGetPos(1) - 60)&lt;br /&gt;
&lt;br /&gt;
        Sleep(2000)&lt;br /&gt;
        ToolTip(&amp;quot;&amp;quot;)&lt;br /&gt;
        Return&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    ; 선택 영역이 없거나 GetSelected를 지원하지 않는 경우 전체 텍스트&lt;br /&gt;
    Local $sText = _GetWindowTextSafe($hTarget)&lt;br /&gt;
&lt;br /&gt;
    ; 대상 자식 컨트롤에서 실패하면 AutoIt ControlGetText도 시도&lt;br /&gt;
    If $sText = &amp;quot;&amp;quot; And $hRoot &amp;lt;&amp;gt; 0 Then&lt;br /&gt;
        $sText = ControlGetText($hRoot, &amp;quot;&amp;quot;, $hTarget)&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    If $sText &amp;lt;&amp;gt; &amp;quot;&amp;quot; Then&lt;br /&gt;
        ConsoleWrite(&amp;quot;=== 컨트롤 전체 텍스트 ===&amp;quot; &amp;amp; @CRLF)&lt;br /&gt;
        ConsoleWrite(StringLeft($sText, 1000) &amp;amp; @CRLF)&lt;br /&gt;
&lt;br /&gt;
        Local $sPreview = StringLeft($sText, 200)&lt;br /&gt;
        If StringLen($sText) &amp;gt; 200 Then $sPreview &amp;amp;= &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        ToolTip( _&lt;br /&gt;
                &amp;quot;현재 컨트롤 텍스트:&amp;quot; &amp;amp; @CRLF &amp;amp; $sPreview, _&lt;br /&gt;
                MouseGetPos(0), _&lt;br /&gt;
                MouseGetPos(1) - 60)&lt;br /&gt;
&lt;br /&gt;
        Sleep(2000)&lt;br /&gt;
        ToolTip(&amp;quot;&amp;quot;)&lt;br /&gt;
    Else&lt;br /&gt;
        ConsoleWrite(&amp;quot;[경고] 핸들은 확인했지만 텍스트를 읽을 수 없습니다.&amp;quot; &amp;amp; @CRLF)&lt;br /&gt;
        ConsoleWrite(&amp;quot;브라우저, Electron, Java, UWP 등의 컨트롤은 UIA가 필요할 수 있습니다.&amp;quot; &amp;amp; @CRLF)&lt;br /&gt;
&lt;br /&gt;
        ToolTip( _&lt;br /&gt;
                &amp;quot;대상 HWND: &amp;quot; &amp;amp; $hTarget &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
                &amp;quot;Class: &amp;quot; &amp;amp; $sClass &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
                &amp;quot;텍스트 읽기 실패&amp;quot;, _&lt;br /&gt;
                MouseGetPos(0), _&lt;br /&gt;
                MouseGetPos(1) - 60)&lt;br /&gt;
&lt;br /&gt;
        Sleep(2000)&lt;br /&gt;
        ToolTip(&amp;quot;&amp;quot;)&lt;br /&gt;
    EndIf&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
; ------------------------------------------------------------&lt;br /&gt;
; 현재 활성 스레드의 활성 창, 포커스 창, 캐럿 창과 좌표를 가져온다.&lt;br /&gt;
;&lt;br /&gt;
; 반환 배열:&lt;br /&gt;
; [0] 활성 창 HWND&lt;br /&gt;
; [1] 포커스 HWND&lt;br /&gt;
; [2] 캐럿 HWND&lt;br /&gt;
; [3] 캐럿 화면 X&lt;br /&gt;
; [4] 캐럿 화면 Y&lt;br /&gt;
; ------------------------------------------------------------&lt;br /&gt;
Func _GetCurrentCaretInfo()&lt;br /&gt;
    Local $tGUI = DllStructCreate( _&lt;br /&gt;
            &amp;quot;dword cbSize;&amp;quot; &amp;amp; _&lt;br /&gt;
            &amp;quot;dword flags;&amp;quot; &amp;amp; _&lt;br /&gt;
            &amp;quot;hwnd hwndActive;&amp;quot; &amp;amp; _&lt;br /&gt;
            &amp;quot;hwnd hwndFocus;&amp;quot; &amp;amp; _&lt;br /&gt;
            &amp;quot;hwnd hwndCapture;&amp;quot; &amp;amp; _&lt;br /&gt;
            &amp;quot;hwnd hwndMenuOwner;&amp;quot; &amp;amp; _&lt;br /&gt;
            &amp;quot;hwnd hwndMoveSize;&amp;quot; &amp;amp; _&lt;br /&gt;
            &amp;quot;hwnd hwndCaret;&amp;quot; &amp;amp; _&lt;br /&gt;
            &amp;quot;long rcLeft;&amp;quot; &amp;amp; _&lt;br /&gt;
            &amp;quot;long rcTop;&amp;quot; &amp;amp; _&lt;br /&gt;
            &amp;quot;long rcRight;&amp;quot; &amp;amp; _&lt;br /&gt;
            &amp;quot;long rcBottom&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    DllStructSetData($tGUI, &amp;quot;cbSize&amp;quot;, DllStructGetSize($tGUI))&lt;br /&gt;
&lt;br /&gt;
    ; dwThreadId=0이면 현재 전경 스레드의 GUI 정보를 얻는다.&lt;br /&gt;
    Local $aCall = DllCall( _&lt;br /&gt;
            &amp;quot;user32.dll&amp;quot;, _&lt;br /&gt;
            &amp;quot;bool&amp;quot;, &amp;quot;GetGUIThreadInfo&amp;quot;, _&lt;br /&gt;
            &amp;quot;dword&amp;quot;, 0, _&lt;br /&gt;
            &amp;quot;struct*&amp;quot;, $tGUI)&lt;br /&gt;
&lt;br /&gt;
    If @error Or Not IsArray($aCall) Or Not $aCall[0] Then&lt;br /&gt;
        Return SetError(1, 0, 0)&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    Local $hActive = DllStructGetData($tGUI, &amp;quot;hwndActive&amp;quot;)&lt;br /&gt;
    Local $hFocus  = DllStructGetData($tGUI, &amp;quot;hwndFocus&amp;quot;)&lt;br /&gt;
    Local $hCaret  = DllStructGetData($tGUI, &amp;quot;hwndCaret&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    Local $iX = DllStructGetData($tGUI, &amp;quot;rcLeft&amp;quot;)&lt;br /&gt;
    Local $iY = DllStructGetData($tGUI, &amp;quot;rcTop&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    ; 캐럿 좌표는 hwndCaret 기준의 클라이언트 좌표이므로 화면 좌표로 변환&lt;br /&gt;
    If $hCaret &amp;lt;&amp;gt; 0 Then&lt;br /&gt;
        Local $tPoint = DllStructCreate(&amp;quot;long X;long Y&amp;quot;)&lt;br /&gt;
        DllStructSetData($tPoint, &amp;quot;X&amp;quot;, $iX)&lt;br /&gt;
        DllStructSetData($tPoint, &amp;quot;Y&amp;quot;, $iY)&lt;br /&gt;
&lt;br /&gt;
        Local $aPoint = DllCall( _&lt;br /&gt;
                &amp;quot;user32.dll&amp;quot;, _&lt;br /&gt;
                &amp;quot;bool&amp;quot;, &amp;quot;ClientToScreen&amp;quot;, _&lt;br /&gt;
                &amp;quot;hwnd&amp;quot;, $hCaret, _&lt;br /&gt;
                &amp;quot;struct*&amp;quot;, $tPoint)&lt;br /&gt;
&lt;br /&gt;
        If Not @error And IsArray($aPoint) And $aPoint[0] Then&lt;br /&gt;
            $iX = DllStructGetData($tPoint, &amp;quot;X&amp;quot;)&lt;br /&gt;
            $iY = DllStructGetData($tPoint, &amp;quot;Y&amp;quot;)&lt;br /&gt;
        EndIf&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    Local $aResult[5]&lt;br /&gt;
    $aResult[0] = $hActive&lt;br /&gt;
    $aResult[1] = $hFocus&lt;br /&gt;
    $aResult[2] = $hCaret&lt;br /&gt;
    $aResult[3] = $iX&lt;br /&gt;
    $aResult[4] = $iY&lt;br /&gt;
&lt;br /&gt;
    Return $aResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
; 대상 HWND가 속한 최상위 창을 반환&lt;br /&gt;
Func _GetRootWindow($hWnd)&lt;br /&gt;
    If $hWnd = 0 Then Return 0&lt;br /&gt;
&lt;br /&gt;
    ; GA_ROOT = 2&lt;br /&gt;
    Local $aCall = DllCall( _&lt;br /&gt;
            &amp;quot;user32.dll&amp;quot;, _&lt;br /&gt;
            &amp;quot;hwnd&amp;quot;, &amp;quot;GetAncestor&amp;quot;, _&lt;br /&gt;
            &amp;quot;hwnd&amp;quot;, $hWnd, _&lt;br /&gt;
            &amp;quot;uint&amp;quot;, 2)&lt;br /&gt;
&lt;br /&gt;
    If @error Or Not IsArray($aCall) Then Return 0&lt;br /&gt;
    Return $aCall[0]&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
; HWND의 프로세스 ID 반환&lt;br /&gt;
Func _GetWindowPID($hWnd)&lt;br /&gt;
    If $hWnd = 0 Then Return 0&lt;br /&gt;
&lt;br /&gt;
    Local $aCall = DllCall( _&lt;br /&gt;
            &amp;quot;user32.dll&amp;quot;, _&lt;br /&gt;
            &amp;quot;dword&amp;quot;, &amp;quot;GetWindowThreadProcessId&amp;quot;, _&lt;br /&gt;
            &amp;quot;hwnd&amp;quot;, $hWnd, _&lt;br /&gt;
            &amp;quot;dword*&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
    If @error Or Not IsArray($aCall) Then Return 0&lt;br /&gt;
    Return $aCall[2]&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
; HWND의 실제 클래스명 반환&lt;br /&gt;
Func _GetWindowClassName($hWnd)&lt;br /&gt;
    If $hWnd = 0 Then Return &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    Local $tBuffer = DllStructCreate(&amp;quot;wchar[512]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    Local $aCall = DllCall( _&lt;br /&gt;
            &amp;quot;user32.dll&amp;quot;, _&lt;br /&gt;
            &amp;quot;int&amp;quot;, &amp;quot;GetClassNameW&amp;quot;, _&lt;br /&gt;
            &amp;quot;hwnd&amp;quot;, $hWnd, _&lt;br /&gt;
            &amp;quot;struct*&amp;quot;, $tBuffer, _&lt;br /&gt;
            &amp;quot;int&amp;quot;, 512)&lt;br /&gt;
&lt;br /&gt;
    If @error Or Not IsArray($aCall) Or $aCall[0] = 0 Then Return &amp;quot;&amp;quot;&lt;br /&gt;
    Return DllStructGetData($tBuffer, 1)&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
; WM_GETTEXT를 SendMessageTimeout으로 호출한다.&lt;br /&gt;
; 응답하지 않는 프로그램 때문에 스크립트가 멈추는 것을 방지한다.&lt;br /&gt;
Func _GetWindowTextSafe($hWnd)&lt;br /&gt;
    If $hWnd = 0 Then Return SetError(1, 0, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    Local Const $WM_GETTEXT = 0x000D&lt;br /&gt;
    Local Const $WM_GETTEXTLENGTH = 0x000E&lt;br /&gt;
    Local Const $SMTO_ABORTIFHUNG = 0x0002&lt;br /&gt;
&lt;br /&gt;
    ; 텍스트 길이 확인&lt;br /&gt;
    Local $aLength = DllCall( _&lt;br /&gt;
            &amp;quot;user32.dll&amp;quot;, _&lt;br /&gt;
            &amp;quot;lresult&amp;quot;, &amp;quot;SendMessageTimeoutW&amp;quot;, _&lt;br /&gt;
            &amp;quot;hwnd&amp;quot;, $hWnd, _&lt;br /&gt;
            &amp;quot;uint&amp;quot;, $WM_GETTEXTLENGTH, _&lt;br /&gt;
            &amp;quot;wparam&amp;quot;, 0, _&lt;br /&gt;
            &amp;quot;lparam&amp;quot;, 0, _&lt;br /&gt;
            &amp;quot;uint&amp;quot;, $SMTO_ABORTIFHUNG, _&lt;br /&gt;
            &amp;quot;uint&amp;quot;, 1000, _&lt;br /&gt;
            &amp;quot;ulong_ptr*&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
    If @error Or Not IsArray($aLength) Or Not $aLength[0] Then&lt;br /&gt;
        Return SetError(2, 0, &amp;quot;&amp;quot;)&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    ; DllCall 매개변수: 0=반환값,1=hwnd,2=msg,3=wparam,4=lparam,5=flags,6=timeout,7=result&lt;br /&gt;
    Local $iLength = $aLength[7]&lt;br /&gt;
&lt;br /&gt;
    If $iLength &amp;lt;= 0 Then Return &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    ; 과도하게 큰 버퍼 할당 방지&lt;br /&gt;
    If $iLength &amp;gt; 1000000 Then $iLength = 1000000&lt;br /&gt;
&lt;br /&gt;
    Local $tBuffer = DllStructCreate(&amp;quot;wchar[&amp;quot; &amp;amp; ($iLength + 1) &amp;amp; &amp;quot;]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    Local $aText = DllCall( _&lt;br /&gt;
            &amp;quot;user32.dll&amp;quot;, _&lt;br /&gt;
            &amp;quot;lresult&amp;quot;, &amp;quot;SendMessageTimeoutW&amp;quot;, _&lt;br /&gt;
            &amp;quot;hwnd&amp;quot;, $hWnd, _&lt;br /&gt;
            &amp;quot;uint&amp;quot;, $WM_GETTEXT, _&lt;br /&gt;
            &amp;quot;wparam&amp;quot;, $iLength + 1, _&lt;br /&gt;
            &amp;quot;lparam&amp;quot;, DllStructGetPtr($tBuffer), _&lt;br /&gt;
            &amp;quot;uint&amp;quot;, $SMTO_ABORTIFHUNG, _&lt;br /&gt;
            &amp;quot;uint&amp;quot;, 1000, _&lt;br /&gt;
            &amp;quot;ulong_ptr*&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
    If @error Or Not IsArray($aText) Or Not $aText[0] Then&lt;br /&gt;
        Return SetError(3, 0, &amp;quot;&amp;quot;)&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    Return DllStructGetData($tBuffer, 1)&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>