Ouvrir un fichier avec notepad++ depuis mon applicatif

Résolu
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 - 12 avril 2013 à 15:47
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 - 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

3 réponses

romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 1
17 avril 2013 à 09:14
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+
3
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
12 avril 2013 à 21:27
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...
0
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 1
15 avril 2013 à 15:07
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
0
Rejoignez-nous