Jump to content
The simFlight Network Forums

[FSX/P3D/MSFS] How to program joystick buttons and keys to control PMDG aircraft

Paul Henty

Recommended Posts


PMDG Aircraft for FSX and P3D do not typically use the normal controls provided by the flight sim. This means that many of the aircraft's switches cannot be assigned to buttons and keys using the list of controls in the FSUIPC dropdown boxes. Assigning a standard control in FSUIPC will likely do nothing in the PMDG aircraft when the button or key is pressed.



Instead of using the standard list of controls shown in the FSUIPC dropdown box, users must use a different set of controls provided by PMDG for the specific aircraft. These are known as custom controls (or custom events).

The custom controls vary for each aircraft and are listed in the SDK that is installed alongside the aircraft.

This guide will show you, step-by-step:

  1. How to find the SDK files
  2. How to calculate the custom control numbers
  3. How to work out the parameter value
  4. How to assign the control to buttons/keys in FSUIPC

The specific examples shown will be taken from the PMDG 737NGX, but the same method works for any PMDG aircraft with an SDK and custom controls (e.g. 777, 747).


1. Locating the SDK

  • From your main Flight Sim install folder, or your MSFS Community folder, and open the PMDG aircraft folder
  • Then select the folder belonging to the aircraft you want to use. e.g. PMDG 737 NG3 or pmdg-aircraft-737
  • Then select the SDK folder or Documentation\SDK folder for MSFS2020
  • Locate the file with the .h extension. For the 737 it's called PMDG_NG3_SDK.h (or maybe PMDG_NGX_SDK.h, depending on the sim and variant you are using)
  • You can open this file with Notepad or your favourite text editor.

As an example, the document you need for the 737 in MSFS2020 will be:



2. Calculating the control numbers


The first thing to find is the definition of THIRD_PARTY_EVENT_ID_MIN. Search for the following text:


You will find a line like this (from the 737 file):

#define THIRD_PARTY_EVENT_ID_MIN                0x00011000        // equals to 69632

Note the decimal value at the end. In the case above it's 69632. You will need this value to calculate the control number in the next step.

2.2. Find the control you want to use.

Search for the control by name, or look through the listed controls to find the one you want. They are helpfully grouped together by panel.

The controls are listed under a comment:

// Control Events

You can search for this to find where the list of control numbers starts.

As an example we'll use the Autopilot CMD A swtich on the MCP. This is the relevant line in the 737 SDK:

#define    EVT_MCP_CMD_A_SWITCH                    (THIRD_PARTY_EVENT_ID_MIN + 402)

To calculate the control number for this switch we just add 402 to the value of THIRD_PARTY_EVENT_ID_MIN we found earlier.

69632 + 402 = 70034

We have now calculated the control number. We will use this in step 4 to program the button/key.


3. Finding the parameter value

PMDG controls need a parameter value. These can one of type types:

3.1. Mouse Click Codes (Shown in the example)

You can use these to simulate a mouse click on the particular switch.

Mainly it will be the left mouse button, but other clicks types are available (e.g. Right button, left double click etc).

To find the codes for each type of click, search for


You'll find a block of #define statements for each type of mouse click. Here are a couple of examples from the 737 sdk:

#define MOUSE_FLAG_RIGHTSINGLE   0x80000000
#define MOUSE_FLAG_LEFTSINGLE    0x20000000

Find the click that you want to simulate and get the code. For example, we'll have our key assignment simulate the left mouse button clicking on the CMD A autopilot button. So we'll need 0x20000000 as the parameter value for the control.

3.2. Direct Values (Not shown in the example)

Alternatively, some controls can accept a direct value to set the switch to a specific position.

To find the direct values you need to look at the top part of the .h file to find the switch definition. These are named differently than the events so you need to search.

Taking the battery selector switch as an example, we find the control:

#define    EVT_OH_ELEC_BATTERY_SWITCH                        (THIRD_PARTY_EVENT_ID_MIN + 1)

For the parameter value we can find the same switch in the top part of the .h file:

unsigned char    ELEC_BatSelector;                    // 0: OFF  1: BAT  2: ON

This tells us that in addition to mouse clicks, we can also send direct values. In this case: 0 for the OFF position, 1 for the BAT position and 2 for the ON position.

It's possible to make a key or button set the Battery Selector directly to the ON position by setting the parameter value to 2 instead of a mouse click code.

Simple ON/OFF switches will not have values listed (and will be declared as 'bool'). For these types of switches you can just pass the value 0 for OFF and 1 for ON. 


4. Assigning the control to a button or key in FSUIPC

Select the [buttons + swtiches] or [key presses] tab in FSUIPC and select the button or key to program.

From the "control sent..." dropdown select <custom control> (it's near the top of the list)

A popup window appears asking for the control number. Type in the control number you calculated in step 2. For our 'autopilot CMD A' example, we enter 70034 and click OK.

The controls dropdown box will now show the control number in angled brackets.

In the "parameter" box (below the controls dropdown), enter the parameter value from step 3.

This can be a mouse click code or a direct value.

Mouse Click Codes:

Do not include the first 0 from the number listed in the PMDG SDK. Start with the x. With our example, we would enter x20000000 for the left-button single-click.

Note that this code is in hexadecimal. FSUIPC will convert it to the equivalent decimal value. This is nothing to worry about. It's the same number. Entering the value in Hex is more convenient.

Direct Values:

Just enter the value as a number. Do not add the x at the start like mouse codes.


If you're programming a key press, remember to press the [confirm] button.

Here is our example control assigned to a button in FSUIPC:


Your button or key press should now operate the switch in your PMDG aircraft.

Edited by John Dowson
Updated for MSFS2020
  • Thanks 3
Link to comment
Share on other sites

  • 4 months later...
  • 3 years later...
16 hours ago, ShahafR said:

Can you help me with  calibration of the TCA Quadrant Boeing Edition to p3d?

Please do not post support questions in the FAQ section - use the main forum for FSUIPC6 support.
And you need to give details if the problem you are having, what you have trued, etc. There are a large number of posts on how to configure for PMDG aircraft already - I suggest you check the forum before posting again.


Link to comment
Share on other sites

20 minutes ago, dano said:

So what about a toggle switch like the taxi light.

what mouse click parameter would you use to switch on 

and more importantly switch back of again?

If it is a toggle, i.e. clicking it once switches on, clicking again switches off, then you would use the same control/parameter for both operations. That is if the control is just for the switch. If PMDG provide separate on/off controls (I don't know as I don't have/use this aircraft) then you would use those separate controls.

Please don't post for support in the FAQ section - use the appropriate support forum. And give your post an appropriate title and other PMDG users may be able to assist...


Link to comment
Share on other sites

  • Paul Henty changed the title to [FSX/P3D/MSFS] How to program joystick buttons and keys to control PMDG aircraft

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. Guidelines Privacy Policy We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.