Viktor1703
AutoIT Гуру
- Сообщения
- 1,535
- Репутация
- 413
Решил посмотреть классы элементов консольного окна и заметил что в этом окне нет ни одного элемента, с помощью AutoIt Window Info навёл на заголовок окна, мне показало класс - ConsoleWindowClass, потом навёл на чёрный регион окна - думал что это Edit, оказалось нет, тоже ConsoleWindowClass, как тогда пишется текст в этом окне, вообще хочу полностью повторить консольное окно простым AutoIt'овским, говорить что можно скомпилитровать скрипт как Console - мне не надо, я это знаю
Этот вариант я попытался сделать с применением Edit
А вот этот полностью повторяет консоль, но не пойму как писать текст, как поставить каретку? :wacko:
Этот вариант я попытался сделать с применением Edit
Код:
#Include <GUIConstantsEx.au3>
#Include <WindowsConstants.au3>
#Include <EditConstants.au3>
#Include <WinAPIEx.au3>
OnAutoItExitRegister('OnAutoItExit')
Global $BkColor = 0x000000
Global $TextColor = 0xC0C0C0
Global $hBitmap = CaretBitmap()
Global $Duration = Default
_WinAPI_SetThemeAppProperties(0)
$hForm = GUICreate('Командная строка', 669, 338, -1, -1, BitOR($WS_SIZEBOX, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_CLIPCHILDREN, $WS_CLIPSIBLINGS), $WS_EX_ACCEPTFILES)
$iSize = WinGetClientSize($hForm)
$iEdit = GUICtrlCreateEdit('', 0, 0, $iSize[0], $iSize[1], $WS_VSCROLL + 0x1000)
GUICtrlSetData($iEdit, CmdHeader())
GUICtrlSetBkColor($iEdit, $BkColor)
GUICtrlSetColor($iEdit, $TextColor)
GUICtrlSetFont($iEdit, 9, 500, 0, 'Terminal')
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
Switch $hWnd
Case $hForm
Switch _WinAPI_LoWord($wParam)
Case $iEdit
Switch _WinAPI_HiWord($wParam)
Case $EN_KILLFOCUS
_WinAPI_HideCaret($lParam)
_WinAPI_DestroyCaret()
_WinAPI_SetCaretBlinkTime($Duration)
$Duration = Default
Case $EN_SETFOCUS
$Duration = _WinAPI_SetCaretBlinkTime(500)
_WinAPI_CreateCaret($lParam, $hBitmap)
_WinAPI_ShowCaret($lParam)
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Func OnAutoItExit()
_WinAPI_DeleteObject($hBitmap)
If $Duration <> Default Then
_WinAPI_SetCaretBlinkTime($Duration)
EndIf
EndFunc
Func CaretBitmap()
$hDC = _WinAPI_GetDC(0)
$hDestDC = _WinAPI_CreateCompatibleDC($hDC)
$hBitmap = _WinAPI_CreateCompatibleBitmapEx($hDC, 8, 12, $TextColor)
$hDestSv = _WinAPI_SelectObject($hDestDC, $hBitmap)
$hCaret = _WinAPI_CreateSolidBitmap(0, $BkColor, 8, 9)
_WinAPI_DrawBitmap($hDestDC, 0, 0, $hCaret)
_WinAPI_ReleaseDC(0, $hDC)
_WinAPI_SelectObject($hDestDC, $hDestSv)
_WinAPI_DeleteDC($hDestDC)
Return $hBitmap
EndFunc
Func CmdHeader()
$Product = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'ProductName')
$Version = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'CurrentVersion')
$Header = $Product & ' [Версия ' & $Version & '.' & @OSBuild & ']' & @CRLF & '(C) Корпорация Майкрософт, 1985-2012.' & @CRLF & @CRLF & @UserProfileDir & '>'
Return _WinAPI_CharToOem($Header)
EndFunc
А вот этот полностью повторяет консоль, но не пойму как писать текст, как поставить каретку? :wacko:
Код:
#Include <GUIConstantsEx.au3>
#Include <WindowsConstants.au3>
#Include <EditConstants.au3>
#Include <WinAPIEx.au3>
Global $BkColor = 0x000000
Global $TextColor = 0xC0C0C0
_WinAPI_SetThemeAppProperties(0)
$hForm = GUICreate('Командная строка', 669, 338, -1, -1, BitOR($WS_SIZEBOX, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_VSCROLL), BitOR($WS_EX_CLIENTEDGE, $WS_EX_ACCEPTFILES))
GUISetBkColor($BkColor)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd