Если ваши приложения работают только на платформе Windows, вы можете попробовать использовать .net
объекты.
Метод SendWait
объектов SendKeys
позволяет отправлять практически любую клавишу или комбинацию клавиш в приложение, которое имеет фокус, включая клавиши-модификаторы, такие как Alt kbd>, Shift kbd>, Ctrl kbd> и т. д.
Первое, что нужно сделать, это импортировать библиотеку .net
, тогда полный синтаксис для отправки ключа ENTER kbd> будет:
NET.addAssembly('System.Windows.Forms');
System.Windows.Forms.SendKeys.SendWait('{ENTER}'); %// send the key "ENTER"
Если вы только это делаете как только полный синтаксис в порядке. Если вы планируете широко использовать эту команду, вы можете помочь себе с помощью анонимной вспомогательной функции.
Небольшой пример с блокнотом
%% // import the .NET assembly and define helper function
NET.addAssembly('System.Windows.Forms');
sendkey = @(strkey) System.Windows.Forms.SendKeys.SendWait(strkey) ;
%% // prepare a few things to send to the notepad
str1 = 'Hello World' ;
str2 = 'OMG ... my notepad is alive' ;
file2save = [pwd '\SelfSaveTest.txt'] ;
if exist(file2save,'file')==2 ; delete(file2save) ; end %// this is just in case you run the test multiple times.
%% // go for it
%// write a few things, save the file then close it.
system('notepad &') ; %// Start notepad, without matlab waiting for the return value
sendkey(str1) %// send a full string to the notepad
sendkey('{ENTER}'); %// send the {ENTER} key
sendkey(str2) %// send another full string to the notepad
sendkey('{! 3}'); %// note how you can REPEAT a key send instruction
sendkey('%(FA)'); %// Send key combination to open the "save as..." dialog
pause(1) %// little pause to make sure your hard drive is ready before continuing
sendkey(file2save); %// Send the name (full path) of the file to save to the dialog
sendkey('{ENTER}'); %// validate
pause(3) %// just wait a bit so you can see you file is now saved (check the titlebar of the notepad)
sendkey('%(FX)'); %// Bye bye ... close the Notepad
Как объяснено в документации Microsoft , класс SendKeys
может иногда иметь проблемы с синхронизацией, поэтому, если вы хотите сделать сложный манипуляциями (например, Tab kbd> несколько раз, чтобы изменить кнопку, которую вы действительно хотите нажать), вам может потребоваться ввести pause
в вызовах Matlab для SendKeys
.
Попробуйте без первого, но не забывайте, что вы управляете процессом из другого без какой-либо синхронизации между ними, поэтому для синхронизации всего, что может потребоваться немного проб и ошибок, прежде чем вы сделаете это правильно, по крайней мере, для сложных последовательностей (просто нужно быть простым).
Например, в моем случае выше я запускаю все свои данные с внешнего жесткого диска с функцией ECO, которая переводит их в режим ожидания, поэтому, когда я вызываю диалог «сохранить как ...», это требует времени для его отображения, потому что HDD должен проснуться. Если бы я не представил pause(1)
, иногда путь к файлу был бы неполным (первая часть пути была отправлена до того, как диалог был в фокусе) .
Также не забывайте символ &
при выполнении внешней программы. Все благодарности Луису Мендо за его освещение. (Я склонен забывать, насколько это важно, потому что я использую его по умолчанию. Я опускаю его только в том случае, если мне приходится специально ждать возвращаемого значения из программы, в противном случае я позволяю ему работать самостоятельно )
Специальные символы имеют специальный код. Вот некоторые из них:
Shift +
Control (Ctrl) ^
Alt %
Tab {TAB}
Backspace {BACKSPACE}, {BS}, or {BKSP}
Validation {ENTER} or ~ (a tilde)
Ins Or Insert {INSERT} or {INS}
Delete {DELETE} or {DEL}
Text Navigation {HOME} {END} {PGDN} {PGUP}
Arrow Keys {UP} {RIGHT} {DOWN} {LEFT}
Escape {ESC}
Function Keys {F1} ... {F16}
Print Screen {PRTSC}
Break {BREAK}
Полный список от Microsoft можно найти здесь
MixColumns, вероятно, самая сложная часть AES, но мне было интересно разобраться с математикой и посмотреть, откуда взялись числа. Я подробно вычислил это в своем сообщении в блоге « Руководство по расширенному стандарту шифрования (AES) ». В частности, посмотрите на акт 4, сцену 16. Я также положил его обратную сторону на простыню в следующей сцене (17). Если у вас есть дополнительные вопросы,
The multiplication in MixColumns is indeed reversible, and it is not modulo 256. samiam.org/mix-column.html has a good explanation of the MixColumns step, and samiam.org/galois.html does an excellent job of explaining how to do arithmetic in AES's finite field.