Thread: TableNavigator
View Single Post
  #45  
Old 02-17-2006, 08:10 PM
Roland Roland is offline
Senior Member
 
Join Date: Mar 2005
Location: Norwich, UK
Posts: 2,703
Default Update

This was pretty easy - thanks to Bishop22 for finding the new control names [img]/images/graemlins/smile.gif[/img]

Just a quick fix, mind you.


;__________________________Table Navigator V4_____________________

; AutoHotkey Version: 1.0.41.02
; Platform: WinXP & Win9x/NT (for joypad)
; Author: Roland, SamIAm & jukofyork

; this script now allows the joypad OR alt+cursor keys for navigation, along with joypadbuttons to press F/C/R.

IniRead, 3pos_x, TableNavigator.ini, Position, 3pos_x, 0
IniRead, 3pos_y, TableNavigator.ini, Position, 3pos_y, 0
IniRead, wrapping_on, TableNavigator.ini, Wrapping, wrapping_on, 1
IniRead, wrapping_off, TableNavigator.ini, Wrapping, wrapping_off, 0
IniRead, activate_on, TableNavigator.ini, ActivateTarget, activate_on, 1
IniRead, activate_off, TableNavigator.ini, ActivateTarget, activate_off, 0
IniRead, auto_launch, TableNavigator.ini, AutoLaunch, auto_launch, off

TableType =

SysGet, size_caption, 4
SysGet, size_boarder, 32
size_titlebar := size_caption + size_boarder ;I wanted the GUI to be the same height as the titlebar and this seems to do the trick

Gui, +alwaysontop +Lastfound +Owner
Gui, Color, 00008B ;a dark blue I quite like. Change it to whatever you want
WinSet, Transparent, 200 ;make the GUI slightly transparent - looks better that way
Gui, -Caption

If auto_launch = yes
{
Gosub, get_table_list ;get the table list without waiting for the timer. That way we can...
def_t = %table_1% ;... make table_1 the default table to have a starting point
SetTimer, get_table_list, 1000 ;update table_list every second
WinGetPos, x, y, , , ahk_id%def_t%
Gui, 1: Show, w800 h%size_titlebar% x%x% y%y% NoActivate, table_navigator ;show the GUI on table_1
SetTimer, show_hide, 200
SetTimer, WatchAxis, 5 ; ### Juk: Added this for Joyapd control (5ms?).
}



Gui, 2: +owner +lastfound +alwaysontop
Gui, 2: Color, 4F94CD
Gui, 2: Font, s30, Comic Sans MS
Gui, 2: Add, Text, vText1 cE0FFFF, Table
Gui, 2: Add, Text, vText2 cWhite, Navigator
WinSet, Transparent, 0
Gui, 2: -Caption
Gui, 2: Show, w259 h200 Center
GuiControlGet, Text1, 2: Pos, Text1
GuiControlGet, Text2, 2: Pos, Text2
GuiControl, 2: Move, Text1, % "x" (250 - Text1W)/2
GuiControl, 2: Move, Text2, % "x" (250 - Text2W)/2
Loop, 20
{
trans += 10
WinSet, Transparent, %trans%
Sleep, 50
}
Sleep, 500
Loop, 20
{
trans -= 10
WinSet, Transparent, %trans%
Sleep, 50
}
Gui, 2: Destroy

Menu, FileMenu, Add, Launch Navigator, LaunchNavigator
Menu, FileMenu, Add, Auto-Launch Navigator, AutoLaunchNavigator
Menu, FileMenu, Add
Menu, FileMenu, Add, Test on Play Money, PlayMoney
Menu, FileMenu, Add
Menu, FileMenu, Add, Exit, Exit

Menu, HelpMenu, Add, Help, Help

Menu, MenuBar, Add, File, :FileMenu
Menu, MenuBar, Add, Help, :HelpMenu
Menu, MenuBar, Color, FFFACD
Gui, 3: Menu, MenuBar

If auto_launch = yes
Menu, FileMenu, Check, Auto-Launch Navigator

Menu, Tray, Add, Show, Show
Menu, Tray, Default, Show
Menu, Tray, Add, Exit, Exit

