autohotkey не может читать переменные A_hour - PullRequest
0 голосов
/ 19 апреля 2020

Это мой первый скрипт, я хочу, чтобы этот скрипт брал переменную из gui, затем он будет отправлять CTRL + E в конкретное c windows приложение, основанное на определенном времени переменной времени 1 и времени 2

код работает только до mytimer: (строка 45), после этого, если оператор не работает, не показывать msgbox, в чем проблема?

спасибо за помощь.

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

#SingleInstance,Force
;Gui Layout
;----------------------
hour:="00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|"
minute:="00||01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|"
SetTitleMatchMode,  2
SetTitleMatchMode, Fast
;Gui,Add,Text, x10, Timer control for toggle MT4 Auto Trading

Gui,Add,Text, x10, Insert your MT4 account ID :
Gui,Add,Edit, x+10 w100 vmtid
Gui,Add,Text, x10, Choose what time to toggle Auto Trading [on/off]
Gui,Add,Text, x10, Time 1 :
Gui,Add,Text, x10, Hour
Gui,Add,Text, x+50, Minutes 
Gui,Add,DropDownList, x10 w50 r10 vh1,% "16||"hour
Gui,Add,DropDownList, x+10 w50 r10 vm1,% minute

Gui,Add,Text, x10 y+10, Time 2 :
Gui,Add,Text, x10, Hour
Gui,Add,Text, x+50, Minutes 
Gui,Add,DropDownList, x10 w50 r10 vh2,% "22||"hour
Gui,Add,DropDownList, x+10 w50 r10 vm2,% minute

Gui,Add,Button, x10 y+20 w100 h50 gactive, Activate !

Gui, +AlwaysOnTop
Gui, Show, x800 y100 w300 h300, MT4 Auto Trading Timer
return

active:
Gui,Submit, NoHide
    ;MsgBox, Starting, Running Script...
#Persistent
SetTimer, mytimer, 60000
return

mytimer:
Gui, Submit, NoHide
;MsgBox, %h1%:%m1% %mtid%  ;<---only until this is working
if (A_Hour = %h1% && A_Min = %m1%)  ;<from this its not working
{

    MsgBox, wow, it h1 show
    WinActivate, %mtid%
    WinWaitActive, %mtid% 
    Send, ^e
}
if (A_Hour = %h2% && A_Min = %m2%)
{

    ;MsgBox, wow2, it h2
    WinActivate, %mtid% 
    WinWaitActive, %mtid% 
    Send, ^e
}
return


^x::ExitApp

1 Ответ

1 голос
/ 19 апреля 2020

Это распространенная ошибка использования устаревшего синтаксиса , где должен использоваться современный, лучший, синтаксис выражения .

Внутри выражения, которое вы когда вы находитесь внутри ( ), вы не используете устаревшую ссылку на переменные (заключая их в %%). Вместо этого вы просто вводите имя переменной.
Таким образом, ваши операторы if должны выглядеть следующим образом:
if (A_Hour = h1 && A_Min = m1)

Что вы делали раньше и что делает другой ответ (перенос переменные в %% в выражении выражения), в значительной степени ссылаются на указатель на переменную.
Но когда указатель не существует, конечный результат просто nothing.
(%A_Hour% = %h1% && %A_Min% = %m1%)
оценивается как
("" = "" && "" = "")
, что всегда верно (при условии, что указатели не существуют)
вероятно, плохое объяснение, это трудно объяснить, но суть в том, что никогда не заключайте в свои переменные внутри %% в выражении.

В целом, я бы рекомендовал избавиться от устаревшего синтаксиса. Сейчас уже не 2008 год.
Страница документации, на которую я ссылался дважды выше, является хорошим справочным материалом для начала понимания различий.

...