vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Anwendung in Form umleiten 
Autor: Christian25
Datum: 14.10.07 22:43

Ist zwar jetzt nicht sehr schön umgesetzt, aber funktioniert.

Mach dir ne Klasse CWrapper mit folgendem Code:

Public Class CWrapper
 
    Private Declare Function SetParent Lib "user32" (ByVal hWndChild As _
      Integer, ByVal hWndNewParent As Integer) As Integer
    Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Integer, _
    ByVal X As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal _
    nHeight As Integer, ByVal bRepaint As Integer) As Integer
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Integer, _
    ByVal nCmdShow As Integer) As Integer
    Private Declare Function GetDeskTopWindow Lib "user32" Alias _
    "GetDesktopWindow" () As Integer
 
    Private nLhwnd As Integer
    Private nRet As Integer
    Private nProcess As Diagnostics.Process
 
    Public Function CatchWindow(ByVal sFileName As String, ByVal oCatchingForm _
      As Form, Optional ByVal nWaitForStartTimeout As Integer = 2500) As Boolean
        Dim ltop As Integer
        Dim lleft As Integer
        Dim lwidth As Integer
        Dim lheight As Integer
 
        ' Notepad starten
        nProcess = Process.Start(sFileName)
 
        ' Warten bis vollstaendig geladen
        Threading.Thread.Sleep(nWaitForStartTimeout)
 
        ' Handle des neuen Notepad-Fensters feststellen
        nLhwnd = nProcess.MainWindowHandle.ToInt32
 
        If nLhwnd <> 0 Then
 
            ' Jetzt wird das Fenster geklaut
            Call SetParent(nLhwnd, oCatchingForm.Handle.ToInt32)
 
            ' Ausmasse festlegen (Scalemode von Form1 muss Pixel sein)
            ltop = 0
            lleft = 0
            lwidth = oCatchingForm.Width
            lheight = oCatchingForm.Height - ltop
 
            ' Neue Ausmasse setzen
            Call MoveWindow(nLhwnd, lleft, ltop, lwidth, lheight, 1)
 
            ' Sichtbar machen
            nRet = ShowWindow(nLhwnd, 1)
        End If
    End Function
 
    Public Function ReleaseWindow() As Boolean
        Dim dh As Integer
 
        ' Handle des Desktop bestimmen
        dh = GetDeskTopWindow()
 
        ' Programm wieder in den Desktop setzen.
        Call SetParent(nLhwnd, dh)
    End Function
 
End Class
In deiner Form kannste dann z.B. mit

Dim oWrapper as new CWrapper
und den folgenden 2 Befehlen

oWrapper.CatchWindow("DateinameinklPfad.exe", Me)
oWrapper.ReleaseWindow
eine Anwendung einfangen und wieder freigeben.

Wenn du nicht willst, das das Fenster automatisch an die Formgröße angepasst wird, dann Klammer einfache die Zeile Call MoveWindow(nLhwnd, lleft, ltop, lwidth, lheight, 1) in der Klasse aus.

Was man noch besser machen könnte, das man wirklich darauf wartet bis eine Anwendung komplett geladen ist und nicht einfach einen Sleep einbaut.

Denn die Anwendung muss komplett geladen sein, damit man sie einfangen kann.

Gruß,

Christian
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Anwendung in Form umleiten1.537Snoopy12.10.07 10:51
Re: Anwendung in Form umleiten1.149Christian2514.10.07 22:43
Re: Anwendung in Form umleiten899GPM14.10.07 23:39
Re: Anwendung in Form umleiten975Snoopy14.10.07 23:52
Re: Anwendung in Form umleiten1.096Snoopy16.10.07 10:11

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel