|
You last visited: Today at 15:14
Advertisement
[VB] Combobox bringtofront
Discussion on [VB] Combobox bringtofront within the .NET Languages forum part of the Coders Den category.
04/25/2014, 16:11
|
#1
|
elite*gold: 0
Join Date: Sep 2008
Posts: 111
Received Thanks: 27
|
[VB] Combobox bringtofront
Hi,
ich hab eine Combobox erstellt die mir einen bestimmten Prozess ausliest und listet > funktioniert wunderbar
Nun ist mein Problem, ich würde gern "bringtofront" also, diesen Prozess "als erstes" auf meinen Desktop hocheben, wenn man das so sagen kann
Ich habe gedacht, dürfte ja gehen wenn ich
Code:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ComboBox1.SelectedItem.show()
End Sub
oder ".ComboBox1.SelectedItem.bringtofront()" benutze, pustekuchen
Es kommt nur eine Fehlermeldung
Da ich leider noch nicht so erfahren in Umgang mit VB bin, bitte ich um Nachsicht und auf eine gute Hilfe
|
|
|
04/25/2014, 17:50
|
#2
|
elite*gold: 2932
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
|
hwnd handle auslesen
pinvoke  machen
fertig
|
|
|
04/25/2014, 18:20
|
#3
|
elite*gold: 0
Join Date: Sep 2008
Posts: 111
Received Thanks: 27
|
Quote:
Originally Posted by tolio
hwnd handle auslesen
pinvoke  machen
fertig
|
Sachte sachte
Was ist HWND und wie les ich das aus?
Zu pinvoke: Ich hab das VB genommen, hoffe das war richtig weil andere "Codingsprache" die da sind kenn ich absolut garnicht
Code:
Public Declare Function BringWindowToTop Lib "user32" (ByVal HWnd As IntPtr) As Boolean
|
|
|
04/25/2014, 18:41
|
#4
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Quote:
Originally Posted by silvermf1991
Was ist HWND und wie les ich das aus?
|
Ein Handle zu einem Fenster. Also etwas, was dieses Fenster eindeutig identifiziert. Meistens gibt's da Funktionen die das auslesen können. Ansonsten hast du doch sicher eine Process Instanz die du für das Programm nutzt, oder? Da gibt's ne Eigenschaft MainWindowHandle, wie wär's damit?
|
|
|
04/25/2014, 18:56
|
#5
|
elite*gold: 0
Join Date: Sep 2008
Posts: 111
Received Thanks: 27
|
Quote:
|
Originally Posted by Mostey;28020284Ansonsten hast du doch sicher eine [I
Process[/I] Instanz die du für das Programm nutzt, oder? Da gibt's ne Eigenschaft MainWindowHandle, wie wär's damit?
|
Leider kann ich mit "Prozessinstanz" nichts anfangen  hab darüber echt kein Plan was du nun damit meinst
*gleich schon schläge erwarte*
Code:
Public Class Form1
Public Declare Function BringWindowToTop Lib "user32" (ByVal HWnd As IntPtr) As Boolean
Public ReadOnly Property MainWindowHandle As IntPtr
Get
End Get
End Property
So stehts nun am Anfang bei mir
Ich finds komisch das ich ohne große Mühe den Prozess/e Id's + Name raussuchen und filtern konnte, aber nun hier so verkacke
Ich hoffe ihr habt mit mir Geduld
|
|
|
04/25/2014, 19:07
|
#6
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Quote:
Originally Posted by silvermf1991
Leider kann ich mit "Prozessinstanz" nichts anfangen  hab darüber echt kein Plan was du nun damit meinst
|
OK, wie öffnest du den anderen Prozess denn? Oder wie findest du ihn? Poste mal deinen Code dazu.
Quote:
Originally Posted by silvermf1991
Code:
Public Class Form1
Public Declare Function BringWindowToTop Lib "user32" (ByVal HWnd As IntPtr) As Boolean
Public ReadOnly Property MainWindowHandle As IntPtr
Get
End Get
End Property
|
Mit Process Instanz war eine Instanz der Klasse Process gemeint, keine Eigenschaft in deiner Form.
Quote:
Originally Posted by silvermf1991
Ich hoffe ihr habt mit mir Geduld 
|
So lange du dich bemühst, sollte das kein Problem sein.
|
|
|
04/25/2014, 20:25
|
#7
|
elite*gold: 0
Join Date: Sep 2008
Posts: 111
Received Thanks: 27
|
Quote:
Originally Posted by Mostey
OK, wie öffnest du den anderen Prozess denn? Oder wie findest du ihn? Poste mal deinen Code dazu.
|
Code:
Dim pList() As System.Diagnostics.Process =
System.Diagnostics.Process.GetProcessesByName("prozessname")
For Each proc As System.Diagnostics.Process In pList
ComboBox1.Items.Add(proc.ProcessName & proc.Id)
Next
Da muss ich noch mit Asc nen Leerzeichen / Doppelpunkt einfügen, aber solange geht es noch, ist ja nurn schönheitsfehler
Quote:
Originally Posted by Mostey
So lange du dich bemühst, sollte das kein Problem sein. 
|
 Möge mich meine Bemühung auch dann belohnen
|
|
|
04/25/2014, 20:29
|
#8
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Quote:
Originally Posted by silvermf1991
Code:
Dim pList() As System.Diagnostics.Process =
System.Diagnostics.Process.GetProcessesByName("prozessname")
For Each proc As System.Diagnostics.Process In pList
ComboBox1.Items.Add(proc.ProcessName & proc.Id)
Next
Da muss ich noch mit Asc nen Leerzeichen / Doppelpunkt einfügen, aber solange geht es noch, ist ja nurn schönheitsfehler
|
Damit hast du dein Handle. SetForegroundWindow oder etwas ähnliches und dann dürfte das passen.
|
|
|
04/25/2014, 20:53
|
#9
|
elite*gold: 0
Join Date: Sep 2008
Posts: 111
Received Thanks: 27
|
Quote:
Originally Posted by Mostey
Damit hast du dein Handle. SetForegroundWindow oder etwas ähnliches und dann dürfte das passen.
|
Ok.. Jetzt scheißt das Programm wenigstens nicht ab, wenn ich den Button zum "hervorheben" klicke!
Nur leider, hebt der das Fenster immernoch nicht nach oben
Hab ich gerade nen denkfehler oder hab ich was übersehen?
Code:
Public Class Form1
Dim SetForegroundWindow As Object
Public ReadOnly Property MainWindowHandle As IntPtr
Get
End Get
End Property
Code:
Private Sub ComboBox1_Click(sender As Object, e As EventArgs) Handles ComboBox1.Click
ComboBox1.Items.Clear()
Dim pList() As System.Diagnostics.Process =
System.Diagnostics.Process.GetProcessesByName("prozessname")
For Each proc As System.Diagnostics.Process In pList
ComboBox1.Items.Add(proc.ProcessName & Asc(0) & proc.Id)
Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
SetForegroundWindow = ComboBox1.SelectedItem
End Sub
|
|
|
04/25/2014, 21:23
|
#10
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
SetForegroundWindow() ist eine Funktion aus der user32.dll, kein Objekt.
Quote:
|
Note that MainWindowHandle returns 0 if the main window is hidden...
|
Da würde mir spontan noch die FindWindow() Funktion aus der WinAPI einfallen.
Quote:
If you don't mind using the Windows API, you could use EnumWindowsProc, and check each of the handles that that turns up using GetWindowThreadProcessId (to see that it's in your process), and then maybe IsWindowVisible, GetWindowCaption and GetWindowTextLength to determine which hWnd in your process is the one you want.
Though if you haven't used those functions before that approach will be a right pain, so hopefully there's a simpler way.
|
 scheint da eine gute Möglichkeit, um nicht alle Funktionen selber noch einmal einbinden zu müssen. Hat tolio aber auch schon genannt. Ergänzend dazu musst du das Fenster erstmal finden.
