[VB] Aktives Fenster ermitteln und deren Prozess-ID auslesen

Clocker 2800+

Lt. Commander
Registriert
Apr. 2007
Beiträge
1.409
Hallo,

ich bäuchte einen Code, mit dem man das zurzeit aktive Fenster ermitteln kann.

Ich stelle mir das so vor:
z.B. Notepad (Fenster) ist gerade aktiv. ---> Mein Programm erkennt es, und gibt den Prozess-ID von notepad.exe zurück.

Ich habe einen Code, mit dem man das Handle des aktiven Fensters ermitteln kann.

Aber wie komme ich vom Handle auf die Prozess-ID ?

Wer kann mir da helfen ?
 
Zuletzt bearbeitet:
Du kannst per System.Diagnostics.Process.GetProcesses() ein Array der Prozesse holen und dann dieses durchlaufen und vergleichen welcher das gleiche Handle hat. Vielleicht gehts auch schöner aber das ist die einzige Möglichkeit die mit jetzt auf die schnelle einfällt.

Beispiel in C# (ich benutze als Handle einfach GetCurrentProcess().Handle, das musst du dann durch deinen Code ersetzen. Sollte sich sonst aber problemlos übersetzen lassen):
Code:
using System;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            IntPtr deinHandle = Process.GetCurrentProcess().Handle;
            foreach (Process p in Process.GetProcesses())
            {
                try
                {
                    if (p.Handle == deinHandle)
                    {
                        Console.WriteLine("Prozess mit Handle {0} gefunden.\n  Id: {1}\n  Name: {2}\n  Titel des Hauptfensters: {3}", deinHandle, p.Id, p.ProcessName, p.MainWindowTitle); // oder eine andere Ausgabe
                        break;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("Ausnahme: {0}", e.Message);
                }
            }
            Console.Write("Drücken Sie eine Beliebige Taste um zu beenden");
            Console.ReadKey();
        }
    }
}
mfg
 
Es gibt sogar Übersetzer im Internet, einfach mal suchen!
<edit>10sec google => http://www.kamalpatel.net/ConvertCSharp2VB.aspx
=>
Code:
Imports System
Imports System.Diagnostics
 
Namespace ConsoleApplication1
    Class Program
        Shared  Sub Main(ByVal args() As String)
            Dim deinHandle As IntPtr =  Process.GetCurrentProcess().Handle 
            Dim p As Process
            For Each p In Process.GetProcesses()
                Try
                    If p.Handle = deinHandle Then
                        Console.WriteLine("Prozess mit Handle {0} gefunden.\n  Id: {1}\n  Name: {2}\n  Titel des Hauptfensters: {3}",deinHandle,p.Id,p.ProcessName,p.MainWindowTitle) 'oder andere ausgabe
                        Exit For
                    End If
                Catch e As Exception
                    Console.WriteLine("Ausnahme: {0}", e.Message)
                End Try
            Next
            Console.Write("Drücken Sie eine Beliebige Taste um zu beenden")
            Console.ReadKey()
        End Sub
    End Class
End Namespace
(leicht korrigiert) was ich nicht weiß, ist ob die ausgabe per console.writeline bei vb gleich funktioniert. aber kannst du ja ausprobieren bzw wirst es eh anders ausgeben vermutlich.
</edit>

mfg
 
Zuletzt bearbeitet:
Dann schreib welches! Wenn du keine Versionsnummer angibst gehe ich vom neuesten aus also VB 2008!
Mit VB 6 oder was auch immer du benutzt wird es eben etwas aufwändiger. Aber falls du das noch benutzt würde ich dir dringendst raten umzusteigen, da spätestens ab Vista die Programme eh nur noch mit extra installieren Runtimes laufen, wogegen .Net schon dabei ist.
 
Zurück
Oben