Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

TeamViewer - Partner ist online


  • Please log in to reply
1 reply to this topic
franc
  • Members
  • 42 posts
  • Last active: Jan 07 2016 10:41 PM
  • Joined: 12 Feb 2010

Hallo

 

ich will hier ein zwar etwas holpriges, aber funktionierendes Skript vorstellen, mit dem man die Meldung von TeamViewer, dass ein Kontakt in der Liste der "Computer & Kontakte" online gegangen ist, abgreifen und verarbeiten kann.

 

Ich habe es so eingerichtet, dass sich eine MessageBox öffnet, wenn der Partner online geht.

 

Man braucht für das Skript evtl. IrfanView, mit dem die TV-Meldung geöffnet wird.

Man braucht notwendig aber die AHK-Grafikbibliothek Gdip.ahk

 

Der Ablauf ist so:

 

Wenn man im TeamViewer "Computer & Kontakte" mit einem Konto angemeldet hat kann man einstellen, dass ein kleines PopUp-Fenster unten rechts aufpoppt, sobald sich ein Kontakt bei TV angemeldet und dies nicht in den TV-Einstellungen abgeschaltet hat.

Dieses Fenster wird von AHK entdeckt und vom Screenshot ausgeschnitten. Es wird in das Verzeichnis:

 

c:\Programme\TeamViewer\partner_Online\

 

Mit Datum und Uhrzeit im Dateinamen gespeichert.

Die Dateigröße ist je nach Namen relativ einzigartig, daher kann man sie zur Erkennung des Kontaktes durch Größenvergleich verwenden.

Leider kann man nämlich aus dem PopUp nichts lesen (gar nichts, das scheint so gewollt).

Man muss also zuerst von allen Kontakten, über die man benachrichtigt werden will, die Größe ermitteln, also diese erstmalig über das Skript speichern, dann trägt man sie ins Skript ein.

 

Man kann mit der Tastenkombination STRG+SHIFT+ALT+O die Benachrichtigung ein oder ausschalten.

Mit STRG+SHIFT+ALT+P kann man das Skript im SystemTray versteckeln (Standard ist versteckt).

 

Das Skript ist noch recht grob, z.B. wäre ein Einstellungsmenü für die Kontakte angenehm, damit man nicht im Code rumschreiben muss.

Man wird also nicht darum herumkommen, es durch zu lesen und zu editieren, an der ein oder anderen Stelle.

 

Ich finde es nützlich, wenn ich z.B. meinem Vater sage, er soll seinen Mac anschalten damit ich ihm helfe und ich dann warte...

Ich warte so lange, bis ich etwas anderes mache und dann verpasse ich, dass er endlich angeschaltet hatte happy.png

 

Vielleicht ist das für den ein oder die andere auch nützlich happy.png

 

PartnerOnline.ahk

; PartnerOnline.ahk
; sobald das Benachrichtigungsfenster von TeamViewer aufpoppt, dass sich ein Partner XY angemeldet hat,
; wird die entsprechende Stelle auf dem Monitor ausgeschnitten und als Bild im Verzeichnis:
; c:\Programme\TeamViewer\partner_Online\
; gespeichert. Falls nicht vorhanden, muss dieses angelegt werden.
; Das Skript verwendet die ahk-Bibliothek gdip.ahk, diese muss auch eingebunden werden (s.u.)
; Dieses Bild wird bei Bedarf (im Skript entsprechend entkommentieren)
; von IrfanView dann geoeffnet, danach wird 8 Sekunden gewartet (wg. Loop).

; Skript bleibt am laufen
#Persistent

; kein Icon (aber mit Hotkey STRG+SHIFT+ALT+P s.u., wird das AHK-Symbol im SystemTray angezeigt/entfernt)
#NoTrayIcon

; fuer Grafikfunktionen mit AHK (hier: das Ausschneiden von Screenshotinhalten)
; von: http://de.autohotkey.com/forum/viewtopic.php?t=8339
#include c:\Programme\AutoHotkey\Gdip.ahk

; Test ob Sound OK, kann auch auskommentiert werden
SoundPlay, %A_WinDir%\Media\tada.wav

DetectHiddenWindows, on

; Nachricht wenn ein Partner online geht (MsgBox)
; wird durch STRG+SHIFT+ALT+O umgeschaltet, s.u.
msgPartnerOnline := false

; Hier muessen die passenden Dateigroessen erst ermittelt und eingetragen werden.
; Achtung! Wenn ein TV-Kontakt umbenannt wird, dann aendert sich auch die Dateigroesse!
; Dateigrößen der TV-Benachrichtigungsfenster (Partner XY ist online):

my_comp := 3001
my_father := 3002
my_friend := 3003

; sekuendlich aufgerufen
SetTimer, Check, 1000

