Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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







Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам