Meilleur auteur de réponses
Insertion d'un autre programme dans c#

Question
-
Salut tout le monde j'ai un formulaire qui contient un panel et je veut insérer dans ce panel Le programme de Winpad(Write.exe) a ce panel je sais que j'ouvre ce programme de la façon suivante MAIS POUR L'INTEGRE AU PANEL DE MON PROGRAMME la je sais pas si ca se fait
[DllImport("USER32.dll")] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("USER32.dll")] static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint); private void tB_RJ_Click(object sender, EventArgs e) { try { Process P = new Process(); P = Process.Start("c:\\Windows\\System32\\Write.exe", "C:/Rapport/RJ.rtf"); Thread.Sleep(500); P.WaitForInputIdle(); SetParent(P.MainWindowHandle, panel1.Handle); MoveWindow(P.MainWindowHandle, 0, 0, this.Width - 90, this.Height, false); } catch { } }
J'ai essayer ca mais on dirais que win10 est récalcitrant
Mais comment si cela ce fait, puis-je le faire
Merci
Daniel
- Modifié DanielMorais jeudi 5 novembre 2015 00:50
Réponses
-
Bonjour,
J'ai déjà répondu au thread suivant qui a l'air de traiter le même sujet.
Cordialement
Joël
- Marqué comme réponse DanielMorais jeudi 12 novembre 2015 02:09
-
Bnojour,
En utilisant ProcessStartInfo j'ai inséré wordpad dans un panel.
J'ai mis la propriete CreateNoWindow a true
process.StartInfo.CreateNoWindow = true ;
Comme dans l'exmaple du thread Créer un IDE avec rendu "en direct"
J'ai crée un panel avec un background noir qui recoit le handle du process wordpad (write.exe).
Joël
- Modifié JoelG_ mardi 10 novembre 2015 07:09 typo
- Marqué comme réponse DanielMorais jeudi 12 novembre 2015 02:09
-
Bonjour, DanielMorais,
J’ai testé votre extrait de code mais n’ai pas observé d’irrégularités. Si vous augmentez l’intervalle dans Thread.Sleep() à 1500 ou 2500 ms, est-ce que cela apporte un changement ?
Cordialement,
Dimitar
- Modifié Dimitar DenkovMicrosoft contingent staff, Moderator vendredi 6 novembre 2015 12:28
- Marqué comme réponse DanielMorais vendredi 6 novembre 2015 17:47
-
Salut tout le monde j'ai un formulaire qui contient un panel et je veut insérer dans ce panel Le programme de Winpad(Write.exe) a ce panel je sais que j'ouvre ce programme de la façon suivante MAIS POUR L'INTEGRE AU PANEL DE MON PROGRAMME la je sais pas si ca se fait
[DllImport("USER32.dll")] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("USER32.dll")] static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint); private void tB_RJ_Click(object sender, EventArgs e) { try { Process P = new Process(); P = Process.Start("c:\\Windows\\System32\\Write.exe", "C:/Rapport/RJ.rtf"); Thread.Sleep(500); P.WaitForInputIdle(); SetParent(P.MainWindowHandle, panel1.Handle); MoveWindow(P.MainWindowHandle, 0, 0, this.Width - 90, this.Height, false); } catch { } }
J'ai essayer ca mais on dirais que win10 est récalcitrant
Mais comment si cela ce fait, puis-je le faire
Merci
Daniel
J'aurai essayer mais ca fonctionne pas Write.exe ne le permet pas
La seule commande que j'ai trouver qui semblais fonctionner est celle-ci avec certain exe seulement comme
Notepad.exe de Windows
try { var p = Process.Start(Environment.GetEnvironmentVariable("windir")
+ \\notepad.exe"); Thread.Sleep(2500); SetParent(p.MainWindowHandle, this.Handle); } catch { }
Mais plutôt null pour lire un fichier .RTF qui contient des tableaux.
Daniel
- Marqué comme réponse DanielMorais jeudi 12 novembre 2015 02:09
-
Bonjour encore merci mais j'ai ce code et ca fonctionne toujours pas
using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; namespace DMApp1 { public partial class mForm : Form { public mForm() { InitializeComponent(); } [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndParent); private void tB_RJ_Click(object sender, EventArgs e) { try { var p = Process.Start(Environment.GetEnvironmentVariable("windir") + "\\write.exe", "C:/Rapport/RJ.rtf"); p.StartInfo.CreateNoWindow = true; Thread.Sleep(500); SetParent(p.MainWindowHandle, this.panel1.Handle); } catch { } } } }
Daniel
- Marqué comme réponse DanielMorais jeudi 12 novembre 2015 02:09
-
Bonjour encore merci mais j'ai ce code et ca fonctionne toujours pas
using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; namespace DMApp1 { public partial class mForm : Form { public mForm() { InitializeComponent(); } [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndParent); private void tB_RJ_Click(object sender, EventArgs e) { try { var p = Process.Start(Environment.GetEnvironmentVariable("windir") + "\\write.exe", "C:/Rapport/RJ.rtf"); p.StartInfo.CreateNoWindow = true; Thread.Sleep(500); SetParent(p.MainWindowHandle, this.panel1.Handle); } catch { } } } }
Daniel
Finalement j'ai réussi avec cette façon de faire
Merci de votre coup de main.using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; namespace DMApp1 { public partial class mForm : Form { public mForm() { InitializeComponent(); } [System.Runtime.InteropServices.DllImport
("user32.dll", SetLastError = true)] static extern IntPtr SetParent(IntPtr hWndChild,
IntPtr hWndParent); [System.Runtime.InteropServices.DllImport("user32.dll",
SetLastError = true)] internal static extern bool MoveWindow(IntPtr hWnd,
int X, int Y, int nWidth, int nHeight, bool bRepaint); private void tB_RJ_Click(object sender, EventArgs e) { try { Process p = Process.Start("write.exe",
"C:\\Rapport\\RJ.rtf"); p.StartInfo.CreateNoWindow = true; Thread.Sleep (200); SetParent(p.MainWindowHandle, panel1.Handle); MoveWindow(p.MainWindowHandle, 0, 0, this.panel1.Width
,this.Height, true); } catch { } } } }
Daniel
- Marqué comme réponse DanielMorais jeudi 12 novembre 2015 02:09
Toutes les réponses
-
Bonjour, DanielMorais,
J’ai testé votre extrait de code mais n’ai pas observé d’irrégularités. Si vous augmentez l’intervalle dans Thread.Sleep() à 1500 ou 2500 ms, est-ce que cela apporte un changement ?
Cordialement,
Dimitar
- Modifié Dimitar DenkovMicrosoft contingent staff, Moderator vendredi 6 novembre 2015 12:28
- Marqué comme réponse DanielMorais vendredi 6 novembre 2015 17:47
-
Non Malheureusement
cela ne fait qu'ouvrir le programme a l'extérieure du panel et de la forme comme deux programme ouvert un par dessus l'autre et non dans le panel Control du formulaire
Daniel
- Marqué comme réponse DanielMorais vendredi 6 novembre 2015 17:47
- Non marqué comme réponse Teodora SharkovaModerator vendredi 13 novembre 2015 17:25
-
Bonjour,
J'ai déjà répondu au thread suivant qui a l'air de traiter le même sujet.
Cordialement
Joël
- Marqué comme réponse DanielMorais jeudi 12 novembre 2015 02:09
-
Salut tout le monde j'ai un formulaire qui contient un panel et je veut insérer dans ce panel Le programme de Winpad(Write.exe) a ce panel je sais que j'ouvre ce programme de la façon suivante MAIS POUR L'INTEGRE AU PANEL DE MON PROGRAMME la je sais pas si ca se fait
[DllImport("USER32.dll")] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("USER32.dll")] static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint); private void tB_RJ_Click(object sender, EventArgs e) { try { Process P = new Process(); P = Process.Start("c:\\Windows\\System32\\Write.exe", "C:/Rapport/RJ.rtf"); Thread.Sleep(500); P.WaitForInputIdle(); SetParent(P.MainWindowHandle, panel1.Handle); MoveWindow(P.MainWindowHandle, 0, 0, this.Width - 90, this.Height, false); } catch { } }
J'ai essayer ca mais on dirais que win10 est récalcitrant
Mais comment si cela ce fait, puis-je le faire
Merci
Daniel
J'aurai essayer mais ca fonctionne pas Write.exe ne le permet pas
La seule commande que j'ai trouver qui semblais fonctionner est celle-ci avec certain exe seulement comme
Notepad.exe de Windows
try { var p = Process.Start(Environment.GetEnvironmentVariable("windir")
+ \\notepad.exe"); Thread.Sleep(2500); SetParent(p.MainWindowHandle, this.Handle); } catch { }
Mais plutôt null pour lire un fichier .RTF qui contient des tableaux.
Daniel
- Marqué comme réponse DanielMorais jeudi 12 novembre 2015 02:09
-
Bnojour,
En utilisant ProcessStartInfo j'ai inséré wordpad dans un panel.
J'ai mis la propriete CreateNoWindow a true
process.StartInfo.CreateNoWindow = true ;
Comme dans l'exmaple du thread Créer un IDE avec rendu "en direct"
J'ai crée un panel avec un background noir qui recoit le handle du process wordpad (write.exe).
Joël
- Modifié JoelG_ mardi 10 novembre 2015 07:09 typo
- Marqué comme réponse DanielMorais jeudi 12 novembre 2015 02:09
-
Bonjour encore merci mais j'ai ce code et ca fonctionne toujours pas
using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; namespace DMApp1 { public partial class mForm : Form { public mForm() { InitializeComponent(); } [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndParent); private void tB_RJ_Click(object sender, EventArgs e) { try { var p = Process.Start(Environment.GetEnvironmentVariable("windir") + "\\write.exe", "C:/Rapport/RJ.rtf"); p.StartInfo.CreateNoWindow = true; Thread.Sleep(500); SetParent(p.MainWindowHandle, this.panel1.Handle); } catch { } } } }
Daniel
- Marqué comme réponse DanielMorais jeudi 12 novembre 2015 02:09
-
Bonjour encore merci mais j'ai ce code et ca fonctionne toujours pas
using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; namespace DMApp1 { public partial class mForm : Form { public mForm() { InitializeComponent(); } [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndParent); private void tB_RJ_Click(object sender, EventArgs e) { try { var p = Process.Start(Environment.GetEnvironmentVariable("windir") + "\\write.exe", "C:/Rapport/RJ.rtf"); p.StartInfo.CreateNoWindow = true; Thread.Sleep(500); SetParent(p.MainWindowHandle, this.panel1.Handle); } catch { } } } }
Daniel
Finalement j'ai réussi avec cette façon de faire
Merci de votre coup de main.using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; namespace DMApp1 { public partial class mForm : Form { public mForm() { InitializeComponent(); } [System.Runtime.InteropServices.DllImport
("user32.dll", SetLastError = true)] static extern IntPtr SetParent(IntPtr hWndChild,
IntPtr hWndParent); [System.Runtime.InteropServices.DllImport("user32.dll",
SetLastError = true)] internal static extern bool MoveWindow(IntPtr hWnd,
int X, int Y, int nWidth, int nHeight, bool bRepaint); private void tB_RJ_Click(object sender, EventArgs e) { try { Process p = Process.Start("write.exe",
"C:\\Rapport\\RJ.rtf"); p.StartInfo.CreateNoWindow = true; Thread.Sleep (200); SetParent(p.MainWindowHandle, panel1.Handle); MoveWindow(p.MainWindowHandle, 0, 0, this.panel1.Width
,this.Height, true); } catch { } } } }
Daniel
- Marqué comme réponse DanielMorais jeudi 12 novembre 2015 02:09
-
Bonjour,
Voici mon code.
Process process = new Process(); ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = "write.exe"; psi.Arguments = "c:\\temp\\AfxDlg.rtf"; process.StartInfo = psi; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = false; process.StartInfo.UseShellExecute = true; process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized; process.Start(); while (process.MainWindowHandle.Equals(IntPtr.Zero)) { Thread.Sleep(10); process.Refresh(); } SetParent(process.MainWindowHandle, panel1.Handle); SetWindowPos(process.MainWindowHandle, IntPtr.Zero, 0, 0, 600, 200, 0);
Je pense le problème viens que vous n'attendez pas que la valeur MainWindowHandle ne soit plus null avant d'affecter le handle au Panel.
il faut utiliser la fonction Refresh pour mettre a jour cette propriété.
https://msdn.microsoft.com/fr-fr/library/system.diagnostics.process.mainwindowhandle(v=vs.110).aspx
Joël