Можно ли вставить в элемент управления редактированием в маске в установщике Windows?

Начнем с того, что мне нужно в конечном результате: клиент может вставить ключ продукта в правильном формате из буфера обмена в поле ввода во время установки.

То, где я сейчас: Мы используем WiX для создания нашего MSI. В настоящее время мы используем элемент управления редактированием в маске, который отлично работает. Проверка ключа продукта уже выполняется с помощью пользовательского действия при нажатии кнопки «Далее». Проверка ключа продукта должна оставаться прежней, проблема заключается только в методе ввода.

Я провел последний день, исследуя возможные способы достижения этого, и у меня есть несколько идей, хотя я не уверен, что какая-либо из них сработает. Я уже исключил попытку инициировать настраиваемое действие при вставке, потому что знаю, что у MSI нет возможности зафиксировать это событие.

Итак, мои мысли - кнопка «вставить из буфера обмена». Это вызовет настраиваемое действие, которое захватит элемент буфера обмена, решит, выглядит ли он как ключ продукта (это будет самая простая часть), а затем каким-то образом вставит его в элемент управления редактированием. Обратите внимание, как я говорю элемент управления редактированием, я не уверен, что это вообще возможно с замаскированным элементом управления редактированием, и я не уверен, что он даже будет работать со стандартным элементом управления редактированием. У меня уже есть пользовательское действие, которое позволяет проверить, просматривался ли текст лицензии, и это достигается путем нахождения окна и окна класса «richedit», в котором находится лицензия, и получения позиции прокрутки. Я думал, что этот метод может позволить мне установить элемент управления редактированием для моей клавиши буфера обмена, но опять же, я не уверен, что это сработает.

Я уже читал о возможности написания собственного UI-контроллера. Я знаю, что это большая задача, но на данном этапе ничего не исключено, я просто не знаю, с чего начать.

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

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


person William Moore    schedule 03.10.2012    source источник
comment
Большинство людей просто используют стандартный элемент управления редактированием и позволяют своему ЦС выполнять проверку. Вы правы, элемент управления MaskedEdit не может с этим справиться. Концепция из буфера обмена интересна. Я никогда не пытался это сделать, но, может быть, я найду немного свободного времени, чтобы попробовать.   -  person Christopher Painter    schedule 03.10.2012


Ответы (1)


Мне удалось сделать это с помощью опции «вставить из буфера обмена», о которой я изначально думал. Я добавил в свою форму кнопку, которая вызывает настраиваемое действие, которое запрашивает буфер обмена и, в случае успеха, устанавливает два свойства в программе установки. Один содержит отформатированный ключ продукта, а другой является базовым свойством, чтобы определить, была ли операция буфера обмена успешной или нет. Маскированный элемент управления редактирования связан со свойством ключа продукта, и при обновлении элемента управления

<Publish Event="Reset" Value="0" Order="3">ClipboardSuccess = 1</Publish>

ключ продукта заполняется в скрытом элементе управления редактирования.

person William Moore    schedule 08.10.2012
comment
Я пытался сделать это точно так же, но у меня это не работает: элемент управления MaskedEdit остается пустым. У меня есть общедоступное свойство, представляющее лицензионный ключ, и обычное свойство для использования в событии публикации. Я добавил строку публикации, указанную здесь, как показано. Я использую Wix 3.8. Файл журнала показывает вызываемый ЦС и два заданных свойства, одно из которых имеет значение из буфера обмена, а другое — 1. Но элемент управления MaskedEdit никогда не меняется. Если я сделаю шаг назад, а затем вперед в установщике, элемент управления будет заполнен новым значением свойства. - person Mozzis; 30.04.2014
comment
У меня больше нет доступа к коду, который я написал для этого, поэтому я не могу быть уверен, что происходит, я боюсь. Мои первые мысли заключаются в том, что это может быть как-то связано с форматированием значения, которое вы устанавливаете для элемента управления редактированием в маске? - person William Moore; 09.05.2014