wrong:
szDevice: array[0..CCHDEVICENAME] of AnsiChar;
right:
szDevice: array[0..CCHDEVICENAME - 1] of AnsiChar;
Simply use the MONITORINFOEX-definition from the workaround and it should work just fine.

Edit:
Oh, they are already fixed in 2007. Ok try following: Instead of writing
Code:
not(GetMonitorInfo(...));
write
Code:
not&#40;GetMonitorInfo&#40;...&#41;<>0&#41;;
Actually it should return bool, but maybe they did something wrong on the translation.