J'ai utilisé l'API user32 avec la fonction SetParent.
Mais le problème est que la fenetre de notepad n'est pas incluse dans la mienne même aprés utilisation de cette fonction.
J'essaie de faire :
//Ajout de la fonction SetParent de l'API user32
[DllImport("user32.dll", EntryPoint = "SetParent")]
private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
//Ajout de la fonction SetWindowPos de l'API user32
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
//Ajout de la fonction ShowWindow de l'API user32
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
Panel monPanel = new System.Windows.Forms.Panel();
monPanel.SuspendLayout();
p = new Process();
p.StartInfo.FileName = "Notepad.exe";
p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
p.Start();
SetParent(p.MainWindowHandle, panelOxymetre.Handle);
SetWindowPos(p.MainWindowHandle, p.MainWindowHandle, 0, 0, 150, 150, 0);
ShowWindow(p.MainWindowHandle, 5);
monPanel.ResumeLayout();
La fenetre de notepad apparait toujours au meme endroit à l'ecran et pas dans mon panel! Meme si je modifie les attributs des fonctions ShowWindow & SetWindowPos rien ne change!
Je ne comprends pas d'ou vient le problème! Si quelqu'un peut m'aider je suis preneur!!!!
Merci d'avance.
David
goddet
Messages postés6Date d'inscriptionlundi 12 mars 2007StatutMembreDernière intervention 5 novembre 2007 5 nov. 2007 à 17:35
Voila le resultat (testé avec Acrobat Reader):
IntPtr PgmExtHandle = new IntPtr(0);
Process p= null;
ProcessStartInfo info = new ProcessStartInfo("AcroRd32.exe");
info.WorkingDirectory = targetDir;
info.WindowStyle = ProcessWindowStyle.Normal;
info.CreateNoWindow = false;
p = Process.Start(info);
Thread.Sleep(2000);
//On récupère le handle du programme externe
string lpszParentClass = "AcroRd32"; //Nom du process
string lpszParentWindow = "Adobe Reader"; //Nom de la fenetre
PgmExtHandle = FindWindow(lpszParentClass, lpszParentWindow); //On peut passez 1 seul paramètre sur les 2 en mettant l'autre null ca marche aussi!
SetWindowPos(PgmExtHandle, new IntPtr(-2), 0, 0, panelTest.Width, panelTest.Height, SWP_SHOWWINDOW);
SetParent(PgmExtHandle, panelTest.Handle);
Voila voila! Merci a toi The Saib de m'avoir mis sur la piste et aussi a The Monz 31 pour son aide!
TheSaib
Messages postés2367Date d'inscriptionmardi 17 avril 2001StatutMembreDernière intervention26 décembre 200723 31 oct. 2007 à 17:58
Pas la peine de dédoubler ton message.
Tu as essayer de faire un findwindow sur ton notepad plutot que le MainWindowHandle et dans ton SetWindowPos lui passer comme paramètre SWP_SHOWWINDOW | SWP_NOSIZE.
goddet
Messages postés6Date d'inscriptionlundi 12 mars 2007StatutMembreDernière intervention 5 novembre 2007 2 nov. 2007 à 08:31
Merci pour ta réponse!
Désolé d'avoir doubler mon message mais comme je n'avais pas de réponse coté winform je me suis dit que je n'avais surement pas posté dans la bonne section!
Je test ça dés lundi! (Je n'est pas accés à mon pc avant!!!!)
Par contre je ne connais pas les 2 paramètres qu'il faut passer à SetWindowPos (SWP_SHOWWINDOW & SWP_NOSIZE).
Est-ce que ce sont des constantes qu'il faut déclarer ou des paramètres à récupérer?
Vous n’avez pas trouvé la réponse que vous recherchez ?