Проблема с получением полос прокрутки после SetParent

Я пытаюсь интегрировать оконную программу в контейнер панели в vb.net.

Все в порядке, но полосы прокрутки отключены, знаете почему?

Мой код:

Dim info As ProcessStartInfo = New ProcessStartInfo
info.FileName = "C:\putty\\putty.exe"
info.Arguments = "-ssh 192.168.1.1 -l root -pw myPassword"
info.UseShellExecute = True

proc = New Process
proc.StartInfo = info

proc.Start()
proc.WaitForInputIdle()

lCurStyle = GetWindowLong(proc.MainWindowHandle, GWL.GWL_STYLE)

lCurStyle = lCurStyle And Not WS_CAPTION
lCurStyle = lCurStyle And Not WS_SYSMENU
lCurStyle = lCurStyle And Not WS_THICKFRAME
lCurStyle = lCurStyle And Not WS_MINIMIZE
lCurStyle = lCurStyle And Not WS_MAXIMIZEBOX
lCurStyle = lCurStyle And Not WS_HSCROLL
lCurStyle = lCurStyle And WS_VSCROLL

SetWindowLong(proc.MainWindowHandle, GWL.GWL_STYLE, lCurStyle)
SetParent(proc.MainWindowHandle, Panel1.Handle)

SendMessage(proc.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 1)

Программа putty.exe является корректным интегратором в контейнере панели с именем «panel1», но вертикальная полоса прокрутки отключена. Ты знаешь почему ?

Сценарий использует следующие объявления:

   Declare Auto Function DeleteMenu Lib "user32.dll" (hMenu As IntPtr, uPosition As IntPtr, uFlags As IntPtr) As Boolean

    Declare Auto Function GetWindowLong Lib "user32.dll" (ByVal HWND As IntPtr, ByVal Index As Integer) As Integer
    Declare Auto Function SetWindowLong Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer

    Declare Auto Function SetParent Lib "user32.dll" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer
    Declare Auto Function SendMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

Public Const SC_CLOSE As Integer = &HF060&
Public Const SC_SIZE As Integer = &HF000&
Public Const SC_MAXIMIZE As Integer = &HF030&
Public Const SC_MINIMIZE As Long = &HF020&
Public Const SC_RESTORE As Long = &HF120&

Public Const WM_SYSCOMMAND As Integer = 274
Public Const WS_BORDER = &H800000
Public Const WS_CAPTION = &HC00000
Public Const WS_MAXIMIZEBOX = &H10000
Public Const WS_MINIMIZEBOX = &H20000
Public Const WS_OVERLAPPED As Integer = &H0
Public Const WS_POPUP As Integer = &H80000000
Public Const WS_CHILD As Integer = &H40000000
Public Const WS_MINIMIZE As Integer = &H20000000
Public Const WS_VISIBLE As Integer = &H10000000
Public Const WS_DISABLED As Integer = &H8000000
Public Const WS_CLIPSIBLINGS As Integer = &H4000000
Public Const WS_CLIPCHILDREN As Integer = &H2000000
Public Const WS_MAXIMIZE As Integer = &H1000000
Public Const WS_DLGFRAME As Integer = &H400000
Public Const WS_VSCROLL As Integer = &H200000
Public Const WS_HSCROLL As Integer = &H100000
Public Const WS_SYSMENU As Integer = &H80000
Public Const WS_THICKFRAME As Integer = &H40000
Public Const WS_GROUP As Integer = &H20000
Public Const WS_TABSTOP As Integer = &H10000

введите здесь описание изображения


person Xavier    schedule 11.02.2019    source источник
comment
Вы могли бы, проще говоря, передать вывод консоли в элемент управления WinForms. Используя RichTextBox, с небольшой настройкой, вы также можете воспроизвести цвета. Вот пример.   -  person Jimi    schedule 11.02.2019
comment
Здравствуйте, это интерактивный экран (клиент putty/ssh), а не простой лог.   -  person Xavier    schedule 11.02.2019
comment
Послушайте, действительно много чего можно сказать о коде, который вы показываете. То, что он выглядит так, как будто он пришел из другой эпохи, например. В любом случае, если вы хотите оставить все как есть и просто показывать полосы прокрутки, установите lCurStyle = lCurStyle Or WS_VSCROLL. Так же нужно просто lCurStyle = lCurStyle And Not WS_CAPTION, возможно еще и рамку убрать (WS_THICKFRAME). Затем proc.WaitForInputIdle: используется, когда процесс имеет графический интерфейс и вам нужно дождаться полного отображения. У консоли его нет. Замените на Thread.Sleep(200).   -  person Jimi    schedule 11.02.2019
comment
Спасибо за ваш комментарий. Если вы считаете, что код, кажется, пришел из другой эпохи: не стесняйтесь, позвольте мне увидеть другой код, более современный, для интеграции содержимого внешней программы в контейнер с vb.net и сохранения его взаимодействия, такого как putty.exe или mstsc. .исполняемый. Спасибо .   -  person Xavier    schedule 11.02.2019
comment
Что я могу сделать. Но пытались ли вы изменить код, как описано в предыдущем комментарии?   -  person Jimi    schedule 11.02.2019