using System; using System.Runtime.InteropServices; using System.Text;class MicroSipAPI [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, ref COPYDATASTRUCT lParam); public const int WM_COPYDATA = 0x004A; [StructLayout(LayoutKind.Sequential)] public struct COPYDATASTRUCT public IntPtr dwData; public int cbData; public IntPtr lpData; public static void Dial(string number) IntPtr hWnd = FindWindow(null, "MicroSIP"); if (hWnd == IntPtr.Zero) throw new Exception("MicroSIP not running"); byte[] bytes = Encoding.ASCII.GetBytes($"callto:number"); COPYDATASTRUCT cds = new COPYDATASTRUCT(); cds.dwData = (IntPtr)1; cds.cbData = bytes.Length + 1; cds.lpData = Marshal.AllocHGlobal(cds.cbData); Marshal.Copy(bytes, 0, cds.lpData, bytes.Length); Marshal.WriteByte(cds.lpData, bytes.Length, 0); SendMessage(hWnd, WM_COPYDATA, IntPtr.Zero, ref cds); Marshal.FreeHGlobal(cds.lpData);
All command-line arguments from Part 2 work via WM_COPYDATA, plus a few extras.
| Command String | Effect |
|----------------|---------|
| callto:1000 | Initiate call |
| hangup | End call |
| answer | Answer call |
| reject | Reject call |
| mute | Toggle mute |
| dtmf:123 | Send DTMF |
| transfer:sip:1001 | Blind transfer |
| status | Returns current status (as another message) | microsip api documentation
| Feature | MicroSIP | Zoiper (Pro) | Linphone (Belle) | | :--- | :--- | :--- | :--- | | CLI control | Yes | Yes | Yes | | WM_COPYDATA | Yes | No | No | | HTTP REST API | No | Yes (paid) | Yes (limited) | | Event callbacks | No | Yes (DLL injection) | Yes (DBus) | | Cross-platform | Windows only | Windows, macOS, Linux | Windows, macOS, Linux |
MicroSIP’s API is simpler but more lightweight and local-process friendly than competitors. It is ideal for Windows-only automation with minimal overhead. using System; using System
MicroSIP accepts command-line arguments for basic control:
# Make a call
MicroSIP.exe "sip:number@domain"