Ouvrir un fichier avec notepad++ depuis mon applicatif [Résolu]

romain60112 70 Messages postés mercredi 1 octobre 2008Date d'inscription 17 avril 2013 Dernière intervention - 12 avril 2013 à 15:47 - Dernière réponse : romain60112 70 Messages postés mercredi 1 octobre 2008Date d'inscription 17 avril 2013 Dernière intervention
- 17 avril 2013 à 09:14
Bonjour à tous,

je travail sur un outil de diag où je dois ouvrir un fichier *.c avec notepad++.exe à partir de mon applicatif.
pour ce faire j'utilise ceci :

if (File.Exists(sFile))
{
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(sFile, "");
System.Diagnostics.Process.Start(psi);
}

Je souhaiterais maintenant ouvrir le fichier à une certaine ligne.

Avez vous des idées comment procéder ?

Slts
Romain
Afficher la suite 

3 réponses

Répondre au sujet
romain60112 70 Messages postés mercredi 1 octobre 2008Date d'inscription 17 avril 2013 Dernière intervention - 17 avril 2013 à 09:14
+3
Utile
bon, pas possible de faire un Ctrl+G directement j'ai trouvé une alternative : accéder par les menus.
[DllImport("user32.dll")]
public static extern int FindWindow
(
  string lpClassName, // class name 
  string lpWindowName // window name 
);

[DllImport("user32.dll")]
public static extern int SetForegroundWindow
(
  int hWnd // handle to window
);

private void button_Notepad_Click(object sender, EventArgs e)
{
 
 if (File.Exists(localisation))
 {
    System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(localisation, "notepad++");
    System.Diagnostics.Process.Start(psi);
 }   
 
 // rechercher le handle de la fenêtre
 int iHandle = NativeWin32.FindWindow(null, localisation);
            
 NativeWin32.SetForegroundWindow(iHandle);
 // Ouvrir la fenetre Atteindre : Ctrl+G
 System.Windows.Forms.SendKeys.Send("{ESC}%R{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{ENTER}");
 // Entrer le numéro de ligne
 System.Windows.Forms.SendKeys.Send(num_ligne);
 // valider
 System.Windows.Forms.SendKeys.Send("{ENTER}");
}


a+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de romain60112
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 12 avril 2013 à 21:27
0
Utile
Salut,

notepad++ ne propose pas d'APIs de pilotage comme excel, word ect...
il n'est pas non plus un serveur DDE. (dynamic data exchange)

il faut donc passer par du code p-invoke (redéclarer des APIs win32) :

- récupérer le handle de la fenetre notepad++ via ::FindWindow()
- simuler des appuis de touches clavier via ::SendMessage() ou ::PostMessage()

bye...
Commenter la réponse de yann_lo_san
romain60112 70 Messages postés mercredi 1 octobre 2008Date d'inscription 17 avril 2013 Dernière intervention - 15 avril 2013 à 15:07
0
Utile
Merci pour cette réponse, elle m'a permit de coder une bonne partie.
Maintenant le raccourci qui m'intéresse est le Ctrl+G = Aller à...
Pour ce faire j'utilise : system.Windows.Forms.SendKeys.Send("^+G") mais malheureusement la commande semble inconnue par notepad++.

J'ai testé le :
- system.Windows.Forms.SendKeys.Send("^+F") : La fenêtre de recherche s'ouvre bien
- system.Windows.Forms.SendKeys.Send("^+S") : La fichier ce sauvegarde bien

Avez vous une idée pourquoi la commande Ctrl+G n'est pas reconnue ?

Slts
Romain
Commenter la réponse de romain60112

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.