That's not necessary since that's what action feedback is for. You tell DI what keys you want to capture and it reports only events when the those keys are pressed and released.
So a user can create a struct like
...That is used all throughout the app. Another app might use a different struct:
...But it will still work just fine.
The app can create the struct to look however it wants. It can even merge two or more keys into a WORD or an UINT. The library won't care and plot one byte for each key.
And the app can even change struct abruptly if it wants (like from KeyStruct1 to KeyStruct2) without negative effects.
And if an app doesn't want all that data captured all the time, it can just ignore those member variables which contain their state.