Sri Lanka, well-placed at 162 for one overnight, were dismissed for 288 -- 128 runs behind England's first innings 416.
Woakes, who took a wicket with his first ball Saturday, ended the innings with the opening delivery of a new spell on the stroke of tea when Shaminda Eranga was caught in the slips by James Vince.
Warwickshire all-rounder Woakes finished with figures of three for 31 in 17.1 overs.
Sri Lanka, bidding to avoid a whitewash at 2-0 down in this three-match series, resumed Saturday with Kaushal Silva 79 not out and Kusal Mendis 25 not.
Also Read
Sri Lanka had not added a run when Woakes had Mendis lbw with his first ball Saturday to end a partnership of 54.
It was just reward for the paceman, who saw Jonny Bairstow drop a simple catch off his bowling to reprieve Dimuth Karunaratne, eventually out for 50, on Friday.
But wicket-keeper Bairstow, whose 167 not out on Friday was his Test-best score, made no mistake Saturday when he Silva edged Stuart Broad straight to him.
But the all-rounder was felled for three on Saturday, with 166 for three becoming 169 for four when he was squared up by Woakes and edged to Joe Root at second slip.
England's attack was far more accurate than it had been on Friday and Woakes, bowling at sharp pace, almost had a wicket next ball too only for Dinesh Chandimal to inside-edge a yorker that just missed the stumps for four.
Left-handers Kusal Perera (42) and Rangana Herath (31)
fought back with a seventh-wicket stand of 71.
At lunch, Sri Lanka were 218 for six, having just avoided the follow-on.
The second session saw England captain Alastair Cook off the field after being hit below his left knee while fielding close in shortly before lunch.
Joe Root, England's vice-captain, took the new ball as soon as possible.
Herath chopped on off Broad and Perera, who clearly didn't have much confidence in the tail, was caught behind after charging down the pitch and wildly slogging at Anderson.