<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Александр Мусин</title><subtitle>Небольшие заметки об автоматизации повседневной работы на компьютере</subtitle><author><name>Александр Мусин</name></author><id>https://teletype.in/atom/ttach</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/ttach?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@ttach?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ttach"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/ttach?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-05T16:52:41.891Z</updated><entry><id>ttach:anbur-android</id><link rel="alternate" type="text/html" href="https://teletype.in/@ttach/anbur-android?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ttach"></link><title>Анбур для андроид</title><published>2025-06-09T16:45:16.896Z</published><updated>2025-06-26T16:16:51.933Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/e4/0f/e40f8376-1419-45f7-a9e9-d7b69dd4e915.png"></media:thumbnail><category term="vba" label="VBA"></category><tt:hashtag>vba</tt:hashtag><tt:hashtag>android</tt:hashtag><tt:hashtag>anbur</tt:hashtag><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/d6/49/d6496903-547a-4d6e-a874-0f64e085b769.png&quot;&gt;Установите клавиатуру Jbak2 Keyboard. С помощью Excel преобразуйте русскую раскладку клавиатуры в древнепермскую</summary><content type="html">
  &lt;section&gt;
    &lt;p id=&quot;plyu&quot;&gt;&lt;a href=&quot;/@ttach/in_nuce&quot;&gt;🌰&lt;/a&gt; Установите клавиатуру &lt;a href=&quot;https://jbak2.ucoz.net/load/1&quot; target=&quot;_blank&quot;&gt;Jbak2 Keyboard&lt;/a&gt;. С помощью &lt;a href=&quot;https://gitflic.ru/project/yabalak/anbur-android&quot; target=&quot;_blank&quot;&gt;Excel&lt;/a&gt; преобразуйте русскую раскладку клавиатуры в древнепермскую. Также можно скачать &lt;a href=&quot;https://gitflic.ru/project/yabalak/anbur-android&quot; target=&quot;_blank&quot;&gt;готовую раскладку&lt;/a&gt;.&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;hX1z&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d6/49/d6496903-547a-4d6e-a874-0f64e085b769.png&quot; width=&quot;1600&quot; /&gt;
    &lt;figcaption&gt;Древнепермская раскладка в ландшафтном режиме&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;Ml8H&quot;&gt;Введение&lt;/h2&gt;
  &lt;p id=&quot;1FKb&quot;&gt;В Android Nougat (2016 год) появилась поддержка Unicode 7.0.&lt;br /&gt;&lt;a href=&quot;https://teletype.in/@ttach/anbur&quot; target=&quot;_blank&quot;&gt;В отличие от Windows&lt;/a&gt; в Android предустановлены шрифты Noto, включающие, в том числе, символы древнепермской азбуки (анбура). В данной статье рассмотрим метод ввода символов анбура на андроид-устройствах.&lt;/p&gt;
  &lt;h2 id=&quot;yDl6&quot;&gt;Существующие решения&lt;/h2&gt;
  &lt;p id=&quot;08tj&quot;&gt;В google play представлено приложение &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.majbyr.keyboard&amp;hl=ru&quot; target=&quot;_blank&quot;&gt;Anbur keyboard&lt;/a&gt;, позволяющее набирать символы анбура.&lt;/p&gt;
  &lt;figure id=&quot;cd3i&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/ba/fe/bafe65c9-4c7f-4fbe-917c-2ff378720653.png&quot; width=&quot;800&quot; /&gt;
    &lt;figcaption&gt;Приложение Anbur keyboard&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;zGqP&quot;&gt;В этой клавиатуре буквы расположены несколько странным образом, не хватает букв Я,  Ю, джой, дзита, щой. Для переключения на русскую/английскую раскладку требуется менять способ ввода нажатием на ⌨.&lt;/p&gt;
  &lt;h2 id=&quot;GJ2B&quot;&gt;Предлагаемое решение&lt;/h2&gt;
  &lt;p id=&quot;eQ7N&quot;&gt;Обсуждаемый метод предполагает использование приложения Jbak2 Keyboard для ввода символов. Установить приложение можно из следующих источников:&lt;/p&gt;
  &lt;ul id=&quot;7zjR&quot;&gt;
    &lt;li id=&quot;RzAr&quot;&gt;Сайт программы &lt;a href=&quot;https://jbak2.ucoz.net/load/1&quot; target=&quot;_blank&quot;&gt;https://jbak2.ucoz.net/load/1&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;veoi&quot;&gt;Телеграм-канал &lt;a href=&quot;https://t.me/Jbak2&quot; target=&quot;_blank&quot;&gt;https://t.me/Jbak2&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;IHt6&quot;&gt;RuStore &lt;a href=&quot;https://www.rustore.ru/catalog/app/com.jbak2.JbakKeyboard&quot; target=&quot;_blank&quot;&gt;https://www.rustore.ru/catalog/app/com.jbak2.JbakKeyboard&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;20N9&quot;&gt;Приложение Jbak2 Keyboard представляет собой профессиональную клавиатуру-конструктор для лиц, набирающих большие объёмы текста (журналисты, программисты, редакторы, писатели...). Приложение функционирует на всех устройствах с ОС Android 4.4+. Малый объём (~1,5 МБ) и высокая скорость работы делают её программой первого выбора для устройств с малым объёмом памяти, для маломощных устройств вроде электронных книг и часов, а также телефонов с Android GO.&lt;/p&gt;
  &lt;p id=&quot;MXuO&quot;&gt;Широчайшие возможности тонкой настройки программы, оформления и функционала раскладок позволяют удовлетворить нужды наиболее требовательных пользователей.&lt;/p&gt;
  &lt;h3 id=&quot;kbzM&quot;&gt;Порядок работы&lt;/h3&gt;
  &lt;p id=&quot;UvnX&quot;&gt;Файл &lt;a href=&quot;https://gitflic.ru/project/yabalak/anbur-android&quot; target=&quot;_blank&quot;&gt;Anbur android layout.xlsm&lt;/a&gt; содержит таблицу соответствия русских букв и символов анбура. В данной таблице мы можем указать, какой символ будет вводиться по короткому и длинному нажатию каждой кнопки.&lt;/p&gt;
  &lt;p id=&quot;z8rE&quot;&gt;По нажатию на кнопку «Генерировать» программа запрашивает файл русской раскладки &lt;code&gt;ru_***.xml&lt;/code&gt; и заменяет буквы в нём в соответствии с указанной таблицей. Полученный в результате файл &lt;code&gt;an_ru_***.xml &lt;/code&gt;следует загрузить на девайс в папку &lt;code&gt;/storage/emulated/0/jbak2Keyboard/keyboards&lt;/code&gt; и выбрать его в настройках Jbak2 Keyboard (пункт «языки и раскладки») для афарского языка. Причём можно выбрать отдельную раскладку для портретной и ландшафтной ориентации.&lt;/p&gt;
  &lt;p id=&quot;lTJz&quot;&gt;На картинке ниже показан принцип создания раскладки для портретной ориентации. В левой части картинки представлен скриншот окна выбора раскладки для русского языка. Любую из встроенных раскладок можно сохранить в файл xml. Полученный файл (в примере это &lt;code&gt;ru_qwerty.xml&lt;/code&gt;) следует скопировать с телефона на компьютер и открыть в &lt;a href=&quot;https://gitflic.ru/project/yabalak/anbur-android&quot; target=&quot;_blank&quot;&gt;Anbur android layout.xlsm.&lt;/a&gt; В той же папке на ПК будет сформирован файл aa_исходное название файла.xml, например, &lt;code&gt;aa_ru_qwerty.xml&lt;/code&gt;. В правой части картинки этот файл вырбан в качестве пользовательской раскладки: &lt;/p&gt;
  &lt;figure id=&quot;vPXc&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c8/a0/c8a08dc2-678f-41ac-9b83-3430be82692d.jpeg&quot; width=&quot;1585&quot; /&gt;
    &lt;figcaption&gt;После обработки в excel русские буквы заменились на символы анбура&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;I12k&quot;&gt;Так может выглядеть древнепермская раскладка на планшете:&lt;/p&gt;
  &lt;figure id=&quot;c5K1&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9e/3a/9e3a7b02-7d0e-473b-a4a8-c14acc96a204.jpeg&quot; width=&quot;1560&quot; /&gt;
    &lt;figcaption&gt;Раскладка «qwerty для планшетов»&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;k7KL&quot;&gt;А так — на часах:&lt;/p&gt;
  &lt;figure id=&quot;rSC5&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e0/41/e0417fd4-bc8d-4b00-8792-50b644195f20.jpeg&quot; width=&quot;4228&quot; /&gt;
    &lt;figcaption&gt;Раскладка «Для круглых часов»&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;Zeji&quot;&gt;NB: у меня нет планшета и часов, это всё обработанные скриншоты с телефона&lt;/p&gt;
  &lt;/section&gt;
  &lt;h3 id=&quot;F7TW&quot;&gt;О подсказках&lt;/h3&gt;
  &lt;p id=&quot;QW0K&quot;&gt;На всех скриншотах Вы можете видеть маленькие русские буквы в углах кнопок. Обратите внимание: они &lt;strong&gt;не будут печататься&lt;/strong&gt; при долгом нажатии на кнопку, как это принято в JBak2kbd. Они служат только в качестве подсказок о том, какая буква соответствует данному символу анбура. Напротив, по длительному нажатию на кнопку может печататься другая буква, в соответствии с таблицей в excel, например, по короткому нажатию на О набирается 𐍩, а по длительному — 𐍩̈ &lt;/p&gt;
  &lt;figure id=&quot;KMWJ&quot; class=&quot;m_retina&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/10/73/1073d8fd-73d9-4ece-8c0d-1183b8cebfa1.jpeg&quot; width=&quot;351.5&quot; /&gt;
    &lt;figcaption&gt;Указание символов для короткого и длительного нажатия в excel&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;6Ada&quot;&gt;Где взять исходную раскладку?&lt;/h3&gt;
  &lt;p id=&quot;h0TR&quot;&gt;В качестве исходных файлов для конвертации можно взять файлы раскладок, встроенных в программу Jbak2 Keyboard. Их можно получить по нажатию на «Декомпилировать» на экране выбора раскладки. Кроме того, пользователи программы Jbak2 Keyboard самостоятельно создают раскладки и размещают их &lt;a href=&quot;https://4pda.to/forum/index.php?showtopic=897533&quot; target=&quot;_blank&quot;&gt;на формуме 4pda&lt;/a&gt;. Также существует приложение-компаньон &lt;a href=&quot;https://jbak2.ucoz.net/load/&quot; target=&quot;_blank&quot;&gt;jbak2layout&lt;/a&gt;, содержащее множество раскладок для клавиатуры со скриншотами.&lt;/p&gt;
  &lt;p id=&quot;G35l&quot;&gt;Обратите внимание: телефонные раскладки этим инструментом не поддерживаются. «Телефонные» — это те, на кнопках которых указано сразу несколько букв, переключаемых путём многократного нажатия одной и той же клавиши:&lt;/p&gt;
  &lt;figure id=&quot;XRYG&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/29/c8/29c8bbdf-6a10-4155-aaa5-4d3a704ea713.png&quot; width=&quot;360&quot; /&gt;
    &lt;figcaption&gt;Такие раскладки не поддерживаются макросом&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;rd55&quot;&gt;После установки раскладки Вы сможете переключать языки ввода Ru→En→__ по клавише выбора языка.&lt;/p&gt;
  &lt;tt-tags id=&quot;gecF&quot;&gt;
    &lt;tt-tag name=&quot;vba&quot;&gt;#vba&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;android&quot;&gt;#android&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;anbur&quot;&gt;#anbur&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>ttach:powerpoint-speaks</id><link rel="alternate" type="text/html" href="https://teletype.in/@ttach/powerpoint-speaks?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ttach"></link><title>Чтение вслух (TTS) презентаций PowerPoint</title><published>2023-07-20T17:22:36.800Z</published><updated>2025-05-24T16:49:52.363Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/02/13/02138bb4-89d4-46d9-8e84-ac470434b9a2.png"></media:thumbnail><category term="vba" label="VBA"></category><tt:hashtag>powerpoint</tt:hashtag><tt:hashtag>vba</tt:hashtag><tt:hashtag>tts</tt:hashtag><tt:hashtag>speech</tt:hashtag><tt:hashtag>презентация</tt:hashtag><tt:hashtag>вслух</tt:hashtag><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/da/35/da35a249-d25d-4f3e-9553-9147c21c0965.png&quot;&gt;В двух словах. Запустите надстройку. Компьютер сможет проговаривать текст слайдов с помощью системного TTS-движка windows. Слайды будут сами переключаться. Вместо текста слайдов можно проговаривать заметки докладчика.</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;CPHV&quot;&gt;В двух словах. Запустите &lt;a href=&quot;https://gitflic.ru/project/yabalak/powerpoint-tts/release/latest&quot; target=&quot;_blank&quot;&gt;надстройку&lt;/a&gt;. Компьютер сможет проговаривать текст слайдов с помощью системного TTS-движка windows. Слайды будут сами переключаться. Вместо текста слайдов можно проговаривать заметки докладчика.&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;m6qg&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/da/35/da35a249-d25d-4f3e-9553-9147c21c0965.png&quot; width=&quot;537&quot; /&gt;
    &lt;figcaption&gt;Скриншот ленты powerpoint после запуска надстройки&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;FaH4&quot;&gt;Введение&lt;/h2&gt;
  &lt;p id=&quot;jKXU&quot;&gt;В PowerPoint нет встроенного инструмента для произнесения вслух текста презентаций. В интернете Вы можете &lt;a href=&quot;https://support.microsoft.com/ru-ru/office/%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8-%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0-%D0%B2-%D1%80%D0%B5%D1%87%D1%8C-%D0%BF%D1%80%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%B8%D1%82%D1%8C-459e7704-a76d-4fe2-ab48-189d6b83333c&quot; target=&quot;_blank&quot;&gt;найти&lt;/a&gt; &lt;a href=&quot;https://www.makeuseof.com/how-to-use-powerpoint-speak/&quot; target=&quot;_blank&quot;&gt;способ&lt;/a&gt; проговаривания выделенных текстовых блоков при редактировании презентации, но не всей презентации целиком. &lt;br /&gt;Предлагаемый в данной статье инструмент решает эту задачу: компьютер проговаривает весь текст слайда и переходит к следующему слайду и так до конца презентации.&lt;/p&gt;
  &lt;h2 id=&quot;GwcN&quot;&gt;Скачивание и запуск надстройки&lt;/h2&gt;
  &lt;p id=&quot;pNlM&quot;&gt;Для того, чтобы заставить компьютер с windows 7 разговаривать по-русски, Вам понадобится установить на TTS-движок и русский голос к нему. А в комплект поставки windows 10 уже входят русские голоса Ирина и Павел. Выберите нужный  голос в настройках специальных возможностей.&lt;/p&gt;
  &lt;p id=&quot;2QHj&quot;&gt;Для проговаривания презентаций настраивать и использовать программу чтения с экрана не потребуется. Надстройка работает напрямую с речевым API системы windows.&lt;/p&gt;
  &lt;p id=&quot;fFMn&quot;&gt;Скачайте файл «Озвучивание презентаций.ppam» по ссылке &lt;a href=&quot;https://gitflic.ru/project/yabalak/powerpoint-tts/release/latest&quot; target=&quot;_blank&quot;&gt;https://gitflic.ru/project/yabalak/powerpoint-tts/release/latest&lt;/a&gt;&lt;br /&gt;При запуске требуется разрешить запуск макросов для работы надстройки:&lt;/p&gt;
  &lt;figure id=&quot;6pvx&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9a/bd/9abdad80-b697-414a-8d99-96f22f7ff645.png&quot; width=&quot;447&quot; /&gt;
    &lt;figcaption&gt;внешний вид предупреждения зависит от версии PowerPoint&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;iq1O&quot;&gt;Разумеется, запуск случайных файлов из интернета способен привести к блокировке компьютера и краже Ваших личных данных, поэтому используйте антивирус. Также по указанной ссылке Вы найдёте исходный код данной надстройки.&lt;/p&gt;
  &lt;h2 id=&quot;UsXO&quot;&gt;Описание работы&lt;/h2&gt;
  &lt;p id=&quot;afOk&quot;&gt;«Надстройка» для PowerPoint — это специальный файл с расширением &lt;code&gt;ppam&lt;/code&gt;, который не содержит слайдов, но содержит код программы и пользовательский интерфейс, расширяющий возможности PowerPoint.&lt;/p&gt;
  &lt;p id=&quot;gRrM&quot;&gt;В нашем случае после запуска надстройки «Озвучивание презентаций.ppam» на вкладке «Главная» в интерфейсе PowerPoint появятся новые кнопки. Они будут доступны для всех презентаций, пока Вы не закроете PowerPoint. Далее следует описание каждой кнопки и порядок работы с программой.&lt;/p&gt;
  &lt;figure id=&quot;S50j&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/17/f8/17f8b196-b4d0-4149-a580-cc87de732146.png&quot; width=&quot;987&quot; /&gt;
    &lt;figcaption&gt;Скриншот панели озвучивания презентаций на вкладке «Главная»&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;XIRZ&quot;&gt;Кнопка «Говорить текст слайдов»&lt;/h3&gt;
  &lt;p id=&quot;W260&quot;&gt;Первая кнопка на панели начинает показ слайдов с текущего слайда, при этом все текстовые объекты на слайде будут озвучены компьютером. Например, заголовок, подзаголовок слайда, а также все надписи, таблицы, графика SmartArt. Объекты слайда озвучиваются в порядке их добавления на слайд. Таблицы — по строкам. Между объектами компьютер будет делать паузу в 300 миллисекунд, а после произнесения всего текста слайда — в 3 секунды. Затем откроется следующий слайд и чтение продолжится. Смотрите далее, как отрегулировать данные задержки.&lt;/p&gt;
  &lt;p id=&quot;kXAL&quot;&gt;Прервать показ слайдов и чтение текста можно обычным способом — нажатием Esc.&lt;/p&gt;
  &lt;p id=&quot;RPUa&quot;&gt;Клавиатурное сочетание для вызова этой команды —  &lt;strong&gt;&lt;code&gt;Alt+я, плюс&lt;/code&gt; &lt;/strong&gt;или &lt;strong&gt;&lt;code&gt;F10, я, плюс&lt;/code&gt;. &lt;/strong&gt;То есть, для вызова команды чтения текста слайдов можно нажать сочетание Alt+я, а затем клавишу плюс, либо последовательно нажать клавиши &lt;code&gt;F10&lt;/code&gt;, &lt;code&gt;я&lt;/code&gt; и &lt;code&gt;плюс&lt;/code&gt;. &lt;/p&gt;
  &lt;h3 id=&quot;KcZx&quot;&gt;Кнопка «Говорить заметки докладчика»&lt;/h3&gt;
  &lt;p id=&quot;hZqA&quot;&gt;Вторая кнопка на панели озвучивания работает аналогично, но компьютер проговаривает не тексты слайдов, а тексты заметок докладчика, вводимые в нижней части окна PowerPoint.&lt;/p&gt;
  &lt;figure id=&quot;wt7T&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://cs10.pikabu.ru/post_img/big/2020/09/16/5/1600242695165782643.png&quot; width=&quot;754&quot; /&gt;
    &lt;figcaption&gt;Расположение зоны заметок докладчика&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;B8eu&quot;&gt;По-прежнему переключение слайдов происходит автоматически с задержкой в 3 секунды после окончания чтения.&lt;/p&gt;
  &lt;p id=&quot;aqRo&quot;&gt;Клавиатурное сочетание для команды чтения заметок докладчика   —  &lt;strong&gt;&lt;code&gt;Alt+я, звёздочка&lt;/code&gt; &lt;/strong&gt;или &lt;strong&gt;&lt;code&gt;F10, я, звёздочка&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;
  &lt;h3 id=&quot;iSKD&quot;&gt;Кнопка «Настройки речи»&lt;/h3&gt;
  &lt;p id=&quot;xeAy&quot;&gt;Эта кнопка открывает настройки преобразования текста в речь системы windows.  Это же окно можно открыть через панель управления windows. Здесь можно выбрать голос, задать его скорость, тембр и другие параметры речи.&lt;/p&gt;
  &lt;p id=&quot;XAbz&quot;&gt;Клавиатурное сочетание —&lt;strong&gt;&lt;code&gt;Alt+я, минус&lt;/code&gt; &lt;/strong&gt;или &lt;strong&gt;&lt;code&gt;F10, я, минус&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;Hq1v&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a1/43/a143a067-1c4b-49d8-b633-adbceb0e74d7.png&quot; width=&quot;486&quot; /&gt;
    &lt;figcaption&gt;Окно настроек TTS в Windows 7&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;r4q8&quot;&gt;Задержка между объектами на слайде&lt;/h3&gt;
  &lt;p id=&quot;FBIQ&quot;&gt;Это поле, обозначенное «&lt;em&gt;Зад. 1»&lt;/em&gt; позволяет установить задержку в миллисекундах между произнесением текста отдельных элементов слайда, а также ячеек таблицы. По умолчанию — 300 миллисекунд. Этот параметр нигде не сохраняется и при перезапуске PowerPoint сбрасывается на 300 миллисекунд.&lt;/p&gt;
  &lt;p id=&quot;qSfj&quot;&gt;Клавиатурное сочетание для быстрого доступа к этому полю —&lt;strong&gt;&lt;code&gt;Alt+я, открывающая скобка&lt;/code&gt; &lt;/strong&gt;или &lt;strong&gt;&lt;code&gt;F10, я, открывающая скобка&lt;/code&gt;&lt;/strong&gt;. После указания значения нажмите Enter.&lt;/p&gt;
  &lt;h3 id=&quot;C1gY&quot;&gt;Задержка между слайдами&lt;/h3&gt;
  &lt;p id=&quot;DYCS&quot;&gt;Это поле («&lt;em&gt;Зад. 2»&lt;/em&gt;) задаёт задержку при переключении слайдов, когда чтение данного слайда завершилось. По умолчанию установлено 3000 миллисекунд.&lt;/p&gt;
  &lt;p id=&quot;gNNe&quot;&gt;Клавиатурное сочетание  —&lt;strong&gt;&lt;code&gt;Alt+я, закрывающая скобка&lt;/code&gt; &lt;/strong&gt;или &lt;strong&gt;&lt;code&gt;F10, я, закрывающая скобка&lt;/code&gt;&lt;/strong&gt;. &lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;n6ZN&quot;&gt;Исходный код надстройки&lt;/h2&gt;
  &lt;p id=&quot;Pv2L&quot;&gt;В отличие от надстроек Excel, исходный код надстроек PowerPoint скрыт от пользователей. Поэтому из проекта &lt;a href=&quot;https://gitflic.ru/project/yabalak/powerpoint-tts&quot; target=&quot;_blank&quot;&gt;https://gitflic.ru/project/yabalak/powerpoint-tts&lt;/a&gt; скачайте файл &lt;code&gt;Презентация вслух DEV.pptm&lt;/code&gt;. В нём находятся несколько слайдов для примера, а по сочетанию клавиш Alt+F11 доступен исходный код на языке VBA. &lt;/p&gt;
  &lt;h2 id=&quot;3Xe3&quot;&gt;Заключение&lt;/h2&gt;
  &lt;p id=&quot;ZhBg&quot;&gt;При подготовке презентаций я рекомендую минимизировать количество текстовой информации на слайде, заменив её изображениями, схемами и графиками. В то же время, речь произносимую при демонстрации каждого конкретного слайда удобно размещать в области «Заметок докладчика», нежели в отдельном документе. При перемещении слайдов внутри презентации (например, если Вы решили перестроить порядок изложения) заметки докладчика будут перемещаться вместе с ними. &lt;/p&gt;
  &lt;p id=&quot;OCFF&quot;&gt;В результате Вы получите презентацию, которая способна «сама себя рассказать» при нажатии на кнопку «Говорить заметки докладчика».&lt;/p&gt;
  &lt;p id=&quot;h2Gc&quot;&gt;А если понадобится свести всю речь в единый документ (то есть подготовить шпаргалку со словами к презентации для лектора), то сделать это можно буквально одним нажатием, как описано в статье «&lt;a href=&quot;https://teletype.in/@ttach/powerpoint-speaker-notes&quot; target=&quot;_blank&quot;&gt;Как выгрузить заметки докладчика в документ Word&lt;/a&gt;».  Можете ознакомиться с другими статьями по PowerPoint в блоге по хештегу &lt;a href=&quot;https://teletype.in/@ttach?search=%2523powerpoint&quot; target=&quot;_blank&quot;&gt;#powerpoint&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;Z71X&quot;&gt;Если у Вас возникли вопросы по работе с надстройкой, Вы можете задать их в &lt;a href=&quot;https://t.me/yabalak&quot; target=&quot;_blank&quot;&gt;телеграм&lt;/a&gt;, &lt;a href=&quot;https://vk.me/478385&quot; target=&quot;_blank&quot;&gt;ВК &lt;/a&gt;или написать на почту &lt;a href=&quot;mailto:alxm59@ya.ru&quot; target=&quot;_blank&quot;&gt;alxm59@ya.ru&lt;/a&gt; .&lt;/p&gt;
  &lt;p id=&quot;u0Zm&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;dG02&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;KHZP&quot;&gt;
    &lt;tt-tag name=&quot;powerpoint&quot;&gt;#powerpoint&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;vba&quot;&gt;#vba&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;tts&quot;&gt;#tts&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;speech&quot;&gt;#speech&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;презентация&quot;&gt;#презентация&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;вслух&quot;&gt;#вслух&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>ttach:ahk-multipress</id><link rel="alternate" type="text/html" href="https://teletype.in/@ttach/ahk-multipress?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ttach"></link><title>Разные действия в зависимости от числа нажатий на клавишу в Autohotkey</title><published>2023-02-20T09:27:14.096Z</published><updated>2025-05-24T16:57:30.270Z</updated><category term="autohotkey" label="Autohotkey"></category><tt:hashtag>autohotkey</tt:hashtag><summary type="html">Назначаем несколько действий на одну клавишу, нажимаемую многократно.</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;004r&quot;&gt;&lt;a href=&quot;/@ttach/in_nuce&quot;&gt;🌰&lt;/a&gt;Назначаем несколько действий на одну клавишу, нажимаемую многократно&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;YKYY&quot;&gt;В &lt;a href=&quot;https://www.autohotkey.com/docs/v2/lib/SetTimer.htm&quot; target=&quot;_blank&quot;&gt;справке AHK&lt;/a&gt; приводится пример определения количества нажатий на кнопку в течение определённого времени, но это не самый удобный метод.&lt;/p&gt;
  &lt;p id=&quot;rGwQ&quot;&gt;Предлагаю использовать функцию MultiPress для этих целей. Она принимает в качестве параметров произвольное количество функций. Сколько раз клавиша была нажата, такая по счёту функция и запустится.&lt;/p&gt;
  &lt;p id=&quot;NCQp&quot;&gt;Пример: &lt;/p&gt;
  &lt;pre id=&quot;nCk7&quot; data-lang=&quot;clojure&quot;&gt;$Esc:: MultiPress(
    () =&amp;gt; Send(&amp;quot;{Esc}&amp;quot;),
    () =&amp;gt; WinClose(&amp;quot;A&amp;quot;),
    () =&amp;gt; DllCall(&amp;quot;LockWorkStation&amp;quot;))&lt;/pre&gt;
  &lt;ul id=&quot;BJYL&quot;&gt;
    &lt;li id=&quot;FOes&quot;&gt;Однократное нажатие на Esc просто нажимает Esc. Чтобы скрипт не запускал себя по кругу, там стоит &lt;a href=&quot;https://www.autohotkey.com/docs/v2/Hotkeys.htm#prefixdollar&quot; target=&quot;_blank&quot;&gt;значок доллара&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;p34j&quot;&gt;Двукратное нажатие закрывает &lt;a href=&quot;https://www.autohotkey.com/docs/v2/misc/WinTitle.htm#ActiveWindow&quot; target=&quot;_blank&quot;&gt;активное окно&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;HGl8&quot;&gt;Троекратное (или многократное, или длительное) нажатие &lt;a href=&quot;https://www.autohotkey.com/docs/v2/lib/DllCall.htm&quot; target=&quot;_blank&quot;&gt;блокирует&lt;/a&gt; компьютер (как Win+L).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;mqC0&quot;&gt;Вместо &lt;code&gt;()&lt;a href=&quot;https://www.autohotkey.com/docs/v2/Variables.htm#fat-arrow&quot; target=&quot;_blank&quot;&gt;=&amp;gt;&lt;/a&gt;&lt;/code&gt; можно писать &lt;code&gt;Function.&lt;a href=&quot;https://www.autohotkey.com/docs/v2/lib/Func.htm#Bind&quot; target=&quot;_blank&quot;&gt;Bind&lt;/a&gt;(...)&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;gJvl&quot; data-lang=&quot;clojure&quot;&gt;$Esc:: MultiPress(
    Send.Bind(&amp;quot;{Esc}&amp;quot;),
    WinClose.Bind(&amp;quot;A&amp;quot;),
    DllCall.Bind(&amp;quot;LockWorkStation&amp;quot;))&lt;/pre&gt;
  &lt;p id=&quot;pcnt&quot;&gt;результат тот же.&lt;/p&gt;
  &lt;p id=&quot;dCAp&quot;&gt;Далее код функции. Замените задержку (400 мс) на комфортную Вам:&lt;/p&gt;
  &lt;pre id=&quot;dFwo&quot; data-lang=&quot;clojure&quot;&gt;#Requires AutoHotkey v2+
