Salut à toutes et à tous.
Je dois trouver le handle et le titre de la fenêtre à partir de laquelle j'appelle mon application.
Qu'est-ce à dire ?
Dans AutoCAD MAP 2004 J'ai crée un bouton qui, en LISP, ouvre une application que j'ai créée en C#.
Le problème est que j'ai besoin, à partir de l'application, d'extraire des données d'AutoCAD.
Si je démarre une nouvelle session d'AutoCAD à partir de l'application, je n'ai pas de pbl. Mais l'utilisateur final ne va pas passer beaucoup de temps à ouvrir de nouvelles instances d'AutoCAD et à les refermer au fur et à mesure. Il viendra me tapper dessus avant et il aura raison ...
J'utilise, pour ouvrir AutoCAD à partir de mon code :
Je pourrais rechercher tous les handle des fenêtres puis trouver celle qui commence par acad, mais si plusieurs instances d'AutoCAD sont ouvertes, comment savoir laquelle est l'instance appelante ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 using AutoCAD; ... publicstaticAcadApplication acad_app; publicstaticAcadDocument acad_doc; privatevoid OpenAcadDrawing(string DwgPath, bool ReadOnly) { try { acad_app = newAcadApplication(); acad_doc = acad_app.ActiveDocument; acad_app.Application.Visible = true; ...
J'ai pensé à extraire le handle et le titre de la fenêtre active à l'ouverture de l'application (plus précisément j'ai essayé sur le load du premier form et dans le main du program.cs), puisque celle-ci est ouverte en lisp à partir d'une icone dans AutoCAD. La fenêtre active étant forcément la fenêtre de l'instance appelante.
J'ai codé ceci qui me retourne effectivement le titre de l'application active :
Malheureusement, là où j'ai tenté d'utiliser ce bout de code (le load du premier form ou le main du program.cs), il me retourne invariablement "".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 [DllImport("user32.dll")] staticexternint GetForegroundWindow(); [DllImport("user32.dll")] staticexternint GetWindowText(int hWnd, StringBuilder text, int count); privatestring GetActiveWindowTitle() { constint nChars = 256; int handle = 0; StringBuilder Buff = newStringBuilder(nChars); string ApplicationTitle = ""; handle = GetForegroundWindow(); if (GetWindowText(handle, Buff, nChars) > 0) { ApplicationTitle = Buff.ToString(); } return ApplicationTitle; }
Je pense que déjà ici il me sort le handle le mon application, mais ne retourne rien dans le titre puisqu'aucune fenêtre n'est encore ouverte.
Comment trouver le Handle de l'application AutoCAD et, par extension, le titre de sa fenêtre ?
Enfin, par extension, comment attribuer l'application AutoCAD ouverte et découverte à acad_app dans le premier bout de code ?
Merci de vos z'avis z'avisés,
Jean-Marc
Partager