Comment trouver le process d'une appli sans lancer le process ? [Résolu]

papysaf 3 Messages postés mercredi 16 juillet 2003Date d'inscription 16 février 2012 Dernière intervention - 9 févr. 2012 à 20:41 - Dernière réponse : lossehelin 51 Messages postés jeudi 10 mai 2012Date d'inscription 5 juillet 2012 Dernière intervention
- 22 mai 2012 à 11:07
Bonjour,
J'ai besoin de passer un paramètre avant le nom du fichier à ouvrir (AcrobatReader demande le N° de page avant le nom du PDF :
C:....acro.exe /A page=25 Fic.PDF)
Avec ProcessStartInfo, si le paramètre "A/ page=25" est passé avec Arguments, celui-ci est probablement mis après dans la ligne de commande sous-entendue. Le fichier PDF est ouvert mais à la page 1. En VB6 çà marche avec FindExecutable.
J'ai une solution qui fonctionne avec l'api Win32 importée dans une class. Mais je voudrais utiliser Process ou ProcessStartInfo en C#.
Merci de m'aider.

Papysaf
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
MichelLP 1 Messages postés dimanche 27 avril 2008Date d'inscription 9 février 2012 Dernière intervention - 9 févr. 2012 à 20:55
3
Merci
Bonjour Papysaf
Je suppose que tu veux connaitre le nom et le chemin de l'exe du PDF.
En VB6 tu reconstrusais la ligne de commande et tu lançais un Shell ou ShellExecute C'est çà ???
Bye

MichelLP

Merci MichelLP 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de MichelLP
Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 10 févr. 2012 à 09:46
3
Merci
pouquoi ne pas utiliser FindExecutable, si cela fonctionne ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de Renfield
Meilleure réponse
NHenry 14262 Messages postés vendredi 14 mars 2003Date d'inscription 22 septembre 2018 Dernière intervention - 13 févr. 2012 à 21:22
3
Merci
Bonjour,

Normalement, ça ne change pas en fonction de la version de Windows.

"qu'une instruction VB comme FindExecutable()"
FindExecutable, est une API Windows, pas une instruction du langage.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de NHenry
NHenry 14262 Messages postés vendredi 14 mars 2003Date d'inscription 22 septembre 2018 Dernière intervention - 9 févr. 2012 à 21:20
0
Merci
Bonjour,

En regardant dans le registre, tu peux avoir une réponse :
http://msdn.microsoft.com/en-us/library/windows/desktop/cc144154%28v=vs.85%29.aspx

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
papysaf 3 Messages postés mercredi 16 juillet 2003Date d'inscription 16 février 2012 Dernière intervention - 12 févr. 2012 à 10:56
0
Merci
Bjr
Merci à vous tous.
MichelLP a bien vu comment je procédais en VB6
NHenry, Je suis d'accord mais j'ai peur qu'en fonction des différent OS les clés n'aient pas le même nom où la même place dans le registre.
Refield, Celà m'oblige à m'adresser à Kernel32.dll qui pourrait bien ne plus suivre les nouveaux OS.

En fait pour une question d'homogénéïté je me dis qu'une instruction C# serait la plus adaptée. Et surtout je me dis qu'une instruction VB comme FindExecutable() doit forcément avoir une équivalence en C#. Bill Gates n'a pas pu régresser. Il doit exister une manière, un paramètre, ou même une autre instruction qui fait çà.


Papysaf
Commenter la réponse de papysaf
papysaf 3 Messages postés mercredi 16 juillet 2003Date d'inscription 16 février 2012 Dernière intervention - 16 févr. 2012 à 18:44
0
Merci
Merci à vous tous
Finalement j'ai validé l'importation de FindExecutable() des Api32
Merci encore

Papysaf
Commenter la réponse de papysaf
lossehelin 51 Messages postés jeudi 10 mai 2012Date d'inscription 5 juillet 2012 Dernière intervention - 21 mai 2012 à 11:39
0
Merci
Bonjour,

Je suis désolé de remonter ce topic, mais je rencontre le problème suivant:

Dans mon stage de fin de DUT Informatique, une petite partie du projet consiste à imprimer une sélection de fichiers PDF.
Depuis mon code, j'ouvre donc AcroRd32.exe avec l'option /p pour utiliser l'interface d'impression d'Acrobat Reader.

Le problème est que pour l'instant, je n'ai trouvé d'autre moyen que de donner le chemin complet de l'exe, et la même version du Reader n'est pas installée sur tous les postes de l'entreprise, il faudrait donc que je puisse déterminer le chemin complet de l'exe par défaut (qui sera toujours une version d'Acrobat Reader, mais pas la même) pour le lancer avec l'option /p !

Je sais que dans ce topic, on parle de ce que je recherche, mais malheureusement, je ne comprends pas comment utiliser FindExecutable, n'ayant jamais fait de VB !

Voici un exemple de comment j'utilise monde code:
        static String cheminAcroRd32 = @"C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe";
        static Int32 waitingTime = 10000;

        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("ERREUR - Usage: print [fichierPDF]");
            }
            else
            {
                try
                {
                    string filePath = args[0];
                    Process proc = new Process();
                    proc.StartInfo.FileName = cheminAcroRd32;
                    proc.StartInfo.Arguments = "/p " + filePath;
                    proc.Start();
                    if (proc.HasExited == false)
                    {
                        proc.WaitForExit(waitingTime);
                        proc.Kill();
                    }
                    proc.EnableRaisingEvents = true;
                    proc.CloseMainWindow();
                    proc.Close();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }


J'aimerai donc remplacer la ligne:
proc.StartInfo.FileName = cheminAcroRd32;

Par quelque chose du genre:
proc.StartInfo.FileName = getDefaultApplication(filepath);
Commenter la réponse de lossehelin
lossehelin 51 Messages postés jeudi 10 mai 2012Date d'inscription 5 juillet 2012 Dernière intervention - 22 mai 2012 à 11:07
0
Merci
Bon, bah j'ai fini par comprendre comment importer shell32.dll et utiliser la fonction FindExecutable :)
Voici le code, si quelqu'un se retrouve dans le même cas que moi:
        private static string findExecutable( string filepath )
        {
            StringBuilder objResultBuffer = new StringBuilder(1024);
            long lngResult = 0;

            lngResult = FindExecutableA( filepath, string.Empty, objResultBuffer );

            if (lngResult >= 32)
            {
                return objResultBuffer.ToString();
            }

            return string.Format( "Error: ({0})", lngResult );
        }

        [DllImport( "shell32.dll", EntryPoint = "FindExecutable" )]
        private static extern long FindExecutableA( string lpFile, string lpDirectory, StringBuilder lpResult );

La fonction FindExecutable prend en paramètre le chemin (relatif ou absolu) vers le fichier (doit exister réellement sur le disque), et renvoit le chemin absolu de l'application par défaut pour ouvrir ce fichier.
Commenter la réponse de lossehelin

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.