Boiled Sweets, I was a little curious so I had a look anyway.
The image colour corruption is definitely due to the desktop being set at 16-bit. If you set it to 32-bit it works ok.
The problem occurs because the FIQSend function is only set up for 32-bit colour depth mode.
In the FIQSend function you have this code:
iBank=FI_PeekIntEx(iBuffer,72)
iPitch=FI_PeekIntEx(iBuffer,56)
FIBITMAP=FI_ConvertFromRawBits3D(iBank,ImageWidth(Image),ImageHeight(Image),iPitch,FI_PeekIntEx(iBuffer,100),FI_PeekIntEx(iBuffer,112),FI_PeekIntEx(iBuffer,116),FI_PeekIntEx(iBuffer,120),0)
I suspect the function 'FI_PeekIntEx(iBuffer,offset)' would need to be replaced with the FI_PeekWordEx(iBuffer,offset) function, meaning it peeks 2 bytes instead of 4. The offsets would also need changing, but I'm not sure how to implement this in practice as I don't know how those offsets were calculated. Maybe Snarty can help point you in the right direction, if you email him, he may know what they should be for 16-bit colour depth. Once you know the settings for both modes, you can then detect the depth and use the correct function for that mode, 16-bit or 32-bit.