|
|
|
04/25/2014, 22:06
|
#11
|
elite*gold: 0
Join Date: Sep 2008
Posts: 111
Received Thanks: 27
|
Ok nun bin ich ganz draussen >_<
Die Links sind aber fast nur C++ / C#, ich basiere doch eher auf vb.net, oder?
Hier was bei mir nun ist, ich kapiere jedenfalls nur, das es gerade nicht klappt
Code:
Dim nWnd As IntPtr
Dim ceroIntPtr As New IntPtr(0)
Dim Wnd_name As String
Private Property FindWindow(p1 As Object, Wnd_name As String) As IntPtr
Get
Return _findWindow
End Get
Set(value As IntPtr)
_findWindow = value
End Set
End Property
Code:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Wnd_name = "firefox.exe"
nWnd = FindWindow(Nothing, Wnd_name)
'show the info
If nWnd.Equals(ceroIntPtr) Then
MsgBox("Fenster läuft nicht")
Else
MsgBox("Fenster läuft")
End If
End Sub
Aber beim "klicken" kommt immer nur "Nicht gefunden"
|
|
|
04/25/2014, 22:40
|
#12
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Quote:
Originally Posted by silvermf1991
Ok nun bin ich ganz draussen >_<
Die Links sind aber fast nur C++ / C#, ich basiere doch eher auf vb.net, oder?
|
Die Links haben mit den Programmiersprachen eher wenig zutun. Fokus liegt hier eher auf der WinAPI die sowohl von C++, von C# als auch von VB.NET genutzt wird. In C++ wirst du nur häufiger von den Funktionen Gebrauch machen müssen, weil es dort nicht für alles einen Wrapper gibt, wie es in den .NET Sprachen meist der Fall ist.
C# kann man übrigens ohne Probleme in VB.NET übersetzen, geht auch umgekehrt.
Ich hab schon vermutet das du da nicht so richtig hinterherkommst, allerdings weiß ich wirklich nicht, wie ich dir das anders vermitteln soll. Dazu müsstest du auch erstmal wissen, was die WinAPI ist, wieso sie existiert und wie sie in Programmiersprachen wie VB.NET genutzt wird.
Hier sieht man auch noch einmal gut die Abhängigkeiten, wenn auch nicht auf dem aktuellen Stand:
Kernel, Treiber und Dienste fehlen hier zwar auch, macht aber nichts.
Du kannst die Funktionen aus der dazugehörigen DLL importieren. (Welche das ist, steht in MSDN auf der jeweiligen Seite der Funktion)
Sieht ungefähr so aus:
Code:
[DllImport("user32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lp1, string lp2);
Heißt also, hier wird die Funktion FindWindow() aus der user32.dll importiert, damit dein Programm diese nutzen kann.
Quote:
Originally Posted by silvermf1991
Hier was bei mir nun ist, ich kapiere jedenfalls nur, das es gerade nicht klappt
Code:
Dim nWnd As IntPtr
Dim ceroIntPtr As New IntPtr(0)
Dim Wnd_name As String
Private Property FindWindow(p1 As Object, Wnd_name As String) As IntPtr
Get
Return _findWindow
End Get
Set(value As IntPtr)
_findWindow = value
End Set
End Property
Code:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Wnd_name = "firefox.exe"
nWnd = FindWindow(Nothing, Wnd_name)
'show the info
If nWnd.Equals(ceroIntPtr) Then
MsgBox("Fenster läuft nicht")
Else
MsgBox("Fenster läuft")
End If
End Sub
Aber beim "klicken" kommt immer nur "Nicht gefunden"
|
Dein Code ist auch unvollständig, _findWindow sehe ich nicht und den Import von FindWindow auch nicht.
|
|
|
04/26/2014, 01:28
|
#13
|
elite*gold: 0
Join Date: Sep 2008
Posts: 111
Received Thanks: 27
|
Quote:
Originally Posted by Mostey
Fokus liegt hier eher auf der WinAPI die sowohl von C++, von C# als auch von VB.NET genutzt wird. In C++ wirst du nur häufiger von den Funktionen Gebrauch machen müssen, weil es dort nicht für alles einen Wrapper gibt, wie es in den .NET Sprachen meist der Fall ist.
C# kann man übrigens ohne Probleme in VB.NET übersetzen, geht auch umgekehrt.
|
Hab gerade gesehen, ich kann ja das Projekt neu machen, aber direkt auf C# ( hab mir mal "neues Project" genau angeschaut, hab garnicht gesehen das man direkt auf C# umstellen kann  )
Werd erstmal was ich nun hab, soweit ich kann, "umschreiben" bzw. neu schreiben, denke das wird dann einfacher sein
Quote:
Originally Posted by Mostey
Ich hab schon vermutet das du da nicht so richtig hinterherkommst, allerdings weiß ich wirklich nicht, wie ich dir das anders vermitteln soll. Dazu müsstest du auch erstmal wissen, was die WinAPI ist, wieso sie existiert und wie sie in Programmiersprachen wie VB.NET genutzt wird.
|
Auf die schnelle würde ich sagen, Windows Programme basieren auf Framework, um ältere Programme / Windows Systeme mit neuen Programmen / System kompatibel sein können, sodass man mit einer Codesprache, sagen wir nun .Net4 ist von W2000 bis W7 bestens geeignet, sodass man nicht wie bei Mac / Windows / Linux alles anders coden muss, damit es funktioniert
Lieg ich so in etwa mit meiner Vermutung richtig? :s
Quote:
Originally Posted by Mostey
Du kannst die Funktionen aus der dazugehörigen DLL importieren. (Welche das ist, steht in MSDN auf der jeweiligen Seite der Funktion)
|
Das machen wa wenn ich das Design soweit es geht in C# gebracht hab!
|
|
|
04/26/2014, 13:29
|
#14
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Quote:
Originally Posted by silvermf1991
Auf die schnelle würde ich sagen, Windows Programme basieren auf Framework, um ältere Programme / Windows Systeme mit neuen Programmen / System kompatibel sein können, sodass man mit einer Codesprache, sagen wir nun .Net4 ist von W2000 bis W7 bestens geeignet, sodass man nicht wie bei Mac / Windows / Linux alles anders coden muss, damit es funktioniert
Lieg ich so in etwa mit meiner Vermutung richtig? :s
|
Wenn du damit sagen willst, das du die WinAPI auch auf Unix, Linux und Mac nutzen kannst, um nicht portieren zu müssen, liegst du falsch. Wieso sollte es auch ne Windows API bei Linux geben?
Die WinAPI stellt halt die Schnittstelle zwischen OS und deinem Programm dar. Wenn es die nicht gäbe, könnte dein Programm über das Betriebssystem nichts machen und auf nichts zugreifen, was die Anzeige eines Fensters ja schon unmöglich macht, weil du deine Fenster ebenfalls beim OS anmelden musst.
Wie das so bei Linux läuft, kann ich dir nicht sagen. Hab' noch nie etwas auf Linux programmiert.
|
|
|
04/26/2014, 13:43
|
#15
|
elite*gold: 0
Join Date: Sep 2008
Posts: 111
Received Thanks: 27
|
Quote:
Originally Posted by Mostey
Wenn du damit sagen willst, das du die WinAPI auch auf Unix, Linux und Mac nutzen kannst, um nicht portieren zu müssen, liegst du falsch. Wieso sollte es auch ne Windows API bei Linux geben?
Die WinAPI stellt halt die Schnittstelle zwischen OS und deinem Programm dar.
|
Ich meinte es ja auch so
Man kann von, wie ich oben als beispiel schrieb, von Windows 2000 bis zu Windows 7 alles dank der Windows API, die vom Framework abhängt, überall benutzen, ausser bei Linux / Mac etc. da diese nen komplett andere "Codesprache" benötigen aber egal ich denke ich weiß was damit in etwa gemeint ist (:
und ich hab nun das Programm für C# umgeschrieben, nur das ich nun nichtmehr den Prozess auslesen kann, aber denke mit C# werd ich besser umgehen können, ich mag die Struktur eher als wie auf VB
Ich habe oben nun eingefügt: "using Tool_by_Devidra;", so sollte er doch für alle Formen ( wenn ich dies oben einfüge ) alle Klassen und co. benutzen die ich im Projekt erstelle?
|
|
|
 |
|
Similar Threads
|
Hilfe mit combobox!
02/12/2014 - .NET Languages - 6 Replies
Hi Leute!
Zu meinem Problem:
Ich habe eine WinForm erstellt mit einer combobox und diese auch mit inhalt gefüllt. Mein Problem, das ich möchte das das ausgewählte item nach einem button klick ausgelesen wird. Ich meine damit wenn in der auswahl steht zb. "rockefeller", das nach dem Klick über ein Label beschrieben wird wie oder wer oder was "rockefeller" ist.
Hoffe ihr könnt mir helfen :)
|
[VB]Wie Combobox von Webbrowser in Combobox in Form hinzufügen
01/06/2014 - .NET Languages - 3 Replies
^Topic
|
[Source]ComboBox
03/12/2012 - Flyff Private Server - 3 Replies
Hey,
Simple Frage: Ich möchte einen Code ausführen lassen, sobald der User den Inhalt einer ComboBox (m_SelectedIndex) ändert. Hab es in der OnChildNotify schon so versucht:
case WIDC_COMBOBOX1: blabla break;
Wie kann ich das richtig lösen?
|
combobox-CLR
03/11/2012 - C/C++ - 11 Replies
Me and friend wanna make a project.So we wanna a button read a combobox,which that combo,will have slots like slot1,slot2 etc.
slots will be values like
slot1 = 12345
slot2 = 123456
and we want a button read the slot and write to memory with value,a slot of combo list.
Sorry for fails english D;
|
All times are GMT +1. The time now is 15:16.
|
|