Intégrer un logiciel dans une fenêtre

GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019
- 21 févr. 2019 à 15:31
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
- 26 févr. 2019 à 18:15
Bonjour à tous,

Je suis débutant en programmation, ma première étape pour mon logiciel est d'insérer un programme fournisseur (executable) dans une fenêtre.
J'ai regardé sur les différents forum et sur le net et je n'y arrive pas pour mon programme fournisseur par contre le bloc note de Windows fonctionne.
Je suis passé par la fonction SetParent. Voici le code de mon programme.
	public partial class MainForm : Form
{
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
}
//
// TODO: Add constructor code after the InitializeComponent() call.
//
[DllImport("user32.dll")]
static extern IntPtr SetParent (IntPtr hwc ,IntPtr hwp);


void Button1Click(object sender, EventArgs e)
{
//Process process = new Process();
//process.StartInfo.CreateNoWindow=true;
//process.StartInfo.UseShellExecute = false;
//process.StartInfo.FileName = "notepad.exe";
//process.Start();

//OK
Process p;
p = new Process();
p = Process.Start("calc.exe");
//p = Process.Start(@"notepad.exe");
//p = Process.Start(@"C:\\Program Files\\MSCom2\\mdiapp.exe");
//p = Process.Start(@"C:\\Program Files\\SoftReal\\EuroCAP\\EuroCAP.exe");

Thread.Sleep(500);
p.WaitForInputIdle();
SetParent(p.MainWindowHandle,this.Handle);
//FIN OK




}



Que faut il que je rajoute pour que cela fonctionne.
Si ce n'est pas possible de le faire en C#, existe t il un moyen de le faire ?

Je vous remercie.

20 réponses

Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
21 févr. 2019 à 15:45
Bonjour
Si tu n’utilIses pas SetParent, le logiciel se lance t il comme il faut?

PS: voir ici pour utliser correctement les balises de code
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

21 févr. 2019 à 15:52
Bonjour,

Merci d'avoir répondu si vite.
Si je met la ligne SetParent en commentaire, la calculatrice s'ouvre dans une autre fenêtre. Et ce n'est pas ce que je veux.

Avec la ligne SetParent actif, j'ai réussi à mettre dans la fenêtre l'application blocnote ou la calculatrice ou word ou internet explorer...

Quand j'utilise les programmes de mes fournisseurs cela les ouvre dans une fenêtre à part. Comment faire ? existe t il une solution ?
Ca fait 15 jours que j'essaye de trouver des infos sur le net mais ca ne fonctionne pas.

Merci pour votre aide
0
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
21 févr. 2019 à 15:56
Que la calculatrice fonctionne ne m’étonne pas. Ma question concerne le logiciel que tu veux vraiment.
Pour voir si le problème se situe dans SetParent ou ailleurs.
0
GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

21 févr. 2019 à 16:00
J'ai enlevé le commentaire sur la ligne de mon programme fournisseur. Et mis en commentaires les lignes calc.exe et setparent.

Mon logiciel fournisseur s'ouvre dans une autre fenêtre :-(
0

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

Posez votre question
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
21 févr. 2019 à 16:19
Tant pis ça aurait sans doute été plus simple à régler.
Ligne de commande incorrecte, ou paramètre manquant.

Tu as un message d’erreur?
0
GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

21 févr. 2019 à 16:29
Je n'ai pas de message d'erreur.
Quand tu dis ligne de commande incorrecte ou paramètre manquant..
Que faut il que je mette par exemple? J'ai fait beaucoup de site et je n'ai pas vu d'autre paramètre.

Est il possible que le programme fournisseur que je lance soit incompatible avec ce type de fonction SetParent ?

Je ne suis pas obligé de faire le programme en C#, si il existe un autre langage ou un logiciel spécifique qui le fait, je suis preneur.

Merci de ton aide
0
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
21 févr. 2019 à 17:43
Puisque ça marche sans l'intégration, c'est justement que la ligne de commande est bonne et qu'il ne manque pas de paramètres.

Il me semble qu'un collègue à fait un truc comme ça en C# WPF.
Une question, ton logiciel a une fenêtre propre ou c'est en ligne de commande?
0
GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

21 févr. 2019 à 18:05
Je ne comprend pas ta question, désolé!

J'utilise actuellement le logiciel SharpDevelop pour créer le programme.
Faut il que je créé un projet en C# WPF ? Actuellement le projet est en C# application Windows.

Je suis vraiment novice dans ce domaine en informatique
0
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
21 févr. 2019 à 18:16
Faut il que je créé un projet en C# WPF ? Actuellement le projet est en C# application Windows.
Pas ce soir, j’ai demandé à mon collègue si c’est bien un truc comme ça qu’il a fait.
Attendons sa réponse.
Et puis je ne sais pas si sharpdevelop gère le wpf.

Je suis vraiment novice dans ce domaine en informatique
Alors peut-être faudrait-il commencer par le début.
Voici un bon cours pour apprendre C# http://tahe.developpez.com/dotnet/csharp/
Tu peux le suivre en quelques jours pour acquérir les bases nécessaires au développement. Il ne fera pas de toi un codeur hors pair, mais ce sera la fondation sur laquel tu construira un bon apprentissage.

0
GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

21 févr. 2019 à 18:52
Dans SharDevelop il y a C#WPF.
Merci pour le lien, je vais regarder ca
Bonne soirée
0
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
22 févr. 2019 à 17:13
Bonsoir

Mon collègue pense que ton programme affiche une fenêtre qui ne renvoie pas de handle (comme les boites de dialogue par exemple).
0
GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

22 févr. 2019 à 17:20
Bonsoir, merci de t'être renseigné.
Quand tu dis "Ton programme" c'est quoi? Mon programme fournisseur?
Si oui, est il possible de faire quand même mon logiciel, via un autre langage informatique ou via un logiciel ?

Merci beaucoup.
0
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
22 févr. 2019 à 18:02
Quand tu dis "Ton programme" c'est quoi? Mon programme fournisseur?

oui

Si oui, est il possible de faire quand même mon logiciel, via un autre langage informatique ou via un logiciel ?
à priori pas avec un langage qui utiliserait la dll user32 (donc la majorité des langages windows) pour faire ça.

Peux tu poster une capture d'écran de ton logiciel fournisseur?
0
GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

22 févr. 2019 à 18:17
Je m'en occupe lundi.
Merci.
Bonne soirée et bon week end.
0
GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

25 févr. 2019 à 09:02
Bonjour,
Voici la capture d'écran de mes logiciels fournisseurs.





Je vous remercie pour votre aide.

Bonne journée.
0
J'ai un peu adapté
https://stackoverflow.com/questions/31465439/winform-showing-another-application-inside-a-picturebox
et ça marche avec calc.exe

            Process p = Process.Start("calc.exe");

            while (p.MainWindowHandle == IntPtr.Zero)
                Thread.Sleep(10);

            IntPtr h = p.MainWindowHandle;

            RECT r;
            GetWindowRect(h, out r);

            int longueur = r.Right - r.Left;
            int hauteur = r.Bottom - r.Top;

            SetParent(h, this.Handle);

            MoveWindow(h, 0, 0, longueur, hauteur, true);


Il semble que pour le cas de calc,
p.WaitForInputIdle();
ne fonctionne pas. Il faut atteindre que la valeur du handle soit remplie.

A toi de voir si cela fonctionne avec tes programmes.
0
GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

26 févr. 2019 à 09:23
Bonjour,

Ca ne fonctionne pas, toujours le même problème avec mes programmes fournisseurs
Merci pour le temps que tu passes sur mon programme.
0
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
26 févr. 2019 à 09:28
Je ne peux pas faire plus, je ne dispose pas de te logiciels.
0
GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

Modifié le 26 févr. 2019 à 09:50
OK. En tout cas je te remercie beaucoup de ton aide.
Bonne continuation.
0
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
26 févr. 2019 à 10:19
Pareil
0
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
26 févr. 2019 à 16:10
Juste pour être sûr, tu as bien importé GetWindowRec et MoveWindow?
0
GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

26 févr. 2019 à 16:14
oui, j'ai bien rajouté ces lignes :
[DllImport("user32.dll")]
private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int w, int h, bool repaint);

[DllImport("user32.dll")]
private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
0
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
26 févr. 2019 à 18:15
Ok
0