Laden...

Benachrichtigung/Event, wenn fremde Anwendung ein Fenster öffnet

Erstellt von mabo vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.433 Views
M
mabo Themenstarter:in
334 Beiträge seit 2007
vor 9 Jahren
Benachrichtigung/Event, wenn fremde Anwendung ein Fenster öffnet

Hallo,

gibt es unter Windows die Möglichkeit, sich irgendwie (über einen Hook o.ä.) benachrichtigen zu lassen, wenn ein bestimmter Prozess ein neues Fenster erzeugt?

Aktuell durchsuche ich die Fensterhandles eines Prozesses nach einer bestimmten Klasse in einer Schleife und führe weitere Aktionen aus, wenn ein Ergebnis gefunden wird:


private void Run(object state)
{
	while (_running)
	{
		foreach (var handle in EnumerateProcessWindowHandles(Process.GetProcessesByName("process").First().Id))
		{
			var classname = new StringBuilder(256);
			Native.GetClassName(handle, classname, classname.Capacity);
			if (classname.ToString() == "zuSuchendeKlasse")
			{
				//...
			}
		}
		Thread.Sleep(100);
	}
}

private IEnumerable<IntPtr> EnumerateProcessWindowHandles(int processId)
{
	var handles = new List<IntPtr>();

	foreach (ProcessThread thread in Process.GetProcessById(processId).Threads)
		Native.EnumThreadWindows(thread.Id,
			(hWnd, lParam) => { handles.Add(hWnd); return true; }, IntPtr.Zero);

	return handles;
}

Jetzt würde ich gern die Schleife eliminieren wenn es geht. 🙂

Gruß mabo

4.939 Beiträge seit 2008
vor 9 Jahren

Hallo,

hier ein passender Artikel dazu: How to Write a Managed Global Hook for Window Creation and Destruction

Ups: sehe gerade, daß dies auch nur mittels einer Poll-Loop realisiert ist - gibt wohl in C# (d.h. Managed Code) keinen anderen Weg...
Direkt mit C (bzw. C++) geht es so: How to create a global (system) windows hook ?

M
mabo Themenstarter:in
334 Beiträge seit 2007
vor 9 Jahren

Hi,

danke für die Infos, das hat mich auf die richtige Spur gebracht.

Der Artikel Using hooks from C# und der darin verlinkte Artikel Windows Hooks in the .NET Framework sehen vielversprechend aus.

Das werde ich mal ausprobieren.

Gruß mabo