如何不使用SendKeys最大化Google Chrome窗口?
原宏说明与代码
请注意,运行以下宏之前必须打开Google Chrome:
Public Sub Macro1() '请先打开Google Chrome再运行此宏。 '等待5秒 Application.Wait (Now + TimeValue("00:00:5")) '最小化所有窗口 CreateObject("shell.application").minimizeall '等待5秒 Application.Wait (Now + TimeValue("00:00:5")) '最大化Excel窗口 Application.WindowState = xlMaximized '等待5秒 Application.Wait (Now + TimeValue("00:00:5")) '最小化Excel窗口 Application.WindowState = xlMinimized '等待5秒 Application.Wait (Now + TimeValue("00:00:5")) '激活Google Chrome AppActivate "Chrome" '最大化当前窗口 Application.Wait (Now + TimeValue("00:00:1")) SendKeys "% x" Application.Wait (Now + TimeValue("00:00:1")) SendKeys "x" End Sub
替代方案:不使用SendKeys最大化Chrome窗口
SendKeys 依赖窗口焦点,容易因延迟、其他窗口干扰失效,改用Windows API直接操作窗口句柄更可靠。
修改后的完整宏代码
' 声明Windows API函数,需放在模块顶部 Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr Private Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hWnd As LongPtr, ByVal nCmdShow As Long) As Long ' 窗口最大化常量 Private Const SW_MAXIMIZE As Long = 3 Public Sub Macro1_WithoutSendKeys() '请先打开Google Chrome再运行此宏。 '等待5秒 Application.Wait (Now + TimeValue("00:00:5")) '最小化所有窗口 CreateObject("shell.application").minimizeall '等待5秒 Application.Wait (Now + TimeValue("00:00:5")) '最大化Excel窗口 Application.WindowState = xlMaximized '等待5秒 Application.Wait (Now + TimeValue("00:00:5")) '最小化Excel窗口 Application.WindowState = xlMinimized '等待5秒 Application.Wait (Now + TimeValue("00:00:5")) ' 查找Chrome主窗口句柄 Dim chromeHWnd As LongPtr chromeHWnd = FindWindow("Chrome_WidgetWin_1", vbNullString) ' 如果找到窗口,最大化它 If chromeHWnd <> 0 Then ShowWindow chromeHWnd, SW_MAXIMIZE Else MsgBox "未找到Google Chrome窗口,请确认已打开Chrome" End If End Sub
代码说明
FindWindow:通过Chrome标准主窗口类名Chrome_WidgetWin_1查找窗口句柄,无需依赖窗口标题。ShowWindow:传入窗口句柄和SW_MAXIMIZE常量,直接触发窗口最大化操作,完全不依赖焦点或模拟按键。- 相比原宏的
SendKeys,这种方法稳定性大幅提升,不会因等待时间不足、焦点丢失等问题导致操作失败。
内容的提问来源于stack exchange,提问作者Danny Coleiro
相关产品推荐
相关产品推荐

