I'm going to fall on the other side of the coin and say that talking to the player about it -- like intelligent adults -- is going to fail, and that being passive aggressive is going to succeed.
The problem with talking to someone like grown adults is that the other person needs to behave like a grown adult. And if he's cheating, then he clearly isn't behaving like a grown adult. Talking to him won't work some miracle on his heart and change his behavior. It will only alert him to the fact that you've caught on and are bothered by it, so he'll hide it better from then on.
Much better to change the module around. Let other people call that passive aggressive. Let other people say "you fail as a DM if you sink to that level." They can say whatever they want if the strategy wins.
For my part, I do this as a matter of course, and encourage it as a positive behavior for any new DMs I train. ALWAYS change modules. Never leave things as expected. In fact, it's wise to do this even if no one
has read the module -- you need to tone down too-difficult fights, beef up weak areas, flesh out the empty rooms and/or flat NPCs, change area names to fit into your campaign world, etc.
I am teaching a new DM and one of the things we've decided to do is to try to make sure that
every monster she ever has in every game she ever runs is new to every single player at the table. We are gutting every module she runs, or creating new adventures from scratch, and we are putting in monsters from the En World Critters PDFs, or from the Tome of Horrors PDFs. And to make it more unusual, we change their resistances, their supernatural attacks, and so on.
The very point is to leave the players guessing. That may be passive aggressive on our part, though we are not trying to combat a particular cheater so much as we are just trying to combat general "Been there done that" attitudes. Whatever the case, it's a goal, and we've been hitting the mark thus far. I'd like to be encouraging to you as well. Give it a shot.