Check:
; das ist das TV-Benachrichtigungsfenster bei "Partner ist online"
if winexist("ahk_class CNotificationWindow ahk_exe TeamViewer.exe")
{	
	; die aktuelle Position des Benachrichtigungsfensters suchen
	WinGetPos, X, Y, W, H, ahk_class CNotificationWindow ahk_exe TeamViewer.exe
	
	; fuer den Dateinamen, zur sauberen Sortierung
	FormatTime, TimeString,,yyyy-MM-dd_HH.mm.ss
	
	; schneidet mit gdip.ahk das Benachrichtigungsfenster aus und speichert es als JPG mit eigenem Titel
	pToken := Gdip_Startup()
	pBitmap := Gdip_BitmapFromScreen(X "|" Y "|" W "|" H)
	Gdip_SaveBitmapToFile(pBitmap, "c:\Programme\TeamViewer\partner_Online\" TimeString "_online.jpg")
	FileGetSize, fileSize, c:\Programme\TeamViewer\partner_online\%TimeString%_online.jpg
	Gdip_DisposeImage(pBitmap)
	Gdip_Shutdown(pToken)
	
	; Auswertung der Dateigroessen
	if msgPartnerOnline
	{
		;MsgBox, %fileSize%
		;MsgBox, %franc_macbook_vm_xp%
		
		if fileSize = %my_comp%
		{
			MsgBox, Mein PC hat sich angemeldet
; wahlweise auch ein modales Fenster:
;			SplashTextOn, 330, 120, Anmeldung, `nMein PC hat sich angemeldet`n`nBenachrichtigung ausschalten mit SHIFT+STRG+ALT+O (O wie OFF)
;			Sleep, 3000
;			SplashTextOff
	
; evtl. einen Sound spielen
;			SoundPlay, %A_WinDir%\Media\tada.wav		
		}
		else if fileSize = %my_father%
		{
			MsgBox, Mein Vater hat sich angemeldet
		}
		else if fileSize = %my_friend%
		{
			MsgBox, Mein Freund hat sich angemeldet
		}
;		else if fileSize = %XXX%)
;		{
;			MsgBox, XXX hat sich angemeldet
;		}
;		...		
		else
		{
			MsgBox, Nicht registrierter TV-Kontakt hat sich angemeldet. `nDateigröße: %fileSize%
			Run "C:\Programme\IrfanView\i_view32.exe" c:\Programme\TeamViewer\partner_online\%TimeString%_online.jpg
		}
	}
	; Falls keine MsgBox geoeffnet werden soll, wenn ein Partner online ist, also wenn msgPartnerOnline 0 ist
	;else MsgBox, TV-Partner ist online Nachricht ist deaktiviert
	
	; Run ... entkokmmentieren, wenn ein Irfan-Fenster mit der Benachrichtigung aufgehen soll, sonst nur Chronik
	;Run "C:\Programme\IrfanView\i_view32.exe" c:\Programme\TeamViewer\partner_online\%TimeString%_online.jpg
	
	; Zeile entkommentieren, wenn man eine generelle Meldung ueber irgendeinen neuen Onlinepartner haben will
	;MsgBox, Ein neuer TeamViewer Partner ist online. 
	
	; Sleep 8 Sekunden, weil sonst ein Haufen neuer Irfan Fenster aufgehen wg. dem Loop. 
	; Ohne Loop muesste man das Skript aber immer wieder starten (das TV-Benachrichtigungsfenster bleibt ca. 8 Sek. offen).
	Sleep, 8000
}
return


; bei STRG+SHIFT+ALT+O Benachrichtigung ausschalten (O wie "OFF")
^+!o::
{
	;MsgBox, %msgPartnerOnline%
	
	; Benachrichtigung ausschalten
	if msgPartnerOnline 
	{
		msgPartnerOnline := false
		MsgBox, Benachrichtigung aus
	}
	; Benachrichtigung einschalten
	else
	{
		msgPartnerOnline := true
		MsgBox, Benachrichtigung ein
	}	
	;MsgBox, %msgPartnerOnline%
}
return


; bei STRG+SHIFT+ALT+P TrayIcon (P wie "Partner ist online") zeigen
^+!p::
   If (A_IconHidden = 1) ; 1 = TrayIcon ist versteckt
      Menu, Tray, Icon  ; und wir machen es jetzt sichtbar
   else
      Menu, Tray, NoIcon  ; unsichtbar machen, da es sichtbar war
return

Gruß franc



franc
  • Members
  • 42 posts
  • Last active: Jan 07 2016 10:41 PM
  • Joined: 12 Feb 2010

Und im Mac gibt es kein Autohotkey, aber dafür das gute alte Applescript.

Damit kann man allerdings auch allerhand machen, wenn man weiß wie. Es gibt leider kein Spy in AS, aber es gibt den genialen "UI Browser". Damit kann man so einige Elemente auslesen und obendrein gleich ein fix und fertiges AS generieren, diese Elemente aufzurufen, z.B. einen OK Button zu drücken mit den ganzen Vorbereitungen :)

Leider kostet der UI Browser einiges, aber man kann ihn uneingeschränkt kostenlos einen Monat lang testen. Das kann man ja auf einem Testsystem machen, das man dann wieder zurück stellt, wenn man das Programm nicht kaufen will oder kann.

 

Ein Beispiel für Appleskript als Ersatz für AHK hier zum Thema:

Als Applescript kann man das Folgende Skript als App exportieren, in die Applications kopieren und dem Benutzer als Startobjekt zuweisen.

repeat
    if application "TeamViewer" is running then
        tell application "System Events"
            tell process "TeamViewer"
                set windowRef to (a reference to window "Gesponserte Verbindung")
                if (exists windowRef) then
                    click button "OK" of window "Gesponserte Verbindung"
                    -- display dialog "Nagscreen ist offen"
                end if
            end tell
        end tell
        delay 3
    else
        exit repeat
    end if
end repeat

Das ruft per repeat und delay alle 3 Sekunden auf, ob ein Fenster mit "Gesponserte Verbindung" existiert und falls ja, wird es per OK-Button-Klick geschlossen.

 

Davor am Besten zudem in der info.plist (die sieht man wenn man aus dem Kontextmenü "Paketinhalt einblenden" ausführt) der so exportierten AS-App einfügen:

<key>LSUIElement</key>
<true/>

Damit wird die App dann unauffällig im Hintergrund (ohne im Dock oder in den Tasks aufzutauchen) ausgeführt. Man kann sie dann nur schließen, wenn man entweder TeamViewer komplett schließt (s. Skript) oder über etwa die Aktivitätsanzeige das Skript abschießt.