Your sprite animation in Windows games should rely on a high resolution timer (several in Windows, use QueryPerformance Counter if you can get it) to figure out which frame to display. Movement should be measured and stored NOT in pixels per frame but pixels per second, and then multiplied by the time delta (change in time since the last frame) to figure out the correct position for this frame. This will cause animations to miss frames, but such is life - the animations should be keeping up with time.
This is a global change that should be used for every and all things that previously used "per frame" measurements.
You can set the refresh rate of the monitor with the SetDisplayMode() command of the DirectDraw interface. You must be prepared, however, for it to return an error in which case that refresh rate is not valid. You could also enumerate the display modes and find one that you like.
This should help alot, games will run at constant speed (but not constant fps) on different systems.
- Splat