/*
Chrome标签绑定 v1.0
by 如初
2021/5/22
TODO:
1.接收其他脚本传来的js代码
#Include Chrome.ahk
#Include Chrome标签绑定.ahk
以上两行需放在其他脚本开头的自动执行段中
注意:
窗口激活时触发刷新gui和检测Chrome进程
OnMessage(0x06, "_onActiveRefresh")
如下超级全局变量要避免污染
_ChromeInst
_defaultPageIndex
_defaultPage
_PageList
用法示例:
#Include Chrome.ahk
#Include Chrome标签绑定.ahk
MyPage:=getPageByGui() ;返回gui中勾选的页面
MyPage.Evaluate("alert('Chrome标签绑定!')")
*/
;函数开始
;------------------------------------------------------
; #Include Chrome.ahk
; #NoEnv
; #SingleInstance force
; SendMode, Input
; SetWorkingDir %A_ScriptDir%
; FileEncoding , UTF-8-RAW
; CoordMode, Mouse, Screen
; CoordMode, Menu, Window
; CoordMode, Caret, Screen
; CoordMode, ToolTip, Screen
global _ChromeInst := new Chrome() ;用默认的用户配置 打开空白页
global _defaultPageIndex
global _defaultPage
global _PageList
_ChromeGuiManagerIni() ;执行结束
getPageByGui(){ ;返回gui中勾选的页面
return _ChromeInst.GetPageBy("id", _defaultPage["id"])
}
_ChromeGuiManagerIni(){
ExistFlag:= WinExist("ahk_exe chrome.exe")? true:false
if ExistFlag
{
WinGet, OutputVarPID, PID , ahk_id %ExistFlag%
_ChromeInst.PID:=OutputVarPID
;如果本来已经打开了Chrome那么关掉刚刚打开的空白页
Sleep 200 ;需要一点延迟来等待打开空白页
_ChromeInst.GetPageByURL("about:blank").Call("Page.close")
}
;Gui
Gui, _ChromeTabs:default
Gui +HwndChromePageGui
Gui, _ChromeTabs: font, s12, SimHei
Gui, _ChromeTabs: Add, ListView, r20 w530 ReadOnly gChromeGuiEvent -WantF2 Grid -Multi NoSortHdr
, NO|网页标题|URL
;生成gui内容
_refreshChromePagesGui()
Gui, _ChromeTabs: Show
OnMessage(0x06, "_onActiveRefresh")
return
}
_onActiveRefresh(wParam){ ;激活时刷新列表
Process, Exist, % _ChromeInst.PID
if not ErrorLevel
{
MsgBox 0x40040, 提示, Chrome已退出!`n程序将退出
ExitApp
}
if (wParam=1)
_refreshChromePagesGui()
}
;切换默认标签
ChromeGuiEvent(CtrlHwnd, GuiEvent, EventInfo, ErrLevel:=""){
if !(GuiEvent="DoubleClick")
return
if (EventInfo=_defaultPageIndex)
return
else
{
oldGui:=A_defaultGui
Gui, _ChromeTabs:default
LV_Modify(_defaultPageIndex , "-Select", _defaultPageIndex ".")
LV_Modify(EventInfo , "Select Focus", "✔")
_defaultPageIndex:=EventInfo
_defaultPage:=_PageList[EventInfo]
;未完
Tip("默认标签已切换!")
Gui, %oldGui%:default
}
}
_refreshChromePagesGui(){
;注意插件也视为page
;页面内的iframe等等也视为page
;根据type来判断
try PageData:=_ChromeInst.GetPageList()
catch
{
_ChromeInst.Kill()
MsgBox 0x40040, 提示, Chrome已退出!`n程序将退出
ExitApp
}
_PageList:=[]
for _, Page in PageData
{
if (Page["type"]!="page")
continue
_PageList.Push({title:Page["title"], url:Page["url"], id:Page["id"]})
}
oldGui:=A_defaultGui
Gui, _ChromeTabs:default
LV_Delete()
for n,Page in _PageList
LV_Add("", n ".", Page["title"], Page["url"])
if IsObject(_defaultPage)
{
flag:=true
for n,Page in _PageList
{
if (Page["id"]=_defaultPage["id"])
{
_defaultPageIndex:=n
_defaultPage:=_PageList[n]
flag:=false
break
}
}
if flag
{
_defaultPage:=_PageList[1]
_defaultPageIndex:=1
}
}
else ;默认第一个
{
_defaultPage:=_PageList[1]
_defaultPageIndex:=1
}
LV_Modify(_defaultPageIndex , "Select Focus", "✔")
LV_ModifyCol(1, "30 CEnter")
LV_ModifyCol(2, 250)
LV_ModifyCol(3, 250)
Gui, %oldGui%:default
}
Tip(Text:="", time:=1000 ,x:=-100, y:=-100, tip_num:=1){
Critical, On
if (x=-100 and y=-100)
ToolTip, %Text%, , , %tip_num%
else
ToolTip, %Text%, %x%, %y%, %tip_num%
fn := Func("f_RemoveToolTip").Bind(tip_num)
SetTimer, %fn% , -%time%
return
}
f_RemoveToolTip(tip_num){
ToolTip, , , , %tip_num%
return
}
暂无讨论,说说你的看法吧