123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- using Microsoft.Win32;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading.Tasks;
- namespace CollaborativePlatformMain.CADStartUtil
- {
- /// <summary>
- ///
- /// <para>文件名(File Name): SendToCAD.cs</para>
- ///
- /// <para>描述(Description): 发送命令到CAD</para>
- ///
- /// <para>数据表(Tables): nothing</para>
- ///
- /// <para>作者(Author): Ou Rui Song</para>
- ///
- /// <para>日期(Create Date): 2024年5月7日11:28:52</para>
- ///
- /// 修改记录(Revision History):
- /// R1:
- /// 修改作者:
- /// 修改日期:
- /// 修改理由:
- ///
- /// </summary>
- public class SendToCAD
- {
- [DllImport("user32.dll")]
- public static extern bool SetForegroundWindow(IntPtr hWnd);
- [DllImport("user32.dll", EntryPoint = "FindWindow")]
- public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
- [DllImport("user32.dll")]
- private static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, ref COPYDATASTRUCT lParam);
- public static void SendCommandToAutoCAD(string toSend, IntPtr hwnd)
- {
- const int WM_COPYDATA = 0x4A;
- COPYDATASTRUCT cds = new COPYDATASTRUCT();
- cds.dwData = new IntPtr(1);
- string data = toSend + "\0";
- cds.cbData = data.Length * Marshal.SystemDefaultCharSize;
- cds.lpData = Marshal.StringToCoTaskMemAuto(data);
- SendMessageW(hwnd, WM_COPYDATA, IntPtr.Zero, ref cds);
- Marshal.FreeCoTaskMem(cds.lpData);
- }
- private struct COPYDATASTRUCT
- {
- public IntPtr dwData;
- public int cbData;
- public IntPtr lpData;
- }
- }
- /// <summary>
- ///
- /// <para>文件名(File Name): AcadDirs.cs</para>
- ///
- /// <para>描述(Description): CAD注册表环境读取</para>
- ///
- /// <para>数据表(Tables): nothing</para>
- ///
- /// <para>作者(Author): Li Wen Jin</para>
- ///
- /// <para>日期(Create Date): 2023年10月20日13:43:58</para>
- ///
- /// 修改记录(Revision History):
- /// R1:
- /// 修改作者:
- /// 修改日期:
- /// 修改理由:
- ///
- /// </summary>
- public class AcadDirs
- {
- public List<AcadProductKey> Dirs { get; }
- /// <summary>
- /// 通过注册表获取本机所有cad的安装路径
- /// </summary>
- public AcadDirs()
- {
- Dirs = new List<AcadProductKey>();
- RegistryKey Adsk = Registry.CurrentUser.OpenSubKey(@"Software\Autodesk\AutoCAD");
- if (Adsk == null)
- {
- //Console.WriteLine("Adsk == null");
- return;
- }
- foreach (string ver in Adsk.GetSubKeyNames())
- {
- try
- {
- RegistryKey emnuAcad = Adsk.OpenSubKey(ver);
- var curver = emnuAcad.GetValue("CurVer");
- if (curver == null)
- {
- //Console.WriteLine("curver == null");
- continue;
- }
- string app = curver.ToString();
- string fmt = @"Software\Autodesk\AutoCAD\{0}\{1}";
- emnuAcad = Registry.LocalMachine.OpenSubKey(string.Format(fmt, ver, app));
- if (emnuAcad == null)
- {
- fmt = @"Software\Wow6432Node\Autodesk\AutoCAD\{0}\{1}";
- emnuAcad = Registry.LocalMachine.OpenSubKey(string.Format(fmt, ver, app));
- }
- var acadLocation = emnuAcad.GetValue("AcadLocation");
- if (acadLocation == null)
- {
- //Console.WriteLine("acadLocation == null");
- continue;
- }
- string location = acadLocation.ToString();
- if (File.Exists(location + "\\acad.exe"))
- {
- var produ = emnuAcad.GetValue("ProductName");
- if (produ == null)
- {
- //Console.WriteLine("produ == null");
- continue;
- }
- string productname = produ.ToString();
- var release = emnuAcad.GetValue("Release");
- if (release == null)
- {
- //Console.WriteLine("release == null");
- continue;
- }
- string[] strVer = release.ToString().Split('.');
- var pro = new AcadProductKey()
- {
- ProductKey = emnuAcad,
- Location = location,
- ProductName = productname,
- Version = double.Parse(strVer[0] + "." + strVer[1]),
- };
- Dirs.Add(pro);
- }
- }
- catch { }
- }
- }
- public struct AcadProductKey
- {
- /// <summary>
- /// 注册表位置
- /// </summary>
- public RegistryKey ProductKey;
- /// <summary>
- /// cad安装路径
- /// </summary>
- public string Location;
- /// <summary>
- /// cad名称
- /// </summary>
- public string ProductName;
- /// <summary>
- /// cad版本号 17.1之类的
- /// </summary>
- public double Version;
- }
- }
- }
|