此脚本使用 AutoHotkey 高效控制百度网盘的启动窗口,自动完成隐藏和模拟点击任务。

核心亮点是使用 Shell 消息监听窗口创建事件,并结合 DPI 计算和窗口消息实现精准操作,适合需要在开机时自动控制窗口的用户。

 

;【示例】自用开机隐藏百度网盘,请务必要关闭百度网盘自身的开机自启。不然WinMove会失效
; 以下为开机启动使用流程,参考删减
Run D:\Program Files (x86)\BaiduNetdisk\baidunetdisk.exe
WinWaitActive, ahk_class DuiHostWnd ; 先等待登录窗口
WinActivate, ahk_class Shell_TrayWnd ; 切换激活任务栏跳过对登录窗口的检测
WinWaitActive, ahk_class DuiHostWnd ; 最后等待取百度网盘的ID进行操作
ID := WinWaitCreated("ahk_class DuiHostWnd")
WinMove, ahk_id %ID%,, (A_ScreenWidth/2)-(Width/2),  (A_ScreenHeight-150)
PostMessage, 0x201, 0, (41*(A_ScreenDPI/120)<<16)|1358*(A_ScreenDPI/120),, ahk_id %ID%
PostMessage, 0x202, 0, (41*(A_ScreenDPI/120)<<16)|1358*(A_ScreenDPI/120),, ahk_id %ID%
ToolTip, 百度网盘的窗口ID:%ID%
Sleep, 2000
ExitApp ; 缺点是使用了OnMessage会持续在线,需要退出脚本才会结束

/*
  等待要创建的窗口,超时返回 0,否则返回 ahk_id
  参数与WinWait相同, 看 http://ahkscript.org/docs/commands/WinWait.htm
  论坛: https://www.autohotkey.com/boards/viewtopic.php?f=6&t=1274
*/
WinWaitCreated( WinTitle:="", WinText:="", Seconds:=0, ExcludeTitle:="", ExcludeText:="" ) {
    ; HotKeyIt - http://ahkscript.org/boards/viewtopic.php?t=1274
    static Found := 0, _WinTitle, _WinText, _ExcludeTitle, _ExcludeText 
         , init := DllCall( "RegisterShellHookWindow", "UInt",A_ScriptHwnd )
         , MsgNum := DllCall( "RegisterWindowMessage", "Str","SHELLHOOK" )
         , cleanup:={base:{__Delete:"WinWaitCreated"}}
  If IsObject(WinTitle)   ; 清理
    return DllCall("DeregisterShellHookWindow","PTR",A_ScriptHwnd)
  else if (Seconds <> MsgNum){
    Start := A_TickCount, _WinTitle := WinTitle, _WinText := WinText
    ,_ExcludeTitle := ExcludeTitle, _ExcludeText := ExcludeText
    ,OnMessage( MsgNum, A_ThisFunc ),  Found := 0
    While ( !Found && ( !Seconds || Seconds * 1000 < A_TickCount - Start ) ) 
      Sleep 16                                                         
    Return Found,OnMessage( MsgNum, "" )
  }
  If ( WinTitle = 1   ; 窗口创建,检查它是否是我们的窗口
    && ExcludeTitle = A_ScriptHwnd
    && WinExist( _WinTitle " ahk_id " WinText,_WinText,_ExcludeTitle,_ExcludeText))
    WinWait % "ahk_id " Found := WinText ; 等待窗口显示
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。