Hamilton comfortably defeated teammate Valtteri Bottas at Paul Ricard as Charles Leclerc completed the podium for Ferrari, whose lead driver Sebastian Vettel is now 76 points behind Hamilton after finishing fifth.
Vettel failed to make much progress from seventh on the grid, although a bonus point for fastest lap after making a late pitstop for fresh tyres provided a thin silver lining.
Hamilton held the lead at the start and only edged clear by a small margin over the first half of the opening stint.
However, the longer the drivers eked out their medium tyres, the bigger Hamilton's advantage became.
He was more than eight seconds clear when Bottas blinked first and pit for hard tyres on lap 23.
Hamilton stayed out an extra lap, Mercedes having extended their drivers' stints to make sure they were far enough ahead of Vettel to rejoin ahead, as the Ferrari stayed out even longer.
After the pitstops, Hamilton stretched his advantage further and, after a brief back and forth battle with Bottas for fastest lap, the gap extended to 18s by the flag.
A muted Bottas at least returned to the runner-up position for the first time in three races, although the damage done by Hamilton's fourth straight victory could be significant for the Finn's title hopes.
Behind the two Mercedes, Leclerc hung onto Bottas's tail gamely in the first of the Ferraris.
Leclerc hounded Bottas to the flag, albeit always a few seconds adrift, as he scored his second podium finish in a row.
The 21-year-old had to overcome a fierce first-lap challenge from Max Verstappen, after the two ran side-by-side down to Turn 3 for the first time.
Leclerc was boxed in by Bottas into Turn 2, which gave Verstappen momentum around the outside before Leclerc edged clear as they approached the next corner.
After that point, Verstappen gradually slipped back from Leclerc and his attentions turned to keep Vettel at bay.
Vettel closed to just three seconds behind in the first stint but after pitting several laps later than the Red Bull he rejoined 5.9s adrift and fell further and further away.
That gave Verstappen, who struggled with some lag on the throttle early on, breathing space and meant Vettel had too much time to make up when he started to close in again in the final few laps.
Ferrari therefore pitted Vettel with two laps remaining, bolted on a fresh set of soft tyres and released him to chase the fastest lap.
Vettel pumped in a 1m32.740s on the final lap to steal the bonus point from Hamilton by just 0.024s – after Hamilton had set a new fastest lap on the final lap as well.
Behind the Ferrari, McLaren won the best-of-the-rest battle with Carlos Sainz in sixth.
Sainz jumped teammate Lando Norris on the opening lap when Norris found himself with nowhere to go at Turn 1 and had to back out, handing Sainz momentum and the position.
Norris did well to even finish after battling a hydraulics problem that got worse as the race progressed and presented braking and steering problems for the rookie.
He ran seventh until the very last lap, when his problems became too much to overcome and he slipped behind Daniel Ricciardo's Renault, the Alfa Romeo of Kimi Raikkonen and Nico Hulkenberg in the other Renault.
Ricciardo attacked the ailing Norris on the outside at the chicane but ran deep, so Norris squirted the throttle and tried to re-pass him through the second part of the corner but went too wide after Ricciardo squeezed him, and took to the run-off.
That triggered multiple cars running side-by-side as Raikkonen and Hulkenberg got in on the battle, with Ricciardo claiming seventh ahead of Raikkonen, Hulkenberg and the defeated Norris.
|4||Max Verstappen||Red Bull||34.905|
|6||Carlos Sainz Jr.||McLaren||1'35.462|
|7||Daniel Ricciardo||Renault||1 Lap|
|8||Kimi Raikkonen||Alfa Romeo||1 Lap|
|9||Nico Hulkenberg||Renault||1 Lap|
|10||Lando Norris||McLaren||1 Lap|
|11||Pierre Gasly||Red Bull||1 Lap|
|12||Sergio Perez||Racing Point||1 Lap|
|13||Lance Stroll||Racing Point||1 Lap|
|14||Daniil Kvyat||Toro Rosso||1 Lap|
|15||Alex Albon||Toro Rosso||1 Lap|
|16||Antonio Giovinazzi||Alfa Romeo||1 Lap|
|17||Kevin Magnussen||Haas||1 Lap|
|18||Robert Kubica||Williams||2 Laps|
|19||George Russell||Williams||2 Laps|