MultiPress(fun*) {
	static MULTIPRESS_DELAY := 400 ; время распознавания нажатий
	; Принимает в параметрах произвольное число Func-объектов:
	; SomeFunction или ()=&amp;gt;DoSomeAction или SomeFunction.Bind(Parameters)  
	; В зависимости от того, сколько раз вызвана в течение MULTIPRESS_DELAY, та функция и запускается
	static count := 0
	Launcher() { ; Closure-замыкание
		; Запускает функцию № count
		if count &amp;gt; fun.length {
			count := fun.length ; Слишком много нажатий
		}
		if fun.Has(count) {
			fun[count].Call()
		}
		count := 0
	}
	if count &amp;gt; 0 { ; Таймер тикает, считаем нажатия
		count += 1
	} else { ; count = 0, запускаем таймер
		count := 1
		SetTimer Launcher, -MULTIPRESS_DELAY ; Минус, чтобы запустить таймер однократно
	}
}&lt;/pre&gt;
  &lt;p id=&quot;WX8u&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;Fcw2&quot;&gt;
    &lt;tt-tag name=&quot;autohotkey&quot;&gt;#autohotkey&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>ttach:office-panning</id><link rel="alternate" type="text/html" href="https://teletype.in/@ttach/office-panning?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ttach"></link><title>Панорамирование/скроллинг/рука в Office</title><published>2023-02-13T20:04:28.237Z</published><updated>2025-05-24T17:16:22.603Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/64/2a/642a695d-9ea1-48c8-80f1-71341b2ebaf3.png"></media:thumbnail><category term="autohotkey" label="Autohotkey"></category><tt:hashtag>autohotkey</tt:hashtag><tt:hashtag>word</tt:hashtag><tt:hashtag>excel</tt:hashtag><tt:hashtag>powerpoint</tt:hashtag><tt:hashtag>visio</tt:hashtag><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/0b/63/0b635014-eecc-432b-872d-8a274ddbde4f.jpeg&quot;&gt;🌰 Прокрутка офисных приложений нажатым колесом мыши, как принято в CAD</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;JINn&quot;&gt;&lt;a href=&quot;/@ttach/in_nuce&quot;&gt;🌰&lt;/a&gt; Прокрутка офисных приложений нажатым колесом мыши, как принято в CAD&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;xUnL&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0b/63/0b635014-eecc-432b-872d-8a274ddbde4f.jpeg&quot; width=&quot;1099&quot; /&gt;
  &lt;/figure&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#AGuX&quot;&gt;Введение&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#5RQi&quot;&gt;Word&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#7CQb&quot;&gt;Visio&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#JhBD&quot;&gt;Excel&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#oOd3&quot;&gt;PowerPoint&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Aj3D&quot;&gt;Другие программы&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h2 id=&quot;AGuX&quot;&gt;Введение&lt;/h2&gt;
  &lt;p id=&quot;gJWB&quot;&gt;При работе в дизайнерских программах, при просмотре карт или PDF-документов Вы можете передвигать чертёж/карту/документ при зажатой кнопке мыши. В CADах это обычно средняя кнопка, в PDF — левая, в 2gis — левая или правая.&lt;/p&gt;
  &lt;p id=&quot;GCr7&quot;&gt;Обычно за включение этого режима отвечает кнопка с иконкой руки (panning hand), вроде такой:&lt;/p&gt;
  &lt;figure id=&quot;whxH&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/40/bc/40bcd0ee-ad07-4871-be79-147606c3f83f.png&quot; width=&quot;32&quot; /&gt;
    &lt;figcaption&gt;Иконка руки&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;xBaC&quot;&gt;Однако в офисных приложениях нажатие на колесо вызывает режим прокрутки, когда документ начинает ползти в сторону перемещения мыши, что не всегда удобно. Попробуем вернуть «нормальное» поведение колеса в приложениях Microsoft Office.&lt;/p&gt;
  &lt;h2 id=&quot;5RQi&quot;&gt;Word&lt;/h2&gt;
  &lt;p id=&quot;B0AW&quot;&gt;С word-ом проще всего. Функция «рука» встроена в ворд, она называется «Режим панорамирования»:&lt;/p&gt;
  &lt;figure id=&quot;GYBy&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1f/ce/1fce1dc3-98ae-41f9-bed0-78b05c350aa5.png&quot; width=&quot;342&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;l76K&quot;&gt;В этом режиме удобно редактировать графические элементы в word при большом увеличении. Если функция панорамирования в ворде нужна Вам периодически, то можно вынести её на панель быстрого доступа. А чтобы назначить эту функцию на среднюю кнопку мыши, используем следующий скрипт AHK:&lt;/p&gt;
  &lt;pre id=&quot;R8Ky&quot; data-lang=&quot;clojure&quot;&gt;#HotIf WinActive(&amp;quot;ahk_class OpusApp&amp;quot;) ; Когда открыт Word...
