Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #SingleInstance force ; Force replacement of old instances
- ; ACC Library (Required for Chrome Function)
- Acc_Init()
- {
- Static h
- If Not h
- h:=DllCall("LoadLibrary","Str","oleacc","Ptr")
- }
- Acc_ObjectFromEvent(ByRef _idChild_, hWnd, idObject, idChild)
- {
- Acc_Init()
- If DllCall("oleacc\AccessibleObjectFromEvent", "Ptr", hWnd, "UInt", idObject, "UInt", idChild, "Ptr*", pacc, "Ptr", VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&varChild)=0
- Return ComObjEnwrap(9,pacc,1), _idChild_:=NumGet(varChild,8,"UInt")
- }
- Acc_ObjectFromPoint(ByRef _idChild_ = "", x = "", y = "")
- {
- Acc_Init()
- If DllCall("oleacc\AccessibleObjectFromPoint", "Int64", x==""||y==""?0*DllCall("GetCursorPos","Int64*",pt)+pt:x&0xFFFFFFFF|y<<32, "Ptr*", pacc, "Ptr", VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&varChild)=0
- Return ComObjEnwrap(9,pacc,1), _idChild_:=NumGet(varChild,8,"UInt")
- }
- Acc_ObjectFromWindow(hWnd, idObject = -4)
- {
- Acc_Init()
- If DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject&=0xFFFFFFFF, "Ptr", -VarSetCapacity(IID,16)+NumPut(idObject==0xFFFFFFF0?0x46000000000000C0:0x719B3800AA000C81,NumPut(idObject==0xFFFFFFF0?0x0000000000020400:0x11CF3C3D618736E0,IID,"Int64"),"Int64"), "Ptr*", pacc)=0
- Return ComObjEnwrap(9,pacc,1)
- }
- Acc_WindowFromObject(pacc)
- {
- If DllCall("oleacc\WindowFromAccessibleObject", "Ptr", IsObject(pacc)?ComObjValue(pacc):pacc, "Ptr*", hWnd)=0
- Return hWnd
- }
- Acc_GetRoleText(nRole)
- {
- nSize := DllCall("oleacc\GetRoleText", "Uint", nRole, "Ptr", 0, "Uint", 0)
- VarSetCapacity(sRole, (A_IsUnicode?2:1)*nSize)
- DllCall("oleacc\GetRoleText", "Uint", nRole, "str", sRole, "Uint", nSize+1)
- Return sRole
- }
- Acc_GetStateText(nState)
- {
- nSize := DllCall("oleacc\GetStateText", "Uint", nState, "Ptr", 0, "Uint", 0)
- VarSetCapacity(sState, (A_IsUnicode?2:1)*nSize)
- DllCall("oleacc\GetStateText", "Uint", nState, "str", sState, "Uint", nSize+1)
- Return sState
- }
- Acc_SetWinEventHook(eventMin, eventMax, pCallback)
- {
- Return DllCall("SetWinEventHook", "Uint", eventMin, "Uint", eventMax, "Uint", 0, "Ptr", pCallback, "Uint", 0, "Uint", 0, "Uint", 0)
- }
- Acc_UnhookWinEvent(hHook)
- {
- Return DllCall("UnhookWinEvent", "Ptr", hHook)
- }
- /* Win Events:
- pCallback := RegisterCallback("WinEventProc")
- WinEventProc(hHook, event, hWnd, idObject, idChild, eventThread, eventTime)
- {
- Critical
- Acc := Acc_ObjectFromEvent(_idChild_, hWnd, idObject, idChild)
- ; Code Here:
- }
- */
- Acc_Role(Acc, ChildId=0) {
- try return ComObjType(Acc,"Name")="IAccessible"?Acc_GetRoleText(Acc.accRole(ChildId)):"invalid object"
- }
- Acc_State(Acc, ChildId=0) {
- try return ComObjType(Acc,"Name")="IAccessible"?Acc_GetStateText(Acc.accState(ChildId)):"invalid object"
- }
- Acc_Location(Acc, ChildId=0, byref Position="") {
- try Acc.accLocation(ComObj(0x4003,&x:=0), ComObj(0x4003,&y:=0), ComObj(0x4003,&w:=0), ComObj(0x4003,&h:=0), ChildId)
- catch
- return
- Position := "x" NumGet(x,0,"int") " y" NumGet(y,0,"int") " w" NumGet(w,0,"int") " h" NumGet(h,0,"int")
- return {x:NumGet(x,0,"int"), y:NumGet(y,0,"int"), w:NumGet(w,0,"int"), h:NumGet(h,0,"int")}
- }
- Acc_Parent(Acc) {
- try parent:=Acc.accParent
- return parent?Acc_Query(parent):
- }
- Acc_Child(Acc, ChildId=0) {
- try child:=Acc.accChild(ChildId)
- return child?Acc_Query(child):
- }
- Acc_Query(Acc) {
- try return ComObj(9, ComObjQuery(Acc,"{618736e0-3c3d-11cf-810c-00aa00389b71}"), 1)
- }
- Acc_Error(p="") {
- static setting:=0
- return p=""?setting:setting:=p
- }
- Acc_Children(Acc) {
- if ComObjType(Acc,"Name") != "IAccessible"
- ErrorLevel := "Invalid IAccessible Object"
- else {
- Acc_Init(), cChildren:=Acc.accChildCount, Children:=[]
- if DllCall("oleacc\AccessibleChildren", "Ptr",ComObjValue(Acc), "Int",0, "Int",cChildren, "Ptr",VarSetCapacity(varChildren,cChildren*(8+2*A_PtrSize),0)*0+&varChildren, "Int*",cChildren)=0 {
- Loop %cChildren%
- i:=(A_Index-1)*(A_PtrSize*2+8)+8, child:=NumGet(varChildren,i), Children.Insert(NumGet(varChildren,i-8)=9?Acc_Query(child):child), NumGet(varChildren,i-8)=9?ObjRelease(child):
- return Children.MaxIndex()?Children:
- } else
- ErrorLevel := "AccessibleChildren DllCall Failed"
- }
- if Acc_Error()
- throw Exception(ErrorLevel,-1)
- }
- Acc_ChildrenByRole(Acc, Role) {
- if ComObjType(Acc,"Name")!="IAccessible"
- ErrorLevel := "Invalid IAccessible Object"
- else {
- Acc_Init(), cChildren:=Acc.accChildCount, Children:=[]
- if DllCall("oleacc\AccessibleChildren", "Ptr",ComObjValue(Acc), "Int",0, "Int",cChildren, "Ptr",VarSetCapacity(varChildren,cChildren*(8+2*A_PtrSize),0)*0+&varChildren, "Int*",cChildren)=0 {
- Loop %cChildren% {
- i:=(A_Index-1)*(A_PtrSize*2+8)+8, child:=NumGet(varChildren,i)
- if NumGet(varChildren,i-8)=9
- AccChild:=Acc_Query(child), ObjRelease(child), Acc_Role(AccChild)=Role?Children.Insert(AccChild):
- else
- Acc_Role(Acc, child)=Role?Children.Insert(child):
- }
- return Children.MaxIndex()?Children:, ErrorLevel:=0
- } else
- ErrorLevel := "AccessibleChildren DllCall Failed"
- }
- if Acc_Error()
- throw Exception(ErrorLevel,-1)
- }
- Acc_Get(Cmd, ChildPath="", ChildID=0, WinTitle="", WinText="", ExcludeTitle="", ExcludeText="") {
- static properties := {Action:"DefaultAction", DoAction:"DoDefaultAction", Keyboard:"KeyboardShortcut"}
- AccObj := IsObject(WinTitle)? WinTitle
- : Acc_ObjectFromWindow( WinExist(WinTitle, WinText, ExcludeTitle, ExcludeText), 0 )
- if ComObjType(AccObj, "Name") != "IAccessible"
- ErrorLevel := "Could not access an IAccessible Object"
- else {
- StringReplace, ChildPath, ChildPath, _, %A_Space%, All
- StringReplace, ChildPath, ChildPath, `,, ., All
- AccError:=Acc_Error(), Acc_Error(true)
- Loop Parse, ChildPath, ., %A_Space%
- try {
- if A_LoopField is digit
- Children:=Acc_Children(AccObj), m2:=A_LoopField ; mimic "m2" output in else-statement
- else
- RegExMatch(A_LoopField, "(\D*)(\d*)", m), Children:=Acc_ChildrenByRole(AccObj, m1), m2:=(m2?m2:1)
- if Not Children.HasKey(m2)
- throw
- AccObj := Children[m2]
- } catch {
- ErrorLevel:="Cannot access ChildPath Item #" A_Index " -> " A_LoopField, Acc_Error(AccError)
- if Acc_Error()
- throw Exception("Cannot access ChildPath Item", -1, "Item #" A_Index " -> " A_LoopField)
- return
- }
- Acc_Error(AccError)
- StringReplace, Cmd, Cmd, %A_Space%, , All
- properties.HasKey(Cmd)? Cmd:=properties[Cmd]:
- try {
- if (Cmd = "Location")
- AccObj.accLocation(ComObj(0x4003,&x:=0), ComObj(0x4003,&y:=0), ComObj(0x4003,&w:=0), ComObj(0x4003,&h:=0), ChildId)
- , ret_val := "x" NumGet(x,0,"int") " y" NumGet(y,0,"int") " w" NumGet(w,0,"int") " h" NumGet(h,0,"int")
- else if (Cmd = "Object")
- ret_val := AccObj
- else if Cmd in Role,State
- ret_val := Acc_%Cmd%(AccObj, ChildID+0)
- else if Cmd in ChildCount,Selection,Focus
- ret_val := AccObj["acc" Cmd]
- else
- ret_val := AccObj["acc" Cmd](ChildID+0)
- } catch {
- ErrorLevel := """" Cmd """ Cmd Not Implemented"
- if Acc_Error()
- throw Exception("Cmd Not Implemented", -1, Cmd)
- return
- }
- return ret_val, ErrorLevel:=0
- }
- if Acc_Error()
- throw Exception(ErrorLevel,-1)
- }
- ; Function to grab active chrome tab
- ChromeActivate(SearchText, AccPath_TabList := "4,1,2,2,2") {
- TabList := Acc_Get("Object", AccPath_TabList, 0, "ahk_class Chrome_WidgetWin_1")
- Loop, % Acc_Children(TabList).MaxIndex() {
- _tab := Acc_Child(TabList, A_Index)
- tabTitle := _tab.accName(0)
- if InStr(tabTitle, SearchText) {
- _tab.accDoDefaultAction(0)
- return true
- }
- }
- }
- ^!x:: ; Control+Alt+X hotkey
- if ChromeActivate("solarmovie") {
- WinActivate, ahk_class Chrome_WidgetWin_1
- Sleep, 100
- Goto, ImageSearch
- }
- /*
- ; Window Activation / Tab Activation without ACC Library
- WinActivate, ahk_class Chrome_WidgetWin_1
- WinWaitActive, ahk_class Chrome_WidgetWin_1
- WinGetTitle, CurrentWindowTitle, ahk_class Chrome_WidgetWin_1
- Sleep, 2000 ; Appears to be issue where title is not being recognized, mouse movement corrects
- If CurrentWindowTitle contains solarmovie
- Goto, ImageSearch
- ; else
- Loop
- {
- Send, ^{Tab}
- Sleep, 50
- WinGetTitle, CurrentWindowTitle, ahk_class Chrome_WidgetWin_1
- If CurrentWindowTitle not contains solarmovie
- Continue
- ; else
- break
- }
- Goto, ImageSearch
- */
- Return
- ImageSearch:
- CoordMode Pixel ; Interprets the coordinates below as relative to the screen rather than the active window.
- CoordMode Mouse ; Interprets the coordinates below as relative to the screen rather than the active window, for the mouse.
- ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, C:\Users\Dom\Desktop\NextVideoScript\OnAir.png
- if ErrorLevel = 2
- MsgBox Could not conduct the search.
- else if ErrorLevel = 1
- MsgBox Icon could not be found on the screen.
- else
- NextVideo:
- MouseMove, %FoundX%, % FoundY - 40
- MouseGetPos, Mx, My
- if (Mx = 1690) and (My = 255) {
- Msgbox, Fuck
- Return
- }
- else
- MouseClick, left
- MouseGetPos, Mx, My
- MouseMove, % Mx - 950, % My - 20
- Sleep, 2000
- MouseClick, left
- MouseClick, left
- Send F
- Return
- /*
- Next Episode 1.1
- To Do:
- Figure out how to solve requirement to scroll when episode is at top of list
- Change log:
- 1.0:
- Initial script creation
- 1.1:
- Added ACC library
- Added activate Chrome tab function (depends on ACC library)
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement