none
Mettre au premier plan une application lancée via interop...

    Question

  • Bonjour à tous

    Mon programme lance AutoCad 2013 via interop.

    Je voudrais qu'il vienne au premier plan.

    La fonction Control.FromHandle(pointEurWin); renvoie toujours NULL.

    AutoCAD.AcadApplication acAppComObj = null;
    try
    {
     acAppComObj = (AutoCAD.AcadApplication)Activator.CreateInstance(Type.GetTypeFromProgID(RSCE.AcadAPP13), true);
     acAppComObj.Visible = true;
     acAppComObj.Application.WindowState = AutoCAD.AcWindowState.acMax;
     acAppComObj.Application.Preferences.Profiles.ActiveProfile = m_Cmde.ProfilAcad;
     AutoCAD.AcadDocument l_Doc = (AutoCAD.AcadDocument)acAppComObj.Documents.Open(m_Cmde.Bassin.NomDwg);
     acAppComObj.ZoomExtents();
     IntPtr pointEurWin = new IntPtr(acAppComObj.HWND32);

     Control l_CtrlW = Control.FromHandle(pointEurWin);

     if (l_CtrlW != null)   // l_CtrlW EST TOUJOURS NULL
     {
           l_CtrlW.BringToFront();
     }

     l_Doc.SendCommand(string.Format("(command \"script\" \"{0}\")\n", l_NomScript.Replace('\\', '/')));
     l_Doc.SendCommand(string.Format("(command \"netload\" \"{0}\")\n", l_FichDLL.Replace('\\', '/')));

     acAppComObj = null;
    }
    catch (Exception ex)
    {
       afficherERR(ex);
       acAppComObj = null;
    }


    vendredi 3 juin 2016 11:21

Réponses

Toutes les réponses

  • J'ai essayé ça

    [DllImport("User32.dll", EntryPoint = "BringWindowToTop")]
    static extern int CtrlAuDessus(IntPtr hWnd);

    [DllImport("User32.dll", EntryPoint = "SetWindowPos")]
    static extern int CtrlSetPosition(IntPtr pWnOrigine, IntPtr pWndInsertAfter, int x, int y, int cx, int cy, int nFlags);
    const int SWP_SHOWWINDOW = 0x0040;        

    acAppComObj = (AutoCAD.AcadApplication)Activator.CreateInstance(Type.GetTypeFromProgID(RSCE.AcadAPP13), true);
    acAppComObj.Visible = true;
    acAppComObj.Application.Preferences.Profiles.ActiveProfile = m_Cmde.ProfilAcad;
    AutoCAD.AcadDocument l_Doc = (AutoCAD.AcadDocument)acAppComObj.Documents.Open(m_Cmde.Bassin.NomDwg);

    IntPtr( ptx = new IntPtr(acAppComObj.HWND32);
    codeERR = CtrlAuDessus(ptx); //Retourne 1
    codeERR = CtrlSetPosition(ptx, ptx, 0, 0, 1800, 1080, SWP_SHOWWINDOW); //Retourne 1

    mais rien ne change, l'application est toujours à l'arrière plan...

    vendredi 3 juin 2016 14:14
  • Bonjour GP79,

    Peut être devriez-vous regarder du côté de la fonction SetForegoundWindow.

    • Marqué comme réponse GP79 vendredi 3 juin 2016 15:02
    vendredi 3 juin 2016 14:28