[C#] Ouvrir notepad et ecrire dedans [Résolu]

Signaler
Messages postés
6
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
4 août 2009
-
Messages postés
6
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
4 août 2009
-
Bonjour,

Je développe une application et j'ai besoin d'ouvrir le Notepad de Windows et d'y écrire du texte dedans sans avoir à créer de fichier sur le disque.
J'essayé de plusieurs manières, en utilisant "Shell", en essayant de créer un fichier temporaire, etc. mais sans succès jusqu'à présent.

Est ce que déjà vous croyez que c'est possible? Et si oui, avez vous une solution?
Je commence à en douter malheureusement...

Merci d'avance

C.
A voir également:

8 réponses

Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4
C'est vraiment la seule solution?

Sinon oui c'est possible avec des message windows: t'ouvre un notepad, tu recupère le handle de la window avec FindWindow, puis le handle de la textbox avec je sais plus quelle autre API Window, après t'envois avec le message adequat. De mémoire je crois que c'est EM_SETTEXT, mais y'a tout ici:
http://msdn.microsoft.com/en-us/library/bb775458%28VS.85%29.aspx
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
32
Salut, oui c'est bien ça..

[ 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 );


private void WriteToNotepad( string text )
{
    if ( String.IsNullOrEmpty( text ) )
        throw new ArgumentException( );


    Process p = Process.Start( "notepad.exe" );
    p.WaitForInputIdle( 1000 );
    IntPtr hWnd = p.MainWindowHandle;
    p.Close( );
    p = null;


    hWnd = FindWindowEx( hWnd, IntPtr.Zero, "Edit", null );
    if ( hWnd == IntPtr.Zero )
        throw new Win32Exception( Marshal.GetLastWin32Error( ) );


    text += '\0';
    GCHandle gch = GCHandle.Alloc( text, GCHandleType.Pinned );
    SendMessage( hWnd, 0x000C /*WM_SETTEXT*/, UIntPtr.Zero, gch.AddrOfPinnedObject( ) );
    gch.Free( );
}
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
32
Exact, on peut corriger ça par exemple avec un ptit WM_CHAR :

int pos = text.Length - 1;
SendMessage( hWnd, 0x00B1 /*EM_SETSEL*/, ( UIntPtr )pos, ( IntPtr )pos );
SendMessage( hWnd, 0x0102 /*WM_CHAR*/, ( UIntPtr )'\n', IntPtr.Zero );
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4
correction c'est WM_SETTEXT
Messages postés
6
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
4 août 2009

Merci pour vos réponses, je vais essayer et je vous tiens au courant.

C.
Messages postés
6
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
4 août 2009

Impeccable, ça fonctionne super bien.

Merci et bonne journée.

C.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
48
Rigolo: si on tape du texte dans le notepad, puis qu'on le ferme, il ne demande pas pour enregistrer le fichier...

<hr />
-Blog-
-Site Perso-
Messages postés
6
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
4 août 2009

hé bien merci, ça peut effectivement servir

C.