Chrometabs programmatisch zählen
Moin Kollegen.
Ich suche einen Weg, wie ich per Skript ermitteln kann, wie viele Tabs ein Nutzer in Chrome offen hat. Es wäre zu einfach, wenn dies über die Anzahl der chrome.exe-Prozesse ginge - leider nein. Manchmal ist nur ein Tab offen, aber es laufen für diesen Nutzer bis zu 9 Chromeprozesse.
Hat jemand den Durchblick?
Ich suche einen Weg, wie ich per Skript ermitteln kann, wie viele Tabs ein Nutzer in Chrome offen hat. Es wäre zu einfach, wenn dies über die Anzahl der chrome.exe-Prozesse ginge - leider nein. Manchmal ist nur ein Tab offen, aber es laufen für diesen Nutzer bis zu 9 Chromeprozesse.
Hat jemand den Durchblick?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 364782
Url: https://administrator.de/contentid/364782
Ausgedruckt am: 24.11.2024 um 15:11 Uhr
29 Kommentare
Neuester Kommentar
Hi DWW,
he he. Letztens hatte ich selbe Aufgebenstellung beim FireFox.
Da habe ich auch keinen Ansatz. Sicher ist, dass er beim FF für neue Tabs einen neuen Prozess startet oder einen freien nimmt. Wenn man einen Tab schließt, dann beendet er offenbar nicht den dafür bereits gestarteten Prozess, dieser wird dann "frei".
Wenn Du da eine Lösung für den Chrome findest, dann wäre ich interessiert. Vielleicht kann ich das dann für den FF adaptieren.
E.
he he. Letztens hatte ich selbe Aufgebenstellung beim FireFox.
Da habe ich auch keinen Ansatz. Sicher ist, dass er beim FF für neue Tabs einen neuen Prozess startet oder einen freien nimmt. Wenn man einen Tab schließt, dann beendet er offenbar nicht den dafür bereits gestarteten Prozess, dieser wird dann "frei".
Wenn Du da eine Lösung für den Chrome findest, dann wäre ich interessiert. Vielleicht kann ich das dann für den FF adaptieren.
E.
Hallo Steffen.
Stichwort UIAutomationClient.dll ist heute im .NET Framework mit dabei.
https://msdn.microsoft.com/de-de/library/system.windows.automation(v=vs. ...
Und liegt hier
Zusätzlich einzubinden ist
Nützlich zur Entwicklung ist dabei auch das GUI inspect.exe Tool aus dem Windows SDK.
https://msdn.microsoft.com/en-us/library/windows/desktop/dd318521(v=vs.8 ...
Grüße Uwe
Stichwort UIAutomationClient.dll ist heute im .NET Framework mit dabei.
https://msdn.microsoft.com/de-de/library/system.windows.automation(v=vs. ...
Und liegt hier
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\WPF\UIAutomationClient.dll"
Zusätzlich einzubinden ist
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\WPF\UIAutomationTypes.dll"
Nützlich zur Entwicklung ist dabei auch das GUI inspect.exe Tool aus dem Windows SDK.
https://msdn.microsoft.com/en-us/library/windows/desktop/dd318521(v=vs.8 ...
Grüße Uwe
So hier mal schnell was zum probieren:
.NET4 als Konsolenanwendung
BrowserTabCount_364782.zip
Aufruf dann für chrome so
oder für den Feuerfux
Angetestet auf Windows 10 Enterprise (letztes Build) x64 und als Veteran Windows 7 x64 mit aktuellen Browser-Versionen.
Ausgegeben wird nur die reine Anzahl der Tabs.
Wenn man die Titel der Tabs haben möchte das geht bei Bedarf auch problemlos.
.NET4 als Konsolenanwendung
BrowserTabCount_364782.zip
Aufruf dann für chrome so
Browsertabcount.exe -chrome
Browsertabcount.exe -firefox
Angetestet auf Windows 10 Enterprise (letztes Build) x64 und als Veteran Windows 7 x64 mit aktuellen Browser-Versionen.
Ausgegeben wird nur die reine Anzahl der Tabs.
Wenn man die Titel der Tabs haben möchte das geht bei Bedarf auch problemlos.
Zitat von @rubberman:
Hallo Uwe,
funktioniert, hab das Tool aber ausgetrickst indem ich ein zweites Chrome Fenster aufgemacht habe. Im ersten hatte ich 3 Tabs, im zweiten einen. Je nachdem welches Fenster in Z Richtung am meisten vorn liegt, gibt mir das Tool entweder 3 oder 1 zurück.
Ja das habe ich auch schon bemerkt das liegt daran das der MainWindowHandle je nach Fokus zwischen den Prozessen springt auf die schnelle hab ich das jetzt noch nicht berücksichtigt.Hallo Uwe,
funktioniert, hab das Tool aber ausgetrickst indem ich ein zweites Chrome Fenster aufgemacht habe. Im ersten hatte ich 3 Tabs, im zweiten einen. Je nachdem welches Fenster in Z Richtung am meisten vorn liegt, gibt mir das Tool entweder 3 oder 1 zurück.
Deployed ist das nun sehr einfach: einen geplanten Task im Nutzerteil der GPO deployen, der nur auf dem RDHost erstellt wird und stündlich im Nutzerkontext ausgeführt wird. Wenn das Resultat > 20 ist, bekommen die Nutzer nun ein schönes Popup, das sie doch bitte nicht nur Tasks öffnen, sondern auch hin und wieder ein paar schließen sollen.
Und damit machst Du Dich dann wieder beliebt ...
Nope. 0.5.0.20
Hallo Uwe
Ich hab gestern mal versucht dein Programm nachzustellen (OK ich gebe zu ich habe mir den Plaintext in deinem Tool angesehen um zu wissen mit was du gearbeitet hast ). Ich bin fast verzweifelt weil es nur sporadisch funktioniert hat. Dann ist mir aufgefallen, dass ich immer 0 zurück bekommen habe, wenn Chrome in die Taskleiste minimiert war. Wenn das Fenster nur im Hintergrund liegt, bekomme ich die korrekte Anzahl Tabs. Also hab ich nochmal mit deinem Tool getestet und gemerkt dass es sich genauso verhält. (Win10 Home 32 Bit, Version 1609. Bin leider heute nicht dazu gekommen das noch mal auf einer anderen Maschine zu verifizieren.) Hab bislang nicht rausgefunden wo der Fehler liegt, wollte dich aber zumindest informieren. Vermutlich findest du den Fehler schneller.
Steffen
Ich hab gestern mal versucht dein Programm nachzustellen (OK ich gebe zu ich habe mir den Plaintext in deinem Tool angesehen um zu wissen mit was du gearbeitet hast ). Ich bin fast verzweifelt weil es nur sporadisch funktioniert hat. Dann ist mir aufgefallen, dass ich immer 0 zurück bekommen habe, wenn Chrome in die Taskleiste minimiert war. Wenn das Fenster nur im Hintergrund liegt, bekomme ich die korrekte Anzahl Tabs. Also hab ich nochmal mit deinem Tool getestet und gemerkt dass es sich genauso verhält. (Win10 Home 32 Bit, Version 1609. Bin leider heute nicht dazu gekommen das noch mal auf einer anderen Maschine zu verifizieren.) Hab bislang nicht rausgefunden wo der Fehler liegt, wollte dich aber zumindest informieren. Vermutlich findest du den Fehler schneller.
Steffen
Offensichtlich hängt Chrome die Tabs aus der Fenster-UI aus so lange es minimiert ist. Bei Firefox ist das nicht der Fall. Das ist ein Problem. Ich würde jetzt als Workaround höchstens einen temporären programmatischen Restore des(r) Fenster(s) (im Hintergrund) erwägen. Mal sehen ob ich noch eine andere Möglichkeit finde.
- edit 11:03 - Workaround für Chrome eingebaut wenn Fenster minimiert sind. (Link wie oben) 0.5.0.25.
- edit 11:03 - Workaround für Chrome eingebaut wenn Fenster minimiert sind. (Link wie oben) 0.5.0.25.
Für das Restore habe ich auch kein Workaround gefunden. Aber vielleicht 2 Vorschläge für Chrome:
- Nutze IsIconic() statt GetWindowPlacement(), dann sparst du dir das Overhead der WINDOWPLACEMENT Struktur.
- Suche nach dem ersten Tab, statt nach dem Button mit Name "Neuer Tab" oder "New Tab". Somit wird das ganze sprachunabhängig.
Grüße
Steffen
- Nutze IsIconic() statt GetWindowPlacement(), dann sparst du dir das Overhead der WINDOWPLACEMENT Struktur.
- Suche nach dem ersten Tab, statt nach dem Button mit Name "Neuer Tab" oder "New Tab". Somit wird das ganze sprachunabhängig.
PropertyCondition findCond = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.TabItem);
AutomationElement firstTab = AutomationElement.FromHandle(hWnd).FindFirst(TreeScope.Descendants, findCond);
if (firstTab != null)
cnt += TreeWalker.ControlViewWalker.GetParent(firstTab).FindAll(TreeScope.Children, findCond).Count;
Steffen
solange sie die UI nicht umbauen
Davor bist du nicht gefeit. Wenn der Klassenname dann nicht mehr mit "Chrome_WidgetWin" anfängt, hast du auch verloren und sich da nicht noch ein anderes Tabitem davor verkrümelt
Ich hatte anfangs die komplette Struktur nach TabItems durchsucht. Dann bekommst du auch das richtige Ergebnis, dauert aber länger als nach dem ersten Fund nur die Children zu sammeln. (Es ist mir sowieso ein Rätsel warum das gefühlte Ewigkeiten dauert. Bei der handvoll Elemente die Inspect zeigt, sollte das Ergebnis in wenigen Millisekunden vorliegen.)
Ah, sehe gerade du hast noch mal ein Update nachgeschoben
Eine Macke hat das Chrome Workaround noch. Das aktive Fenster verliert den Focus beim Restore und bekommt ihn auch nicht automatisch wieder. Hab das bei mir mit zwei zusätzlichen API Aufrufen gelöst:
Gruß
Steffen
Eine Macke hat das Chrome Workaround noch. Das aktive Fenster verliert den Focus beim Restore und bekommt ihn auch nicht automatisch wieder. Hab das bei mir mit zwei zusätzlichen API Aufrufen gelöst:
...
if (iconic) {
IntPtr hFgWnd = GetForegroundWindow();
ShowWindow(hWnd, 4u /* SW_SHOWNOACTIVATE */);
ShowWindowAsync(hWnd, 0u /* SW_HIDE */);
SetForegroundWindow(hFgWnd);
}
...
Steffen