I wanted to turn an old laptop from a Windows XP system to one that dual-booted Ubuntu. To get this to work, I first had to resize my Windows partition.
I started out with Windows default disk defragmenter (Accessories => System Tools => Disk Defragmenter). I ran it a few times, but it always left files at the "high end" of the partition so I couldn't downsize the partition.
I then tried Defraggler (http://defraggler.com). This maybe is a bit better at defragmenting, but still left files at the high-end of the partition.