[решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"

Аватара пользователя
sashadeg

[решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"

Сообщение sashadeg »

В стандартное окно "InputBox" нельзя вставить картинку...

Помогите пожалуйтста переделать обычный "InputBox" в анологичное "GUI-окно"...

На примере вот этого кода... Как вставить картинку я разобрался а как вставить полоску ввода информании понять не могу Изображение



Код:

Код: Выделить всё

$1 = InputBox ("1234", "")
If @Error = 1 Then
    MsgBox(4096, "1234", "OK.  Bye!",1)
    Exit
EndIf
; функции
run("notepad.exe")
Sleep(1000)
Send($1)
Аватара пользователя
sashadeg

Re: [решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"

Сообщение sashadeg »

Creat0R, там столько МНОГО всего!!!! И я по английски не понимаю Изображение Можешь дать конкретный код?

В окошке примерно вот что:

1. Немного текста (любого Изображение )

2. Полоска ввода текста ( типа как в InputBox)

3. Кнопка "Oк"

4. После нажатия "Ок" переменной $text присваивается текс который ввели в окошечке Изображение



Простите, но я нубик в AutoIt Изображение



Я скачал пример из ссылки которую ты дал, но он ошибку выкидывает на 5 строке Изображение
Аватара пользователя
proxy

Re: [решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"

Сообщение proxy »

ручной пример:



Код:

Код: Выделить всё

#region: - Option
    Opt('GUIOnEventMode',       1)
    Opt('MustDeclareVars',      1)
    Opt('TrayIconDebug',        1)
    Opt('TrayIconHide',         0)
#endregion
#region: - Include
    #include 
    #include 
#endregion
#region: - Win Msg      Global
    Global  $hMsgWin
;~  Title, Width, Height, X, Y, Style, ExStyle
    Global  $sMsgWinTitle           = '1234'
    Global  $iMsgWinWidth           = 200
    Global  $iMsgWinHeight          = 93
    Global  $iMsgWinX               = -1
    Global  $iMsgWinY               = -1
    Global  $iMsgWinStyle           = $WS_CAPTION+$WS_SYSMENU
    Global  $iMsgWinExStyle         = -1
;~  Settings
    Global  $fMsgWinOnTop           = 0
;~  GUI Ctrl
    Global  $hsWinMsgText
#endregion
#region: - Win Msg      Function
Func _WinMsg_Create()
    $hMsgWin = GUICreate($sMsgWinTitle, $iMsgWinWidth, $iMsgWinHeight, $iMsgWinX, $iMsgWinY, $iMsgWinStyle, $iMsgWinExStyle)
        GUISetIcon('shell32.dll', -10)
            GUISetOnEvent($GUI_EVENT_CLOSE,     '_Pro_Exit')
    GUICtrlCreateGroup(' Введите текст: ', 5, 5, $iMsgWinWidth-10, $iMsgWinHeight-10)
    $hsWinMsgText = GUICtrlCreateInput('', 15, 25, $iMsgWinWidth-30, 20)
    GUICtrlCreateButton('OK', 14, 53, ($iMsgWinWidth-28-2)/2, 24)
        GUICtrlSetOnEvent(-1, '_WinMsg_OK')
    GUICtrlCreateButton('Отмена', 14+($iMsgWinWidth-28-2)/2+2, 53, ($iMsgWinWidth-28-2)/2, 24)
        GUICtrlSetOnEvent(-1, '_Pro_Exit')
    If $fMsgWinOnTop Then WinSetOnTop($hMsgWin, '', 1)
    GUISetState(@SW_SHOW, $hMsgWin)
EndFunc
Func _WinMsg_Close()
;~  GUIDelete($hMsgWin)
    _Pro_Exit()
EndFunc
Func _WinMsg_OK()
    Local $sText = GUICtrlRead($hsWinMsgText)
    If StringStripWS($sText, 8) == '' Then
        MsgBox(48, 'Ошибка!', 'Пожалуйста, введите текст')
        GUICtrlSetData($hsWinMsgText, '')
        GUICtrlSetState($hsWinMsgText, $GUI_FOCUS)
    Else
;~      MsgBox(64, 'OK', 'Отлично')
        _PutTextToNotepad($sText)
        _WinMsg_Close()
    EndIf
EndFunc
#endregion
#region: - After creating all GUI
    GUIRegisterMsg($WM_NCHITTEST,   'WM_NCHITTEST')
    _WinMsg_Create()
#endregion
#region: - Sleep, Exit
While 1
    Sleep(10)
WEnd
Func _Pro_Exit()
    Exit
EndFunc
#endregion
Func _PutTextToNotepad($sText)
    Local $iPid, $iHwd
    $iPid = Run('notepad.exe')
    While 1
        $iHwd = _ProcessGetWindow($iPid)
        If IsHWnd($iHwd) Then ExitLoop
    WEnd
    WinWait($iHwd)
    ControlSetText($iHwd, '', '[CLASS:Edit; INSTANCE:1]', $sText)
EndFunc
Func _ProcessGetWindow($iPID, $iRet=1)
    Local $aWinList = WinList()
    Local $aRet[2]
    If IsString($iPID) Then $iPID = ProcessExists($iPID)
    For $i = 1 To UBound($aWinList)-1
        If WinGetProcess($aWinList[$i][1]) = $iPID Then
            $aRet[0] = $aWinList[$i][0] ;Title
            $aRet[1] = $aWinList[$i][1] ;WinHandle
            If $iRet = 0 Then Return $aRet[0]
            If $iRet = 1 Then Return $aRet[1]
            Return $aRet
        EndIf
    Next
    Return SetError(1, 0, $aRet)
EndFunc
Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
    Local $iProc = DllCall('user32.dll', 'int', 'DefWindowProc', 'hwnd', $hWnd, 'int', $Msg, 'wparam', $wParam, 'lparam', $lParam)
    If $iProc[0] = $HTCLIENT Then Return $HTCAPTION
    Return $GUI_RUNDEFMSG
EndFunc
Аватара пользователя
sashadeg

Re: [решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"

Сообщение sashadeg »

Это всё конечно хорошо... но вот такая команда у меня не работает: Send ($text)
Аватара пользователя
proxy

Re: [решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"

Сообщение proxy »

Цитата:



Это всё конечно хорошо... но вот такая команда у меня не работает: Send ($text)



попробуйте

Код:

Код: Выделить всё

ControlSetText($iHwd, '', '[CLASS:Edit; INSTANCE:1]', $sText)

- точно не промахнетесь с окном / полем ввода

- текст вставляется почти мнгновенно )



$iHwd - хэндл (указатель) окно / либо текст заголовка окна

Далее указывается текст, который присутствует в окне. Если $iHwd это хэндл окна, то с текстом можно не заморачиваться

[CLASS:Edit; INSTANCE:1] - id элемента, которому высылается текст. Можно узнать с помощью "..\AutoIt3\Au3Info.exe". Строчки Advanced (Class) или ClassnameNN

$sText - высылаемый текст элементу
Аватара пользователя
sashadeg

Re: [решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"

Сообщение sashadeg »

А что Send($text) вообще ни как??? Просто мне это надо для Полноэкранного приложения... А там ID то не узнать... Да я и с этой командой привык работать...
Аватара пользователя
proxy

Re: [решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"

Сообщение proxy »

Цитата:



Полноэкранного приложения



если там обычное окно, от можно и у полноэкранного ))




Цитата sashadeg:



А что Send($text) вообще ни как???
[решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"




почему же - можно. Проверьте, что высылаите имеено текст в этой переменной, а не ControlId элемента. Т.е.:



Код:

Код: Выделить всё

;~ Если запись такая:
$hsWinMsgText = GUICtrlCreateInput('', 15, 25, $iMsgWinWidth-30, 20)
;~ То высылать нужно так:
Send(GUICtrlRead($hsWinMsgText))

+ есть полезности:



Код:

Код: Выделить всё

Opt('SendKeyDelay', 1)

и флаги в Send:


Цитата:



Send ( "keys", [flag] )

flag: (опциональный) Режим обработки "клавиш клавиатуры":

flag = 0 (стандартный), текст содержит специальные символы (например +, или ! указывающие на совместное нажатие клавиш SHIFT, или ALT), которые следует симулировать.

flag = 1, выслать "неразобранный" набор нажатий.
Аватара пользователя
sashadeg

Re: [решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"

Сообщение sashadeg »

Спасибо тебе за всё... но ты пишешь такие коды 0_о я же писал что я нубик Изображение Можешь конкретно написать код чтобы был точный прототип стандартного INPUTBOX'a ??? Просто у меня прога полностью готова, я хотел бы вставить пару картинок... А вы мне тут ТАКИЕ коды пишите Изображение
Аватара пользователя
proxy

Re: [решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"

Сообщение proxy »

Код:

Код: Выделить всё

#region: - Option
    Opt('MustDeclareVars',      1)
    Opt('TrayIconDebug',        1)
    Opt('TrayIconHide',         0)
#endregion
#region: - Include
    #include 
    #include 
#endregion
Local $sInputText
$sInputText = _MsgBox('Название окна #1 ', ' Введите текст:  ', 200, 93, -1, -1, -1)
Switch @error
    Case -1
        MsgBox(48, 'Выход  #1 ', 'Выход без ввода текст' & @CRLF & 'Код выхода: ' & @error)
    Case 0
        MsgBox(64, 'Введенный текст #1 ', $sInputText)
EndSwitch
;~ Или так: окно поверх всех
$sInputText = _MsgBox('Название окна #2 ', ' Введите текст:  ', 200, 93, -1, -1, -1, -1, 1)
If @error == -1 Then
    MsgBox(48, 'Выход  #2 ', 'Выход без ввода текст' & @CRLF & 'Код выхода: ' & @error)
Else
    MsgBox(64, 'Введенный текст #2  ', $sInputText)
EndIf
;~ Или так: окно поверх всех + другая иконка окна
$sInputText = _MsgBox('Название окна #3 ', ' Введите текст:  ', 200, 93, -1, -1, -1, -1, 1, -1, -45)
If @error == 0 Then MsgBox(64, 'Введенный текст  #3 ', $sInputText)
#region: - _MsgBox
; #FUNCTION# ====================================================================================================================
; Name...........:  _MsgBox
; Description ...:  Окно типа MsgBox со строкой ввода текса и кнопками Ok, Отмена
; Syntax.........:  _MsgBox($sTitle, $sText, $iWidth, $iHeight, $iX, $iY [, $iStyle=13107200] [, $iExStyle=-1] [, $fOnTop=0] [, $sIconPath='shell32.dll'] [, $iIconId=-1])
; Parameters ....:  $sTitle      - Название кона
;~                  $sText       - Текст сообщения
;~                  $iWidth      - Ширна окна
;~                  $iHeight     - Высота окна
;~                  $iX          - Позиция окна по Х
;~                  $iY          - Позиция окна по У
;~                  $iStyle      - Стиль окна
;~                  $iExStyle    - Расширенный стиль окна
;~                  $fOnTop      - Установка окна поверех всех окон
;~                  $sIconPath   - Путь к файлу/dll иконки окна
;~                  $iIconId     - Id иконки
; Return values .:  Success      - Введенный текст. @error = 0
;                   Failure      - -1 закрытие окна без ввода текста. @error = -1
; Author ........: `p r o x y (icq 729406)
; ===============================================================================================================================
Func _MsgBox($sTitle, $sText, $iWidth, $iHeight, $iX, $iY, $iStyle=13107200, $iExStyle=-1, $fOnTop=0, $sIconPath='shell32.dll', $iIconId=-222)
    Local $fGUIOnEventMode = Opt('GUIOnEventMode')
    Opt('GUIOnEventMode', 0)
    If $iStyle == -1 Then $iStyle = 13107200
    Local   $hMsgBox = GUICreate($sTitle, $iWidth, $iHeight, $iX, $iY, $iStyle, $iExStyle)
                If $sIconPath = -1 Then $sIconPath = 'shell32.dll'
                GUISetIcon($sIconPath, $iIconId)
    GUICtrlCreateGroup($sText, 5, 5, $iWidth-10, $iHeight-10)
    Local   $hsMsgBoxText = GUICtrlCreateInput('', 15, 25, $iWidth-30, 20)
    Local   $hMsgBoxOK = GUICtrlCreateButton('OK', 14, 53, ($iWidth-28-2)/2, 24)
    Local   $hMsgBoxCancel = GUICtrlCreateButton('Отмена', 14+($iWidth-28-2)/2+2, 53, ($iWidth-28-2)/2, 24)
    If $fOnTop Then WinSetOnTop($hMsgBox, '', 1)
    GUIRegisterMsg($WM_NCHITTEST,   'WM_NCHITTEST')
    GUISetState(@SW_SHOW, $hMsgBox)
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                GUIDelete($hMsgBox)
                Opt('GUIOnEventMode', $fGUIOnEventMode)
                GUIRegisterMsg($WM_NCHITTEST, '')
                Return SetError(-1)
            Case $hMsgBoxCancel
                GUIDelete($hMsgBox)
                Opt('GUIOnEventMode', $fGUIOnEventMode)
                GUIRegisterMsg($WM_NCHITTEST, '')
                Return SetError(-1)
            Case $hMsgBoxOK
                Local $sMsgBoxText = GUICtrlRead($hsMsgBoxText)
                If StringStripWS($sMsgBoxText, 8) == '' Then
                    MsgBox(48, 'Ошибка!', 'Пожалуйста, введите текст')
                    GUICtrlSetData($hsMsgBoxText, '')
                    GUICtrlSetState($hsMsgBoxText, $GUI_FOCUS)
                Else
                    GUIDelete($hMsgBox)
                    SetError(0)
                    Opt('GUIOnEventMode', $fGUIOnEventMode)
                    GUIRegisterMsg($WM_NCHITTEST, '')
                    Return $sMsgBoxText
                EndIf
        EndSwitch
    WEnd
EndFunc
Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
    Local $iProc = DllCall('user32.dll', 'int', 'DefWindowProc', 'hwnd', $hWnd, 'int', $Msg, 'wparam', $wParam, 'lparam', $lParam)
    If $iProc[0] = $HTCLIENT Then Return $HTCAPTION
    Return $GUI_RUNDEFMSG
EndFunc;==>_MsgBox
#endregion
Ответить

Вернуться в «AutoIt»