The West Indies were eventually dismissed for 370, with Sammy making 106 and Marlon Samuels 117.
Their partnership of 204 was on a West Indies record for the seventh wicket against England, surpassing the 155 shared by Garry Sobers and Bernard Julien at Lord’s in 1973.
England were eight without loss in reply at lunch.
But Cook had a reprieve when, on one, he was brilliantly caught one-handed by diving wicket-keeper Denesh Ramdin off fast bowler Kemar Roach.
However Cook was called back after umpire Aleem Dar used television technology to check for a no-ball he hadn’t called on the field.
Replays revealed Roach had over-stepped by a distance to the despair of the West Indies, battling to level this three-match series at 1-1 after losing the first Test at Lord’s by five wickets.
West Indies resumed Saturday on 304 for six having collapsed to 63 for four and 136 for six after their top order’s latest failure, with Samuels 107 not out and all-rounder Sammy a then Test-best 88 not out.
Sammy went into the 90s with an off-driven four off James Anderson.
But he sliced a drive off Stuart Broad over the slips to go to 98 and next delivery had another lucky break when, aiming legside, he got the back of the bat on the ball, which then sped past Ian Bell at point for a four that took him to his century.
The 28-year-old, playing his 26th Test, had completed his maiden hundred at this level in just over three hours, facing 140 balls with 16 fours and a six driven against off-spinner Graeme Swann on Friday.
However, both he and Samuels were out soon afterwards as Tim Bresnan, expensive on Friday, removed the century-makers in a spell of three wickets for 10 runs in 19 balls that saw him finish with four for 104 in 27 overs.
Sammy was eventually dismissed when he holed out on the hook to Kevin Pietersen at deep square leg.
And 340 for seven became 341 for eight when Samuels edged Bresnan and Anderson held a sharp catch in the gully.