Страница: 1 |
Страница: 1 |
Вопрос: Внешнее приложение в MDI форме
Добавлено: 17.07.07 16:19
Автор вопроса: AL
Господа, подскажите пож-та
есть MDI форма, необходимо чтоб все запущенные внешние приложения открывались внутри этой формы.
несколько лет назад видел реализацию на DELPHI, вот хочу сделать на VB60, но как это сделать пока не знаю.
оч. расчитываю на вашу помощь.
СПАСИБО!
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #1
Добавлено: 17.07.07 17:37
Просто инцест какой-то.
Установить хук computer-based training (CBT), перехватывая рождение (HCBT_CREATEWND) всех недочерних окон, и усыновлять их в MDICLIENT.
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 17.07.07 20:41
Может просто SetParent, или с миди формами такое не прокатет?
Номер ответа: 3
Автор ответа:
AL
Вопросов: 7
Ответов: 21
Профиль | | #3
Добавлено: 17.07.07 21:11
Спасибо за ответ! а можно попросить какой-нибудь примерчик на эту тему?
заранее благодарен.
AL
Номер ответа: 4
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #4
Добавлено: 17.07.07 22:41
Разве что поэкпериментировать:
код MDIForm:
Option Explicit
Dim mdcl As Long
Private Sub MDIForm_Load()
mdcl = FindWindowEx(Me.hwnd, 0, "MDICLIENT", ""
Timer1.Interval = 500
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
EnumWindows AddressOf EnumWindowsProc, mdcl
End Sub
код модуля1:
Option Explicit
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Const GWL_STYLE = (-16)
Public Const WS_BORDER = &H800000
Public Const WS_CAPTION = &HC00000 ' WS_BORDER Or WS_DLGFRAME
Public Const WS_MINIMIZEBOX = &H20000
Public Const WS_MAXIMIZEBOX = &H10000
Public Const WS_OVERLAPPED = &H0&
Public Const WS_SYSMENU = &H80000
Public Const WS_THICKFRAME = &H40000
Public Const WS_VISIBLE = &H10000000
Public Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim hpr As Long
Dim style As Long
Dim clsstr As String
Dim cb As Long
If (hwnd <> MDIForm1.hwnd) Then
clsstr = Space(128)
cb = GetClassName(hwnd, clsstr, 128)
clsstr = Left(clsstr, cb)
If clsstr <> "wndclass_desked_gsk" Then ' VB6-IDE
style = GetWindowLong(hwnd, GWL_STYLE)
If style = (style Or WS_OVERLAPPEDWINDOW Or WS_VISIBLE) Then
SetParent hwnd, lParam
End If
End If
End If
EnumWindowsProc = -1
End Function