添加项目文件。

This commit is contained in:
GG Z
2024-01-08 09:30:50 +08:00
commit 1ccc4b3047
85 changed files with 5904 additions and 0 deletions

View File

@@ -0,0 +1,125 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
using KGdev.BI3D.Revit.Common;
using Newtonsoft.Json;
namespace KGdev.BI3D.Revit.Addin.MainWindow.External.BrowserConnector
{
public class ExternalMainWindow : IMainWindow
{
public bool IsVisible
{
get
{
bool flag = this.browserProcess == null;
bool flag2;
if (flag)
{
flag2 = false;
}
else
{
bool hasExited = this.browserProcess.HasExited;
if (hasExited)
{
flag2 = false;
}
else
{
bool flag3 = this.messageHandler.BrowserHandle == IntPtr.Zero;
flag2 = !flag3;
}
}
return flag2;
}
}
public ExternalMainWindow(IReduxReducer reducer)
{
this.reducer = reducer;
reducer.OnStateChanged += this.Reducer_OnStateChanged;
this.messageHandler.MessageReceivedEvent += this.MessageHandler_MessageReceivedEvent;
}
private void Reducer_OnStateChanged(object sender, Dictionary<string, object> e)
{
string text = JsonConvert.SerializeObject(e);
this.messageHandler.Send(text);
}
private void MessageHandler_MessageReceivedEvent(object sender, MessageReceivedEventArgs e)
{
try
{
string message = e.Message;
Dictionary<string, object> dictionary = JsonConvert.DeserializeObject<
Dictionary<string, object>
>(message);
this.reducer.Reduce(dictionary);
}
catch (Exception ex)
{
MessageBox.Show(
"Something went wrong when processing the request. Please contact info@kg-dev.be."
);
}
}
public void Close()
{
bool flag = this.browserProcess == null;
if (!flag)
{
bool hasExited = this.browserProcess.HasExited;
if (!hasExited)
{
this.browserProcess.Kill();
}
}
}
public void Show()
{
bool flag = !this.IsVisible;
if (flag)
{
this.CreateNew();
}
IntPtr browserHandle = this.messageHandler.BrowserHandle;
User32.SetForegroundWindow(browserHandle);
}
private void CreateNew()
{
Process process = new Process();
process.StartInfo.FileName = Path.Combine(
this.assemblyDirectory,
"KGdev.BI3D.Revit.Addin.MainWindow.External.Browser.exe"
);
process.StartInfo.Arguments = string.Format(
"{0} {1}",
this.messageHandler.Handle,
Process.GetCurrentProcess().Id
);
process.Start();
this.browserProcess = process;
}
private const string BROWSER_EXECUTABLE_RELATIVE_PATH =
"KGdev.BI3D.Revit.Addin.MainWindow.External.Browser.exe";
private readonly MessageHandler messageHandler = new MessageHandler();
private readonly string assemblyDirectory = Path.GetDirectoryName(
new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath
);
private Process browserProcess;
private IReduxReducer reducer;
}
}

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<ProjectGuid>{B4556B52-C073-4D6D-A1BE-BCEDEBE41056}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>KGdev.BI3D.Revit.Addin.MainWindow.External.BrowserConnector</RootNamespace>
<AssemblyName>KGdev.BI3D.Revit.Addin.MainWindow.External.BrowserConnector</AssemblyName>
<GenerateAssemblyInfo>False</GenerateAssemblyInfo>
<FileAlignment>512</FileAlignment>
<TargetFramework>net472</TargetFramework>
<UseWindowsForms>True</UseWindowsForms>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<PropertyGroup>
<EnableDefaultItems>False</EnableDefaultItems>
</PropertyGroup>
<PropertyGroup />
<ItemGroup>
<Compile Include="ExternalMainWindow.cs" />
<Compile Include="MessageHandler.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MessageHandler.Designer.cs">
<DependentUpon>MessageHandler.cs</DependentUpon>
</Compile>
<Compile Include="MessageReceivedEventArgs.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="User32.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\KGdev.BI3D.Revit.Common\KGdev.BI3D.Revit.Common.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json">
<HintPath>C:\ProgramData\Autodesk\Revit\Addins\2020\3DBI for Revit\Newtonsoft.Json.dll</HintPath>
</Reference>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,25 @@
namespace KGdev.BI3D.Revit.Addin.MainWindow.External.BrowserConnector
{
public partial class MessageHandler : global::System.Windows.Forms.Form
{
protected override void Dispose(bool disposing)
{
bool flag = disposing && this.components != null;
if (flag)
{
this.components.Dispose();
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.components = new global::System.ComponentModel.Container();
base.AutoScaleMode = global::System.Windows.Forms.AutoScaleMode.Font;
base.ClientSize = new global::System.Drawing.Size(800, 450);
this.Text = "MessageHandler";
}
private global::System.ComponentModel.IContainer components = null;
}
}

View File

@@ -0,0 +1,135 @@
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Security;
using System.Windows.Forms;
namespace KGdev.BI3D.Revit.Addin.MainWindow.External.BrowserConnector
{
public partial class MessageHandler : Form
{
public IntPtr BrowserHandle { get; private set; }
[field: DebuggerBrowsable(DebuggerBrowsableState.Never)]
public event MessageHandler.MessageReceivedEventHandler MessageReceivedEvent;
public void Send(string message)
{
this.DoSend(message);
}
private void DoSend(string message)
{
MessageHandler.MessageStruct messageStruct = new MessageHandler.MessageStruct
{
Message = message
};
int num = Marshal.SizeOf<MessageHandler.MessageStruct>(messageStruct);
IntPtr intPtr = Marshal.AllocHGlobal(num);
try
{
Marshal.StructureToPtr<MessageHandler.MessageStruct>(messageStruct, intPtr, true);
MessageHandler.COPYDATASTRUCT copydatastruct =
default(MessageHandler.COPYDATASTRUCT);
copydatastruct.cbData = num;
copydatastruct.lpData = intPtr;
MessageHandler
.NativeMethod
.SendMessage(this.BrowserHandle, 74, base.Handle, ref copydatastruct);
int lastWin32Error = Marshal.GetLastWin32Error();
}
finally
{
Marshal.FreeHGlobal(intPtr);
}
}
protected override void WndProc(ref Message m)
{
bool flag = m.Msg == 74;
if (flag)
{
MessageHandler.COPYDATASTRUCT copydatastruct = (MessageHandler.COPYDATASTRUCT)
m.GetLParam(typeof(MessageHandler.COPYDATASTRUCT));
bool flag2 =
copydatastruct.cbData == Marshal.SizeOf(typeof(MessageHandler.MessageStruct));
if (flag2)
{
MessageHandler.MessageStruct messageStruct = (MessageHandler.MessageStruct)
Marshal.PtrToStructure(
copydatastruct.lpData,
typeof(MessageHandler.MessageStruct)
);
bool flag3 = messageStruct.Message.StartsWith("handle:");
if (flag3)
{
this.BrowserHandle = new IntPtr(
int.Parse(messageStruct.Message.Replace("handle:", ""))
);
}
else
{
bool flag4 = messageStruct.Message.StartsWith("close:");
if (flag4)
{
this.BrowserHandle = IntPtr.Zero;
}
else
{
bool flag5 = messageStruct.Message.StartsWith("execute:");
if (flag5)
{
string text = messageStruct.Message.Replace("execute:", "");
MessageHandler.MessageReceivedEventHandler messageReceivedEvent =
this.MessageReceivedEvent;
if (messageReceivedEvent != null)
{
messageReceivedEvent(this, new MessageReceivedEventArgs(text));
}
}
}
}
}
}
base.WndProc(ref m);
}
private const int MESSAGE_MAX_SIZE = 16777216;
private Timer actionHandler = new Timer { Interval = 300 };
internal const int WM_COPYDATA = 74;
public delegate void MessageReceivedEventHandler(object sender, MessageReceivedEventArgs e);
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
internal struct MessageStruct
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16777216)]
public string Message;
}
internal struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
public IntPtr lpData;
}
[SuppressUnmanagedCodeSecurity]
internal class NativeMethod
{
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr SendMessage(
IntPtr hWnd,
int Msg,
IntPtr wParam,
ref MessageHandler.COPYDATASTRUCT lParam
);
}
}
}

View File

@@ -0,0 +1,14 @@
using System;
namespace KGdev.BI3D.Revit.Addin.MainWindow.External.BrowserConnector
{
public class MessageReceivedEventArgs
{
public string Message { get; }
public MessageReceivedEventArgs(string message)
{
this.Message = message;
}
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
[assembly: AssemblyVersion("1.3.0.0")]
[assembly: AssemblyCompany("KGdev.BI3D.Revit.Addin.MainWindow.External.BrowserConnector")]
[assembly: AssemblyConfiguration("Release 2020")]
[assembly: AssemblyFileVersion("1.3.0")]
[assembly: AssemblyInformationalVersion("1.3.0")]
[assembly: AssemblyProduct("KGdev.BI3D.Revit.Addin.MainWindow.External.BrowserConnector")]
[assembly: AssemblyTitle("KGdev.BI3D.Revit.Addin.MainWindow.External.BrowserConnector")]

View File

@@ -0,0 +1,12 @@
using System;
using System.Runtime.InteropServices;
namespace KGdev.BI3D.Revit.Addin.MainWindow.External.BrowserConnector
{
internal static class User32
{
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetForegroundWindow(IntPtr hWnd);
}
}