Frederic GIRARDIN Ответов: 2

Как интегрировать приложения Windows в личное заявление?


Привет.

Я использую VB.NET и я пытаюсь найти способ встроить окно приложения в окно моего собственного приложения, определяя себе его область отображения. Я знаю, что Оле существует, но в том случае, который меня интересует, Оле нет.

Пусть он пройдет мимо, создав главную / подчиненную связь, или же... в любом случае. Май VB.net не помогает.

Короткий. Я думаю, что это достижимо, даже если это не широко распространено. Вы не могли бы мне помочь?

Что я уже пробовал:

я все еще ищу решение

0x01AA

Я не люблю публиковать это как решение, потому что это очень грязный способ:
Ключевой момент заключается в том, чтобы получить дескриптор окна "приложения". Если он у вас есть (либо с помощью перечисления процессов и получения дескриптора mainwindow, либо в худшем случае с помощью заголовка Windows), вы можете использовать "SetParent" для установки родителя....
Будьте осторожны, это не способ решить ее для производственного кода ;)

И да, конечно, я сделал это также _one time_ для производства, потому что это было единственное решение и работает сейчас уже более 10 лет *lol*

ZurdoDev

Звучит как решение для меня.

0x01AA

Но это далеко не идеально. И я думаю, что много даунвотов будет предсказуемо;) ладно, я рискую :-) И спасибо, что подтолкнул меня к этому.

2 Ответов

Рейтинг:
15

0x01AA

Далекий от идеала, но в худшем случае ... мой комментарий как решение.

Ключевой момент заключается в том, чтобы получить дескриптор окна "приложения". Если он у вас есть (либо с помощью перечисления процессов и получения дескриптора главного окна, либо в худшем случае с помощью заголовка Windows), вы можете использовать "Win API SetParent", чтобы установить родительское окно приложения на один из ваших вариантов....

Среди прочих с помощью Win API SetWindowPos и ShowWindow вы можете "управлять" им. "Контроль", потому что это очень зависит от того, как приложение реагирует на это.

Будьте осторожны, это не способ решить ее для производственного кода ;)

И да, конечно, я сделал это тоже один раз для производства, потому что это было единственное решение и работает уже более 10 лет.


Frederic GIRARDIN

я попробовал это как http://www.pinvoke.net/default.aspx/user32.setparent сказал. Winform (MDI или нет) с кнопкой для запуска setParent... но ничего не вышло...

Frederic GIRARDIN

я ищу Win32 API SetForegroundWindow или LockSetForegroundWindow,но все еще не могу загрузить образец.

Рейтинг:
12

Frederic GIRARDIN

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
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
Private Const WM_SYSCOMMAND As Integer = 274
Private Const SC_MAXIMIZE As Integer = 61488

Private hWnd As Long = 0

Private Sub SimpleButton1_Click(sender As Object, e As EventArgs) Handles SimpleButton1.Click
   'May i'm not needing to run a process for exemple
   'Dim proc As Process

   'proc = Process.Start(Environment.GetEnvironmentVariable("windir") + "\notepad.exe") 

If hWnd = 0 Then
   'in my program context, Tfrm_ifc_view, was my classname
   hWnd = FindWindow("Tfrm_ifc_view", Nothing)
   If hWnd <> 0 Then
      SetParent(hWnd, Me.Panel1.Handle)
      SendMessage(hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
   End If
else
   SetParent(hWnd, nothing)
   hWnd = 0
end if
End Sub