Créer et ajouter fonction au menu contextuel

Créer et ajouter fonction au menu contextuel - Divers - Programmation

Marsh Posté le 13-11-2022 à 17:46:02    

Bonjour,
 
Je voudrais savoir s'il y a moyen de créer une option qui servirait surtout pour les fichiers txt ou doc, ou même quand on tape un message sur un forum, et la rajouter au menu contextuel de Windows 10 ?
Ce serait une inversion de 2 caractères : par exemple en cas de faute de frappe, j'aimerais pouvoir sélectionner les 2 caractères, faire un clic droit et avoir l'option "inversion" (en-dessous de couper, copier, ...) pour que ab devienne ba.
Là c'est juste une idée basique mais je pourrais ensuite faire une truc un peu plus poussé.
 
Je pensais par exemple créer un script Powershell et mettre un raccourci dans le menu contextuel, mais je ne sais pas comment faire.
 
Si vous avez une idée  :jap:


Message édité par arnuche le 13-11-2022 à 17:48:22
Reply

Marsh Posté le 13-11-2022 à 17:46:02   

Reply

Marsh Posté le 13-11-2022 à 18:48:03    

J'ai plus Windows, mais à mon avis chaque programme/appli gère lui-même son menu contextuel, donc je ne suis pas certain qu'on puisse rajouter une option globalement.
 
Il existe des logiciels à "raccourcis", genre quand tu fait une certaine combinaison de touches ça va simuler des appuis clavier pour rentrer un bloc de text ou autre, à mon avis il faudrait plutôt partir dans cette direction. Mais ça risque de ne pas être simple, il faudra toucher à la API Windows, pas certain que ce soit possible en Powershell p.ex.
 
Bref, j'en sais rien. :o


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 13-11-2022 à 21:12:27    

Ok, j'ai trouvé ça pour lancer le bloc-notes ;
https://www.zebulon.fr/astuces/prat [...] ndows.html
Donc il y a moyen de rajouter qqch dans le menu contextuel mais c'est le bloc-notes Windows, pas un script concocté par l'utilisateur.

Reply

Marsh Posté le 14-11-2022 à 15:56:46    