Gui, 3: +owner +lastfound
Gui, 3: Color, CDC9A5
Gui, 3: Font, s10, Arial
Gui, 3: Add, Text, Section w70 x20 y20, Wrapping:
Gui, 3: Add, Radio, ys checked%wrapping_on% gWrapping_on, On
Gui, 3: Add, Radio, checked%wrapping_off% gWrapping_off, Off
Gui, 3: Add, Text, x20 w70 Section, Activate target:
Gui, 3: Add, Radio, ys checked%activate_on% gActivate_on, On
Gui, 3: Add, Radio, checked%activate_off% gActivate_off, Off
Gui, 3: Show, x%3pos_x% y%3pos_y% w200 h130, Table Navigator




;call Sams functions:

;FOLD = Joy1; Will attempt to find fold buttons in the following order:
newButton("fold", 1, "AfxWnd4217") ;(
newButton("checkFoldInTurn", 1, "AfxWnd4223")
newButton("foldInTurn", 1, "AfxWnd4222")

;CALL = Joy2; Will attempt to find check/call buttons in order:
newButton("call", 2, "Call (", 1)
newButton("check", 2, "AfxWnd4218") ;(
newButton("cInTurn", 2, "AfxWnd4224")


;RAISE = Joy3; Will attempt to find bet/raise buttons in this order:
newButton("bet", 3, "Bet", 1)
newButton("raise", 3, "Raise", 1)
newButton("r1InTurn", 3, "AfxWnd4226")


;LEAVE = 4;
newButton("muckNow", 4, "Muck?", 2)
newButton("sitout", 4, "Sit Out")
newButton("muckInTurn", 4, "Muck Losing/Uncalled Hands")

;STAY = 5;
newButton("back", 5, "I am Back")
;newButton("waitNow", 5, "AfxWnd42s16") ;( ; <font color="red"> __________________I don't know what this button does; somebody find the the new control name please</font>
newButton("waitInTurn", 5, "Wait for Big Blind")

;PLAY = 6;
newButton("post", 6, "Post", 1)
newButton("show", 6, "Show", 2)
newButton("autopost", 6, "Auto Post Blind")

return

;_________end of auto-execute section___________

;_________subroutines:

get_table_list:
table_list := Update_tables() ; the function returns a comma seperated list of unique window IDs
Loop, Parse, table_list, `, ;assign these IDs to the variables "table_1", "table_2" etc.
{
table_%A_Index% = %A_LoopField%
}
return

show_hide: ;hide the GUI if a) def_t doesn't exist, b) def_t is minimized or c) the active window is maximized
IfWinExist, ahk_id%def_t%
{
WinGet, is_maximised_active, MinMax, A
WinGet, is_minimized_def_t, MinMax, ahk_id%def_t%
If (is_maximised_active = 1 or is_minimized_def_t = -1)
Gui, Hide
else
Gui, Show, NoActivate
}
else
Gui, Hide
return

LaunchNavigator: ;do what the original script did in the auto-execute-section (and still does, if auto-launch was selected)
Gosub, get_table_list
def_t = %table_1%
SetTimer, get_table_list, 1000
WinGetPos, x, y, , , ahk_id%def_t%
Gui, 1: Show, w800 h%size_titlebar% x%x% y%y% NoActivate, table_navigator
SetTimer, show_hide, 200
SetTimer, WatchAxis, 5 ; ### Juk: Added this for Joyapd control (5ms?).
return

Exit:
3GuiClose:
WinGetPos, 3pos_x, 3pos_y, , , Table Navigator
Gui, 3: Destroy

IniWrite, %3pos_x%, TableNavigator.ini, Position, 3pos_x
IniWrite, %3pos_y%, TableNavigator.ini, Position, 3pos_y
IniWrite, %wrapping_on%, TableNavigator.ini, Wrapping, wrapping_on
IniWrite, %wrapping_off%, TableNavigator.ini, Wrapping, wrapping_off
IniWrite, %activate_on%, TableNavigator.ini, ActivateTarget, activate_on
IniWrite, %activate_off%, TableNavigator.ini, ActivateTarget, activate_off
IniWrite, %auto_launch%, TableNavigator.ini, AutoLaunch, auto_launch
ExitApp
return

3GuiSize:
If ErrorLevel = 1
Gui, 3: Hide
return

Show:
Gui, 3: Restore
Gui, 3: Show
return

Wrapping_on:
wrapping_on = 1
wrapping_off = 0
return

Wrapping_off:
wrapping_off = 1
wrapping_on = 0
return

Activate_on:
activate_on = 1
activate_off = 0
return

Activate_off:
activate_off = 1
activate_on = 0
return

AutoLaunchNavigator:
If auto_launch = no
auto_launch = yes
else
auto_launch = no
Menu, FileMenu, ToggleCheck, Auto-Launch Navigator
return

PlayMoney:
If TableType = Play money
TableType =
else
TableType = Play money
Menu, FileMenu, ToggleCheck, Test on Play Money
return

Help:
Gui, 4: Color, F5F5DC
Gui, 4: Font, s10, Arial
Gui, 4: Add, Text, ,
(

1. Turning Wrapping off will prevent TN from
moving to the next row or column when it has
reached the last table in that row or column.

2. Turning "Activate Target" on will cause the table
under TN to be activated. This might be especially
useful when over-lapping.

3. Selecting "Auto-Launch Navigator" from the
File Menu will cause the Navigator to be launched
automatically the next time you start TN.

4. If you wish to test TN on play money first, select
"Test on Play Money" from the File Menu.

)
Gui, 4: Add, Button, vbutton_close_help Center gCloseHelp, Close
Gui, 4: Show, autosize Hide, Help
GuiControlGet, button_close_help, 4: pos
GuiControl, 4: Move, button_close_help, % "x" (334 - button_close_helpW)/2
Gui, 4: Show
return

CloseHelp:
Gui, 4: Destroy
return

; ### Juk added this to try to get Joypad working.
WatchAxis:
GetKeyState, JoyX, JoyX ; Get position of X axis.
GetKeyState, JoyY, JoyY ; Get position of Y axis.
KeyToHoldDownPrev = %KeyToHoldDown% ; Prev now holds the key that was down before (if any).
if JoyX &gt; 70
KeyToHoldDown = right
else if JoyX &lt; 30
KeyToHoldDown = left
else if JoyY &gt; 70
KeyToHoldDown = down
else if JoyY &lt; 30
KeyToHoldDown = up
else
KeyToHoldDown =
if KeyToHoldDown = %KeyToHoldDownPrev% ; The correct key is already down.
return ; Do nothing.
; Otherwise, release the previous key and press down the new key:
SetKeyDelay -1 ; Avoid delays between keystrokes.
if KeyToHoldDown ; There is a key to press down.
{
If wrapping_on = 1
def_t := GetTargetWrap(KeyToHoldDown)
else
def_t := GetTargetNoWrap(KeyToHoldDown)
WinGetPos, px, py, , , ahk_id%def_t% ;move the GUI to the new de_t
Gui, Show, w%w% x%px% y%py% NoActivate
If activate_on = 1
WinActivate, ahk_id%def_t%
}
return

;_________hotkeys:

!down::
key = down
If wrapping_on = 1
def_t := GetTargetWrap(key) ;pass "key" to the GetTarget function which returns the new def_t
else
def_t := GetTargetNoWrap(key)
WinGetPos, px, py, , , ahk_id%def_t% ;move the GUI to the new de_t
Gui, 1: Show, x0 y0 w800 h30
Gui, 1: Show, w%w% x%px% y%py% NoActivate
If activate_on = 1
WinActivate, ahk_id%def_t%
WinActivate, table_navigator
return

!up::
key = up
If wrapping_on = 1
def_t := GetTargetWrap(key)
else
def_t := GetTargetNoWrap(key)
WinGetPos, px, py, , , ahk_id%def_t%
Gui, 1: Show, w%w% x%px% y%py% NoActivate
If activate_on = 1
WinActivate, ahk_id%def_t%
return

!right::
key = right
If wrapping_on = 1
def_t := GetTargetWrap(key)
else
def_t := GetTargetNoWrap(key)
WinGetPos, px, py, , , ahk_id%def_t%
Gui, 1: Show, w%w% x%px% y%py% NoActivate
If activate_on = 1
WinActivate, ahk_id%def_t%
return

!left::
key = left
If wrapping_on = 1
def_t := GetTargetWrap(key)
else
def_t := GetTargetNoWrap(key)
WinGetPos, px, py, , , ahk_id%def_t%
Gui, 1: Show, w%w% x%px% y%py% NoActivate
If activate_on = 1
WinActivate, ahk_id%def_t%
return

;Sams hotkeys:

!1::
ClickVis(1)
return
!2::
clickVis(2)
return
!3::
clickVis(3)
return
!4::
clickVis(4)
return
!5::
clickVis(5)
return
!6::
clickVis(6)
return
!7::
debug()
return

!8::
Gui, 1: Show
return




;_________functions:

Update_tables() ;this function returns "table_list" and also operates on the GUI (which is why "size_titlebar" is made global):
{
global size_titlebar
global TableType

WinGet, pid, PID, PartyPoker.com: ;retrieves the process ID (using the window title of the lobby)

WinGet, id, list, %TableType% ahk_pid%pid% ahk_class #32770, , PartyPoker.com: , BLACK ;make a list of windows IDs matching ahk_pid/class, excluding the lobby
Loop, %id%
{
StringTrimRight, this_id, id%a_index%, 0 ;look familiar? [img]/images/graemlins/smile.gif[/img]
WinGetPos, x, y, w, h, ahk_id %this_id%
w -= 50 ;this allows for slight overlap or slightly different table sizes
h -= 50

If (x &lt; a_screenwidth/6 AND y &lt; a_screenheight/6) ;determine the table number based on its position
table_1 = %this_id%
If (x &lt; a_screenwidth/6 AND y &gt; a_screenheight/6 AND y &lt; 2*h)
table_2 = %this_id%
If (x &lt; a_screenwidth/6 AND y &gt;= 2*h)
table_3 = %this_id%
If (x &gt; a_screenwidth/6 AND y &lt; a_screenheight/6 AND x &lt; 2*w AND y &lt; 2*h)
table_4 = %this_id%
If (x &gt; a_screenwidth/6 AND y &gt; a_screenheight/6 AND x &lt; 2*w AND y &lt; 2*h)
table_5 = %this_id%
If (x &gt; a_screenwidth/6 AND x &lt; 2*w AND y &gt;= 2*h)
table_6 = %this_id%
If (y &lt; a_screenheight/6 AND x &gt;= 2*w)
table_7 = %this_id%
If (y &gt; a_screenheight/6 AND x &gt;= 2*w AND y &lt; 2*h)
table_8 = %this_id%
If (x &gt; a_screenwidth/6 AND x &gt;= 2*w AND y &gt;= 2*h)
table_9 = %this_id%
}
table_list = %table_1%,%table_2%,%table_3%,%table_4%,%table_5%, %table_6%,%table_7%,%table_8%,%table_9%
w += 50 ;reset to the actual width

;modify the GUI according to the height of the titlebar, the width of the table(s)
;(this assumes all tables are roughly the same size) and round the edges because it looks better:

WinSet, Region, w%w% h%size_titlebar% 0-0 %w%-0 %w%-%size_titlebar% 0-%size_titlebar% R20-20, table_navigator

return, table_list ;return "table_list"
}


GetTargetWrap(key) ;this function returns the new "def_t" when passed "key"
{
global def_t ;make these two variables global
global table_list

If key = down
new_order = 123456789 ;since this is the order the tables are in anyways, new_order equals the old order in this case
If key = up
new_order = 987654321 ;"up" is the opposite of "down" [img]/images/graemlins/smile.gif[/img] so we just reverse the order
If key = right
new_order = 147258369 ;the table to the right of table_1 is table_4 etc.
If key = left
new_order = 963852741 ;reverse the order for "right"

Loop, Parse, table_list, `, ;parse table_list, assigning each substring (ID) a new table number based on the new order
{
StringMid, new_number, new_order, %a_index%, 1
table_%new_number% = %a_loopfield%
}
Loop, 9
{
StringTrimRight, table, table_%a_index%, 0 ;acces the (new) array to find out which number the def_t is in the new order
If def_t = %table%
{
table_number = %a_index%
break
}
}
Loop, 9 ;this loop finds the number of the next table in the list (target)
{
table_number++ ;for instance: if the loop above determined that the def_t is table_5, this loop looks for table_6 first;
If table_%table_number% &lt;&gt; ;if "table_6" is empty, it looks for table_7 and so on
{
target = %table_number%
break
}
If table_number &gt;= 9 ;if table_number reaches 9, tables 6 through 9 didn't exist, to continue the example above
table_number = 0 ;so we search for tables 1 through 4 (table_number is set to 1 at the beginning of the next loop iteration)
}
target := table_%target% ;once we've found "target", change it to be the ID of the table (using the array created by the first loop)
IfWinExist, ahk_id%target% ;only return a new de_t if it actually still exists; else, return the old def_t
{
def_t = %target%
}
Return, def_t ;return "def_t"
}


GetTargetNoWrap(key) ;this function returns the new "def_t" when passed "key"
{
global def_t ;make these two variables global
global table_list


Loop, 9
{
StringTrimRight, table, table_%a_index%, 0 ;acces the array to find out which number the def_t is in the new order
If def_t = %table%
{
table_number = %a_index%
break
}
}
If table_number =
{
Loop, Parse, table_list, `,
{
If a_loopfield &lt;&gt;
def_t = %a_loopfield%
}
}

If key = down
{
If table_number = 1
target = 2
If table_number = 2
target = 3
If table_number = 4
target = 5
If table_number = 5
target = 6
If table_number = 7
target = 8
If table_number = 8
target = 9
}
If key = up
{
If table_number = 9
target = 8
If table_number = 8
target = 7
If table_number = 6
target = 5
If table_number = 5
target = 4
If table_number = 3
target = 2
If table_number = 2
target = 1
}
If key = right
{
If table_number = 1
target = 4
If table_number = 4
target = 7
If table_number = 2
target = 5
If table_number = 5
target = 8
If table_number = 3
target = 6
If table_number = 6
target = 9
}
If key = left
{
If table_number = 9
target = 6
If table_number = 6
target = 3
If table_number = 8
target = 5
If table_number = 5
target = 2
If table_number = 7
target = 4
If table_number = 4
target = 1
}

target := table_%target% ;once we've found "target", change it to be the ID of the table (using the array created by the first loop)
IfWinExist, ahk_id%target% ;only return a new de_t if it actually still exists; else, return the old def_t
{
def_t = %target%
}
Return, def_t ;return "def_t"
}


;the rest of Sams functions:

debug()
{
local but, num, Output
but = 1
Loop
{
if(but &gt; numButtons)
break
num = 1
Loop
{
if(num &gt; numButtons%but%)
break
if(visible(but,num) = 1)
Output = % Output . names%but%x%num% . " is visible.`n"
num += 1
}
but += 1
}
MsgBox %Output%
}

clickVis(button)
{
local output, i, isVis, currString, currMatch
WinGetTitle, winTitle, ahk_id%def_t%
i = 1
Loop
{
if(i &gt; numButtons%button%)
break
if (visible(button,i) = 1)
{
currMatch := matches%button%x%i%
SetTitleMatchMode, %currMatch%
currString := strings%button%x%i%
ControlClick, %currString%, %winTitle%
break
}
i += 1
}
}

visible(but, num)
{
local currentMatch, currentString
local output
currentMatch = % matches%but%x%num%
currentString = % strings%but%x%num%
SetTitleMatchMode % currentMatch
ControlGet, output, Visible, , %currentString%, %winTitle%
if output &lt;&gt; 1
{
output = 0
}
return output
}
newButton(name, button, string, match=3)
{
local buttonCount
numButtons += 1
numButtons%button% += 1
buttonCount := numButtons%button%
names%button%x%buttonCount% := name
matches%button%x%buttonCount% := match
strings%button%x%buttonCount% := string
}

;_______end of code_____
Reply With Quote