MButton:: WordPan()

WordPan(*) {
	if !(wd := GetWord()) ; Если ворд не берётся,
		return            ; то выход
	try {
		WD.ActiveWindow.View.Panning := True  ; рука вкл
		Click &amp;quot;down&amp;quot;                          ; зажали ЛКМ
		KeyWait &amp;quot;MButton&amp;quot;                     ; ждём отпускания колеса
		Click &amp;quot;up&amp;quot;                            ; отжали лкм
		WD.ActiveWindow.View.Panning := False ; рука выкл
	}
}

GetWord(Force:=0) {
	static wd := &amp;quot;&amp;quot;
	return GetComApp(&amp;amp;wd, force, &amp;quot;Word.Application&amp;quot;, &amp;quot;Word&amp;quot;)
}&lt;/pre&gt;
  &lt;blockquote id=&quot;iMWx&quot;&gt;&lt;a href=&quot;https://gitflic.ru/project/yabalak/office-pan&quot; target=&quot;_blank&quot;&gt;Скачать все скрипты из статьи&lt;/a&gt;&lt;/blockquote&gt;
  &lt;p id=&quot;8TCw&quot;&gt;В скрипте используется функция &lt;a href=&quot;https://teletype.in/@ttach/ahk-get-com-app&quot; target=&quot;_blank&quot;&gt;GetComApp&lt;/a&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;7CQb&quot;&gt;Visio&lt;/h2&gt;
  &lt;p id=&quot;Dbah&quot;&gt;В visio тоже несложно использовать «руку», но она активируется странным сочетанием &lt;strong&gt;Ctrl+Shift+Правая кнопка мыши&lt;/strong&gt;. Поменяем на среднюю кнопку:&lt;/p&gt;
  &lt;pre id=&quot;neJU&quot; data-lang=&quot;clojure&quot;&gt;#HotIf WinActive(&amp;quot;ahk_class VISIOA&amp;quot;)

MButton:: {
	SendInput &amp;quot;{Ctrl down}{Shift down}&amp;quot;
	Sleep 20
	Send &amp;quot;{Rbutton down}&amp;quot;
	KeyWait &amp;quot;MButton&amp;quot;
	Send &amp;quot;{Rbutton up}&amp;quot;
	SendInput &amp;quot;{Ctrl up}{Shift up}&amp;quot;
}&lt;/pre&gt;
  &lt;p id=&quot;nXZN&quot;&gt;Для большего сходства с автокадом включите опцию «Панорамирование с помощью IntelliMouse» в настройках visio, чтобы поворот колеса менял увеличение:&lt;/p&gt;
  &lt;figure id=&quot;fuzB&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2d/a2/2da23fc6-74a2-4417-a481-7bf91e454f61.png&quot; width=&quot;698&quot; /&gt;
    &lt;figcaption&gt;Данный флажок активирует увеличение/уменьшение масштаба путём вращения колеса (без ctrl)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;JhBD&quot;&gt;Excel&lt;/h2&gt;
  &lt;p id=&quot;lOIg&quot;&gt;А теперь начинается самое интересное. В экселе режима руки нет, хотя он был бы очень кстати для прокрутки широких таблиц влево-вправо. С другой стороны, в Excel имеется поддержка клавиши ScrollLock. Когда Scroll Lock активен (индикатор на клавиатуре горит), клавиши управления курсором ↑↓←→ не передвигают выделение, а осуществляют прокрутку листа, при этом выделение не сбивается. Попробуйте сами. Excel — одна из немногих программ, где работает Scroll Lock.&lt;/p&gt;
  &lt;p id=&quot;EK9j&quot;&gt;А ведь это решение! При зажатии колеса мыши мы будем активировать режим Scroll Lock, а при отжатии — снимать его. Останется периодически опрашивать положение мыши, и, если она передвинулась, сдвигать лист в соответствующую сторону клавишами ↑↓←→. Скрипт для Excel:&lt;/p&gt;
  &lt;pre id=&quot;28fb&quot; data-lang=&quot;clojure&quot;&gt;#HotIf WinActive(&amp;quot;ahk_class XLMAIN&amp;quot;) ; Excel
MButton:: ScrollLockPan ; Панорамирование СкроллЛоком

ScrollLockPan() {
	static XT := 30 ; Порог обнаружения движения мыши (пикселей)
	static YT := 30
	static MPOLLING := 50   ; Частота опроса мыши, мс
	mx0:=my0:=mx1:=my1 := 0 ; Начальные и конечные координаты мыши
	MouseGetPos &amp;amp;mx0, &amp;amp;my0
	SetScrollLockState 1    ; Скролл лок ВКЛ
	Loop {
		Sleep MPOLLING
		if !GetKeyState(&amp;quot;MButton&amp;quot;, &amp;quot;P&amp;quot;) { ; Если колесо отпущено,
			SetScrollLockState 0          ; отключаем скролл лок
			return                        ; и выходим
		}
		MouseGetPos &amp;amp;mx1, &amp;amp;my1
		dx := mx1-mx0
		dy := my1-my0
		dx := round(dx/XT*1) ; Здесь значения можно подобрать по вкусу
		dy := round(dy/YT*4) ; Я умножил на 4, чтобы по вертикали двигалось поживее
		;tooltip &amp;quot;dx &amp;quot; dx &amp;quot; dy &amp;quot; dy
		if dX &amp;gt; 0 {
    		Send &amp;quot;{Left &amp;quot; dX &amp;quot;}&amp;quot; ; Нажимаем «влево» нужное число раз (в dX — число)
    	} else if dX &amp;lt; 0 {
    		Send &amp;quot;{Right &amp;quot; abs(dX) &amp;quot;}&amp;quot;
    	}
    	if dY &amp;gt; 0 {
    	    Send &amp;quot;{Up &amp;quot; dY &amp;quot;}&amp;quot;
    	} else if dY &amp;lt; 0 {
            Send &amp;quot;{Down &amp;quot; abs(dY) &amp;quot;}&amp;quot;
    	}
		mx0 := mx1
		my0 := my1
	}
}
&lt;/pre&gt;
  &lt;blockquote id=&quot;CRe0&quot;&gt;&lt;a href=&quot;https://gitflic.ru/project/yabalak/office-pan&quot; target=&quot;_blank&quot;&gt;Скачать все скрипты из статьи&lt;/a&gt;&lt;/blockquote&gt;
  &lt;p id=&quot;t3ZE&quot;&gt;Разумеется, перемещение листа будет не плавным, как в Word или Visio, а скачками: целыми колонками и строчками сразу. Также сдвиг не будет численно соответствовать количеству пикселей, на которые переместилась мышь. Да это и невозможно, ведь в общем случае все колонки имеют разную ширину, а строки отличаются по высоте.&lt;br /&gt;Отрегулируйте параметры задержки (&lt;code&gt;MPOLLING&lt;/code&gt;), порогов (&lt;code&gt;XT&lt;/code&gt;, &lt;code&gt;YT&lt;/code&gt;) и множители в формулах определения dX/dY так, как Вам будет удобнее.&lt;/p&gt;
  &lt;h2 id=&quot;oOd3&quot;&gt;PowerPoint&lt;/h2&gt;
  &lt;p id=&quot;fAjE&quot;&gt;В PowerPoint тоже нет функции «рука». Действуем аналогично: опрашиваем положение мыши, вычисляем сдвиг, но вместо ScrollLock вызываем функцию SmallScroll, передавая в неё величину сдвигов:&lt;/p&gt;
  &lt;pre id=&quot;cASe&quot; data-lang=&quot;clojure&quot;&gt;#HotIf WinActive(&amp;quot;ahk_class PPTFrameClass&amp;quot;) ; PowerPoint 2010+
MButton:: ComPanP(GetPoint())

#HotIf WinActive(&amp;quot;ahk_class PP12FrameClass&amp;quot;) ; PowerPoint 2007
MButton:: ComPanP(GetPoint())

ComPanP(App) { ; Панорамирование для PowerPoint
	static XT := 20 ; Это для панорамирования колёсиком
	static YT := 20
	static MPOLLING := 50
	mx0:=mx1:=my0:=my1:=0
	MouseGetPos &amp;amp;mx0, &amp;amp;my0
	if !GetKeyState(&amp;quot;MButton&amp;quot;, &amp;quot;P&amp;quot;)
		return
	loop {
		sleep MPOLLING
		MouseGetPos &amp;amp;mx1, &amp;amp;my1
		dx := mx1-mx0
		dy := my1-my0
		if !GetKeyState(&amp;quot;MButton&amp;quot;, &amp;quot;P&amp;quot;)
			return
		dx := round(dx/XT*2)
		dy := round(dy/YT*4)
		;tooltip &amp;quot;dx &amp;quot; dx &amp;quot; dy &amp;quot; dy
		if (dX||dY) {
			try {
				App.ActiveWindow.SmallScroll -dY, dY, -dX, dX  ; Отрицательные значения не воспринимает
			} catch {
				Tooltip &amp;quot;Отпустите кнопку и начните ещё раз!&amp;quot;
				KeyWait &amp;quot;MButton&amp;quot;
				Sleep 50
				SendLevel 1
				SendEvent &amp;quot;^+{MButton}&amp;quot;
				SendLevel 0
				Tooltip
				return
			}
			mx0 := mx1
			my0 := my1
		}
	}
}

GetPoint(Force:=0) {
	static pp := &amp;quot;&amp;quot;
	return GetComApp(&amp;amp;pp, force, &amp;quot;PowerPoint.Application&amp;quot;, &amp;quot;PowerPoint&amp;quot;, &amp;quot;PP_&amp;quot;)
}&lt;/pre&gt;
  &lt;blockquote id=&quot;cB5p&quot;&gt;&lt;a href=&quot;https://gitflic.ru/project/yabalak/office-pan&quot; target=&quot;_blank&quot;&gt;Скачать все скрипты из статьи&lt;/a&gt;&lt;/blockquote&gt;
  &lt;p id=&quot;bJS6&quot;&gt;Аналогично, параметры настраиваем по вкусу.&lt;/p&gt;
  &lt;p id=&quot;1JpA&quot;&gt;В powerpoint есть неприятная особенность: слайд переключатся на следующий, если прокрутить в самый низ или верх слайда. См. &lt;a href=&quot;https://teletype.in/@ttach/powerpoint-stay-on-slide&quot; target=&quot;_blank&quot;&gt;Как отключить переход к следующему слайду колёсиком в PowerPoint⁠⁠.&lt;/a&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Aj3D&quot;&gt;Другие программы&lt;/h2&gt;
  &lt;p id=&quot;dQso&quot;&gt;Использованный приём с регулярным опросом мыши можно распространить и на другие приложения, где Вам хотелось бы добавить панорамирование. Вопрос в том, как сообщать программе, что мы хотим сдвинуть её окно. Один из способов сделать это — послать окну программы сообщение о прокрутке:&lt;/p&gt;
  &lt;pre id=&quot;ufZ1&quot;&gt;;           0x114 — горизонтальная прокрутка
;           0x115 — вертикальная
;             |   1/0 — направление 
;             |    |     id элемента управления
;             |    |      |    HWND окна
;             |    |      |     |
;             ↓    ↓      ↓     ↓
PostMessage 0x114, 1, 0, ctrl, win&lt;/pre&gt;
  &lt;p id=&quot;BPrz&quot;&gt;Узнать id элемента управления можно задав ClassNN, полученный с помощью утилиты Window spy из комплекта программы AutoHotKey:&lt;/p&gt;
  &lt;figure id=&quot;lOJf&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/90/60/9060a04e-e5e5-4114-85da-edf61ae541cd.png&quot; width=&quot;356&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Kwqv&quot;&gt;Вот пример скрипта для WordPad:&lt;/p&gt;
  &lt;pre id=&quot;ogMB&quot; data-lang=&quot;clojure&quot;&gt;#HotIf WinActive(&amp;quot;ahk_class WordPadClass&amp;quot;) ; WordPad

MButton::PanWordPad()

PanWordPad(*) {
	static XT := 30
	static YT := 30
	static MOUSEPOLLING := 50
	mx0:=my0:=mx1:=my1:=0
	
	win := WinGetID(&amp;quot;A&amp;quot;) ; получим id активного окна
	ctrl := ControlGetHWND(&amp;quot;RICHEDIT50W1&amp;quot;, win) ; получим id основного элемента управления, который двигать будем
	
	MouseGetPos &amp;amp;mx0, &amp;amp;my0
	Loop {
		Sleep MOUSEPOLLING
		if !GetKeyState(&amp;quot;MButton&amp;quot;, &amp;quot;P&amp;quot;) {
			return
		}
		MouseGetPos &amp;amp;mx1, &amp;amp;my1
		dx := mx1-mx0
		dy := my1-my0
		dx := -round(dx/XT*3)
		dy := -round(dy/YT*1)
		;tooltip &amp;quot;dx &amp;quot; dx &amp;quot; dy &amp;quot; dy
        if (dX||dY) {
        	if dX &amp;gt; 0 {
        		loop dX 
        			PostMessage 0x114, 1, 0, ctrl, win ; вправо
        	} else if dX &amp;lt; 0 {
        		loop abs(dX)
        			PostMessage 0x114, 0, 0, ctrl, win ; влево
        	}
        	if dY &amp;gt; 0 {
        		loop dY
        			PostMessage 0x115, 1, 0, ctrl, win ; вниз
        	} else if dY &amp;lt; 0 {
        		loop abs(dY)
        			PostMessage 0x115, 0, 0, ctrl, win ; вверх
        	}
        }
		mx0 := mx1
		my0 := my1
	}
}&lt;/pre&gt;
  &lt;p id=&quot;QPnO&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;uRvl&quot;&gt;&lt;a href=&quot;https://gitflic.ru/project/yabalak/office-pan&quot; target=&quot;_blank&quot;&gt;Файл со всем кодом из статьи&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;v744&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;RSGt&quot;&gt;
    &lt;tt-tag name=&quot;autohotkey&quot;&gt;#autohotkey&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;word&quot;&gt;#word&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;excel&quot;&gt;#excel&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;powerpoint&quot;&gt;#powerpoint&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;visio&quot;&gt;#visio&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>ttach:powerpoint-stay-on-slide</id><link rel="alternate" type="text/html" href="https://teletype.in/@ttach/powerpoint-stay-on-slide?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ttach"></link><title>Как отключить переход к следующему слайду колёсиком в PowerPoint⁠⁠</title><published>2023-02-13T19:57:45.003Z</published><updated>2023-02-13T19:57:45.003Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/58/28/58285ed5-426a-4965-9dd1-c82648e307e6.png"></media:thumbnail><category term="tips" label="Советы"></category><tt:hashtag>powerpoint</tt:hashtag><summary type="html">&lt;img src=&quot;https://cs12.pikabu.ru/post_img/2020/09/17/8/1600344535182973474.webp&quot;&gt;Вы увеличили масштаб в PowerPoint и прокрутили слайд мышкой в самый низ, например, для регулировки размеров изображения в этом месте. Одно неосторожное движение колёсиком и слайд переключается на следующий!</summary><content type="html">
  &lt;p id=&quot;OXqx&quot;&gt;Вы увеличили масштаб в PowerPoint и прокрутили слайд мышкой в самый низ, например, для регулировки размеров изображения в этом месте. Одно неосторожное движение колёсиком и слайд переключается на следующий!&lt;/p&gt;
  &lt;figure id=&quot;HSZQ&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://cs12.pikabu.ru/post_img/2020/09/17/8/1600344535182973474.webp&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;raaF&quot;&gt;Сейчас мы будем решать эту проблему. На ленте выберите Вид → Образец слайдов. Выберите самый первый образец в колонке слева, он чуть больше остальных. Поставьте маленький масштаб. Разместите сверху и снизу от слайда (подальше) какие-нибудь фигуры.&lt;/p&gt;
  &lt;figure id=&quot;EHB2&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://cs11.pikabu.ru/post_img/2020/09/17/8/160034497417114666.webp&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;wufJ&quot;&gt;Проделайте то же самое на других образцах слайдов, например, на образце титульного слайда, пустого слайда (по желанию). Нажмите «Закрыть режим образца» на первой вкладке.&lt;/p&gt;
  &lt;p id=&quot;5V7R&quot;&gt;Готово! Теперь колесо мышки не переключает слайды при редактировании (а при демонстрации, как и положено, переключает).&lt;/p&gt;
  &lt;p id=&quot;9ZWX&quot;&gt;Источник: &lt;a href=&quot;https://superuser.com/a/1283911&quot; target=&quot;_blank&quot;&gt;superuser&lt;/a&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;dfro&quot;&gt;
    &lt;tt-tag name=&quot;powerpoint&quot;&gt;#powerpoint&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>ttach:ahk-get-com-app</id><link rel="alternate" type="text/html" href="https://teletype.in/@ttach/ahk-get-com-app?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ttach"></link><title>GetObject в AutoHotKey</title><published>2023-02-13T18:29:35.472Z</published><updated>2024-02-17T05:26:40.906Z</updated><category term="autohotkey" label="Autohotkey"></category><tt:hashtag>autohotkey</tt:hashtag><summary type="html">🌰 Используйте ComObjActive(...), чтобы управлять программами</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;YVR8&quot;&gt;&lt;a href=&quot;/@ttach/in_nuce&quot;&gt;🌰&lt;/a&gt; Используйте ComObjActive(...), чтобы управлять программами&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;vPmx&quot;&gt;Функция &lt;a href=&quot;https://www.autohotkey.com/docs/v2/lib/ComObjActive.htm&quot; target=&quot;_blank&quot;&gt;ComObjActive&lt;/a&gt; — это аналог GetObject из Visual Basic, только в AutoHotKey. Она позволяет подключиться к программам, которые поддерживают интерфейс COM и управлять ими:&lt;/p&gt;
  &lt;pre id=&quot;IgKU&quot; data-lang=&quot;clojure&quot;&gt;word := ComObjActive(&amp;quot;Word.Application&amp;quot;)
if !word
    MsgBox &amp;quot;Word не запущен.&amp;quot;
else
    MsgBox &amp;quot;Сейчас открыт документ &amp;quot; word.ActiveDocument.FullName&lt;/pre&gt;
  &lt;p id=&quot;jcyw&quot;&gt;Если программа ещё не запущена, то запустить её можно с помощью ComObject(...) — это аналог функции CreateObject из VisualBasic:&lt;/p&gt;
  &lt;pre id=&quot;F0Sb&quot; data-lang=&quot;clojure&quot;&gt;ie := ComObject(&amp;quot;InternetExplorer.Application&amp;quot;) ; запустить браузер
ie.Visible := true  ; Показать окно браузера&lt;/pre&gt;
  &lt;p id=&quot;yHRQ&quot;&gt;Получив в переменную объект приложения (например, word), мы можем обращаться к свойствам и методам этого приложения. Кроме того, мы можем реагировать на события, которые происходят в приложении. Для этого создадим функции с именами по шаблону &lt;code&gt;ПрефиксСобытие&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;rvdD&quot; data-lang=&quot;clojure&quot;&gt;WD_Quit(app) {
	; Word закрывается
}
WD_DocumentOpen(doc) {
    ; В ворде открыт новый документ
}&lt;/pre&gt;
  &lt;p id=&quot;QI81&quot;&gt;В этом коде &lt;code&gt;WD_&lt;/code&gt; — это префикс, а &lt;code&gt;Quit&lt;/code&gt; и &lt;code&gt;DocumentOpen&lt;/code&gt; — названия событий.&lt;/p&gt;
  &lt;p id=&quot;4wwv&quot;&gt;Теперь укажем, что объект &lt;code&gt;word&lt;/code&gt; должен реагировать на события путём запуска функций, начинающихся с &lt;code&gt;WD_&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;tgxT&quot; data-lang=&quot;clojure&quot;&gt;ComObjConnect(word, &amp;quot;WD_&amp;quot;)&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;rif7&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;85qj&quot;&gt;Чтобы управлять сразу несколькими приложениями из одного скрипта, я использую функцию &lt;strong&gt;GetComApp&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;4aKy&quot; data-lang=&quot;clojure&quot;&gt;GetComApp(&amp;amp;app, force, className, descr, eventFunctionsPrefix := &amp;quot;&amp;quot;) {
	if force 
		app := &amp;quot;&amp;quot;
		if force = -1
			return   
	if app {
		return app
	}
	try {
		app := ComObjActive(className)
		Tooltip descr &amp;quot;&amp;#x60;nВерсия &amp;quot; app.version
		SetTimer ()=&amp;gt;Tooltip(), -1000
		if eventFunctionsPrefix {
			ComObjConnect app, eventFunctionsPrefix
		}
		return app
	} catch {
		Tooltip descr &amp;quot; не найден&amp;#x60;nGetComApp()&amp;quot;
		SetTimer ()=&amp;gt;Tooltip(), -2000
		return
	}
}&lt;/pre&gt;
  &lt;p id=&quot;mHqA&quot;&gt;У этой функции такие параметры:&lt;/p&gt;
  &lt;ul id=&quot;bS3n&quot;&gt;
    &lt;li id=&quot;GM2c&quot;&gt;&lt;code&gt;&amp;amp;app&lt;/code&gt; — переменная, в которую помещается объект, например &lt;code&gt;&amp;amp;word&lt;/code&gt;. Знак &lt;strong&gt;&amp;amp;&lt;/strong&gt; означает, что это указатель.&lt;/li&gt;
    &lt;li id=&quot;AFFr&quot;&gt;&lt;code&gt;force&lt;/code&gt; — если передать &lt;code&gt;1&lt;/code&gt;, то произойдёт повторное подключение к объекту, даже если оно было выполнено ранее&lt;br /&gt;а если передать &lt;code&gt;-1&lt;/code&gt;, то вернётся пустой объект. Это можно использовать для отключения от объекта приложения.&lt;/li&gt;
    &lt;li id=&quot;XJWM&quot;&gt;&lt;code&gt;className&lt;/code&gt; — название класса приложения, например &lt;code&gt;&amp;quot;Word.Application&amp;quot;&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;8nk0&quot;&gt;&lt;code&gt;descr&lt;/code&gt; — понятное название приложения, например, &lt;code&gt;&amp;quot;Ворд&amp;quot;&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;6kec&quot;&gt;&lt;code&gt;eventFunctionsPrefix&lt;/code&gt; — префикс для обработки событий, например, &lt;code&gt;&amp;quot;wd_&amp;quot;&lt;/code&gt; (необязательный).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;31aH&quot;&gt;Теперь добавим функции, которые получают ссылки на нужные приложения:&lt;/p&gt;
  &lt;pre id=&quot;KNyx&quot; data-lang=&quot;clojure&quot;&gt;GetWord(Force:=0) {
	static wd := &amp;quot;&amp;quot;
	return GetComApp(&amp;amp;wd, force, &amp;quot;Word.Application&amp;quot;, &amp;quot;Word&amp;quot;)
}
GetPoint(Force:=0) {
	static pp := &amp;quot;&amp;quot;
	return GetComApp(&amp;amp;pp, force, &amp;quot;PowerPoint.Application&amp;quot;, &amp;quot;PowerPoint&amp;quot;, &amp;quot;PP_&amp;quot;)
}
GetExcel(Force:=0) {
	static xl := &amp;quot;&amp;quot;
	return GetComApp(&amp;amp;xl, force, &amp;quot;Excel.Application&amp;quot;, &amp;quot;Excel&amp;quot;, &amp;quot;XL_&amp;quot;)
}
GetAcad(Force:=0) {
	static acad := &amp;quot;&amp;quot;
	return GetComApp(&amp;amp;acad, force, &amp;quot;AutoCAD.Application&amp;quot;, &amp;quot;Автокад&amp;quot;, &amp;quot;acad_&amp;quot;)
}&lt;/pre&gt;
  &lt;p id=&quot;9eh7&quot;&gt;Как их использовать? Например, в Word:&lt;/p&gt;
  &lt;pre id=&quot;MdXF&quot; data-lang=&quot;clojure&quot;&gt;GetWord().PrintPreview := true ; Открыть предварительный просмотр в word&lt;/pre&gt;
  &lt;p id=&quot;WtuY&quot;&gt;или так:&lt;/p&gt;
  &lt;pre id=&quot;Pw1j&quot; data-lang=&quot;clojure&quot;&gt;wd := GetWord()
wd.Dialogs(88).Show() ; Открыть диалоговое окно «Печать»&lt;/pre&gt;
  &lt;p id=&quot;S5i1&quot;&gt;или в экселе:&lt;/p&gt;
  &lt;pre id=&quot;HyTQ&quot; data-lang=&quot;clojure&quot;&gt;xl := GetExcel()
xl.Activeworkbook.Close(false) ; Закрыть книгу без сохранения&lt;/pre&gt;
  &lt;p id=&quot;rnmw&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;oAgo&quot;&gt;А вот так можно освободить все переменные, хранящие ссылки на объекты приложений:&lt;/p&gt;
  &lt;pre id=&quot;obCO&quot; data-lang=&quot;clojure&quot;&gt;	FreeOleServers(*) {
		GetExcel(-1)
		GetWord(-1)
		GetAcad(-1)
		GetPoint(-1)
		Tooltip &amp;quot;Ссылки на эксель, ворд, поинт, очищены.&amp;quot;
		SetTimer(()=&amp;gt;Tooltip(), 3000)
	}&lt;/pre&gt;
  &lt;p id=&quot;WXlk&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;KGfV&quot;&gt;
    &lt;tt-tag name=&quot;autohotkey&quot;&gt;#autohotkey&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>ttach:access-new-sql-query</id><link rel="alternate" type="text/html" href="https://teletype.in/@ttach/access-new-sql-query?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ttach"></link><title>Как создать SQL-запрос в Access</title><published>2023-02-11T19:35:43.709Z</published><updated>2025-11-13T10:31:16.422Z</updated><category term="autohotkey" label="Autohotkey"></category><tt:hashtag>autohotkey</tt:hashtag><tt:hashtag>access</tt:hashtag><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/11/26/11260faa-4e43-43bd-bc8b-8b06da492d5d.png&quot;&gt;🌰 Создаём новый запрос сразу в режиме SQL с помощью скрипта на AHK</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;aquW&quot;&gt;&lt;a href=&quot;/@ttach/in_nuce&quot;&gt;🌰&lt;/a&gt; Создаём новый запрос сразу в режиме SQL с помощью скрипта на AHK&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;JL9F&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/11/26/11260faa-4e43-43bd-bc8b-8b06da492d5d.png&quot; width=&quot;253&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;BJgG&quot;&gt;Если Вы решили создать новый запрос в Access, то нажимаете «Создание», «Конструктор запросов», Закрываете окошко с выбором таблиц, и только потом кнопку «SQL». Как можно ускорить этот процесс, чтобы сразу перейти к вводу SQL-кода? Нам поможет следующий скрипт на AutoHotKey, основанный на &lt;a href=&quot;https://stackoverflow.com/a/53178315&quot; target=&quot;_blank&quot;&gt;макросе&lt;/a&gt; со StackOverflow:&lt;/p&gt;
  &lt;pre id=&quot;oOhV&quot; data-lang=&quot;clojure&quot;&gt;#Requires AutoHotkey v2+