En général, ça se fait via des entrées dans la base de registre. Mais c'est vrai que le menu contextuel est propre à chaque appli.
Par ailleurs, ce genre de logiciel qui vient rajouter des trucs dans le menu contextuel peut ne pas être apprécié (pas mal de logiciels foireux gratuits font ça et c'est une galère à virer car le gars a mal codé la fonction de désinstall).
 
Une solution alternative dans ce qu'évoquait rat de combat : AutoIt. C'est un outil d'automatisation de clic de souris et frappe clavier. Tu fais un petit script que tu convertis en .exe qui se lancera au démarrage de Windows. Tu pourras l'appeler sur une combinaison de touches par ex. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 15-11-2022 à 08:51:29    

Ok, et on peut faire ça avec un bat ?
Parce que dans le lien que j'ai donné, il montre qu'on peut ajouter une nouvelle clé dans le registre pour le menu contextuel et on choisit le chemin de l’exécutable associé à cette clé.
Faut voir si ça marche uniquement avec un exe ou aussi un bat.
 
Et je dois encore trouver le script qui permettrait de faire ce que j'avais imaginé.

Reply

Marsh Posté le 15-11-2022 à 10:19:56    

En .bat, tu vas galérer, je pense. Je doute que le langage soit suffisamment complet pour faire ce que tu souhaites.
Un langage qui sait manipuler les API natives de l'OS sera plus adapté.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 15-11-2022 à 10:29:44    

rufo a écrit :

En .bat, tu vas galérer, je pense. Je doute que le langage soit suffisamment complet pour faire ce que tu souhaites.


Si je trouve le moyen de faire l'inversion de caractères avec Powershell, je suppose que je peux en faire un bat (ou un exe mais je ne sais pas comment).
Si ça passe avec un bat, il faut que la clé de registre que je rajouterais reconnaisse ce bat.
 

rufo a écrit :

Un langage qui sait manipuler les API natives de l'OS sera plus adapté.


Et tu as une idée de comment faire ?

Reply

Marsh Posté le 15-11-2022 à 11:41:07    

Powershell peut-être (jamais fait donc je ne sais pas mais je pense que oui, il saura faire), Autoit ou plus classique, C#.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 15-11-2022 à 12:04:25    

Ok, je connais vaguement PS mais pas les autres, aucune connaissance en programmation.

Reply

Marsh Posté le 16-11-2022 à 16:32:43    

Pour la partie PS, je pensais à un simple truc du genre ;

Code :
  1. Powershell.exe
  2. Get-Childitem -Path "K:\test" | ForEach-Object { $_ | Rename-Item -NewName {$_.name -replace '(.)(.)', '$2$1' }}
  3. pause


Sauf que là il y a un chemin indiqué et que les caractères visés ne sont pas précisés, alors que la complexité de ce que je veux vient du fait que la commande ne doit s'appliquer qu'aux 2 caractères sélectionnés avec la souris, comment faire ça ?
Il y a sans doute une ligne à rajouter avant Powershell.exe, du genre "For selected characters do ...".
 
Est-ce qu'une sélection est écrite dans un fichier temporaire de Windows ? Si oui, il y aurait peut-être moyen de se référer à ce fichier.
Et quand on sélectionne des caractères (par exemple dans un fichier txt) et qu'on fait supprimer, il supprime bien uniquement la sélection, donc je suppose qu'il y a une sorte d'adresse de début et de fin des caractères à traiter (pour les couper, copier, supprimer ...), il faudrait pouvoir utiliser cette adresse (genre ligne n°126, caractères -ou colonnes- 65 et 66).


Message édité par arnuche le 16-11-2022 à 16:41:57
Reply

Marsh Posté le 16-11-2022 à 16:32:43   

Reply

Marsh Posté le 16-11-2022 à 17:11:58    

Non, la sélection de caractères n'est stocké nul part sauf si avant tu fais un ctrl+c pour les mettre dans le presse-papier. D'où pourquoi je parlais d'utiliser un langage de dév classique sur Windows comme Java ou C# qui sait gérer ça. Autoit aussi.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-11-2022 à 09:30:12    

Ok, et pourrait-on utiliser le presse-papier ? Sauf que ça fait un clic en plus et l'idée de départ était de pouvoir lancer une commande très rapidement via clic droit après sélection.
 
Pour en revenir à ce que tu proposais plus haut ;
 

rufo a écrit :

Une solution alternative dans ce qu'évoquait rat de combat : AutoIt. C'est un outil d'automatisation de clic de souris et frappe clavier. Tu fais un petit script que tu convertis en .exe


Comment convertir en exe ?
 

rufo a écrit :

Tu pourras l'appeler sur une combinaison de touches par ex.


Et serait-ce possible de l'appeler aussi via le menu contextuel ?
D'après l'exemple donné dans le lien que j'avais posté, il semblerait qu'on puisse rajouter l'exe qu'on veut dans le registre.


Message édité par arnuche le 17-11-2022 à 09:30:33
Reply

Marsh Posté le 17-11-2022 à 15:30:48    

Y'a un outil livré avec Autoit qui fait la conversion dus script en exe.
 
Oui, en bidouillant la base de registre tu pourras. Mais perso, je ne recommande pas. Bidouiller la base de registre n'est jamais une bonne idée pour rajouter des trucs comme ça. :/
 
Au passage, ton besoin me paraît vraiment pas pertinent : le correcteur orthographique de ton navigateur web ou traitement de texte ne suffit pas pour corriger l'inversion de 2 caractères ? Parce que franchement, devoir sélectionner les 2 caractères qui posent souci à la souris puis clic droit de souris puis clic sur l'item d'inversion, autant inverser les 2 caractères soi-même, ça ira plus vite  :heink:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-11-2022 à 16:01:06    

rufo a écrit :

Y'a un outil livré avec Autoit qui fait la conversion dus script en exe.


Ok, j'ai vu qu'il y avait aussi BAT to EXE Converter et d'autres ;
https://bat-to-exe-converter-x64.fr.softonic.com/
https://adamtheautomator.com/bat-to-exe/
 

rufo a écrit :

Oui, en bidouillant la base de registre tu pourras. Mais perso, je ne recommande pas. Bidouiller la base de registre n'est jamais une bonne idée pour rajouter des trucs comme ça. :/


Dans l'exemple que j'avais posté plus haut ça n'avait pas l'air problématique, c'est juste l'ajout d'une clé. Mais si ça pose souci je pourrai la virer et la remplacer par une combinaison de touches (genre ALT + i).
 

rufo a écrit :

Au passage, ton besoin me paraît vraiment pas pertinent : le correcteur orthographique de ton navigateur web ou traitement de texte ne suffit pas pour corriger l'inversion de 2 caractères ? Parce que franchement, devoir sélectionner les 2 caractères qui posent souci à la souris puis clic droit de souris puis clic sur l'item d'inversion, autant inverser les 2 caractères soi-même, ça ira plus vite  :heink:


C'est vrai pour ce cas mais c'est surtout un premier test pour voir si j'y arrive.
Ça me servira ensuite pour d'autres choses plus complexes où le raccourci dans le menu contextuel me ferait gagner du temps.
 
Finalement le plus dur est de trouver le bon script. J'ai regardé AutoIt mais je n'y comprends rien  :o  
 
J'aimerais y arriver avec PS mais je ne vois pas comment utiliser les caractères sélectionnés au lieu d'un pattern. :??:

Message cité 1 fois
Message édité par arnuche le 17-11-2022 à 16:18:34
Reply

Marsh Posté le 17-11-2022 à 17:40:56    

arnuche a écrit :

J'aimerais y arriver avec PS mais je ne vois pas comment utiliser les caractères sélectionnés au lieu d'un pattern. :??:

Comme on disait c'est probablement impossible ou alors il faut passer par l'API Windows -> C#, C++, Java ou similaire (Python peut-être aussi?). Mais c'est pas évident, faut pas mal de compétences en prog.


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 17-11-2022 à 18:21:08    

Ah, là malheureusement c'est bien au-delà de mes compétences  :(  
Il faudrait que je trouve un script similaire à ce que je cherche et que je n'aurais qu'à modifer.

Reply

Marsh Posté le 17-11-2022 à 19:14:33    

Tu sembles pas comprendre que pouvoir récupérer la sélection de caractères présent dans n'importe quelle application sous Windows, ça peut se faire qu'en manipulant les primitives systèmes de cet OS. Donc peut-être avec du PS (mais à vérifier, j'ai de gros doutes), mais pas avec un langage de script classique (sauf Autoit mais qui lui, manipule les primitives système).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-11-2022 à 21:26:40    

Si j'ai compris, d'où ma réponse précédente.
Et AutoIt demande des connaissances que je n'ai pas.
Mais je suis preneur d'un script d'AutoIt si quelqu'un a déjà tenté un truc similaire.

Reply

Marsh Posté le 17-11-2022 à 22:47:07    

Cat prog ici, on ne fait pas le boulot à la place de la personne :o
Essaye de faire ton programme, dis-nous où tu bloques et on sera content de t'aider à faire aboutir ton projet ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-11-2022 à 23:12:47    

Ben c'est ce que je fais depuis le début mais mes connaissances en la matière sont très limitées.
J'ai trouvé ce topic intéressant mais auquel je ne pige presque rien ;
https://stackoverflow.com/questions [...] ouse-click
Cette phrase a retenu mon attention ;

Citation :

PowerShell V2 and higher allow you to access Win32 APIs via the .NET PInvoke mechanism via the Add-Type cmdlet


 
Et aussi ces topics ;
https://stackoverflow.com/questions [...] o-powershe
 
https://stackoverflow.com/questions [...] powershell
 
https://www.reddit.com/r/PowerShell [...] text_from/


Message édité par arnuche le 17-11-2022 à 23:41:18
Reply

Marsh Posté le 21-01-2023 à 16:32:50    

Salut,
 
j'avance un peu : le plus simple reste d'utiliser le presse-papier de Windows, ce qui implique donc de copier d'abord les caractères dont j'ai besoin pour qu'ils se retrouvent dans le presse-papier et là je peux en récupérer le contenu avec PowerShell ;

Code :
  1. get-clipboard


et même l'écrire dans un fichier txt ;

Code :
  1. get-clipboard > C:\Temp\clipboard_copy.txt


 
 
Mais je bute sur 2 problèmes ;
1) je n'ai pas trouvé le bon script pour inverser 2 caractères dans un fichier txt alors que je peux le faire pour le nom d'un fichier avec ce script ;

Code :
  1. Get-Childitem -Path "C:\Temp\clipboard_copy.txt" | ForEach-Object { $_ | Rename-Item -NewName {$_.name -replace '(.)(.)', '$2$1' }}


J'ai essayé ça sans succès ;

Code :
  1. Select-String -Path "C:\Temp\clipboard_copy.txt" -Pattern.replace { '(.)(.)', '$2$1' }


Mais peut-être y a-t-il moyen de se passer de fichier txt et de faire ça directement dans la console PowerShell ? Du genre ;

Code :
  1. get-clipboard -Pattern.replace { '(.)(.)', '$2$1' }


 
2) est-il possible d'utiliser les fonctions copy/paste (ou control+c et control+v) dans un script PowerShell ?
Si oui, je pourrais mettre tout le processus dans un fichier bat que je peux appeler par raccourci clavier ou je pourrais en faire un exe avec un lien dans le menu contextuel.
 
 
Voici les étapes auxquelles j'ai pensé qui doivent suivre la sélection des 2 caractères dont je veux inverser l'ordre ;
-copie (ça se retrouve donc dans le presse-papier)
-le transfert du presse-papier vers un fichier txt (avec "get-clipboard > C:\Temp\clipboard_copy.txt" )
-inversion des 2 caractères avec PowerShell (je dois encore trouver comment)
-la sélection et copie de ce txt inversé
-son collage (paste ou control+V) qui remplace donc la sélection initiale.
 
Je ne sais pas si les étapes 1 et 5 (copy & paste provenant du menu contextuel de Windows) sont intégrables dans le script mais ce serait déjà bien de pouvoir faire les 3 du milieu.
 
Je rappelle que c'est avant tout un exercice qui me permettrait de voir ce qui est faisable pour ensuite aller vers qqch de plus complexe.
 
Si vous avec une réponse à une des questions ça m'aiderait  :jap:


Message édité par arnuche le 21-01-2023 à 16:38:30
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed