There are a few things you can start looking at. The system tools Check Disk and System File Checker as well as looking over the msconfig's Start items tab and any unnecessary 3rd party background services depending on what programs you have on would be a start.
Disk errors would be fixed(errors on drive not failing drive) with the Disk Check tool, chkdsk /r at command prompt or click the Check now button when right clicking on the hard drive's icon in WE and opening the Tools tab to schedule that for the next startup. Note especially after any number of hard boots or forced shutdowns to deal with the likely errors then created on top of the original problem.
The reduction of startup items in the msconfig is also one way to isolate a program where something doesn't want to load up normally on each startup. If a program is the source by narrowing what loads up along with Windows will eventually isolate that program when suddenly noticing everything is back to normal.
The System File Checker also can play a role and why that is included, sfc /scannow at the Start>Run command line to get that going, since it will verfy all main files are present and replace any found corrupt or missing. When a system file gets a little shaky and flaky it's time to...
The last other item getting back to startups of course would be device and software drivers
as a possible culprit to include there. A driver
sticking too often the graphics drivers as the usual villian will tend to see Windows hang up when starting and first going to load drivers into memory and one tries to load sideways where it doesn't belong like a system reserved memory address can eventually lead to those dreaded BSOD "Blues"!