[C#] Ouvrir notepad et ecrire dedans

Résolu
cs_cricri2000 Messages postés 6 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 4 août 2009 - 24 nov. 2008 à 17:44
cs_cricri2000 Messages postés 6 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 4 août 2009 - 25 nov. 2008 à 17:07
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.

8 réponses

bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
24 nov. 2008 à 18:42
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
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
25 nov. 2008 à 01:41
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( );
}
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
25 nov. 2008 à 15:52
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 );
3
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
24 nov. 2008 à 18:44
correction c'est WM_SETTEXT
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_cricri2000 Messages postés 6 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 4 août 2009
25 nov. 2008 à 09:19
Merci pour vos réponses, je vais essayer et je vous tiens au courant.

C.
0
cs_cricri2000 Messages postés 6 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 4 août 2009
25 nov. 2008 à 11:14
Impeccable, ça fonctionne super bien.

Merci et bonne journée.

C.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
25 nov. 2008 à 14:43
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-
0
cs_cricri2000 Messages postés 6 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 4 août 2009
25 nov. 2008 à 17:07
hé bien merci, ça peut effectivement servir

C.
0
Rejoignez-nous