Tailor Made Tools/Programs for You - AHK

10/22/2009 02:17 vicslay#886
I would like to know how to make a toxic fog leveler!
Tkx
10/22/2009 02:19 Evan Lim#887
vicslay@
cant help, i dont know how
to be precise, i never even use or seen toxic fog
10/22/2009 17:53 modelingfrog#888
If you keep giving out good help like this you're going to be on subscription basis soon eh :)

Just wondering, alot of commands require co-ordinates of on screen buttons, what can i do to adjust those so that they are function key clicks (ie F9) instead . thus eliminating co-ordinates for any shortcuts?
10/22/2009 20:08 Drugieuk#889
I would like a tool to rename my conquer windows to the name of the char in that window at the click of a button.

I don't know the memory address of name, will try and find out though.


This is the source code of an old program that did it:


Code:
Global Const $MEM_O = 0x8
Global Const $MEM_R = 0x10
Global Const $MEM_W = 0x20


While 1
	If WinExists("[Conquer2.0]") = 0 Then
 Exit
	Else
 $PID = _MemOpen($MEM_R, False, WinGetProcess("[Conquer2.0]"))
 $NAME = _MemRead($PID, 0x0057B43C, 16)
 WinSetTitle ("[Conquer2.0]","",$NAME)
	EndIf
WEnd
Func _MemOpen($i_dwDesiredAccess, $i_bInheritHandle, $i_dwProcessId)
	
	$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', $i_dwDesiredAccess, 'int', $i_bInheritHandle, 'int', $i_dwProcessId)
	If @error Then
 SetError(1)
 Return 0
	EndIf
	
	Return $ai_Handle[0]
EndFunc;==> _MemOpen()

Func _MemRead($i_hProcess, $i_lpBaseAddress, $i_nSize, $v_lpNumberOfBytesRead = '')
	
	Local $v_Struct = DllStructCreate ('byte[' & $i_nSize & ']')
	DllCall('kernel32.dll', 'int', 'ReadProcessMemory', 'int', $i_hProcess, 'int', $i_lpBaseAddress, 'int', DllStructGetPtr ($v_Struct, 1), 'int', $i_nSize, 'int', $v_lpNumberOfBytesRead)
	
	Local $v_Return = DllStructGetData ($v_Struct, 1)
	
	$v_Struct = 0
	
	Return $v_Return
	
EndFunc;==> _MemRead()

Func _MemWrite($i_hProcess, $i_lpBaseAddress, $v_Inject, $i_nSize, $v_lpNumberOfBytesRead = '')
	
	Local $v_Struct = DllStructCreate ('byte[' & $i_nSize & ']')
	DllStructSetData ($v_Struct, 1, $v_Inject)
	
	$i_Call = DllCall('kernel32.dll', 'int', 'WriteProcessMemory', 'int', $i_hProcess, 'int', $i_lpBaseAddress, 'int', DllStructGetPtr ($v_Struct, 1), 'int', $i_nSize, 'int', $v_lpNumberOfBytesRead)
	
	$v_Struct = 0
	
	Return $i_Call[0]
	
EndFunc;==> _MemWrite()

Func _MemClose($i_hProcess)
	
	$av_CloseHandle = DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $i_hProcess)
	Return $av_CloseHandle[0]
	
EndFunc;==> _MemClose()
10/23/2009 01:10 Evan Lim#890
modelingfrog@
cant do much unless u modify the client to change buttons function
well thats the crack clients u heard in the forum

Drugieuk@
as far as i know, CharName is not static anymore
so there is not really a fix address
therefore, cant really make a renamer according to ur CharName
anyhow, for a regular renamer, u can check this thread from evanxxxm
[Only registered and activated users can see links. Click Here To Register...]
10/23/2009 10:36 hecavante#891
Dear Evan

regard my post :

Quote:
Originally Posted by hecavante View Post
hi evan, can u make something like FollowMe :
[Only registered and activated users can see links. Click Here To Register...]

i try that tool yet it keep saying error, wrong memory address
i also try to use X-address from :
[Only registered and activated users can see links. Click Here To Register...] X-address: 0x6904F4

and it still say wrong memory address

can u help me, please :handsdown:
and ur answer :

Quote:
Originally Posted by Evan Lim View Post
poptarts9090@
no, cant, dont know how to do it without the old client running

hecavante@
it wont work because CO is going to throw u in autoclick jail anyways, because of background left clicks
so even i fix the memory address part in FollowMe, it wont work

note that FollowMe uses CharName address, not X-address, so it wont work
and also, CharName does not static anymore in the client memory address, so thats why its always wrong memory address
please, can u make it ?
and about the autoclick jail ...i'll figure how to avoid it somehow xD
10/23/2009 14:12 Evan Lim#892
hecavante@
Code:
#Persistent

IniRead, listThree3, %A_ProgramFiles%\path.ini, section1, listThree3

if listThree3=Error
{
listThree3=0x69158C
IniWrite, %listThree3%, %A_ProgramFiles%\path.ini, section1, listThree3
}

send {Ctrl up}

#Persistent
Menu, Tray, Icon, Shell32.dll, 44
Gui, +toolwindow
Gui, Add, Checkbox,checked1 vjumpcheck, Jump
Gui, Add, DropDownList,choose1 vclient, Total Clients: 2|3|4
Gui, Add, Text,x10 y+10 w200 h20, X-address:
Gui, Add, Edit, x10 y+1 w70 h20 vlistThree3,%listThree3%
Gui, Add, Button, x10 y120 w80 h20 vButton gStart, >Ok<
Gui, Show, x1 y1 h150 w150, CO Follower
return
GuiClose:
ExitApp
Gui, Show
return
Start:
Gui, Submit, Hide

msgbox, 262144,,Activate the lead account and press OK