#HotIf WinActive(&amp;quot;ahk_class OMain&amp;quot;) ; Когда активно окно Access
^sc31:: AccessNewQuery() ; Новый SQL-запрос по ctrl+N	

AccessNewQuery(*) {
    try {
        app := ComObjActive(&amp;quot;Access.Application&amp;quot;) ; берём access...
    } catch {
        Tooltip(&amp;#x27;AccessNewQuery FAIL: ComObjActive(&amp;quot;Access.Application&amp;quot;)&amp;#x27;)
        SetTimer(()=&amp;gt;Tooltip(), 1000)
        Return
    }
    ; Убедимся в том, что база открыта:
    try {
        db := app.CurrentDb
        if (db = &amp;quot;&amp;quot;)
            return
    } catch {
        return
    }
    ; Найдём незанятое имя для запроса:
    qName := &amp;quot;&amp;quot;
    Loop 250 {
        if !QueryExists(&amp;quot;NewQuery&amp;quot; . A_Index) {
            qName := &amp;quot;NewQuery&amp;quot; . A_Index
            Break
        }
    }
    if !qName
        return
    ; Нашли незанятое имя, создаём новый запрос:
    qdf := db.CreateQueryDef(qName)
    qdf.SQL := &amp;quot;SELECT Date() AS Today;&amp;quot;
    qdf.Close()
    app.DoCmd.OpenQuery(qName, 1) ;1=acViewDesign
    app.DoCmd.RunCommand(184) ;184=acCmdSQLView
    ;app.DoCmd.RunCommand 337 ;337=acCmdDelete ; очистка текста запроса
    ; всё!
    QueryExists(nm) { ; существует ли запрос с таким названием в базе db?
        for qd in db.QueryDefs {
            if qd.Name = nm
                return true
        }
        return false
    }  
}
&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;6448&quot;&gt;&lt;a href=&quot;https://teletype.in/@ttach/ahk_scancodes&quot; target=&quot;_blank&quot;&gt;Сканкод sc31&lt;/a&gt; соответствует клавише N и теперь при нажатии на Ctrl+N будет открываться редактор запросов с текстом  &lt;code&gt;SELECT Date() AS Today&lt;/code&gt;.&lt;br /&gt;Разумеется, горячую клавишу можно &lt;a href=&quot;https://www.autohotkey.com/docs/v2/Hotkeys.htm&quot; target=&quot;_blank&quot;&gt;задать&lt;/a&gt; любую другую.&lt;/p&gt;
  &lt;h2 id=&quot;6FB3&quot;&gt;&lt;/h2&gt;
  &lt;tt-tags id=&quot;37YE&quot;&gt;
    &lt;tt-tag name=&quot;autohotkey&quot;&gt;#autohotkey&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;access&quot;&gt;#access&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>ttach:vba-surrogate-pairs</id><link rel="alternate" type="text/html" href="https://teletype.in/@ttach/vba-surrogate-pairs?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ttach"></link><title>Эмодзи на VBA</title><published>2022-02-18T20:03:07.719Z</published><updated>2022-02-18T20:03:07.719Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/2c/a9/2ca9aba1-4f5f-4c0a-a0a2-eecabf59abcb.png"></media:thumbnail><category term="vba" label="VBA"></category><tt:hashtag>vba</tt:hashtag><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/e2/d4/e2d4f8e6-1ce1-46ce-81ef-ad855acc9f6d.png&quot;&gt;🌰 Используем суррогатные пары для отображения символов с кодами &gt; 65535 🐱</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;oUog&quot;&gt;&lt;a href=&quot;https://teletype.in/@ttach/in_nuce&quot; target=&quot;_blank&quot;&gt;🌰&lt;/a&gt; Используем суррогатные пары для отображения символов с кодами &amp;gt; 65535 🐱&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;h9au&quot;&gt;Функция &lt;code&gt;ChrW(код)&lt;/code&gt; не работает для символов с кодом более 65535. Как же отобразить в документе, например,  символ 🐱 с кодом 0x1F431 (128049)?&lt;/p&gt;
  &lt;p id=&quot;cerR&quot;&gt;Такие символы мы можем закодировать двумя кодовыми единицами. Пара таких кодов называется &lt;a href=&quot;https://habr.com/ru/post/485148/#5&quot; target=&quot;_blank&quot;&gt;суррогатной парой&lt;/a&gt; юникода.&lt;/p&gt;
  &lt;p id=&quot;Canl&quot;&gt;Первая кодовая единица суррогатной пары всегда находится в диапазоне от 0xD800 до 0xDBFF и называется верхней частью пары.&lt;/p&gt;
  &lt;p id=&quot;LxZR&quot;&gt;Вторая кодовая единица суррогатной пары всегда находится в диапазоне от 0xDC00 до 0xDFFF и называется нижней частью пары.&lt;/p&gt;
  &lt;p id=&quot;0Cq4&quot;&gt;Обратите внимание, что суррогатная пара представляет только один символ.&lt;/p&gt;
  &lt;p id=&quot;lont&quot;&gt;Для вычисления этих кодов используются &lt;a href=&quot;https://mathiasbynens.be/notes/javascript-encoding#surrogate-pairs&quot; target=&quot;_blank&quot;&gt;следующие формулы&lt;/a&gt; (в excel vba):&lt;/p&gt;
  &lt;pre id=&quot;dOVV&quot; data-lang=&quot;visual-basic&quot;&gt;Type SurrogatePair
    lo As Long
    hi As Long
End Type&lt;/pre&gt;
  &lt;pre id=&quot;eeuw&quot; data-lang=&quot;visual-basic&quot;&gt;Function Code2pair(codepoint As Long) As SurrogatePair
&amp;#x27; Расчёт суррогатной пары UTF-16
    Dim sp As SurrogatePair
    sp.hi = WorksheetFunction.Floor((codepoint - &amp;amp;H10000) / &amp;amp;H400, 1) + &amp;amp;HD800
    sp.lo = (codepoint - &amp;amp;H10000) Mod &amp;amp;H400 + &amp;amp;HDC00
    Code2pair = sp
End Function&lt;/pre&gt;
  &lt;p id=&quot;i938&quot;&gt;Теперь можно написать функцию, которая выведет нужный символ по его коду с помощью суррогатной пары:&lt;/p&gt;
  &lt;pre id=&quot;zyjN&quot; data-lang=&quot;visual-basic&quot;&gt;Function Rune(codepoint As Long) As String
&amp;#x27; Вывод символа с указанным кодом
    Dim sp As SurrogatePair
    sp = Code2pair(codepoint)
    Rune = ChrW(sp.hi) &amp;amp; ChrW(sp.lo)
End Function&lt;/pre&gt;
  &lt;p id=&quot;42K3&quot;&gt;Установим нужный шрифт и размер, после чего потренируемся на кошках:&lt;/p&gt;
  &lt;figure id=&quot;jGwe&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e2/d4/e2d4f8e6-1ce1-46ce-81ef-ad855acc9f6d.png&quot; width=&quot;354&quot; /&gt;
    &lt;figcaption&gt;Процедура вставки символа с кодом 0x1f431 и результат её работы&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;me2X&quot;&gt;Помните, что сложные эмодзи могут состоять из нескольких подряд идущих символов юникода, но не все системы могут правильно это отобразить.&lt;/p&gt;
  &lt;tt-tags id=&quot;6RLV&quot;&gt;
    &lt;tt-tag name=&quot;vba&quot;&gt;#vba&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>ttach:totalcmd-iso</id><link rel="alternate" type="text/html" href="https://teletype.in/@ttach/totalcmd-iso?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ttach"></link><title>Как создать образ диска iso в один клик</title><published>2021-12-16T15:34:59.820Z</published><updated>2021-12-17T06:36:33.532Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/8d/50/8d50b52f-0542-4112-901b-e5a7c61210d8.png"></media:thumbnail><category term="tips" label="Советы"></category><tt:hashtag>totalcmd</tt:hashtag><tt:hashtag>cmd</tt:hashtag><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/03/45/03452a98-296d-4654-aa65-949e8a1809bb.png&quot;&gt;🌰 Интегрируем cdimage.exe в Total Commander</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;5iId&quot;&gt;&lt;a href=&quot;/@ttach/in_nuce&quot;&gt;🌰&lt;/a&gt; Интегрируем cdimage.exe в Total Commander&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;Zvwv&quot;&gt;Обычно для создания файлов iso используется программа для записи дисков, например Nero, Alcohol или &lt;a href=&quot;https://ru.wikipedia.org/wiki/Small_CD-Writer&quot; target=&quot;_blank&quot;&gt;Small CD Writer&lt;/a&gt;, но у пользователей Total Commander есть интересная альтернатива.&lt;/p&gt;
  &lt;p id=&quot;NfGh&quot;&gt;Суть в следующем. Открываем в Total Commander папку, содержимое которой предстоит поместить в образ iso. На другой панели открываем папку, куда следует положить готовый iso-файл. &lt;strong&gt;Стоя в исходной папке&lt;/strong&gt;, нажимаем кнопку на панели, после чего в папке-получателе появляется iso-файл. Имя файла и метка будет назначена автоматически.&lt;/p&gt;
  &lt;p id=&quot;rzl6&quot;&gt;Вот как это выглядит на скриншотах:&lt;/p&gt;
  &lt;figure id=&quot;yAqM&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/03/45/03452a98-296d-4654-aa65-949e8a1809bb.png&quot; width=&quot;1085&quot; /&gt;
    &lt;figcaption&gt;Слева открыта папка, которую следует упаковать в файл ISO, а справа — папка-получатель. Запускаем программу...&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;y9vn&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4d/d1/4dd18337-a780-4b63-86e7-87c72e62c812.png&quot; width=&quot;995&quot; /&gt;
    &lt;figcaption&gt;Идёт создание файла ISO&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;7Wgr&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b4/37/b4373936-ce39-4f89-980b-1af7f84114cb.png&quot; width=&quot;1085&quot; /&gt;
    &lt;figcaption&gt;Файл ISO появился в целевой папке&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;nzJA&quot;&gt;Теперь разберёмся, как это сделать.&lt;/p&gt;
  &lt;p id=&quot;wOC7&quot;&gt;Возьмите программу &lt;a href=&quot;http://www.oszone.net/2759&quot; target=&quot;_blank&quot;&gt;CDIMAGE&lt;/a&gt; и положите её, например, в папку &lt;code&gt;\totalcmd\Plugins\Util\CDIMAGE\&lt;/code&gt;. Здесь написано, что это утилита для внутреннего использования в Microsoft и создана она в 2000 году, поэтому... всё на свой страх и риск. Впрочем, формат файла iso не поменялся с того времени :)&lt;/p&gt;
  &lt;figure id=&quot;J7ak&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b5/5d/b55db6f3-c7b5-4035-9785-8598244a5944.png&quot; width=&quot;995&quot; /&gt;
    &lt;figcaption&gt;Запуск программы без параметров выводит информацию и помощь по использованию&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;l5dH&quot;&gt;Рядом положите файл TotalCdImage.cmd следующего содержания:&lt;/p&gt;
  &lt;pre id=&quot;cGRu&quot;&gt;@rem Сделаем метку из 32 символов исходного пути
set label=%~nx1
set label=%label:~0,32%
@rem @echo %~n1%~x1
&amp;quot;%~dp0CDIMAGE.EXE&amp;quot; -l&amp;quot;%label%&amp;quot; -c -h -u2 -m &amp;quot;%~1&amp;quot; &amp;quot;%~2%~nx1.iso&amp;quot;||pause&lt;/pre&gt;
  &lt;p id=&quot;plan&quot;&gt;↑ его надо будет сохранить в кодировке 866.&lt;/p&gt;
  &lt;p id=&quot;ODun&quot;&gt;Теперь скопируйте код ниже &lt;/p&gt;
  &lt;pre id=&quot;qsQ5&quot;&gt;TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Plugins\Util\CDIMAGE\TotalCdImage.cmd
&amp;quot;%P.&amp;quot; &amp;quot;%T&amp;quot;
C:\Windows\System32\imageres.dll,56
Создать UDF-образ из открытой папки
%COMMANDER_PATH%\Plugins\Util\CDIMAGE\
0
-1
&lt;/pre&gt;
  &lt;p id=&quot;Af3T&quot;&gt;...и вставьте его на панель Total Commander с помощью правого клика:&lt;/p&gt;
  &lt;figure id=&quot;bKUT&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7c/dc/7cdc5df8-f95a-409c-b02e-177d13c01980.png&quot; width=&quot;492&quot; /&gt;
    &lt;figcaption&gt;Кнопки на панели Total Commander можно копировать и вставлять&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;nNul&quot;&gt;На панели появится кнопка, выполняющая описанную функцию. Название и иконку можно выбрать по вкусу. Не забывайте, что активной панелью должна быть та, в которой открыта упаковываемая папка.&lt;/p&gt;
  &lt;h2 id=&quot;I75B&quot;&gt;Для пользователей Small CD-Writer&lt;/h2&gt;
  &lt;p id=&quot;I4Zh&quot;&gt;Можно интегрировать Small CD-Writer в тотал коммандер, чтобы отправлять выделенные файлы и папки в проект Small CD-Writer. Для этого вставьте на панель инструментов такую кнопку:&lt;/p&gt;
  &lt;pre id=&quot;F5Lw&quot;&gt;TOTALCMD#BAR#DATA
&amp;quot;c:\Program Files (x86)\Small CD-Writer 1.4\SCDWriter.exe&amp;quot;
%P%S
c:\Program Files (x86)\Small CD-Writer 1.4\SCDWriter.exe
Добавить в проект SCDWriter
c:\Program Files (x86)\Small CD-Writer 1.4\
1
-1
&lt;/pre&gt;
  &lt;p id=&quot;xr9O&quot;&gt;Путь к программе следует заменить на актуальный.&lt;/p&gt;
  &lt;figure id=&quot;afYk&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8f/1a/8f1a7a86-10f4-45f9-9375-84f3fde241fe.png&quot; width=&quot;792&quot; /&gt;
    &lt;figcaption&gt;Добавление выделенных файлов и папок в проект SCDW&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;yG5s&quot;&gt;Можно добавить несколько файлов, каждый раз нажимая на полученную кнопку после выделения файлов.&lt;/p&gt;
  &lt;p id=&quot;FiwQ&quot;&gt;Когда нужные файлы набраны, можно записать их на диск или сохранить в файл iso из программы Small CD-Writer.&lt;/p&gt;
  &lt;tt-tags id=&quot;0GYG&quot;&gt;
    &lt;tt-tag name=&quot;totalcmd&quot;&gt;#totalcmd&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;cmd&quot;&gt;#cmd&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>ttach:zip-as-folder</id><link rel="alternate" type="text/html" href="https://teletype.in/@ttach/zip-as-folder?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ttach"></link><title>Открытие zip-архивов как папок</title><published>2021-12-12T16:26:19.101Z</published><updated>2023-09-08T04:19:18.165Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/5b/55/5b554aa4-8acc-4f4b-92b2-b96d81ee0e9b.png"></media:thumbnail><category term="tips" label="Советы"></category><tt:hashtag>совет</tt:hashtag><tt:hashtag>cmd</tt:hashtag><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/15/62/1562aa40-22c0-48c8-b58c-6a14f573fa14.png&quot;&gt;ZIP-архивы превращаются в папки «на лету», без промежуточной распаковки во временную папку</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;ddA7&quot;&gt;&lt;a href=&quot;/@ttach/in_nuce&quot;&gt;🌰 &lt;/a&gt;ZIP-архивы превращаются в папки «на лету», без промежуточной распаковки во временную папку&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;UVvc&quot;&gt;Внимание! Описываемая программа несовместима с антивирусом Касперского. Компьютер «зависает» наглухо.&lt;/p&gt;
  &lt;/section&gt;
  &lt;ol id=&quot;pjBm&quot;&gt;
    &lt;li id=&quot;GXAf&quot;&gt;Устанавливаем Pismo File Mount Audit Package build 171&lt;/li&gt;
    &lt;li id=&quot;ULnM&quot;&gt;Кладём в папку Windows (ну или в другое место) файл &lt;code&gt;pfmmount.cmd&lt;/code&gt; следующего содержания:&lt;br /&gt;&lt;code&gt;pfm mount %1 &amp;amp;&amp;amp; explorer %1&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;b9Ev&quot;&gt;Теперь назначим zip-архивам ассоциацию с этим файлом, например, путём запуска reg-файла следующего содержания:&lt;/li&gt;
  &lt;/ol&gt;
  &lt;pre id=&quot;kdyL&quot;&gt;Windows Registry Editor Version 5.00&lt;/pre&gt;
  &lt;pre id=&quot;5pR2&quot;&gt;[HKEY_CLASSES_ROOT\.zip]
@=&amp;quot;Applications\\pfmmount.cmd&amp;quot;&lt;/pre&gt;
  &lt;pre id=&quot;niU0&quot;&gt;[HKEY_CLASSES_ROOT\Applications\pfmmount.cmd]&lt;/pre&gt;
  &lt;pre id=&quot;buT4&quot;&gt;[HKEY_CLASSES_ROOT\Applications\pfmmount.cmd\DefaultIcon]
@=&amp;quot;explorer.exe&amp;quot;&lt;/pre&gt;
  &lt;pre id=&quot;VNwq&quot;&gt;[HKEY_CLASSES_ROOT\Applications\pfmmount.cmd\shell]&lt;/pre&gt;
  &lt;pre id=&quot;wMEm&quot;&gt;[HKEY_CLASSES_ROOT\Applications\pfmmount.cmd\shell\open]&lt;/pre&gt;
  &lt;pre id=&quot;zB9k&quot;&gt;[HKEY_CLASSES_ROOT\Applications\pfmmount.cmd\shell\open\command]
@=&amp;quot;\&amp;quot;C:\\Windows\\pfmmount.cmd\&amp;quot; \&amp;quot;%1\&amp;quot;&amp;quot;&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;tfe9&quot;&gt;Готово. Попробуем запустить какой-нибудь архив:&lt;/p&gt;
  &lt;figure id=&quot;nvnE&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/15/62/1562aa40-22c0-48c8-b58c-6a14f573fa14.png&quot; width=&quot;1006&quot; /&gt;
    &lt;figcaption&gt;Архив становится папкой при запуске&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Tx9f&quot;&gt;Значок поменял свой тип: был «Файл &amp;quot;ZIP&amp;quot;», стал «Папка с файлами». При этом содержимое папки сразу открылось в новом окне:&lt;/p&gt;
  &lt;figure id=&quot;dufj&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0a/10/0a103e6b-c98f-49cb-ae97-394ee3662bcb.png&quot; width=&quot;560&quot; /&gt;
    &lt;figcaption&gt;Содержимое архива&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;mzsJ&quot;&gt;Вы не сможете удалить или изменить файлы в этой «папке», а также добавить туда ещё файлы и папки, однако такая папка будет напрямую доступна для всех программ.&lt;/p&gt;
  &lt;p id=&quot;BBci&quot;&gt;Ещё один «баг»: папка не удаляется :)&lt;br /&gt;Чтобы удалить такую папку, сначала надо выбрать пункт «Unmount» в контекстном меню этой папки, либо в окошке программы Pismo File Mount Audit Package, ищите её значок в трее.&lt;/p&gt;
  &lt;figure id=&quot;fjnH&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/eb/2f/eb2fa13e-25f7-4b47-b9be-3ae2a216f308.png&quot; width=&quot;415&quot; /&gt;
    &lt;figcaption&gt;Окно программы показывает все примонтированные архивы&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;5ZpG&quot;&gt;Программа PFM поддерживает только файлы ZIP и ISO.&lt;/p&gt;
  &lt;tt-tags id=&quot;Ofdc&quot;&gt;
    &lt;tt-tag name=&quot;совет&quot;&gt;#совет&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;cmd&quot;&gt;#cmd&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry></feed>