Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/04/2018, à 11:19

ROYALnb

[Résolu] Récupérer nom d'une fenêtre active

Bonjour,
Maintenant que je joue moins à des jeux vidéos, je songe à revenir à Ubuntu. Il y a cependant un petit script que je me suis fait en utilisant Autohotkey (sur windows uniquement donc) qui risque de me manquer.
Il se lance au démarrage de Windows, récupère en continu le titre des vidéos que je regarde avec VLC et les ajoute à un fichier texte avec la date et l'heure. Ainsi, si je veux reprendre une série plusieurs mois après je peux rapidement retrouver à quel épisode je m'étais arrêté.

Je me tourne donc vers vous aujourd'hui pour savoir comment pourrais-je faire sur Ubuntu pour arriver au même résultat ?

Voilà le script en question si besoin :

SetTitleMatchMode, RegEx

TitreAncien = Pas de titre ancien
TitreActuel = Pas de titre actuel

Loop
{
WinWaitActive, Lecteur multimédia VLC, ; Attend que VLC soit en fenêtre active
	{	
	WinGetTitle, TitreActuel, Lecteur multimédia VLC ; Récupère le nom de la fenêtre
	if (TitreActuel = TitreAncien) ; Si c'est un un nouveau nom de fenêtre l'ajoute au fichier log des vidéos avec la date et l'heure
		{
		}
	else
		{
		if (TitreActuel = "Lecteur multimédia VLC")
			{
			}
		else
			{
			TitreAncien = %TitreActuel%
			FormatTime, CurrentDateTime,, dd-MM-yy HH:mm
			FileAppend,%CurrentDateTime%	%TitreActuel%`n, D:\Documents\Log des vidéos.txt
			}
		}
	}
WinWaitNotActive, Lecteur multimédia VLC,
}

Return

Merci d'avance,

Dernière modification par ROYALnb (Le 16/04/2018, à 20:12)

Hors ligne

#2 Le 14/04/2018, à 22:54

Compte anonymisé

Re : [Résolu] Récupérer nom d'une fenêtre active

avec wmctrl ?

quelque chose comme ça ?

wmctrl -l|grep VLC

#3 Le 15/04/2018, à 16:57

ROYALnb

Re : [Résolu] Récupérer nom d'une fenêtre active

Merci de votre aide !
ps affiche tous les processus, je vois bien qu'on peut filtrer la ligne contenant VLC mais je ne pense pas qu'on puisse savoir avec cela quand VLC est en fenêtre active ou non (concernant le type de fichier ce n'est pas grave).
Avec wmctrl -l|grep VLC je peux récupérer le titre de la fenêtre de VLC mais n'arrive pas à trouver comment savoir si elle est fenêtre active ou non.
Je vois bien comment cibler la fenêtre active ou comment la fermer mais ne trouve pas comment récupérer son titre c'est frustrant !

Edit : J'ai réussi à récupérer le nom de la fenêtre active grâce à xdotool !
Me reste plus qu'à voir si j'arrive à refaire tout le reste en bash.

#!/bin/bash
if [[ "`xdotool getactivewindow getwindowname`" == *pc* ]]
	then
		echo "Bingo !"
	else
		echo "Zut !"
fi

Dernière modification par ROYALnb (Le 15/04/2018, à 20:11)

Hors ligne

#4 Le 16/04/2018, à 09:30

kholo

Re : [Résolu] Récupérer nom d'une fenêtre active

salut,
si je ne me trompe pas...
mettre le focus sur VLC

wmctrl -R VLC

si VLC n'est pas ouvert, lancer VLC

wmctrl -a vlc || vlc &

si VLC est ouvert, prendre le focus sinon lancer VLC

wmctrl -a vlc && wmctrl -R VLC || vlc &

...

Hors ligne

#5 Le 16/04/2018, à 20:12

ROYALnb

Re : [Résolu] Récupérer nom d'une fenêtre active

Merci kholo mais ce n'est pas vraiment ça que je voulais faire.
En tout cas c'est fait ! J'ai mon petit script de log des vidéos merci pour votre aide :3

#!/bin/bash
TitreAncien="TitreAncien"
TitreActuel="TitreActuel"
Date="Date"
log="/mon/chemin/Log des vidéos.txt"
for (( ; ; ))
do
	if [[ "`xdotool getactivewindow getwindowname`" == *VLC* ]]
		then
			TitreActuel="`xdotool getactivewindow getwindowname`"
			if [[ $TitreAncien != $TitreActuel ]]
				then
					if [[ $TitreActuel != "Lecteur multimédia VLC" ]]
						then
							TitreAncien=$TitreActuel
							Date=$(date +"%Y-%m-%d %H:%M")
							echo $Date $TitreActuel >> "$log"
						else
							echo "Tu regardes un plot"
					fi
			fi
		else
			echo "Tu ne regardes rien"
	fi
sleep 2m
done

Hors ligne

#6 Le 10/05/2020, à 13:11

Melnofil

Re : [Résolu] Récupérer nom d'une fenêtre active

Bonjour,

Je suis arrivé ici avec une question similaire, je donne la solution (avec wmctrl, sans xdotool) que j'ai trouvé ici au cas où ça servirait à quelqu'un.

Obtenir le WINDOW ID de la fenêtre active :

$(wmctrl -a :ACTIVE: -v 2>&1 | awk '{print $3}')

J'ai testé ça en faisant :

sleep 3 && set $(wmctrl -l | grep $(wmctrl -a :ACTIVE: -v 2>&1 | awk '{print $3}')) && shift 3 && echo $*

Vous avez 3 sec après avoir tapé la commande pour activer une autre fenêtre et son titre devrait s'afficher sur la console.


Attention, chat méchant !

Hors ligne

#7 Le 10/05/2020, à 15:44

Watael

Re : [Résolu] Récupérer nom d'une fenêtre active

le plus important dans la ligne qui suite c'est l'emploi de :SELECT:, qui permet de ne pas utiliser sleep :

wmctrl -l | awk -v pat="^$(wmctrl -a :SELECT: -v 2>&1 | awk 'NF==3{print $3}')" '$0~pat{print $4}'

oops! si on s'arrête au quatrième champ, on peut perdre des informations.
il faut afficher le reste de la ligne à partir du quatrième champ :

wmctrl -l | awk 'BEGIN{cmd="wmctrl -a :SELECT: -v 2>&1"; while ((cmd| getline)>0)if(NF==3)pat=$3; close(cmd)}$0~"^"pat{for(i=4;i<=NF;i++)printf $i; print ""}'

ok, on perd en lisibilité quand on ne connait pas un peu awk.

Dernière modification par Watael (Le 10/05/2020, à 16:51)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne