Tips & Tricks -- команда Keys

Те, кто ей начинают пользоваться, уже не в силах остановиться! Она может все. Или почти все!

Сообщение Reuben » Ср май 14, 2003 6:13 pm

Как известно, команда keys эмулирует нажатия на клавиши, не обращая внимания на кодировку. Так что если вы посылаете в окно "Открыть" что-нибудь вроде c:\wincmd\utils\, а у вас включена русская кодировка, то результат будет не тот, что вы ожидали. Можно пользоваться clip-плагином, но это тоже часто бывает ненадежно.( PowerPro не всегда удается изменить, клипборд) . Выход состоит в том, чтобы посылать не буквы, а их номера.
Объясняющий пример:
Код: выделить все

charord=" !'"#$%'&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^A`abcdefghijklmnopqrstuvwxyz{|}~"
notepad
wait 2
for (char=1;char le length(charord);char=char+1)
ord=char+31
keys {to "=notepad}{&(ord)}

endfor


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

(!!!! Важно ! Предполагается, что в Setup/Advansed/Characters отмечена галочка на use ' for escapes !!!)
<span style='color:purple'>
Ugly girl is better than nothing
Nothing is better than pretty girl
</span>
Reuben
Подполковник
 
Сообщений: 532
Зарегистрирован: Ср дек 04, 2002 8:59 am
Откуда: Jerusalem
Пункты репутации: 0

Сообщение Gregory » Вс май 25, 2003 9:35 am

Предлагаю такой вариант программы:

Код: выделить все
;Аргумент - набор символов, который надо послать, можно посылать нажатия клавиш
;вроде {enter} и указывать окно
local charord, char, j, i, string
charord=" !'"#$%'&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^A`abcdefghijklmnopqrstuvwxyz{|}~"
for (i=1; i le length(arg(1)); i=i+1)
  char=select(arg(1),i,i)
  if (char=="{") Do
   char=remove(arg(1),i)
     j=select(arg(1),i,i+index(char,"}"))
     i=i+index(char,"}")
     if (j != "{")
        string=string ++ j
**********************************
  Else
     j=index(charord,char)+31
     if ((char le "z") and (char ge "a") and (replacechars(char, "abcdefghijklmnopqrstuvwxyz$") eq "$"))
        j=j+32
     string = string ++ "{" ++ &(j)++ "}"
  endif
endfor
*Keys &(string)


Ее в большинстве случаев можно использовать вместо *Keys.

PS Замечен глюк - символ [ не печатается ни в какую.
Последний раз редактировалось Gregory Ср май 28, 2003 10:20 am, всего редактировалось 1 раз.
Gregory
Капитан
 
Сообщений: 156
Зарегистрирован: Пн мар 03, 2003 7:28 pm
Откуда: Киев
Пункты репутации: 0

Сообщение Reuben » Вс май 25, 2003 12:49 pm

Ага, клево! чую я, скоро мы всю латиницу хотя бы в keys добьем-таки
<span style='color:purple'>
Ugly girl is better than nothing
Nothing is better than pretty girl
</span>
Reuben
Подполковник
 
Сообщений: 532
Зарегистрирован: Ср дек 04, 2002 8:59 am
Откуда: Jerusalem
Пункты репутации: 0

Сообщение Gregory » Ср май 28, 2003 10:24 am

Поскольку у меня *Keys {91} символ [ не печатает, то
я вставил в скрипт (там где отмечено) такую команду

Код: выделить все
elseif (char=="[")
                string = string ++"{alt}{pad0}{pad9}{pad1}{alt}"


Теперь [ в большинстве случаев печатается <!--emo&:)-->Изображение<!--endemo-->
Последний раз редактировалось Gregory Сб май 31, 2003 5:32 am, всего редактировалось 1 раз.
Gregory
Капитан
 
Сообщений: 156
Зарегистрирован: Пн мар 03, 2003 7:28 pm
Откуда: Киев
Пункты репутации: 0

Сообщение Reuben » Ср май 28, 2003 11:29 am

М-да ... а Numlock не беспокоит ...<!--emo&:(-->Изображение<!--endemo-->
<span style='color:purple'>
Ugly girl is better than nothing
Nothing is better than pretty girl
</span>
Reuben
Подполковник
 
Сообщений: 532
Зарегистрирован: Ср дек 04, 2002 8:59 am
Откуда: Jerusalem
Пункты репутации: 0

Сообщение Gregory » Чт май 29, 2003 5:43 am

В смысле? Numlock не беспокоит, все нормально работает как с включенным Numlock так и выключенным.
Gregory
Капитан
 
Сообщений: 156
Зарегистрирован: Пн мар 03, 2003 7:28 pm
Откуда: Киев
Пункты репутации: 0

Сообщение Reuben » Чт май 29, 2003 8:49 am

У меня просто Alt+номер символа работает в Notrpad вне завиимости от состояния NumLock, а в ТС только с выключенным NumLock, почему я и спрашиваю. В любом случае, я послал баг-репорт, может Брюс это и починит
<span style='color:purple'>
Ugly girl is better than nothing
Nothing is better than pretty girl
</span>
Reuben
Подполковник
 
Сообщений: 532
Зарегистрирован: Ср дек 04, 2002 8:59 am
Откуда: Jerusalem
Пункты репутации: 0

Сообщение XLSoft » Чт май 29, 2003 10:14 am

Странно как-то у меня скрипт Gregory работает. В разных редакторах по-разному, да и в одних и тех же то печатает нужный символ, то безликий квадратец. <!--emo&:)-->Изображение<!--endemo-->
<a href='http://xlsoft.net.ru/' target='_blank'>XLSoft</a> - оффлайн-каталог лучших программ и сайтов
XLSoft
Капитан
 
Сообщений: 158
Зарегистрирован: Чт мар 28, 2002 8:39 pm
Откуда: Киев
Пункты репутации: 0

Сообщение Gregory » Сб май 31, 2003 8:05 am

Еще один вариант программы:

Код: выделить все
local charord, char, j, i, string
charord=" !'"#$%'&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^A`abcdefghijklmnopqrstuvwxyz{|}~"
for (i=1; i le length(arg(1)); i=i+1)
  char=select(arg(1),i,i)
  if (char=="{") Do
   char=remove(arg(1),i)
     j=select(arg(1),i,i+index(char,"}"))
     i=i+index(char,"}")
     if (j != "{")
        if (j=="{brace}" or j=="{br}" or j=="{{}") Do
           string= string ++ "{123}"
        Elseif (j=="{^}" or j=="{caret}" or j=="{ca}")
           string= string ++ "{94}"
        elseif (j=="{quote}" or j=="{qu}")
           string= string ++ "{34}"
        elseif (j=="{question}" or j=="{qn}")
           string= string ++ "{63}"
        elseif (j=="{greater}" or j=="{gt}")
           string= string ++ "{62}"
        elseif (j=="{less}" or j=="{lt}")
           string= string ++ "{60}"
        else
           string = string ++ j
 Endif
  elseif (char=="[")
     string=string++"{alt}{pad0}{pad9}{pad1}{alt}"
  elseif (char=="%" or char=="^" or char=="+")
     string=string++char
  Else
     j=index(charord,char)+31
     if ((char le "z") and (char ge "a") and (replacechars(char, "abcdefghijklmnopqrstuvwxyz$") eq "$"))
        j=j+32
     string = string ++"{"++j++"}"
  endif
endfor
*Keys &(string)




2XLSoft

А какие редакторы ты имеешь ввиду? У меня все нормально работает в EditPlus, NotePad, WinEdit, WinWord (другие я не использую).

Кстати в TC тоже глюков не замечено.
Последний раз редактировалось Gregory Сб май 31, 2003 8:07 am, всего редактировалось 1 раз.
Gregory
Капитан
 
Сообщений: 156
Зарегистрирован: Пн мар 03, 2003 7:28 pm
Откуда: Киев
Пункты репутации: 0

Сообщение XLSoft » Вт июн 03, 2003 12:53 pm

2Gregory
В ЭдитПаде делаю .keys("i") - выводит ¦
<a href='http://xlsoft.net.ru/' target='_blank'>XLSoft</a> - оффлайн-каталог лучших программ и сайтов
XLSoft
Капитан
 
Сообщений: 158
Зарегистрирован: Чт мар 28, 2002 8:39 pm
Откуда: Киев
Пункты репутации: 0

Сообщение Gregory » Сб июн 07, 2003 6:14 am

Поставил EditPad, у меня .keys("i") печатает именно i.
Последний раз редактировалось Gregory Сб июн 07, 2003 6:15 am, всего редактировалось 1 раз.
Gregory
Капитан
 
Сообщений: 156
Зарегистрирован: Пн мар 03, 2003 7:28 pm
Откуда: Киев
Пункты репутации: 0

Сообщение XLSoft » Сб июн 07, 2003 8:47 am

Ой, блин, какой ЭдитПад! Я конечно ЭдитПлюс имел в виду. Сорри.
<a href='http://xlsoft.net.ru/' target='_blank'>XLSoft</a> - оффлайн-каталог лучших программ и сайтов
XLSoft
Капитан
 
Сообщений: 158
Зарегистрирован: Чт мар 28, 2002 8:39 pm
Откуда: Киев
Пункты репутации: 0

Сообщение Gregory » Сб июн 07, 2003 9:14 am

С ЭдитПлюс у меня никаких проблем нет.
Правда ¦ у меня в Коммандере появляется, если я посылаю сочетания вроде Alt+Left или Alt+Right.
Gregory
Капитан
 
Сообщений: 156
Зарегистрирован: Пн мар 03, 2003 7:28 pm
Откуда: Киев
Пункты репутации: 0


Вернуться в Windows PowerPro

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

cron