"This was a nice win, especially after the way the middle of the road trip went," manager Buddy Bell said. "And it's nice to score Gil some runs."
Meche extended his record against the Halos to 7-2 in 17 starts, most of them with the Seattle Mariners.
"I do know these guys pretty well," he said.
"I just tried to mix it up. I kept the ball down a lot better tonight. My curveball was good. I switched sides of the rubber, something I picked up from watching tape. It helped me control the left side of the plate a little better instead of having to go across my body."
Angels center fielder Reggie Willits echoed that assessment from across the building.
"He's just got really good stuff," Willits said. "He's got good velocity on his fastball and moves it around. He's got a really good cutter. He's got a lot of pitches. He moves it in and moves it out."
The Royals spotted the Angels a 1-0 lead in the third as Nathan Haynes tripled and scored on Reggie Willits' suicide squeeze.
Kansas City evened it in the fourth on Butler's first Major League home run, then came back with a four-run rally in the fifth.
Joey Gathright doubled, Santana hit David DeJesus with a pitch, and Angels third baseman Chone Figgins committed a throwing error on Esteban German's sacrifice bunt as Gathright came home.
Mark Teahen doubled to drive in DeJesus, then German scored from third on Santana's wild pitch. Alex Gordon's soft single brought home Teahen from third to make it 5-1.
The Angels narrowed it to 5-2 in the bottom of the fifth when Jose Molina's double to left-center scored Howie Kendrick from first. But the Royals came up with two more in the sixth on a leadoff homer by Buck (his 14th) and a sacrifice fly by DeJesus.
The Angels closed it to 7-3 in their half when Casey Kotchman's grounder to second scored Figgins from third.
In the Royals' five-run eighth, Gathright scored on a throwing error by catcher Jose Molina after stealing third. German knocked in a run with a ground-rule double, and Gordon's three-run home run gave him the first four-RBI game of his career.
Meche got relief from Zack Greinke, who went a scoreless 1 2/3 innings, and Joel Peralta, who yielded a one-out homer to Kendry Morales in the ninth.
Facing the prospect of a series sweep and the Royals' first four-game winning streak of the season, Bell said, "I don't think we can play any cleaner. ... We don't have a lot of experience out there, so that makes it nice. Everything the Angels do is above average, so it's nice to come in here and win two."