There is also the command GetColor, which returns ColorRed/Green/Blue. Maybe you can use it instead?
Why? The results retrieved with ReadPixel are correct.
Today I wouldn't use 16 Bit anymore, this mentioned problem is only one problem that may appear.
Agreed. There's no real reason to support 16 bit any more, but you do have to be aware that the end users desktop could be set at 16 bit, so whether you like it or not, in Windowed, you might be stuck in 16 bit. Perhaps a little bit of jiggery pokery with the Windows API could detect if the desktop is at 16 bit and post an error message warning the user to change to 32 bit color if it is?