ändern des titels eines fremden fensters in vb

Hi,

ich brauche die Befehle in vb um ein fenster umzubenennen.
ich weiß das ich die Funktionen:
Private Declare Function FindWindow Lib „user32“ Alias „FindWindowA“ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function SetWindowText Lib „user32“ Alias „SetWindowTextA“ (ByVal hwnd As Long, ByVal lpString As String) As Long

Private Declare Function GetWindowText Lib „user32“ Alias „GetWindowTextA“ (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
brauche.
ich verstehe das auch soweit, nur „ByVal lpClassName As String“ gibt mit Rätsel auf. ich weiß net was ich da einstellen muss.

MfG und ty im Voraus

haithun

Hallo Haithun,

übergibt ihm einfach vbNullString :wink:

MfG Alex

ty aber es funktioniert trotzdem nicht
der quellcode:

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim parameter() As String = Environment.GetCommandLineArgs().ToArray
Dim str As String = „“
Dim winwnd
If (parameter.Count - 1) >= 1 Then 'Höher als 1 weil der index 0 der Pfad zum programm ist
For i = 1 To parameter.Count - 1
ListBox1.Items.Add(parameter(i))
str = str + parameter(i)
Next
End If
Shell("_elementclient.exe -" + str)
winwnd = FindWindow(vbNullString, „Element Client“)
SetWindowText(winwnd, „PW“)
End Sub
Private Declare Function FindWindow Lib „user32“ Alias „FindWindowA“ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowText Lib „user32“ Alias „SetWindowTextA“ (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Declare Function GetWindowText Lib „user32“ Alias „GetWindowTextA“ (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

End Class

das programm fängt die parameter mit denen es gestartet wird ab und start damit die „_elementclient.exe“ welche die Spieldatei von perfect world einem mmorpg ist.
das umbennen des fensters soll dem zweck dienen, das ich das spiel mehrmals starten kann.

aber es funzt net
why???

MfG

Haithun

Was liefert Dir denn winwnd zurück?

winwnd liefert die eindeutige Identifikationsnummer, die Windows dem Fenster zuteilt.

MfG

Haithun

und welchem Wert liefert SetWindowText?
Normal rufst du unter .Net auch eine Api ueber DLLImport auf!

Bitte ließ doch erst bevor du unqualifizierte Bemerkungen machst.
Die Funktionen werden im Quellcode ganz unten definiert und zwar mit hilfe der user32.dll.
Damit hättest du deinen DLL-Import.

MfG

Haithun

Unqualifizierte Bemerkungen?
Normalerweise und so wie ich es kenne, lautet die Definition

 Private Shared Function Deine Funktion
 End Function

Desweiteren verwendet man keinen Datentyp Long, sondern eher Int (32,64…) Die Declaration ist noch von VB6 Zeiten und diese musst du entsprechend .Net anpassen.

Auch sollte man wenn man schon ein Problem hat und es dann immer noch nicht läuft, auch die entsprechenden antworten liefern, denn bei den meisten ist die Kristallkugel defekt und koennen nicht hell sehen.
Aber wenn du der Meinung bist, mit solch ein Auftreten hier weiter Hilfe zu bekommen, dann bitte. Ich für meinen Teil werde mich zurueckziehen. In diesem Sinne …

MfG

Entschuldige für diese Bemerkung, aber ich kenne es nur so, da auch die Hilfe und die Onlinehilfe es so erklären. Das mit „long“ stimmt wohl is auch ursprunglich aus einem VB6-Codeteil von hier. Und ich wollte nicht unhöflich sein aber deine Nachfragen sind immer sehr kurz, sodass man das Gefühl erhält du würdest nicht richtig lesen und dann immer nur nach gucken was grad gefragt ist.

Wäre net wenn du mir trotzdem helfen könntest.

MfG

Haithun

Ist schon ok.

Anbei ein Demo, was ihren Dienst macht. Musst dir dann nur noch anpassen.
Kopiere einfach folgenden Source in eine bestehende Form.

Imports System.Runtime.InteropServices

Public Class Form1

 Private Shared Function FindWindowA(ByVal lpClassName As String, ByVal lpWindowName As String) As Int32
 End Function

 Private Shared Function SetWindowTextA(ByVal Hwnd As Int32, ByVal Text As String) As Int32
 End Function

 Private Sub ProzessStart(ByVal sender As System.Object, ByVal e As System.EventArgs)
 Process.Start("Calc.exe")
 End Sub

 Private Sub ChangeText(ByVal sender As System.Object, ByVal e As System.EventArgs)
 SetWindowTextA(FindWindowA(vbNullString, "Rechner"), "Test")
 End Sub

 Private Sub Form1\_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 Dim But(1) As Button
 But(0) = New Button With {.Text = "Prozess Rechner starten", .Dock = DockStyle.Top}
 But(1) = New Button With {.Text = "Caption ändern", .Dock = DockStyle.Top}
 Me.Controls.AddRange(But)
 AddHandler But(0).Click, AddressOf ProzessStart
 AddHandler But(1).Click, AddressOf ChangeText
 End Sub
End Class

MfG Alex

Vielen Dank
jetzt läuft es. Es funktionierte schon so halb al ich es auf Integer gändert hatte, aber mit den DLLImport aufrufen und Int32 funktioniert jetzt auch das Umbenennen des Fensters.
VIELEN DANK NOCHMAL

MfG

Haithun