Nous sommes le Mar 17 Juin, 2025 07:02
Supprimer les cookies

cherche codes pour fermer une appli depuis le FramaLauncher

Image Image Forum dédié à notre projet de clé USB nomade libre sous Windows

Dim 18 Fév, 2007 22:10

Bonjour,

Je cherche à fermer une application au lancement d'une autre action ou application en liant deux actions dans le Framalauncher (cf tuto).
Je pense notamment à la fermeture du Kiosk lorsqu'on quitte le Framalauncher, mais aussi à la fermeture de juice ou vlc à l'ouverture de miranda...

Petit problème, suivant le cas, je ne sais pas quel code correspond à la fermeture de telle ou telle application (shellexecute...?), ni même s'il ne vaut pas mieux passer par un script (objShell...?) ou en encore une astuce permettant de "terminer le processus".

Si vous avez des idées, des exemples, ... je suis preneur :wink:, merci.
Totoche

Messages : 398
Géo : Drôme / Ardèche

Jeu 22 Fév, 2007 22:20

Bonsoir,

Je ne connais pas de manière simple de fermer une application par la ligne de commande. Ce que je peux vous proposer c'est deux bouts de code C.

Le premier énumère toutes les fenêtres ouvertes (visible ou invisible, y compris les system tray etc...) en affichant le titre de la fenêtre et son handle séparé par ":".

Le deuxième permet de fermer une fenêtre via son handle.

Comme nous pouvons le constater, il manque quelquechose pour faire le lien entre les deux, j'avais pensé à un "grep" avec expression régulière suivit d'un "sed". Quelque chose comme
Code: Tout sélectionner
 enumerateWindows | grep "^SoftBook" | sed "s/.*:\(.*\)$/\1/" | closeWindow


Voici les bouts de code, c'est très sommaire:

Code: Tout sélectionner
// enumerateWindows
#include <windows.h>

BOOL CALLBACK PrintWindowInformation( HWND hwnd, LPARAM lparam )
{
   char titleBuffer[4096];
   
   if ( GetWindowText(hwnd, titleBuffer, sizeof(titleBuffer)) > 0 )
      printf( "%s : %i\n", titleBuffer, hwnd );
   return TRUE;
}

int main( int argc, char * argv[] )
{
   EnumWindows( PrintWindowInformation, 0 );   
   return 0;
}


Code: Tout sélectionner
//closeWindow
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(int argc, char *argv[])
{
    int i;
    char handleString[10] = ""; // sur 32bits max. = 4.294.967.295 => 10 chiffres
    HWND handle;
    if ( argc == 1 ) // pas d'arguments?
    {
         // utiliser les 10 premiers caractères du chiffre à partir de stdin
         for ( i = 0; ( i < sizeof(handleString) ) && ( handleString[i] = getchar() ); i++);
    }
    else if ( argc != 2 )
    {
         printf(" Syntaxe invalide\n");
         printf(" Usage: closeWindow <nombre: window handle> \n");
    }
    else
    {
         strncpy( handleString, argv[1], sizeof(handleString));
    }
    handleString[sizeof(handleString)] = '\0'; // neutraliser le string
    handle = (HWND) atoi( handleString );
    SendMessage( handle, WM_CLOSE, 0, 0 );
    return 0;
}


J'ai utilisé Dev-Cpp pour les compiler.

Dernières recommandations, il faut faire attention lors de la sélection de la fenêtre à fermer. Il n'est pas rare que deux fenêtres porte le même nom. De plus, durant mes essais, j'ai constaté que l'énumération pouvait prendre en compte le "grep" et renvoyer le handle de la fenêtre parent du "grep". Donc à utiliser avec parcimonie et la plus grande attention.

Comme dit plus haut, c'est très sommaire et ça mérite sûrement des améliorations. J'espère que ça peut être utile.
Amicalement,

Laurent
obor2

Messages : 524
Géo : belgique

Jeu 22 Fév, 2007 23:22

Salut obor2 et merci de ta réponse,

Entre temps j'ai trouvé une autre solution (un peu plus simple) et qui m'a ouvert de nombreuses autres posibilités.

C'est un p'tit freeware portable : nircmd (j'ai pas trouvé d'équivalent libre, mais j'suis preneur :wink: ).
Il propose d'éxucuter les paramètres que tu lui donnes en un clic ... et la liste est longue :D . Ils sont tous bien décrits dans le fichier d'aide (en anglais, mais très compréhensible).
NirCmd is a small command-line utility that allows you to do some useful tasks without displaying any user interface. By running NirCmd with simple command-line option, you can write and delete values and keys in the Registry, write values into INI file, dial to your internet account or connect to a VPN network, restart windows or shut down the computer, create shortcut to a file, change the created/modified date of a file, change your display settings, turn off your monitor, open the door of your CD-ROM drive, and more...

J'ai notamment trouvé une solution pour les deux exemples que je donnais dans ma question : (nb : mettre nircmd dans *\apps)
- Pouvoir quitter le Framakiosk en cliquant sur "quitter framakey" (en terminant le processus : j'ai préféré closeprocess à killprocess)
Code: Tout sélectionner
Action: run; FileName: %Apps%\nircmd\nircmd.exe; Parameters: closeprocess k-meleon.exe
- couper le son :
Code: Tout sélectionner
Action: run; FileName: %Apps%\nircmd\nircmd.exe; Parameters: mutesysvolume 2
Il ne reste plus qu'à lier ces actions à celles souhaitées.

Voilà, j'espère que ce petit soft vous donnera autant d'idées qu'à moi pour personnaliser votre Framakey tant il est simple d'utilisation et les possibilités nombreuses et variées.
Totoche

Messages : 398
Géo : Drôme / Ardèche

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit