Sendmessage documentation
Posted: April 8th, 2010, 6:11 pm
New documentation for freestyler SendMessage and inbuilt TCP/IP server
Get help and support from the community and the most latest FS news and downloads!
https://www.freestylersupport.com/fsforum/
https://www.freestylersupport.com/fsforum/viewtopic.php?t=2184
Code: Select all
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace FSCommunicator
{
public class FreestylerCommunicator
{
[DllImport("User32.dll", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, int msg, IntPtr wPar, IntPtr lPar);
[DllImport("User32.dll", CharSet = CharSet.Auto, EntryPoint = "SendMessageA")]
private static extern int SendMessage2(IntPtr hWnd, int msg, IntPtr wPar, COPYDATASTRUCT lparam);
[DllImport("User32.dll", EntryPoint = "FindWindowA")]
private static extern IntPtr FindWindow(String lpClassName, String lpWindowName);
private IntPtr parent;
private IntPtr ThWnd;
private const int WM_COPYDATA = 0x4A;
private const int WM_USER = 0x400;
public struct COPYDATASTRUCT
{
public long dwData;
public long cbData;
public IntPtr lpData;
}
/// <summary>
/// creates an Instance of FreestylerCommunicator
/// </summary>
/// <param name="WindowHandle"></param>
public FreestylerCommunicator(IntPtr WindowHandle)
{
parent = WindowHandle;
refreshHandle();
}
/// <summary>
/// return an Pointer to the given Object
/// </summary>
/// <param name="o"></param>
/// <returns></returns>
private static IntPtr VarPtr(object o)
{
System.Runtime.InteropServices.GCHandle GC =
System.Runtime.InteropServices.GCHandle.Alloc(o,
System.Runtime.InteropServices.GCHandleType.Pinned);
IntPtr ret = GC.AddrOfPinnedObject();
GC.Free();
return ret;
}
private bool refreshHandle()
{
ThWnd = FindWindow("ThunderRT6FormDC", "FS");
if (ThWnd != IntPtr.Zero) return true;
else return false;
}
/// <summary>
/// Sending Commands to FreeStyler
/// </summary>
/// <param name="wparam">CommandCode</param>
/// <param name="lparam">Value</param>
public bool SendCommand(int wparam, int lparam)
{
if (refreshHandle())
{
SendMessage(ThWnd, WM_USER, new IntPtr(wparam), new IntPtr(lparam));
return true;
}
return false;
}
/// <summary>
/// Sending Data to FreeStyler
/// </summary>
/// <param name="Functioncode"></param>
/// <param name="Length">Arraylength</param>
/// <param name="arrValues"></param>
public bool SendData(long Functioncode, long Length, Byte[] arrValues)
{
COPYDATASTRUCT cdCopyData;
cdCopyData.dwData = Functioncode; //see it in the docs (page 8 or 9)
cdCopyData.cbData = Length; //512
cdCopyData.lpData = VarPtr(arrValues);
if (refreshHandle())
{
SendMessage2(ThWnd, WM_COPYDATA, parent, cdCopyData);
return true;
}
return false;
}
}
}
Code: Select all
using System;
using System.Runtime.InteropServices;
namespace FS_Go_Monkey
{
public class sendMessageClass
{
//COMPILE AS X86 otherwise pointers need changing
//For use with WM_COPYDATA and COPYDATASTRUCT
[DllImport("User32.dll")]
public static extern int SendMessage(int hWnd, int Msg, int wParam, ref COPYDATASTRUCT lParam);
[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, int Msg, int wParam, int LParam);
[DllImport("user32.dll")]
static extern int FindWindow(string lpClassName, string lpWindowName);
private const int WM_USER = 0x400;
private const int WM_COPY = 0x4A;
private int freestylerConnected()
{
int ihandle = FindWindow(null, "FS");
return ihandle;
}
private static Int32 VarPtr(object o)
{
GCHandle GC = GCHandle.Alloc(o, GCHandleType.Pinned);
IntPtr ptr = GC.AddrOfPinnedObject();
GC.Free();
return ptr.ToInt32();
}
public struct COPYDATASTRUCT
{
public Int32 dwData;
public Int32 cbData;
[MarshalAs(UnmanagedType.I4)]
public Int32 lpData;
}
public void sendCHMessageFunction(byte[] DMXvalues, int functionCode)
{
COPYDATASTRUCT cds;
cds.dwData = functionCode;
cds.lpData = VarPtr(DMXvalues);
cds.cbData = DMXvalues.Length;
int hWnd = freestylerConnected();
if (hWnd != 0)
{
SendMessage(hWnd, WM_COPY, 0, ref cds);
}
}
public void sendMessageFunction(int command, int value)
{
int iHandle = freestylerConnected();
if (freestylerConnected() != 0)
{
SendMessage(iHandle, WM_USER, command, value);
}
}
}
}