2015-08-29 1 views
0

Я пытался создать сценарий, который отображает окна сообщений, связанные с выходом из другого настраиваемого окна сообщений, с более чем тремя параметрами.AHK if/else вывода из пользовательского окна сообщений Функция

Пользовательские функции берутся образуют эту нить http://www.autohotkey.com/board/topic/29570-function-custom-msgbox-custom-buttons/page-2

Я попробовал оба CMsgbox и MsgBoxV2 функции, работает в одной и той же проблемы. Сообщение "IT WORKED!" с if(condition) всегда будет отображаться вне зависимости от того, нажата ли какая-либо из опций Sym|&Go|&C, и сообщение "worked" никогда не появится независимо от фактического нажатия C. Другими словами, нет никакой специфики или чувствительности к переменным испытаниям.

!o:: 
var := MsgBoxV2("Question11","Hi, what's up??","Sym|Go|C","24") 
Msgbox 4,, You Pressed %var% 

if (%var% = C) 
{ 
    Msgbox 4,, IT WORKED! 
} 

IfEqual, %var%,C 
{ 
    Msgbox 4,, worked 
} 
return 

!e:: 
var := CMsgbox("s", "d", "*&Sym|&Go|&C","",1) 
Msgbox 4,, You Pressed %var% 
if (%var% = C) 
{ 
    Msgbox 4,, IT WORKED! 
} 

IfEqual, %var%,C 
{ 
    Msgbox 4,, worked 
} 
return 

Я не знаю, если это потому, что я неправильно понял если/другое тестирование в АКА, или если выход из этих пользовательских функций не может быть проверен, или оба. Одним из решений было бы выяснить, какой тип переменной% var% есть, но я также не смог найти способ понять это.

Спасибо за чтение и надеюсь, что вы, ребята, можете помочь.

здесь пользовательские функции сообщения для тестирования.

