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

cs_cricri2000 6 Messages postés jeudi 20 décembre 2007Date d'inscription 4 août 2009 Dernière intervention - 24 nov. 2008 à 17:44 - Dernière réponse : cs_cricri2000 6 Messages postés jeudi 20 décembre 2007Date d'inscription 4 août 2009 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

8 réponses

bubbathemaster 342 Messages postés dimanche 26 janvier 2003Date d'inscription 25 mars 2009 Dernière intervention - 24 nov. 2008 à 18:42
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de bubbathemaster
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 25 nov. 2008 à 01:41
+3
Utile
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( );
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Lutinore
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 25 nov. 2008 à 15:52
+3
Utile
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 );
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Lutinore
bubbathemaster 342 Messages postés dimanche 26 janvier 2003Date d'inscription 25 mars 2009 Dernière intervention - 24 nov. 2008 à 18:44
0
Utile
correction c'est WM_SETTEXT
Commenter la réponse de bubbathemaster
cs_cricri2000 6 Messages postés jeudi 20 décembre 2007Date d'inscription 4 août 2009 Dernière intervention - 25 nov. 2008 à 09:19
0
Utile
Merci pour vos réponses, je vais essayer et je vous tiens au courant.

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

Merci et bonne journée.

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

C.
Commenter la réponse de cs_cricri2000

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.