转眼间已是武德四年(621年),李世民组建了一支精锐的骑兵队——黑甲精骑。黑甲精骑无坚不摧,配合秦叔宝、程咬金、尉迟敬德等人大败王世充。王世充落荒而逃,回洛阳搬来两万精兵,主动进攻李世民。唐将一见这阵势,都有些害怕。李世民登高远望,然后对众将说:“看来敌人是孤注一掷了,如果这一仗我们赢了,他们就完蛋了。”于是派屈突通率领五千人马骚扰王世充,并吩咐屈突通一定要速战速决,李世民亲自带兵与屈突通并肩作战。两军混战了大半天,王世充终于支撑不住了,领兵退回洛阳。李世民乘胜追击,直抵东都。
此时,罗士信已经拿下了千金堡,王君廓也攻下了虎牢城。捷报传来,李世民大喜:“王世充失去两座险关,已经成为瓮中之鳖 ,攻取洛阳还不是易如反掌吗?”
唐军包围了洛阳,昼夜不停地进攻。无奈城中防守异常严密,难以攻克。李世民射书信进城招降,守将几次要做内应,都因密谋不周而被王世充杀死。李世民屡攻不下,便给王世充送去招降的书信,晓之以利害,却不见回信。
时间一长,大唐的将士都有些疲惫了,总管刘弘基劝李世民班师还朝。李世民摇摇头说:“我们大举来剿匪,无非想一劳永逸,现在只剩下洛阳一座孤城还没有攻克了,眼看就要大功告成,我们怎能撤退呢?”于是下了一道禁令:“洛阳一日不破,大军一日不还,敢言班师者斩!”众将这才不敢再提撤兵一事。
就在双方相持不下时,窦建德带着十万人马赶到洛阳来援助王世充。窦建德怎么会来救王世充呢?原来,王世充屡战屡败,早就派人向窦建德求援。窦建德和王世充有矛盾,原本不愿意出兵,中书侍郎刘彬进劝窦建德说:“如今天下大乱,李渊得了关西,王世充占领了河南,我们得了河北,天下呈三足鼎立之势,互相牵制。现在大唐举兵攻打王世充,唐强郑弱,必定支撑不了多久,到那时唇亡齿寒,恐怕我们也不能自保了。不如发兵支援王世充,夹击唐军,说不定还能一举统一天下呢!”窦建德听了这话直叫好,立即带领大队人马水陆并进,一路上接连攻陷了管州、荥阳、阳翟等州县。快到洛阳时,窦建德一面写信给唐营,一面派人给王世充报信,然后眼巴巴地等着两方的回信。
李世民看完来信,不禁笑着说:“窦建德想让我退回潼关,并且返还归降的州县。试想我军到此已经快一年了,花费粮饷无数,损失大量人马,才得到这几十座州县。现在眼看就要攻下洛阳了,他却来劝我退兵还地,天下哪有这样的好事?”说完命令手下把使臣扣在军中,然后召集众将商议。众将面面相觑 ,只有郭孝恪 进言:“王世充眼看就要完蛋了,现在窦建德也主动送上门来,这是天意要灭他们。我军可以据守武牢关,伺机而动 ,必定能破敌。”李世民听从了郭孝恪的建议,带领骑兵直奔武牢关。
李世民到了武牢关,让李勣、程咬金、秦叔宝等人埋伏在路边,自己带领尉迟敬德和两个亲兵前往窦建德大营,边杀边退。敌军不知是计,都中了埋伏,结果死的死逃的逃。
双方交战多次,窦建德一点儿便宜也没讨到,反而损失了许多人马,不禁有些胆怯。祭酒凌敬献计说:“唐兵现在占据武牢关,我们很难前进,不如带兵渡过黄河,攻取怀州、河阳,养精蓄锐,然后大张旗鼓 地过太行山,占据黄河以东来威慑关西,这才是上策。”
窦建德说:“我如果去取河东,洛阳怎么办?”
凌敬说:“依臣的意思,攻取河东有三个好处,一是唐兵都在洛阳,我们乘虚攻打别处会很安全;二是可以扩大势力;三是我军一旦进攻河东,唐兵必然会撤回关中救援,洛阳的围困自然就解除了。如果失去这个机会,战事势必旷日持久 ,到时不但洛阳的局势紧张,就连我军恐怕也会陷入危险。”
窦建德犹豫不决,碰巧王世充派使臣前来求援,使臣暗地里拿出大量金帛贿赂众将。拿人钱财,替人消灾。众将都催促窦建德进攻武牢关。窦建德说:“众将都主张进兵,这是天助我成功,一定能大获全胜。”第二天,窦建德就亲自调集大军出发了。
窦建德的大军虽然阵势庞大,可是队伍纪律松散。李世民先按兵不动,等敌军懈怠之后,带领大军直捣敌营,杀死许多敌军,俘获了五万人,活捉了窦建德。夏国的十几万大军就这样被击溃了。
李世民把俘虏全部遣返,然后用囚车押着窦建德、王世充的侄子王琬等人来到洛阳城下,对王世充说:“你要是不投降,我就把他们都杀了。”
王世充哭着说:“且慢!我如果投降,将军能保我不死吗?”
李世民说:“我答应你,免你一死!”
王世充只好领着太子和群臣共两千多人,开城投降。李世民在王世充的带领下进了洛阳城,取出洛阳城的金银赏赐给将士,然后处斩了朱粲等十多个罪大恶极的首领。百姓痛恨朱粲,争着拿瓦块砸他的尸体。
李世民接着往黄河南北传发檄文,招降各个州县。王世充的弟弟王世辩听说王世充已经投降,就带着所管辖的十三个县投降了。窦建德的妻子曹氏遣散众将,也带着传国玉玺投降。魏徵等人全部被放还,郑、夏两国的土地尽归大唐所有。
李世民得胜返回长安。窦建德、王世充被带到殿前,听候唐高祖发落。高祖原本想杀死王世充,无奈李世民已经答应免王世充一死,只好把王世充全家发配到四川。窦建德被斩首示众。
王世充没走出多远,就被仇人杀死了。王世充的儿子想在路上叛逃,也被杀了。王世充从篡位 到灭亡,只有三年时间。窦建德从起兵到灭亡,总共六年时间。