This conversion depends on the specific keyboard layout, so you need to query the raw key code, and apply the desired qualifiers (shift in this case) to translate your raw code into an actual character.
For the first part, getting the raw keycode, I suggest looking at the sample code here:
Using Raw Input - Win32 apps | Microsoft Docs[
^]
For the second part, I think
MapVirtualKeyA function (winuser.h) - Win32 apps | Microsoft Docs[
^] could do the trick.
Note that there are two virtual key codes for shift: VK_LSHIFT and VK_RSHIFT. However, I'm not aware of any keyboard layout that actually makes use of that. Using either should be fine.