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
Vielleicht ist das für den ein oder die andere auch nützlich
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