AutoIt обновить ввод с помощью строки MsgBox для копирования / вставки

1801
ICE

В последнее время я делал много случайных сценариев, ни один из которых действительно ни для чего не полезен, но они помогают мне понимать различные вещи, и я использую их для справки довольно часто ... в любом случае, один из вариантов кнопки контура для одного из моих сценариев это всплывающий генератор msgbox, который генерирует код, который я могу просто скопировать и вставить (в скрипте много ящиков с сообщениями),
но у меня возникли проблемы с отображением переменной во входных данных '$ codebox':

$code = "MsgBox(0, $title, $message)"  GUICtrlSetData($codebox, $code) 

это отображает:

"MsgBox(0, $title, $message)" 

а не данные, хранящиеся внутри переменной.

Могу ли я содержать переменную внутри такой переменной? Я не совсем уверен, как еще так ... У кого-нибудь есть возможный обходной путь, на который я мог бы взглянуть? Я искал вокруг, но я пришел пустым.

PS: обновленный скрипт можно найти здесь

1
Пробовали без "" вокруг MsgBox? (извините, я не проверил это, просто беглый взгляд на код) Я считаю, что "" заставляет $ code думать, что это просто строка, а не код. Darius 10 лет назад 1
Хорошо, это обошло ошибку, но после этого окно с сообщением поднимается и возвращает 1 в кодовое поле ..? ICE 10 лет назад 0
Я все еще изучаю скрипт AutoIT, но заметил, что MsgBox возвращает значение после успешного / неудачного запуска, поэтому и код возврата http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm. Darius 10 лет назад 1

1 ответ на вопрос

2
Darius

Возможное решение: $ code = MsgBox (0, $ title, $ message)

Но это вызовет и покажет MessageBox в этой точке (не в GUICtrlSetData).

Когда вы нажимаете «ok» в MsgBox, он возвращает значение вашего действия по этой ссылке: http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm

Следовательно, $ code возвращает 1 - что указывает на то, что вы нажали OK.

РЕДАКТИРОВАТЬ: (Теперь, когда я понимаю, что ICE хотел получить) Используйте этот код:

$code = 'MsgBox(0, ' & '"' & $title & '"' & ', ' & '"' & $message & '"' & ')' 

Хорошо, прежде чем вы (и другие) застрелите меня с помощью WTF и всего использования "и", позвольте мне объяснить:

Когда вы напечатаете $ code, он сгенерирует:

MsgBox(0, "test", "messages and messages and messages") 

Этот код, как хотелось бы ICE, можно скопировать и сразу использовать в коде ICE. Отсюда и необходимость использовать одинарные кавычки (') для блокировки текста, а двойные кавычки (") как обычный текст - для генерации приведенного выше кода.

Если я не поставил комбинацию одинарных и двойных кавычек, она сгенерирует (что я выяснил после тестирования):

MsgBox(0, test, messages and messages and messages) 

И этот код выше не будет работать после простого копирования и вставки в AutoIt. Вам нужно добавить эти кавычки (двойные или одинарные).

AutoIT работает с одинарными или двойными кавычками в качестве текстового маркера, поэтому выбирайте тот, который вам удобен. Если вам нужно экранировать двойную кавычку как текст, используйте одинарную кавычку в качестве текстового маркера и наоборот.

Надеюсь это поможет.

Спасибо за помощь, Дарий. Я пытаюсь получить строку состояния, чтобы показать команду для MsgBox, с указанным заголовком и сообщением, включенным в кодовое поле, или, возможно, включить функцию кнопки, чтобы поместить команду MsgBox в сценарий, поэтому мне не нужно вводить Команда MsgBox. Моя конечная цель - создать тип скриптового компоновщика или, возможно, даже текстового редактора. Я работаю над одним куском за раз, хотя ICE 10 лет назад 0
@ICE Извините, если я неправильно понял ваше намерение ... если вы хотите, чтобы эта "строка состояния" показывала команду для MsgBox, тогда ваш текущий код ($ code = "MsgBox ....." правильный, так как он показывает, что именно будет показать - но так как у вас есть "", MsgBox не отображается, так как он обрабатывается как текст. Если вы хотите, чтобы и MsgBox появлялись, и код появлялись, вам может потребоваться $ code2 без "" и $ code1 с "", чтобы сохранить текст кода. Или я что-то неправильно понимаю? Darius 10 лет назад 0
Я хотел бы, чтобы полная команда msgbox отображалась в кодовом поле, без (если возможно) фактического вывода окна сообщения. Что именно вы подразумеваете под $ code2? Должен ли я пытаться перехватить команду в другой переменной? Когда я удаляю кавычки, он возвращает 1 вместо команды. Могу ли я сделать это, избегая всплывающего сообщения? Извините, если это не было ясно, мой разум сейчас как бы повсюду: P ICE 10 лет назад 0
Хорошо, редактирование сделало именно то, что я искал. У меня обычно проблемы с кавычками, теперь я понимаю почему. Еще раз спасибо, Дарий, ты мне очень помог! ICE 10 лет назад 0