MsgBoxV2(Title="",Text="",Buttons="",IconPath="",Timeout="",Font="",Schriftart="Arial",Colors="||",WindowStyles="",GuiNr = "") 
{ 
Static Stat2,Stat1 
Col1:="0xFFFFFF" ,Col2:="0x000000",Col3:="0x000000", Color1:="", Color2:="", Color3:="" 
Loop, Parse, Colors,`| 
Color%A_Index% := (A_Loopfield = "") ? Col%A_Index% : A_Loopfield 
Loop 3 
Color%A_Index% := (Color%A_Index% = "") ? Col%A_Index% : Color%A_Index% 
if instr(WindowStyles,"+altsubmit") 
{ 
AltSub := "1" 
Stringreplace,WindowStyles,WindowStyles,`+altsubmit 
} 
Gui, Color, %Color1%,%Color1% 
Gui, Font, s9 
Gui, Font, %Font%, %Schriftart% 
X := 20 ,Y := 20 
ifexist, %IconPath% 
{ 
Gui, Add, Picture, x20 y20 w32 h32, %IconPath% 
X := 70 ,Y := 30 
} else 
if IconPath is integer 
{ 
Gui, Add, Picture, x20 y20 icon%IconPath% w32 h32, %A_WinDir%\system32\shell32.dll 
X := 70 ,Y := 30 
} 
Gui, Add, Text, x%X% y%Y% c%Color2% vStat2, %Text% 
GuicontrolGet, Stat2, Pos 
X2 = 10 
Y2 := (Stat2Y + Stat2H < 52) ? 82 : Stat2Y + Stat2H + 30 
HMax = 0 
Gui, Add, Text, vStat1 +border -background 
Loop, Parse, Buttons,|,`| 
{ 
Gui, Add, Button, x%X2% w100 Y%Y2% gExButton , %A_Loopfield% 
ButT%A_Index% := A_Loopfield 
Guicontrolget, Button%A_Index%,Pos 
if (HMax < Button%A_Index%H) 
HMax := Button%A_Index%H 
ABut := A_Index 
X2 += 110 
} 
Loop %ABut% 
Guicontrol, Move, Button%A_Index%,h%HMax% 
Gui, %WindowStyles% 
Gui, Show, Autosize Center,%Title% 
Guicontrol, Move, Stat1, % "X-1 Y" Y2 - 10 " W" 1400 " h" 41 + HMax 
Guicontrol, -Background +hidden, Stat1 
Guicontrol, show, Stat1 
Gui, +LastFound 
WinGet, G_id 
if Timeout != 
if Timeout is integer 
settimer, Timeout, %Timeout% 
Winwait, ahk_id %G_id% 
retval = 0 
while winexist("ahk_id " G_id) 
sleep 100 
if !AltSub 
return ButT%retval% 
else 
return retval 
Timeout: 
if Timeout = 
return 
GuiClose: 
Gui, destroy 
return 
ExButton: 
MouseGetPos,,,, Control 
Stringreplace,retval,Control,Button 
Gui, destroy 
return 
} 


;------------------------------------------------------------------------------- 
; Custom Msgbox 
; Filename: cmsgbox.ahk 
; Author : Danny Ben Shitrit (aka Icarus) 
;------------------------------------------------------------------------------- 
; Copy this script or include it in your script (without the tester on top). 
; 
; Usage: 
; Answer := CMsgBox(title, text, buttons, icon="", owner=0) 
; Where: 
;  title = The title of the message box. 
;  text = The text to display. 
;  buttons = Pipe-separated list of buttons. Putting an asterisk in front of 
;    a button will make it the default. 
;  icon = If blank, we will use an info icon. 
;    If a number, we will take this icon from Shell32.dll 
;    If a letter ("I", "E" or "Q") we will use some predefined icons 
;    from Shell32.dll (Info, Error or Question). 
;  owner = If 0, this will be a standalone dialog. If you want this dialog 
;    to be owned by another GUI, place its number here. 
; 
;------------------------------------------------------------------------------- 

CMsgBox(title, text, buttons, icon="", owner=0) { 
    Global _CMsg_Result 

    GuiID := 9  ; If you change, also change the subroutines below 

    StringSplit Button, buttons, | 

    If(owner <> 0) { 
    Gui %owner%:+Disabled 
    Gui %GuiID%:+Owner%owner% 
    } 

    Gui %GuiID%:+Toolwindow +AlwaysOnTop 

    MyIcon := (icon = "I") or (icon = "") ? 222 : icon = "Q" ? 24 : icon = "E" ? 110 : icon 

    Gui %GuiID%:Add, Picture, Icon%MyIcon% , Shell32.dll 
    Gui %GuiID%:Add, Text, x+12 yp w180 r8 section , %text% 

    Loop %Button0% 
    Gui %GuiID%:Add, Button, % (A_Index=1 ? "x+12 ys " : "xp y+3 ") . (InStr(Button%A_Index%, "*") ? "Default " : " ") . "w100 gCMsgButton", % RegExReplace(Button%A_Index%, "\*") 

    Gui %GuiID%:Show,,%title% 

    Loop 
    If(_CMsg_Result) 
     Break 

    If(owner <> 0) 
    Gui %owner%:-Disabled 

    Gui %GuiID%:Destroy 
    Result := _CMsg_Result 
    _CMsg_Result := "" 
    Return Result 
} 

9GuiEscape: 
9GuiClose: 
    _CMsg_Result := "Close" 
Return 

CMsgButton: 
    StringReplace _CMsg_Result, A_GuiControl, &,, All 
Return 

ответ

0

Ответ лежит в синтаксисе вашего кода. Я настоятельно рекомендую вам полностью прочитать Tutorial в Документах! Это действительно хорошо написано.

Что сразу же появилось для меня, так это то, что ваши переменные в ваших выражениях If окружены процентами, что неверно.

Here is a link to the section in the Tutorial that you need to read in order to fix your code.

Попробуйте это:

!o:: 
var := MsgBoxV2("Question11","Hi, what's up??","Sym|Go|C","24") 
Msgbox 4,, You Pressed %var% 

if (var = "C") 
{ 
    Msgbox 4,, IT WORKED! 
} 

!e:: 
var := CMsgbox("s", "d", "*&Sym|&Go|&C","",1) 
Msgbox 4,, You Pressed %var% 

If (var = "C") 
{ 
    Msgbox 4,, worked 
} 
return 

Команда IfEqual в значительной степени устарела и в то время как она по-прежнему включена в последних версиях, это в основном плохая форма использовать, так как выражение If гораздо легче читать , Также обычный текст, исключая числа в выражении, должен быть окружен кавычками. Надеюсь это поможет.