The visitors almost made a perfect start to the match when the ball fell to Eduardo Vargas inside the box, but his first-time effort flew narrowly past the post with only four minutes on the clock.
Schalke responded with a chance of their own shortly afterwards as Leon Goretzka danced his way to the edge of the penalty area before putting his subsequent effort just wide of the target.
The deadlock was broken just before the half-hour mark with a fifth goal in six games for Maxim Choupo-Moting, who beat the defender to Johannes Geis's cross and poked the ball into the bottom corner.
It was the hosts who continued to look the more threatening of the two sides as the first half wore on, and they almost doubled their advantage before the interval when Franco Di Santo fired a shot past the post.
Schalke picked up where they left off in the second half too, and they should have had a second when Joel Matip found Klaas-Jan Huntelaar inside the box, only for the Dutch striker to fluff his lines.
Andre Breitenreiter's side came within inches of giving themselves a cushion midway through the second half when Sead Kolasinac let fly from the edge of the box, only to see his strike come back off the upright.
Again Hoffenheim looked to take advantage shortly afterwards, this time through a Vargas effort that flew narrowly over the crossbar, but the visitors were unable to find an equaliser that would have taken them out of the relegation zone.