<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>http://www.fsdeveloper.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=62.147.159.58</id>
	<title>FSDeveloper Wiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="http://www.fsdeveloper.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=62.147.159.58"/>
	<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php/Special:Contributions/62.147.159.58"/>
	<updated>2026-06-05T04:01:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=SimConnect_-_Accessing_from_VB&amp;diff=1873</id>
		<title>SimConnect - Accessing from VB</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=SimConnect_-_Accessing_from_VB&amp;diff=1873"/>
		<updated>2006-10-20T10:07:32Z</updated>

		<summary type="html">&lt;p&gt;62.147.159.58: /* Sample Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The SimConnect documentation states that you must use C or C++ to access SimConnect, unless you use the managed API, in which case you can use any of the Microsoft .Net language compilers.  However I have found, after a bit of experimentation, that you can access the non-managed SimConnect API from VB and VBA, using appropriate DECLARE statements.&lt;br /&gt;
&lt;br /&gt;
Below are the DECLARE statements I have written so far.  Others can contribute to this section if they wish, until the entire API is covered.&lt;br /&gt;
&lt;br /&gt;
Note : to make these work, you&#039;ll have to place a copy of SimConnect.dll somewhere where VB can find it, or else specify the path to it directly in the Declare statement&lt;br /&gt;
&lt;br /&gt;
==Declare Statements==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Declare Function SimConnect_Open Lib &amp;quot;SimConnect.dll&amp;quot; _&lt;br /&gt;
   (phSimConnect As Long, _&lt;br /&gt;
    ByVal szName As String, _&lt;br /&gt;
    ByVal hWnd As Long, _&lt;br /&gt;
    ByVal UserEventWin32 As Long, _&lt;br /&gt;
    ByVal hEventHandle As Long, _&lt;br /&gt;
    ByVal ConfigIndex As Long) As Long&lt;br /&gt;
 &lt;br /&gt;
Declare Function SimConnect_GetNextDispatch Lib &amp;quot;SimConnect.dll&amp;quot; _&lt;br /&gt;
      (ByVal hSimConnect As Long, _&lt;br /&gt;
       ppData As Long, _&lt;br /&gt;
       pcbData As Long) As Long&lt;br /&gt;
       &lt;br /&gt;
Declare Function SimConnect_AddToDataDefinition Lib &amp;quot;SimConnect.dll&amp;quot; _&lt;br /&gt;
      (ByVal hSimConnect As Long, _&lt;br /&gt;
       ByVal DefineID As Long, _&lt;br /&gt;
       ByVal DatumName As String, _&lt;br /&gt;
       ByVal UnitsName As String, _&lt;br /&gt;
       Optional ByVal DatumType As Long, _&lt;br /&gt;
       Optional ByVal fEpsilon As Single, _&lt;br /&gt;
       Optional ByVal DatumID As Long) As Long&lt;br /&gt;
       &lt;br /&gt;
Declare Function SimConnect_RequestDataOnSimObjectType Lib &amp;quot;SimConnect.dll&amp;quot; _&lt;br /&gt;
      (ByVal hSimConnect As Long, _&lt;br /&gt;
       ByVal RequestID As Long, _&lt;br /&gt;
       ByVal DefineID As Long, _&lt;br /&gt;
       ByVal dwRadiusMeters As Long, _&lt;br /&gt;
       ByVal ObjectType As Long) As Long&lt;br /&gt;
       &lt;br /&gt;
Declare Function SimConnect_Close Lib &amp;quot;SimConnect.dll&amp;quot; (ByVal hSimConnect As Long) As Long&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Constants &amp;amp; Enums==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Const S_OK = 0&lt;br /&gt;
Const E_FAIL = &amp;amp;H80004005&lt;br /&gt;
Const E_INVALIDARG = &amp;amp;H80070057&lt;br /&gt;
&lt;br /&gt;
Enum SIMCONNECT_RECV_ID&lt;br /&gt;
    SIMCONNECT_RECV_ID_NULL&lt;br /&gt;
    SIMCONNECT_RECV_ID_EXCEPTION&lt;br /&gt;
    SIMCONNECT_RECV_ID_OPEN&lt;br /&gt;
    SIMCONNECT_RECV_ID_QUIT&lt;br /&gt;
    SIMCONNECT_RECV_ID_EVENT&lt;br /&gt;
    SIMCONNECT_RECV_ID_EVENT_OBJECT_ADDREMOVE&lt;br /&gt;
    SIMCONNECT_RECV_ID_EVENT_FILENAME&lt;br /&gt;
    SIMCONNECT_RECV_ID_EVENT_FRAME&lt;br /&gt;
    SIMCONNECT_RECV_ID_SIMOBJECT_DATA&lt;br /&gt;
    SIMCONNECT_RECV_ID_SIMOBJECT_DATA_BYTYPE&lt;br /&gt;
    SIMCONNECT_RECV_ID_WEATHER_OBSERVATION&lt;br /&gt;
    SIMCONNECT_RECV_ID_CLOUD_STATE&lt;br /&gt;
    SIMCONNECT_RECV_ID_ASSIGNED_OBJECT_ID&lt;br /&gt;
    SIMCONNECT_RECV_ID_RESERVED_KEY&lt;br /&gt;
    SIMCONNECT_RECV_ID_CUSTOM_ACTION&lt;br /&gt;
    SIMCONNECT_RECV_ID_SYSTEM_STATE&lt;br /&gt;
    SIMCONNECT_RECV_ID_CLIENT_DATA&lt;br /&gt;
End Enum&lt;br /&gt;
&lt;br /&gt;
Enum SIMCONNECT_DATATYPE&lt;br /&gt;
    SIMCONNECT_DATATYPE_INVALID        &#039; invalid data type&lt;br /&gt;
    SIMCONNECT_DATATYPE_INT32          &#039; 32-bit integer number&lt;br /&gt;
    SIMCONNECT_DATATYPE_INT64          &#039; 64-bit integer number&lt;br /&gt;
    SIMCONNECT_DATATYPE_FLOAT32        &#039; 32-bit floating-point number (float)&lt;br /&gt;
    SIMCONNECT_DATATYPE_FLOAT64        &#039; 64-bit floating-point number (double)&lt;br /&gt;
    SIMCONNECT_DATATYPE_STRING8        &#039; 8-byte string&lt;br /&gt;
    SIMCONNECT_DATATYPE_STRING32       &#039; 32-byte string&lt;br /&gt;
    SIMCONNECT_DATATYPE_STRING64       &#039; 64-byte string&lt;br /&gt;
    SIMCONNECT_DATATYPE_STRING128      &#039; 128-byte string&lt;br /&gt;
    SIMCONNECT_DATATYPE_STRING256      &#039; 256-byte string&lt;br /&gt;
    SIMCONNECT_DATATYPE_STRING260      &#039; 260-byte string&lt;br /&gt;
    SIMCONNECT_DATATYPE_STRINGV        &#039; variable-length string&lt;br /&gt;
&lt;br /&gt;
    SIMCONNECT_DATATYPE_INITPOSITION   &#039; see SIMCONNECT_DATA_INITPOSITION&lt;br /&gt;
    SIMCONNECT_DATATYPE_MARKERSTATE    &#039; see SIMCONNECT_DATA_MARKERSTATE&lt;br /&gt;
    SIMCONNECT_DATATYPE_WAYPOINT       &#039; see SIMCONNECT_DATA_WAYPOINT&lt;br /&gt;
    SIMCONNECT_DATATYPE_LATLONALT      &#039; see SIMCONNECT_DATA_LATLONALT&lt;br /&gt;
    SIMCONNECT_DATATYPE_XYZ            &#039; see SIMCONNECT_DATA_XYZ&lt;br /&gt;
&lt;br /&gt;
    SIMCONNECT_DATATYPE_MAX             &#039; enum limit&lt;br /&gt;
End Enum&lt;br /&gt;
&lt;br /&gt;
Enum SIMCONNECT_SIMOBJECT_TYPE&lt;br /&gt;
  SIMCONNECT_SIMOBJECT_TYPE_USER&lt;br /&gt;
  SIMCONNECT_SIMOBJECT_TYPE_ALL&lt;br /&gt;
  SIMCONNECT_SIMOBJECT_TYPE_AIRCRAFT&lt;br /&gt;
  SIMCONNECT_SIMOBJECT_TYPE_HELICOPTER&lt;br /&gt;
  SIMCONNECT_SIMOBJECT_TYPE_BOAT&lt;br /&gt;
  SIMCONNECT_SIMOBJECT_TYPE_GROUND&lt;br /&gt;
End Enum&lt;br /&gt;
&lt;br /&gt;
Enum SIMCONNECT_EXCEPTION&lt;br /&gt;
  SIMCONNECT_EXCEPTION_NONE = 0&lt;br /&gt;
  SIMCONNECT_EXCEPTION_ERROR = 1&lt;br /&gt;
  SIMCONNECT_EXCEPTION_SIZE_MISMATCH = 2&lt;br /&gt;
  SIMCONNECT_EXCEPTION_UNRECOGNIZED_ID = 3&lt;br /&gt;
  SIMCONNECT_EXCEPTION_UNOPENED = 4&lt;br /&gt;
  SIMCONNECT_EXCEPTION_VERSION_MISMATCH = 5&lt;br /&gt;
  SIMCONNECT_EXCEPTION_TOO_MANY_GROUPS = 6&lt;br /&gt;
  SIMCONNECT_EXCEPTION_NAME_UNRECOGNIZED = 7&lt;br /&gt;
  SIMCONNECT_EXCEPTION_TOO_MANY_EVENT_NAMES = 8&lt;br /&gt;
  SIMCONNECT_EXCEPTION_EVENT_ID_DUPLICATE = 9&lt;br /&gt;
  SIMCONNECT_EXCEPTION_TOO_MANY_MAPS = 10&lt;br /&gt;
  SIMCONNECT_EXCEPTION_TOO_MANY_OBJECTS = 11&lt;br /&gt;
  SIMCONNECT_EXCEPTION_TOO_MANY_REQUESTS = 12&lt;br /&gt;
  SIMCONNECT_EXCEPTION_WEATHER_INVALID_PORT = 13&lt;br /&gt;
  SIMCONNECT_EXCEPTION_WEATHER_INVALID_METAR = 14&lt;br /&gt;
  SIMCONNECT_EXCEPTION_WEATHER_UNABLE_TO_GET_OBSERVATION = 15&lt;br /&gt;
  SIMCONNECT_EXCEPTION_WEATHER_UNABLE_TO_CREATE_STATION = 16&lt;br /&gt;
  SIMCONNECT_EXCEPTION_WEATHER_UNABLE_TO_REMOVE_STATION = 17&lt;br /&gt;
  SIMCONNECT_EXCEPTION_INVALID_DATA_TYPE = 18&lt;br /&gt;
  SIMCONNECT_EXCEPTION_INVALID_DATA_SIZE = 19&lt;br /&gt;
  SIMCONNECT_EXCEPTION_DATA_ERROR = 20&lt;br /&gt;
  SIMCONNECT_EXCEPTION_INVALID_ARRAY = 21&lt;br /&gt;
  SIMCONNECT_EXCEPTION_CREATE_OBJECT_FAILED = 22&lt;br /&gt;
  SIMCONNECT_EXCEPTION_LOAD_FLIGHTPLAN_FAILED = 23&lt;br /&gt;
  SIMCONNECT_EXCEPTION_OPERATION_INVALID_FOR_OJBECT_TYPE = 24&lt;br /&gt;
  SIMCONNECT_EXCEPTION_ILLEGAL_OPERATION = 25&lt;br /&gt;
  SIMCONNECT_EXCEPTION_ALREADY_SUBSCRIBED = 26&lt;br /&gt;
  SIMCONNECT_EXCEPTION_INVALID_ENUM = 27&lt;br /&gt;
  SIMCONNECT_EXCEPTION_DEFINITION_ERROR = 28&lt;br /&gt;
  SIMCONNECT_EXCEPTION_DUPLICATE_ID = 29&lt;br /&gt;
  SIMCONNECT_EXCEPTION_DATUM_ID = 30&lt;br /&gt;
  SIMCONNECT_EXCEPTION_OUT_OF_BOUNDS = 31&lt;br /&gt;
End Enum&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Structures==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Type SIMCONNECT_RECV&lt;br /&gt;
   dwSize As Long&lt;br /&gt;
   dwVersion As Long&lt;br /&gt;
   dwID As Long&lt;br /&gt;
End Type&lt;br /&gt;
&lt;br /&gt;
Type SIMCONNECT_RECV_EXCEPTION&lt;br /&gt;
  dwException As Long&lt;br /&gt;
  dwSendID As Long&lt;br /&gt;
  dwIndex As Long&lt;br /&gt;
End Type&lt;br /&gt;
&lt;br /&gt;
Type SIMCONNECT_RECV_OPEN&lt;br /&gt;
  szApplicationName As String * 256&lt;br /&gt;
  dwApplicationVersionMajor As Long&lt;br /&gt;
  dwApplicationVersionMinor As Long&lt;br /&gt;
  dwApplicationBuildMajor As Long&lt;br /&gt;
  dwApplicationBuildMinor As Long&lt;br /&gt;
  dwSimConnectVersionMajor As Long&lt;br /&gt;
  dwSimConnectVersionMinor As Long&lt;br /&gt;
  dwSimConnectBuildMajor As Long&lt;br /&gt;
  dwSimConnectBuildMinor As Long&lt;br /&gt;
  dwReserved1 As Long&lt;br /&gt;
  dwReserved2 As Long&lt;br /&gt;
End Type&lt;br /&gt;
&lt;br /&gt;
Type SIMCONNECT_RECV_SIMOBJECT_DATA&lt;br /&gt;
  dwRequestID As Long&lt;br /&gt;
  dwObjectID As Long&lt;br /&gt;
  dwDefineID As Long&lt;br /&gt;
  dwFlags As Long&lt;br /&gt;
  dwentrynumber As Long&lt;br /&gt;
  dwoutof As Long&lt;br /&gt;
  dwDefineCount As Long&lt;br /&gt;
  dwData As Long&lt;br /&gt;
End Type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sample Code==&lt;br /&gt;
This code retrieves the latitude / longitude of the user aircraft.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Public Declare Sub CopyMemory Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;RtlMoveMemory&amp;quot; _&lt;br /&gt;
      (Destination As Any, _&lt;br /&gt;
       Source As Any, _&lt;br /&gt;
       ByVal Length As Long)&lt;br /&gt;
&lt;br /&gt;
Public Declare Function GetTickCount Lib &amp;quot;kernel32&amp;quot; () As Long&lt;br /&gt;
&lt;br /&gt;
Enum DATA_DEFINE_ID&lt;br /&gt;
   DATA_DEF_POSITION&lt;br /&gt;
End Enum&lt;br /&gt;
&lt;br /&gt;
Enum DATA_REQUEST_ID&lt;br /&gt;
   DATA_REQUEST_POSITION&lt;br /&gt;
End Enum&lt;br /&gt;
&lt;br /&gt;
Enum DATA_IDS&lt;br /&gt;
   DATA_LATITUDE&lt;br /&gt;
   DATA_LONGITUDE&lt;br /&gt;
End Enum&lt;br /&gt;
&lt;br /&gt;
Type PosRec&lt;br /&gt;
   Latitude As Double&lt;br /&gt;
   Longitude As Double&lt;br /&gt;
End Type&lt;br /&gt;
&lt;br /&gt;
Dim hSimConnect As Long&lt;br /&gt;
Dim Position As PosRec&lt;br /&gt;
   &lt;br /&gt;
Sub GetPosition()&lt;br /&gt;
   Dim hr As Long&lt;br /&gt;
   Dim T As Long&lt;br /&gt;
   &lt;br /&gt;
   hr = SimConnect_Open(hSimConnect, &amp;quot;MYAPP&amp;quot;, 0, 0, 0, 0)&lt;br /&gt;
   If (hr &amp;lt;&amp;gt; S_OK) Then&lt;br /&gt;
      MsgBox &amp;quot;Unable to connect with FSX!&amp;quot;, vbExclamation, &amp;quot;SimConnect&amp;quot;&lt;br /&gt;
   Else&lt;br /&gt;
      hr = SimConnect_AddToDataDefinition(hSimConnect, DATA_DEF_POSITION, &amp;quot;PLANE LATITUDE&amp;quot;, &amp;quot;Degrees&amp;quot;, _&lt;br /&gt;
                  SIMCONNECT_DATATYPE_FLOAT64, 0, DATA_LATITUDE)&lt;br /&gt;
      hr = SimConnect_AddToDataDefinition(hSimConnect, DATA_DEF_POSITION, &amp;quot;PLANE LONGITUDE&amp;quot;, &amp;quot;Degrees&amp;quot;, _&lt;br /&gt;
                  SIMCONNECT_DATATYPE_FLOAT64, 0, DATA_LONGITUDE)&lt;br /&gt;
      hr = SimConnect_RequestDataOnSimObjectType(hSimConnect, DATA_REQUEST_POSITION, DATA_DEF_POSITION, _&lt;br /&gt;
                  0, SIMCONNECT_SIMOBJECT_TYPE_USER)&lt;br /&gt;
      T = GetTickCount()&lt;br /&gt;
      Do&lt;br /&gt;
         DoEvents&lt;br /&gt;
         RequestID = GetNextDispatch()&lt;br /&gt;
      Loop Until (RequestID = DATA_REQUEST_POSITION) Or (GetTickCount() &amp;gt; T + 2000)&lt;br /&gt;
      If RequestID = DATA_REQUEST_POSITION Then&lt;br /&gt;
         MsgBox &amp;quot;Latitude : &amp;quot; + Format(Position.Latitude, &amp;quot;Fixed&amp;quot;) + vbCrLf + _&lt;br /&gt;
                &amp;quot;Longitude : &amp;quot; + Format(Position.Longitude, &amp;quot;Fixed&amp;quot;), vbInformation&lt;br /&gt;
      Else&lt;br /&gt;
         MsgBox &amp;quot;No data available!&amp;quot;, vbExclamation&lt;br /&gt;
      End If&lt;br /&gt;
      SimConnect_Close hSimConnect&lt;br /&gt;
   End If&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Function GetNextDispatch() As Long&lt;br /&gt;
   &#039; this function returns the dwRequestID field of SIMCONNECT_RECV_SIMOBJECT_DATA, if applicable&lt;br /&gt;
   &#039; otherwise -1&lt;br /&gt;
   Dim hr As Long&lt;br /&gt;
   Dim pData As Long, pcbData As Long&lt;br /&gt;
   Dim Recv As SIMCONNECT_RECV&lt;br /&gt;
   &lt;br /&gt;
   GetNextDispatch = -1&lt;br /&gt;
   hr = SimConnect_GetNextDispatch(hSimConnect, pData, pcbData)&lt;br /&gt;
   If hr = S_OK Then&lt;br /&gt;
      CopyMemory Recv, ByVal pData, Len(Recv)&lt;br /&gt;
      Select Case Recv.dwID&lt;br /&gt;
         Case SIMCONNECT_RECV_ID_OPEN&lt;br /&gt;
            Dim RecvOpen As SIMCONNECT_RECV_OPEN&lt;br /&gt;
            pData = pData + Len(Recv)&lt;br /&gt;
            CopyMemory RecvOpen, ByVal pData, Len(RecvOpen)&lt;br /&gt;
            &#039; add code here&lt;br /&gt;
         Case SIMCONNECT_RECV_ID_EXCEPTION&lt;br /&gt;
            Dim RecvException As SIMCONNECT_RECV_EXCEPTION&lt;br /&gt;
            pData = pData + Len(Recv)&lt;br /&gt;
            CopyMemory RecvException, ByVal pData, Len(RecvException)&lt;br /&gt;
            &#039; add code here&lt;br /&gt;
         Case SIMCONNECT_RECV_ID_SIMOBJECT_DATA_BYTYPE&lt;br /&gt;
            Dim RecvData As SIMCONNECT_RECV_SIMOBJECT_DATA&lt;br /&gt;
            pData = pData + Len(Recv)&lt;br /&gt;
            CopyMemory RecvData, ByVal pData, Len(RecvData)&lt;br /&gt;
            GetNextDispatch = RecvData.dwRequestID&lt;br /&gt;
            Select Case RecvData.dwRequestID&lt;br /&gt;
               Case DATA_REQUEST_POSITION&lt;br /&gt;
                  pData = pData + Len(RecvData) - 4&lt;br /&gt;
                  CopyMemory Position, ByVal pData, Len(Position)&lt;br /&gt;
            End Select&lt;br /&gt;
      End Select&lt;br /&gt;
   End If&lt;br /&gt;
End Function&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[User:Russdirks|Russdirks]] 19:04, 9 October 2006 (CEST)&lt;br /&gt;
[[category:SimConnect]]&lt;/div&gt;</summary>
		<author><name>62.147.159.58</name></author>
	</entry>
</feed>