vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 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

Visual-Basic Einsteiger
Re: Programminstanz 
Autor: zillertaler
Datum: 14.01.04 15:49

2 Möglichkeiten:

1. mit diesem Tip die erste Instanz mit diesem Tip schliessen http://www.vbarchiv.net/archiv/tipp_details.php?pid=206
Du must achtgeben, dass du das alles in den Sub Main einbaust und nicht ins Form_Load

2. mit diesem Beispiel kannst du an die laufende erste Instanz die Startparameter der zweiten Instanz senden. (Code verbesserungsfähig

Option Explicit
 
Private Sub Command1_Click()
Unload Me
End Sub
 
 
Private Sub Text1_Change()
' Im realbetrieb sollte die Eigenschaft text1.Visible auf False gestellt seion
' Wenn sich der Text ändert is was passiert. Aber nur wenn in der Textbox was 
' drinsteht
' denn sonst würde sich die Funktion beim Textlöschen wieder selbst aufrufen
If Text1.Text <> "" Then
MsgBox "Hallo ich bin die erste Instanz, die zweite instanz hat " & vbNewLine & _
  "mir was geflüstert und hat sich dann abgemurkst." & vbNewLine & vbNewLine & _
  Text1.Text
Text1.Text = ""
End If
End Sub
und noch das Modul dazu: (mit der Funktion: FindwindowEx könnte man sich auch noch etwas Code ersparen)

Option Explicit
 
' zum Childs-abklappern
Private Declare Function EnumChildWindows Lib "User32" _
        (ByVal hWndParent As Long, ByVal lpEnumFunc _
        As Long, ByVal lParam As Long) As Long
 
' der Name sagt alles
Private Declare Function GetClassName Lib "User32" Alias _
        "GetClassNameA" (ByVal hWND As Long, ByVal _
        lpClassName As String, ByVal nMaxCount As Long) _
        As Long
 
Public Declare Function FindWindow Lib "User32" Alias _
    "FindWindowA" (ByVal lpClassName As String, ByVal _
    lpWindowName As String) As Long
 
Public Declare Function SendMessageByString Lib "User32" Alias "SendMessageA" ( _
  ByVal hWND As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As _
  String) As Long
 
Public Const WM_SETTEXT = &HC
 
Dim F As Long
Dim Child() As Long
 
 
Public Function Childhandle_ermitteln(Mutterhandle As Long, Childklasse As _
  String) As Long
  Dim x&, Class$, Result&
  ReDim Child(0 To 0)
 
  Call EnumChildWindows(Mutterhandle, AddressOf EnumChilds, 0)
  If UBound(Child) > 0 Then
    For x = 0 To UBound(Child) - 1
      Class = Space$(128)
      Result = GetClassName(Child(x), Class, 128)
      Class = LCase(Left$(Class, Result))
 
    ' hier hat die Funktion dann eine Textbox gefunden
      If Class = LCase(Childklasse) Then Childtitel_ermitteln = Child(x)
 
 
    Next x
  End If
End Function
 
Public Function EnumChilds(ByVal ChWnd&, ByVal lParam&) As Long
  Child(UBound(Child)) = ChWnd
  ReDim Preserve Child(0 To UBound(Child) + 1)
  EnumChilds = 1
End Function
 
 
Private Sub Main()
Dim Handle As Long
 
' Der Titeltext der Anwendung darf nicht manipuliert werden, da Findwindow 
' sonst kein handle mehr zurückgibt
 
If App.PrevInstance = False Then
 Form1.Show ' wenns die erste instanz ist die Form zeigen
Else
 ' Das Handle der ersten instanz ermitteln
 F = FindWindow(vbNullString, "Test Kommunikation") ' Das Handle der ersten 
 ' instanz herausfinden (Das Fenster der 2. Instanz darf zu diesem Zeitpunkt 
 ' nicht geladen sein !!!)
 Handle = Childhandle_ermitteln(F, "ThunderRT6TextBox")  ' Die Funktion 
 ' aufrufen die die Controls der ersten Instanz abklappert und bei einer 
 ' Textbox eine zahl zurückgibt
 If Handle <> 0 Then
 Call SendMessageByString(Handle, WM_SETTEXT, 0, Command) ' Weil wir ja das 
 ' Handle gefunden haben senden wir den text
 End If
 End ' und wieder beenden
End If
 
End Sub
Das obige beispiel hat noch ein paar Wermutstropfen: es darf nur eine Textbox auf der Form sein, da die Funktion Childhandle_ermitteln sonst das falsche Handle zurückgeben würde. Der Fenstertitel der Anwendung darf sich nicht verändern.

Eine eigene versteckte "Empfänger-Form" würde auch diese probleme beheben.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Programminstanz341Micha14.01.04 12:59
Re: Programminstanz245ModeratorMoni14.01.04 13:02
Re: Programminstanz243Micha14.01.04 15:22
Re: Programminstanz293zillertaler14.01.04 15:49

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