添加项目文件。
This commit is contained in:
@@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user