When MicroSIP runs, it registers itself as a DDE server. Any Windows application that can act as a DDE client (e.g., AutoHotkey, Python with ddelib , C#, PowerShell) can send commands to it. All commands are case-sensitive strings. 3.1 DIAL Initiates an outbound call.
CONFIG <setting>=<value>
DIAL <number_or_SIP_URI>
External App → (DDE) → MicroSIP (send commands) MicroSIP UI → (Window Title / Log) → External App (read status) MicroSIP changes its main window title based on call state. You can poll or hook into window title changes.
HANGUP 3.3 ANSWER Answers an incoming call.
def get_call_state(self): hwnd = win32gui.FindWindow(None, "MicroSIP") if hwnd: title = win32gui.GetWindowText(hwnd) if "Dialing" in title: return "dialing" elif "Incoming call" in title: return "ringing" elif "In call with" in title: return "connected" return "idle"
def answer(self): self.dde_client.Execute("ANSWER", timeout=5000)
When MicroSIP runs, it registers itself as a DDE server. Any Windows application that can act as a DDE client (e.g., AutoHotkey, Python with ddelib , C#, PowerShell) can send commands to it. All commands are case-sensitive strings. 3.1 DIAL Initiates an outbound call.
CONFIG <setting>=<value>
DIAL <number_or_SIP_URI>
External App → (DDE) → MicroSIP (send commands) MicroSIP UI → (Window Title / Log) → External App (read status) MicroSIP changes its main window title based on call state. You can poll or hook into window title changes.
HANGUP 3.3 ANSWER Answers an incoming call.
def get_call_state(self): hwnd = win32gui.FindWindow(None, "MicroSIP") if hwnd: title = win32gui.GetWindowText(hwnd) if "Dialing" in title: return "dialing" elif "Incoming call" in title: return "ringing" elif "In call with" in title: return "connected" return "idle"
def answer(self): self.dde_client.Execute("ANSWER", timeout=5000)