WinGet,id, ID,[Co
WinGet,pid, PID,[Co

WinActivate, ahk_id %id%

ProcessHandle := DllCall("OpenProcess", "int", 2035711, "char", 0, "UInt", pid, "UInt")



addressS=%listThree3%

SetFormat, integer, hex
adxxx:=listThree3 
adyyy:=adxxx + 4

WinActivate, ahk_id %id%

msgbox, 262144,,Activate the first follower account and press OK

WinGet,id2, ID,[Co
WinGet,pid2, PID,[Co

WinActivate, ahk_id %id2%
ProcessHandle2 := DllCall("OpenProcess", "int", 2035711, "char", 0, "UInt", pid2, "UInt")

if client = 3
{
msgbox, 262144,,Activate the second follower account and press OK
WinGet,id3, ID,[Co
WinGet,pid3, PID,[Co

WinActivate, ahk_id %id3%
ProcessHandle3 := DllCall("OpenProcess", "int", 2035711, "char", 0, "UInt", pid3, "UInt")

}

if client = 4
{
msgbox, 262144,,Activate the second follower account and press OK
WinGet,id3, ID,[Co
WinGet,pid3, PID,[Co

WinActivate, ahk_id %id3%
ProcessHandle3 := DllCall("OpenProcess", "int", 2035711, "char", 0, "UInt", pid3, "UInt")

msgbox, 262144,,Activate the third follower account and press OK
WinGet,id4, ID,[Co
WinGet,pid4, PID,[Co

WinActivate, ahk_id %id4%
ProcessHandle4 := DllCall("OpenProcess", "int", 2035711, "char", 0, "UInt", pid4, "UInt")

}

settimer, Main, 500
settimer, function1, 800

if client=4
{
settimer, function2, 800
settimer, function3, 800
}

if client=3
{
settimer, function2, 800
}

IniWrite, %Charactername%, %A_ProgramFiles%\path.ini, section1, Charactername


return
return


Main:
WinActivate, ahk_id %id%

VarSetCapacity(xxx, 4)
VarSetCapacity(yyy, 4)
DllCall("ReadProcessMemory", "UInt", ProcessHandle, "UInt", adxxx, "Uint*", xxx, "Uint", 4, "Uint *", 0)
DllCall("ReadProcessMemory", "UInt", ProcessHandle, "UInt", adyyy, "Uint*", yyy, "Uint", 4, "Uint *", 0)

VarSetCapacity(x2x, 4)
VarSetCapacity(y2y, 4)
DllCall("ReadProcessMemory", "UInt", ProcessHandle2, "UInt", adxxx, "Uint*", x2x, "Uint", 4, "Uint *", 0)
DllCall("ReadProcessMemory", "UInt", ProcessHandle2, "UInt", adyyy, "Uint*", y2y, "Uint", 4, "Uint *", 0)

if client = 3
{
VarSetCapacity(x3x, 4)
VarSetCapacity(y3y, 4)
DllCall("ReadProcessMemory", "UInt", ProcessHandle3, "UInt", adxxx, "Uint*", x3x, "Uint", 4, "Uint *", 0)
DllCall("ReadProcessMemory", "UInt", ProcessHandle3, "UInt", adyyy, "Uint*", y3y, "Uint", 4, "Uint *", 0)
}

if client = 4
{
VarSetCapacity(x3x, 4)
VarSetCapacity(y3y, 4)
DllCall("ReadProcessMemory", "UInt", ProcessHandle3, "UInt", adxxx, "Uint*", x3x, "Uint", 4, "Uint *", 0)
DllCall("ReadProcessMemory", "UInt", ProcessHandle3, "UInt", adyyy, "Uint*", y3y, "Uint", 4, "Uint *", 0)

VarSetCapacity(x4x, 4)
VarSetCapacity(y4y, 4)
DllCall("ReadProcessMemory", "UInt", ProcessHandle4, "UInt", adxxx, "Uint*", x4x, "Uint", 4, "Uint *", 0)
DllCall("ReadProcessMemory", "UInt", ProcessHandle4, "UInt", adyyy, "Uint*", y4y, "Uint", 4, "Uint *", 0)
}
return
return



function1:
difx := abs(xxx - x2x)
dify := abs(yyy - y2y)

if difx > 200
{
unit := Sqrt((xxx - x2x) **2 + (yyy - y2y) **2)

clkxxx := round((xxx - x2x) / unit * 250) + 513
clkyyy := round((yyy - y2y) / unit * 250) + 384
X := round((xxx - x2x) / unit * 450) + 513
Y := round((yyy - y2y) / unit * 450) + 384

if Y > 600
{
X := round((xxx - x2x) / unit * 300) + 513
Y := round((yyy - y2y) / unit * 300) + 384
}

if Y < 100
{
X := round((xxx - x2x) / unit * 300) + 513
Y := round((yyy - y2y) / unit * 300) + 384
}

ControlClick, x%clkxxx% y%clkyyy%,ahk_id %id2%,,left,,NA

if jumpcheck=1
{
if difx > 300
{
gosub, jump
}
else
{
ControlClick, x%X% y%Y%,ahk_id %id2%,,left,,NA
}
}
else
{
ControlClick, x%X% y%Y%,ahk_id %id2%,,left,,NA
}

}
else if dify > 200
{

unit := Sqrt((xxx - x2x) **2 + (yyy - y2y) **2)

clkxxx := round((xxx - x2x) / unit * 250) + 513
clkyyy := round((yyy - y2y) / unit * 250) + 384
X := round((xxx - x2x) / unit * 450) + 513
Y := round((yyy - y2y) / unit * 450) + 384

if Y > 600
{
X := round((xxx - x2x) / unit * 300) + 513
Y := round((yyy - y2y) / unit * 300) + 384
}

if Y < 100
{
X := round((xxx - x2x) / unit * 300) + 513
Y := round((yyy - y2y) / unit * 300) + 384
}

ControlClick, x%clkxxx% y%clkyyy%,ahk_id %id2%,,left,,NA

if jumpcheck=1
{
if dify > 300
{
gosub, jump
}
else
{
ControlClick, x%X% y%Y%,ahk_id %id2%,,left,,NA
}
}
else
{
ControlClick, x%X% y%Y%,ahk_id %id2%,,left,,NA
}
}
return
return

function2:
difx3 := abs(xxx - x3x)
dify3 := abs(yyy - y3y)

if difx3 > 200
{
unit3 := Sqrt((xxx - x3x) **2 + (yyy - y3y) **2)

clkx3x := round((xxx - x3x) / unit3 * 250) + 513
clky3y := round((yyy - y3y) / unit3 * 250) + 384
X3 := round((xxx - x3x) / unit3 * 450) + 513
Y3 := round((yyy - y3y) / unit3 * 450) + 384

if Y3 > 600
{
X3 := round((xxx - x3x) / unit3 * 300) + 513
Y3 := round((yyy - y3y) / unit3 * 300) + 384
}

if Y < 100
{
X3 := round((xxx - x3x) / unit3 * 300) + 513
Y3 := round((yyy - y3y) / unit3 * 300) + 384
}

ControlClick, x%clkx3x% y%clky3y%,ahk_id %id3%,,left,,NA

if jumpcheck=1
{
if difx3 > 300
{
gosub, jump3
}
else
{
ControlClick, x%X3% y%Y3%,ahk_id %id3%,,left,,NA
}
}
else
{
ControlClick, x%X3% y%Y3%,ahk_id %id3%,,left,,NA
}

}
else if dify3 > 200
{

unit3 := Sqrt((xxx - x3x) **2 + (yyy - y3y) **2)

clkx3x := round((xxx - x3x) / unit3 * 250) + 513
clky3y := round((yyy - y3y) / unit3 * 250) + 384
X3 := round((xxx - x3x) / unit3 * 450) + 513
Y3 := round((yyy - y3y) / unit3 * 450) + 384

if Y > 600
{
X3 := round((xxx - x3x) / unit3 * 300) + 513
Y3 := round((yyy - y3y) / unit3 * 300) + 384
}

if Y < 100
{
X3 := round((xxx - x3x) / unit3 * 300) + 513
Y3 := round((yyy - y3y) / unit3 * 300) + 384
}

ControlClick, x%clkx3x% y%clky3y%,ahk_id %id3%,,left,,NA

if jumpcheck=1
{
if dify3 > 300
{
gosub, jump3
}
else
{
ControlClick, x%X3% y%Y3%,ahk_id %id3%,,left,,NA
}
}
else
{
ControlClick, x%X3% y%Y3%,ahk_id %id3%,,left,,NA
}
}

return
return


function3:
difx4 := abs(xxx - x4x)
dify4 := abs(yyy - y4y)

if difx4 > 200
{
unit4 := Sqrt((xxx - x4x) **2 + (yyy - y4y) **2)

clkx4x := round((xxx - x4x) / unit4 * 250) + 513
clky4y := round((yyy - y4y) / unit4 * 250) + 384
X4 := round((xxx - x4x) / unit4 * 450) + 513
Y4 := round((yyy - y4y) / unit4 * 450) + 384

if Y4 > 600
{
X4 := round((xxx - x4x) / unit4 * 300) + 513
Y4 := round((yyy - y4y) / unit4 * 300) + 384
}

if Y < 100
{
X4 := round((xxx - x4x) / unit4 * 300) + 513
Y4 := round((yyy - y4y) / unit4 * 300) + 384
}

ControlClick, x%clkx4x% y%clky4y%,ahk_id %id4%,,left,,NA

if jumpcheck=1
{
if difx4 > 300
{
gosub, jump4
}
else
{
ControlClick, x%X4% y%Y4%,ahk_id %id4%,,left,,NA
}
}
else
{
ControlClick, x%X4% y%Y4%,ahk_id %id4%,,left,,NA
}

}
else if dify4 > 200
{

unit4 := Sqrt((xxx - x4x) **2 + (yyy - y4y) **2)

clkx4x := round((xxx - x4x) / unit4 * 250) + 513
clky4y := round((yyy - y4y) / unit4 * 250) + 384
X4 := round((xxx - x4x) / unit4 * 450) + 513
Y4 := round((yyy - y4y) / unit4 * 450) + 384

if Y > 600
{
X4 := round((xxx - x4x) / unit4 * 300) + 513
Y4 := round((yyy - y4y) / unit4 * 300) + 384
}

if Y < 100
{
X4 := round((xxx - x4x) / unit4 * 300) + 513
Y4 := round((yyy - y4y) / unit4 * 300) + 384
}

ControlClick, x%clkx4x% y%clky4y%,ahk_id %id4%,,left,,NA

if jumpcheck=1
{
if dify4 > 300
{
gosub, jump4
}
else
{
ControlClick, x%X4% y%Y4%,ahk_id %id4%,,left,,NA
}
}
else
{
ControlClick, x%X4% y%Y4%,ahk_id %id4%,,left,,NA
}
}

return
return




jump:

    hwnd := ControlFromPoint(X, Y, "ahk_id " id2,"", cX, cY)
    PostMessage, 0x201, 0x8 | 0x1, cX & 0xFFFF | (cY & 0xFFFF) << 16,, ahk_id %hwnd%
    PostMessage, 0x202, 0x8      , cX & 0xFFFF | (cY & 0xFFFF) << 16,, ahk_id %hwnd%
return
return

ControlFromPoint(X, Y, WinTitle="", WinText="", ByRef cX="", ByRef cY="", ExcludeTitle="", ExcludeText="")
{
    if !(hwnd := WinExist(WinTitle, WinText, ExcludeTitle, ExcludeText))
        return false

    VarSetCapacity(pt,8)

    VarSetCapacity(wi,60), NumPut(60,wi)
    DllCall("GetWindowInfo","uint",hwnd,"uint",&wi)
    NumPut(X + (w:=NumGet(wi,4,"int")) - (cw:=NumGet(wi,20,"int")), pt,0)
    NumPut(Y + (h:=NumGet(wi,8,"int")) - (ch:=NumGet(wi,24,"int")), pt,4)

    Loop
    {
        child := DllCall("ChildWindowFromPointEx","uint",hwnd,"int64",NumGet(pt,0,"int64"),"uint",0x5)
        if !child or child=hwnd
            break

        DllCall("MapWindowPoints","uint",hwnd,"uint",child,"uint",&pt,"uint",1)
        hwnd := child
    }
    cX := NumGet(pt,0,"int")
    cY := NumGet(pt,4,"int")
    return hwnd
}

return
return

jump3:

    hwnd3 := ControlFromPoint2(X3, Y3, "ahk_id " id3,"", c3X, c3Y)
    PostMessage, 0x201, 0x8 | 0x1, c3X & 0xFFFF | (c3Y & 0xFFFF) << 16,, ahk_id %hwnd3%
    PostMessage, 0x202, 0x8      , c3X & 0xFFFF | (c3Y & 0xFFFF) << 16,, ahk_id %hwnd3%
return
return

ControlFromPoint2(X3, Y3, WinTitle="", WinText="", ByRef c3X="", ByRef c3Y="", ExcludeTitle="", ExcludeText="")
{
    if !(hwnd3 := WinExist(WinTitle, WinText, ExcludeTitle, ExcludeText))
        return false

    VarSetCapacity(pt,8)

    VarSetCapacity(wi,60), NumPut(60,wi)
    DllCall("GetWindowInfo","uint",hwnd3,"uint",&wi)
    NumPut(X3 + (w:=NumGet(wi,4,"int")) - (cw:=NumGet(wi,20,"int")), pt,0)
    NumPut(Y3 + (h:=NumGet(wi,8,"int")) - (ch:=NumGet(wi,24,"int")), pt,4)

    Loop
    {
        child3 := DllCall("ChildWindowFromPointEx","uint",hwnd3,"int64",NumGet(pt,0,"int64"),"uint",0x5)
        if !child3 or child3=hwnd3
            break

        DllCall("MapWindowPoints","uint",hwnd3,"uint",child3,"uint",&pt,"uint",1)
        hwnd3 := child3
    }
    c3X := NumGet(pt,0,"int")
    c3Y := NumGet(pt,4,"int")
    return hwnd3
}

return
return

jump4:

    hwnd4 := ControlFromPoint3(X4, Y4, "ahk_id " id4,"", c4X, c4Y)
    PostMessage, 0x201, 0x8 | 0x1, c4X & 0xFFFF | (c4Y & 0xFFFF) << 16,, ahk_id %hwnd4%
    PostMessage, 0x202, 0x8      , c4X & 0xFFFF | (c4Y & 0xFFFF) << 16,, ahk_id %hwnd4%
return
return

ControlFromPoint3(X4, Y4, WinTitle="", WinText="", ByRef c4X="", ByRef c4Y="", ExcludeTitle="", ExcludeText="")
{
    if !(hwnd4 := WinExist(WinTitle, WinText, ExcludeTitle, ExcludeText))
        return false

    VarSetCapacity(pt,8)

    VarSetCapacity(wi,60), NumPut(60,wi)
    DllCall("GetWindowInfo","uint",hwnd4,"uint",&wi)
    NumPut(X4 + (w:=NumGet(wi,4,"int")) - (cw:=NumGet(wi,20,"int")), pt,0)
    NumPut(Y4 + (h:=NumGet(wi,8,"int")) - (ch:=NumGet(wi,24,"int")), pt,4)

    Loop
    {
        child4 := DllCall("ChildWindowFromPointEx","uint",hwnd4,"int64",NumGet(pt,0,"int64"),"uint",0x5)
        if !child4 or child4=hwnd4
            break

        DllCall("MapWindowPoints","uint",hwnd4,"uint",child3,"uint",&pt,"uint",1)
        hwnd4 := child4
    }
    c4X := NumGet(pt,0,"int")
    c4Y := NumGet(pt,4,"int")
    return hwnd4
}

return
return



^r::reload
^q::pause
10/23/2009 15:52 hecavante#893
@evan

thank you very much, and u even implement x-address, nice.....

10 minutes,,,BAM !!! ... autoclick jail..MWAHAHAHAHAHA.....

thank u again ...
10/26/2009 19:54 Matic^#894
Hey Evan, there is a code like
^a::
send {F1}
return
I have created the interface with smartgui, but don't no how to make that ^a would be variable, it is possible to do it?
10/26/2009 20:29 Evan Lim#895
Matic^@
^a:: is not a variable, its a hotkey (Ctrl + A) that u need to define before hand
so basically, its totally different animal, not really related to GUI also
10/26/2009 21:09 Matic^#896
So there is impossible to make with GUI that you can choose other letter instead A? Like always could change them... i think you understand what i mean
10/26/2009 22:24 Evan Lim#897
Matic^@
it can be done, just a little bit difficult
Code:
Gui, Add, Hotkey, vChosenHotkey
Gui, Add, Button, gOK, OK
Gui, show

return
OK:
Gui Submit 
Hotkey, %ChosenHotkey%, MyLabel
return

MyLabel:
MsgBox, Hotkey
return
10/27/2009 23:14 Matic^#898
Ic, that what i need, i started making something but got error and can't solve it, maybe you could now how to do that [Only registered and activated users can see links. Click Here To Register...]


Here's my code
Code:
Gui, Add, Hotkey, x26 y60 w70 h30 , vone
Gui, Add, Hotkey, x26 y100 w70 h30 , vtwo
Gui, Add, Hotkey, x26 y140 w70 h30 , vthree
Gui, Add, Hotkey, x26 y180 w70 h30 , vfour
Gui, Add, Hotkey, x26 y220 w70 h30 , vfive
Gui, Add, Hotkey, x176 y60 w70 h30 , vsix
Gui, Add, Hotkey, x176 y100 w70 h30 , vseven
Gui, Add, Hotkey, x176 y140 w70 h30 , veight
Gui, Add, Hotkey, x176 y180 w70 h30 , vnine
Gui, Add, Hotkey, x176 y220 w70 h30 , vten
Gui, Add, Text, x96 y60 w30 h30 , F1
Gui, Add, Text, x96 y100 w30 h30 , F2
Gui, Add, Text, x96 y140 w30 h30 , F3
Gui, Add, Text, x96 y180 w30 h30 , F4
Gui, Add, Text, x246 y60 w30 h30 , F6
Gui, Add, Text, x246 y100 w30 h30 , F7
Gui, Add, Text, x246 y140 w30 h30 , F8
Gui, Add, Text, x246 y180 w30 h30 , F9
Gui, Add, Text, x246 y220 w30 h30 , F10
Gui, Add, Text, x96 y220 w30 h30 , F5
Gui, Add, Button, x46 y270 w40 h30 gOK, OK
Gui, Add, ListBox, x156 y280 w120 h30 , Made
Gui, Add, Picture, x36 y0 w200 h50 , D:\Documents and Settings\Mindaugas\Desktop\Untitled-1.jpg
Gui, Show, x131 y91 h333 w299, New GUI Window

Return

[COLOR="Red"]OK:
Gui Submit 
Hotkey, %one%, MyLabel01             maybe somewhere  here?
return[/COLOR]

MyLabel01:
send {F1}
return

GuiClose:
ExitApp
This isnt finished, just on first step i get error
10/28/2009 01:53 Evan Lim#899
Matic^@
delete the , before vone
Code:
Gui, Add, Hotkey, x26 y60 w70 h30 vone
10/28/2009 09:04 Matic^#900
Thnx, it was silly mistake ;) But got another one, then trying to add second hetkey line
Code:
OK:
Gui Submit 
Hotkey, %two%, MyLabel02
return

MyLabel02:
send {F2}
return
i got error
Code:
Text line: OK
Error: Duplicate line
but if i remove OK: , that hotkey didnt work.