IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Ecrire une string dans WordPad


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 84
    Points : 58
    Points
    58
    Par défaut Ecrire une string dans WordPad
    Bonjour,

    Je travaille sur une application disposant d'une TextBox.
    Lors d'un click sur un bouton je souhaite ouvrir un éditeur contenant l'ensemble du contenu de ma TextBox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    private static extern bool SendMessage(
    	IntPtr hWnd, uint msg, UIntPtr wParam, IntPtr lParam);
     
    [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    private static extern IntPtr FindWindowEx(
    	IntPtr hWndParent, IntPtr hWndChild, string className, string WindowName);
     
    [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    	private static extern IntPtr FindWindow(string className, string WindowName);
     
    private void WriteToNotepad(string text)
    {
    	if (String.IsNullOrEmpty(text))
    		throw new ArgumentException();
     
    	Process p;
    	try
    	{
     
    		p = Process.Start("Notepad.exe");
    	}catch(Exception){
    		return;
    	}
     
    	p.WaitForInputIdle(1000);
    	IntPtr hWnd = p.MainWindowHandle;
    	//IntPtr hWnd = p.FindWindow("WordPadClass", Nothing);
    	p.Close();
    	p = null;
     
    	//FindWindow();
    	//hWnd = FindWindow("WordPad.exe", "Untitled - Notepad");
    	//if (hWnd == IntPtr.Zero)
    	//	return;
    	hWnd = FindWindowEx(hWnd, IntPtr.Zero, "Edit", null);
    	if (hWnd == IntPtr.Zero)
    		return;
     
     
    	text += '\0';
    	GCHandle gch = GCHandle.Alloc(text, GCHandleType.Pinned);
    	SendMessage(hWnd, 0x000C /*WM_SETTEXT*/, UIntPtr.Zero, gch.AddrOfPinnedObject());
    	gch.Free();
     
    	int pos = text.Length - 1;
    	SendMessage(hWnd, 0x00B1 /*EM_SETSEL*/, (UIntPtr)pos, (IntPtr)pos);
    	SendMessage(hWnd, 0x0102 /*WM_CHAR*/, (UIntPtr)'\n', IntPtr.Zero);
    }
    Ce code fonctionne très bien avec NotePad sauf que j'aimerai disposer des retours à la ligne. J'ai donc penser a WordPad mais étrangement ce code ne fonctionne pas avec la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p = Process.Start("WordPad.exe");
    Si quelqu'un a une idée ...

    Arnaud

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tu peux enregistrer le contenu de ton textbox dans un fichier et ouvrir le fichier via un process start wordpad en spécifiant le fichier à ouvrir
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 84
    Points : 58
    Points
    58
    Par défaut
    Effectivement, il y a la solution du fichier.
    Je l'ai pas précisé mais je souhaite éviter d'écrire des données sur le disque.

    Merci de ta réponse Pol63.

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par Arnaoud Voir le message
    Effectivement, il y a la solution du fichier.
    Je l'ai pas précisé mais je souhaite éviter d'écrire des données sur le disque.
    Pourquoi cette contrainte ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 84
    Points : 58
    Points
    58
    Par défaut
    Si j'utilise un fichier temporaire, j'aurai exactement le même problème lorsque je vais vouloir continuer à remplir le fichier pendant que l'utilisateur le consulte.

    Pour information, j'ai compris ce qui n'allait pas dans mon code.
    Il faut remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hWnd = FindWindowEx(hWnd, IntPtr.Zero, "Edit", null);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hWnd = FindWindowEx(hWnd, IntPtr.Zero, "RichEdit50W", null);
    pour que le code fonctionne avec wordPad.

    Merci a vous deux

    Arnaud

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/03/2006, 10h13
  2. Comment enregistrer une string dans un fichier
    Par Dnx dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 23/09/2005, 14h52
  3. Ecrire une variable dans un txt
    Par zelgolhal dans le forum MFC
    Réponses: 1
    Dernier message: 16/08/2005, 09h17
  4. Réponses: 12
    Dernier message: 27/06/2005, 19h06
  5. Réponses: 6
    Dernier message: 24/07/2003, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo