ANAHEIM, Calif. -- What Clint Barmes is lacking in his batting average, he is making up for with run production and solid defense at shortstop.
Despite his .212 average, Barmes has 41 RBI, just five fewer than last season when he was limited to 81 games because of a broken collarbone and one of the top totals among major league shortstops.
"I think that speaks volumes," winning pitcher Aaron Cook said. "Statistically, his average isn't where he wants it to be, but he's getting timely hits and sacrifice flies. He's going up there in key situations not trying to do too much with guys in scoring position and he's getting the job done."
Brad Hawpe also hit a two-run homer for the Rockies, who scored in double digits for the ninth time and tied a season high with 18 hits.
The victory snapped their seven-game interleague losing streak against the Angels, who had won 12 of the previous 13 meetings -- including Monday night's 5-4 victory when they overcame a 3-0 deficit with a five-run eighth inning.
The Rockies made sure they had a big enough lead this time -- scoring four runs in the fourth to extend their advantage to 10-2. Everyone in the starting lineup had at least two hits except J.D. Closser, who had one. Matt Holliday tied a club record with three doubles, raising his extra-base hit total to a major league-leading 44.
"You look at Holliday, Hawpe, Atkins, Barmes, there's a good young nucleus of young everyday players over there and you can see why those guys have been playing very good baseball this year," Angels manager Mike Scioscia said. "But I think the thing that's really turned them around is their pitching."
Cook (6-7) won for the first time since May 19, allowing three runs and eight hits in seven innings. The Rockies had scored two runs or less in five of his previous six outings.
"It's definitely a lot easier to relax when you get run support like that," Cook said. "Sometimes you go through streaks where you pitch great and don't get wins. Tonight I got a win even though I probably didn't pitch as well as I did in the other games, but that's just part of baseball."
Jeff Weaver (3-10) lasted only two-plus innings for the Angels. It was the second-shortest outing of his 226 career starts. The shortest was exactly seven years earlier, on June 27, 1999, when he went 1 2/3 innings pitching for Detroit against the Minnesota Twins.
Weaver was charged with six runs and nine hits, including Hawpe's 14th homer and 11th on the road. The right-hander, who tied Tampa Bay's Seth McClung and Pittsburgh's Oliver Perez for the most losses in the majors, had not allowed more than three earned runs in any of his previous seven outings.
"I don't feel too bad about my stuff tonight," said Weaver, who has a 6.35 ERA in seven career starts against Colorado. "After they got the lead, they got extra aggressive and were swinging at anything that was in the zone. They were locked in and didn't miss anything. But I'm good at putting things behind me and I look forward to my next start."
Barmes tied it at 2 in the second with a two-run single and Jamey Carroll followed with an RBI double that put Colorado ahead to stay. The Rockies increased the margin to 6-2 in the third when Holliday and Atkins opened the inning with doubles and Hawpe followed with his home run.
Weaver faced one more batter, giving up a single to Jorge Piedra, before Scioscia removed him from the game. Kevin Gregg relieved Weaver and struck out the next three batters to end the inning, but the Rockies got to him for four runs in the fourth.
Three of those runs were unearned, the result of third baseman Maicer Izturis' error on a routine grounder by Holliday. Atkins hit a two-run single, and Closser and Barmes added two-out RBI singles.
Carroll, who began the season as a utility player, got the four plate appearances he needed to reach the required number to quality for the batting race -- by the fourth inning. The Rockies' leadoff hitter is batting .375 since earning a regular spot in the lineup 33 games ago, raising his season average from .275 to .337.
Angels shortstop Orlando Cabrera went 2-for-2, extending his streak of reaching base to 55 consecutive games without the benefit of a fielder's choice. It's the longest current streak in the majors and the longest in Angels history.
Cabrera's streak includes six games in which he prolonged it with a hit or a walk in his final plate appearance. It ties Jim Thome's 2002 streak as the fourth-longest in the majors since 1960. The longest during that span is 58 by Barry Bonds in 2003. ... Angels LF Garret Anderson, two hits away from 2,000 for his career, was scratched from the starting lineup about 90 minutes before gametime because of stiffness in his lower back. ... Cook has not allowed a home run on the road this season in 53 innings, the most in the majors.