#NoEnv ; #Warn SendMode Input SetWorkingDir %A_ScriptDir% ; Until here, this is the default script template ; Get handle to this running script instance Gui +LastFound hWnd := WinExist() ; just for convenience, you also could use the "magic numbers" directly global oscTypeNone := 1 global oscTypeInt := 2 global oscTypeFloat := 4 global oscTypeString := 8 global oscTypeAll := 0xffffffff ; Load DLL and open network port for OSC (7001) DllCall("LoadLibrary", "Str", "OSC2AHK.dll", "Ptr") DllCall("OSC2AHK.dll\open", UInt, hWnd, UInt, 7001) ; Tell the DLL to post a system message with ID 0x1001 when a OSC message with address "/test1" and type string is received. DllCall("OSC2AHK.dll\addListener", AStr, "/test1", UInt, 0x1001, UInt, oscTypeString) ; Tell AHK to invoke the function msghandlerTest1 when a windows message with ID 0x1001 is received OnMessage(0x1001, "msghandlerTest1") ; This function effectively is called for each OSC message as specified above msghandlerTest1(oscType, data, msgID, hwnd) { ; Check that we really received a string message (kind of redundant for this example) if (oscType = oscTypeString) { ; String cannot be passed via system messages, ; so the string is buffered in the DLL and we only get a unique identifier in the "data" variable. ; To get the actual string, we use the getStringData() DLL-call VarSetCapacity(theString, 20) ; prepare variable to store string in with sufficient size theString := DllCall("OSC2AHK.dll\getStringData", str, theString, UInt, 20, UInt, data, AStr) msgbox,Got string: %theString% } } ; Shutdown the script with Shift+ESC +Esc:: ExitApp