derwowusste
Goto Top

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?

Content-Key: 364782

Url: https://administrator.de/contentid/364782

Printed on: June 21, 2024 at 21:06 o'clock

Member: emeriks
emeriks Feb 14, 2018 at 16:51:33 (UTC)
Goto Top
Hi DWW,
he he. Letztens hatte ich selbe Aufgebenstellung beim FireFox. face-smile
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.
Mitglied: 135333
135333 Feb 14, 2018 at 17:11:16 (UTC)
Goto Top
Member: DerWoWusste
DerWoWusste Feb 14, 2018 at 18:10:38 (UTC)
Goto Top
Moin.

Tja, snapdragon, das ergooglet man schnell, aber was mache ich damit? Ich stecke da nicht wirklich drin, um das zu verwerten.
Member: Epixc0re
Epixc0re Feb 14, 2018 at 19:47:18 (UTC)
Goto Top
Kannst Du Extensions im Chrome nach installieren? Dann könnte man da was bauen ...
Member: DerWoWusste
DerWoWusste Feb 14, 2018 at 19:50:09 (UTC)
Goto Top
Ja klar, das könnte ich wohl, wenn's nicht anders geht.

Wenn es aber keine naheliegende Lösung gibt, wird es wohl doch auf die Zählung der chrome-Prozesse hinauslaufen Auch wenn die nicht immer so aussagekräftig ist, so besteht ja doch eine Korrelation von Tabs und Prozessen.
Member: Epixc0re
Epixc0re Feb 14, 2018 at 20:01:28 (UTC)
Goto Top
Ok, Vorschlag: chrome Extension welche auf close/Open Events für tabs reagiert und die Anzahl dann in ein temp file schreibt, welches Du dann einlesen kannst - was haltest Du davon?

lG,
Stefan
Member: DerWoWusste
DerWoWusste Feb 14, 2018 at 20:08:44 (UTC)
Goto Top
Wenn der Sourcecode vorliegt, gerne.
Member: Epixc0re
Epixc0re Feb 14, 2018 at 20:17:38 (UTC)
Goto Top
Ich Tipp Dir das morgen mal runter, bin grad 500km gefahren & im Bett gelandet!

lG,
Stefan
Member: DerWoWusste
DerWoWusste Feb 14, 2018 at 20:47:19 (UTC)
Goto Top
Nur wenn's leicht fällt.
Die Prozesse setzen sich offenbar aus Extensions (je einer pro Extension) plus der Anzahl der Tabs zusammen +2, welche ich nicht verstehe, aber was soll's. Da die meisten hier die gleiche Anzahl von Extensions haben, kann ich also auch so schon genau genug überblicken, wie viele Tabs jeder offen hat, indem ich die chrome-Prozesse zähle und einen festen Wert abziehe.
Member: colinardo
colinardo Feb 15, 2018 updated at 10:23:55 (UTC)
Goto Top
Servus DWW,
könnte dir das auch ohne Extension schnell als C# EXE für Chrome und Firefox zusammenschreiben.
Wenn noch Interesse besteht einfach melden.

Grüße Uwe
Member: rubberman
rubberman Feb 15, 2018 at 10:30:56 (UTC)
Goto Top
Hallo Uwe,

aus Interesse - wo greifst du an, um die Anzahl Tabs zu ermitteln? Ich hab gestern mal Spy angeworfen um zu sehen was ich für Fenster-Handles von Chrome bekomme. An der Stelle bin ich nicht weitergekommen da ich keine Handles von den Tabs bekommen habe, die inaktiv waren.

Steffen
Member: colinardo
colinardo Feb 15, 2018 updated at 10:53:00 (UTC)
Goto Top
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
"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
Member: rubberman
rubberman Feb 15, 2018 at 10:54:39 (UTC)
Goto Top
Thx Uwe, schau ich mir heute Abend mal an face-smile

Steffen
Member: colinardo
Solution colinardo Feb 15, 2018 updated at 11:09:14 (UTC)
Goto Top
So hier mal schnell was zum probieren:

.NET4 als Konsolenanwendung
BrowserTabCount_364782.zip


Aufruf dann für chrome so
Browsertabcount.exe -chrome
oder für den Feuerfux
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.
Member: rubberman
rubberman Feb 15, 2018 at 12:05:54 (UTC)
Goto Top
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.

Steffen
Member: colinardo
colinardo Feb 15, 2018 updated at 12:20:09 (UTC)
Goto Top
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.
Member: DerWoWusste
DerWoWusste Feb 15, 2018 updated at 13:35:05 (UTC)
Goto Top
Was soll ich sagen? face-smile face-smile
Uwe, wie immer großartig. Klappt wie eine 1.

Ich nutze das übrigens, um Nutzer etwas zu zügeln, die unseren RD-Host mit bis zu 60 Chrometabs doch ein wenig ausbremsen.
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.
Member: emeriks
emeriks Feb 15, 2018 at 13:39:04 (UTC)
Goto Top
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 ... face-wink
Member: colinardo
colinardo Feb 15, 2018 updated at 13:45:47 (UTC)
Goto Top
So, der Fehler das weitere Fenster mit Tabs sowohl bei Firefox und Chrome nicht berücksichtigt wurden ist mit dem aktuellen Build behoben. Link oben bleibt gleich. Edge und IE werde ich bei Zeiten eventuell noch hinzufügen wenn die Nachfrage da ist.
Member: DerWoWusste
DerWoWusste Feb 15, 2018 updated at 13:51:57 (UTC)
Goto Top
@colinardo:
Welche Versionsnummer hat der Build, welcher mehrere Fenster berücksichtigt? Der Link oben gibt mir noch die alte 0.5.0.1
@emeriks
NIcht beliebt, aber gefürchtet.
Member: rubberman
rubberman Feb 15, 2018 at 14:06:01 (UTC)
Goto Top
Zitat von @DerWoWusste:
Der Link oben gibt mir noch die alte 0.5.0.1
Nope. 0.5.0.20
Member: DerWoWusste
DerWoWusste Feb 15, 2018 at 14:13:01 (UTC)
Goto Top
Ah-jetzt-ja. Eine 0.5.0.20!
Member: rubberman
rubberman Feb 16, 2018 at 16:37:13 (UTC)
Goto Top
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 face-wink ). 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
Member: colinardo
colinardo Feb 17, 2018 updated at 12:22:45 (UTC)
Goto Top
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.
Member: rubberman
rubberman Feb 17, 2018 at 12:20:23 (UTC)
Goto Top
Ah, okay. Heißt, da muss die WinAPI noch ein bisschen herhalten. Verstanden.

Grüße
Steffen
Member: rubberman
rubberman Feb 18, 2018 updated at 15:48:09 (UTC)
Goto Top
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.
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;
Grüße
Steffen
Member: colinardo
colinardo Feb 18, 2018 updated at 19:44:12 (UTC)
Goto Top
Stimmt, das gibt's ja auch noch, danke, Brett vorm Kopp.
Jepp solange sie die UI nicht umbauen und sich da nicht noch ein anderes Tabitem davor verkrümelt, ok face-smile.
Member: rubberman
rubberman Feb 18, 2018 updated at 20:29:35 (UTC)
Goto Top
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 face-wink

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.)
Member: rubberman
rubberman Feb 23, 2018 at 17:46:12 (UTC)
Goto Top
Ah, sehe gerade du hast noch mal ein Update nachgeschoben face-smile
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);
}
...
Gruß
Steffen