Это своего рода подтверждение концепции, но я собрал скрипт , который может найти практически любую константу Windows API. Пример использования:
PS > .\Get-WindowsSDKConstant.ps1 BN_CLICKED
0
PS > .\Get-WindowsSDKConstant.ps1 BN_DBLCLK
5
PS > .\Get-WindowsSDKConstant.ps1 WM_COMMAND
273
Требуется загрузить Visual Studio и Windows 10 SDK , потому что за кадром он компилирует программу, которая ищет константу.
Наконец, вот несколько ответов на вопросы аскера:
Определены ли [константы] в некоторой библиотеке?
Официальным источником является Windows Platform SDK
Должен ли я сам определять их?
Они не встроены в Windows или .NET, что означает, что вы, вероятно, определите их сами (или скопируете их откуда-то).
И зависят ли значения от версии для версий Windows?
Они очень стабильны, потому что в противном случае программа, скомпилированная для одной версии Windows, может перестать работать, когда пользователь обновится до более новой версии Windows. Microsoft делает все возможное, чтобы этого не случилось.
Однако я видел по крайней мере одно место, где константы различаются в зависимости от того, на какой платформе / архитектуре вы компилируете. Я не предполагаю, что только потому, что ваш код работает на 64-битной Windows x86, он будет работать на 32-битной Windows RT ARM, например.