Ответ на пост «Ошиблась»1
Если Java даёт свободу перемещения по миру, то благодаря JavaScript и вовсе можно выйти в космос! См. Телескоп «Джеймс Уэбб» использует в системе управления код JavaScript
Если Java даёт свободу перемещения по миру, то благодаря JavaScript и вовсе можно выйти в космос! См. Телескоп «Джеймс Уэбб» использует в системе управления код JavaScript
Ссылка на скрипт: https://gitflic.ru/project/yabalak/office-pan
В двух словах: перемещаем документ зажатым колесом мыши в Microsoft Office с помощью скрипта на Autohotkey.
При работе в дизайнерских программах, при просмотре карт или PDF-документов Вы можете передвигать чертёж/карту/документ при зажатой кнопке мыши. В CADах это обычно средняя кнопка, в PDF — левая, в 2gis — левая или правая.
Обычно за включение этого режима отвечает кнопка с иконкой руки (panning hand), вроде такой:
Однако в офисных приложениях нажатие на колесо вызывает режим прокрутки, когда документ начинает ползти в сторону перемещения мыши, что не всегда удобно. Попробуем вернуть «нормальное» поведение колеса в приложениях Microsoft Office.
С word-ом проще всего. Функция «рука» встроена в ворд, она называется «Режим панорамирования»:
В этом режиме удобно редактировать графические элементы в word при большом увеличении. Если функция панорамирования в ворде нужна Вам периодически, то можно вынести её на панель быстрого доступа (см. картинку выше). А чтобы назначить эту функцию на среднюю кнопку мыши, используем следующий скрипт AHK:
#HotIf WinActive("ahk_class OpusApp") ; Когда открыт Word...
MButton:: WordPan()
WordPan(*) {
if !(wd := GetWord()) ; Если ворд не берётся,
return ; то выход
try {
WD.ActiveWindow.View.Panning := True ; рука вкл
Click "down" ; зажали ЛКМ
KeyWait "MButton" ; ждём отпускания колеса
Click "up" ; отжали лкм
WD.ActiveWindow.View.Panning := False ; рука выкл
}
}
GetWord(Force:=0) {
static wd := ""
return GetComApp(&wd, force, "Word.Application", "Word")
}
В скрипте используется функция GetComApp
В visio тоже несложно использовать «руку», но она активируется странным сочетанием Ctrl+Shift+Правая кнопка мыши. Поменяем на среднюю кнопку:
#HotIf WinActive("ahk_class VISIOA")
MButton:: {
SendInput "{Ctrl down}{Shift down}"
Sleep 20
Send "{Rbutton down}"
KeyWait "MButton"
Send "{Rbutton up}"
SendInput "{Ctrl up}{Shift up}"
}
Для большего сходства с автокадом включите опцию «Панорамирование с помощью IntelliMouse» в настройках visio, чтобы поворот колеса менял увеличение:
А теперь начинается самое интересное. В экселе режима руки нет, хотя он был бы очень кстати для прокрутки широких таблиц влево-вправо. С другой стороны, в Excel имеется поддержка клавиши ScrollLock. Когда Scroll Lock активен (индикатор на клавиатуре горит), клавиши управления курсором ↑↓←→ не передвигают выделение, а осуществляют прокрутку листа, при этом выделение не сбивается. Попробуйте сами. Excel — одна из немногих программ, где работает Scroll Lock.
А ведь это решение! При зажатии колеса мыши мы будем активировать режим Scroll Lock, а при отжатии — снимать его. Останется периодически опрашивать положение мыши, и, если она передвинулась, сдвигать лист в соответствующую сторону клавишами ↑↓←→. Скрипт для Excel:
#HotIf WinActive("ahk_class XLMAIN") ; Excel
MButton:: ScrollLockPan ; Панорамирование СкроллЛоком
ScrollLockPan() {
static XT := 30 ; Порог обнаружения движения мыши (пикселей)
static YT := 30
static MPOLLING := 50 ; Частота опроса мыши, мс
mx0:=my0:=mx1:=my1 := 0 ; Начальные и конечные координаты мыши
MouseGetPos &mx0, &my0
SetScrollLockState 1 ; Скролл лок ВКЛ
Loop {
Sleep MPOLLING
if !GetKeyState("MButton", "P") { ; Если колесо отпущено,
SetScrollLockState 0 ; отключаем скролл лок
return ; и выходим
}
MouseGetPos &mx1, &my1
dx := mx1-mx0
dy := my1-my0
dx := round(dx/XT*1) ; Здесь значения можно подобрать по вкусу
dy := round(dy/YT*4) ; Я умножил на 4, чтобы по вертикали двигалось поживее
;tooltip "dx " dx " dy " dy
if dX > 0 {
Send "{Left " dX "}" ; Нажимаем «влево» нужное число раз (в dX — число)
} else if dX < 0 {
Send "{Right " abs(dX) "}"
}
if dY > 0 {
Send "{Up " dY "}"
} else if dY < 0 {
Send "{Down " abs(dY) "}"
}
mx0 := mx1
my0 := my1
}
}
Разумеется, перемещение листа будет не плавным, как в Word или Visio, а скачками: целыми колонками и строчками сразу. Также сдвиг не будет численно соответствовать количеству пикселей, на которые переместилась мышь. Да это и невозможно, ведь в общем случае все колонки имеют разную ширину, а строки отличаются по высоте.
Отрегулируйте параметры задержки (MPOLLING), порогов (XT, YT) и множители в формулах определения dX/dY так, как Вам будет удобнее.
В PowerPoint тоже нет функции «рука». Действуем аналогично: опрашиваем положение мыши, вычисляем сдвиг, но вместо ScrollLock вызываем функцию SmallScroll, передавая в неё величину сдвигов:
#HotIf WinActive("ahk_class PPTFrameClass") ; PowerPoint 2010+
MButton:: ComPanP(GetPoint())
#HotIf WinActive("ahk_class PP12FrameClass") ; PowerPoint 2007
MButton:: ComPanP(GetPoint())
ComPanP(App) { ; Панорамирование для PowerPoint
static XT := 20 ; Это для панорамирования колёсиком
static YT := 20
static MPOLLING := 50
mx0:=mx1:=my0:=my1:=0
MouseGetPos &mx0, &my0
if !GetKeyState("MButton", "P")
return
loop {
sleep MPOLLING
MouseGetPos &mx1, &my1
dx := mx1-mx0
dy := my1-my0
if !GetKeyState("MButton", "P")
return
dx := round(dx/XT*2)
dy := round(dy/YT*4)
;tooltip "dx " dx " dy " dy
if (dX||dY) {
try {
App.ActiveWindow.SmallScroll -dY, dY, -dX, dX ; Отрицательные значения не воспринимает
} catch {
Tooltip "Отпустите кнопку и начните ещё раз!"
KeyWait "MButton"
Sleep 50
SendLevel 1
SendEvent "^+{MButton}"
SendLevel 0
Tooltip
return
}
mx0 := mx1
my0 := my1
}
}
}
GetPoint(Force:=0) {
static pp := ""
return GetComApp(&pp, force, "PowerPoint.Application", "PowerPoint", "PP_")
}
Аналогично, параметры настраиваем по вкусу.
В powerpoint есть неприятная особенность: слайд переключатся на следующий, если прокрутить в самый низ или верх слайда. См. Как отключить переход к следующему слайду колёсиком в PowerPoint.
Использованный приём с регулярным опросом мыши можно распространить и на другие приложения, где Вам хотелось бы добавить панорамирование. Вопрос в том, как сообщать программе, что мы хотим сдвинуть её окно. Один из способов сделать это — послать окну программы сообщение о прокрутке:
PostMessage 0x114, 1, 0, ctrl, win
Здесь 0x114 — горизонтальная прокрутка (0x115 — вертикальная),
1 — направление,
ctrl — id элемента управления
win — HWND окна.
Узнать id элемента управления можно задав ClassNN, полученный с помощью утилиты Window spy из комплекта программы AutoHotKey:
Ниже пример скрипта для WordPad. Маловероятно, что Вам захочется панорамировать WordPad, но как пример подойдёт:
#HotIf WinActive("ahk_class WordPadClass") ; WordPad
MButton::PanWordPad()
PanWordPad(*) {
static XT := 30
static YT := 30
static MOUSEPOLLING := 50
mx0:=my0:=mx1:=my1:=0
win := WinGetID("A") ; получим id активного окна
ctrl := ControlGetHWND("RICHEDIT50W1", win) ; получим id основного элемента управления, который двигать будем
MouseGetPos &mx0, &my0
Loop {
Sleep MOUSEPOLLING
if !GetKeyState("MButton", "P") {
return
}
MouseGetPos &mx1, &my1
dx := mx1-mx0
dy := my1-my0
dx := -round(dx/XT*3)
dy := -round(dy/YT*1)
;tooltip "dx " dx " dy " dy
if (dX||dY) {
if dX > 0 {
loop dX
PostMessage 0x114, 1, 0, ctrl, win ; вправо
} else if dX < 0 {
loop abs(dX)
PostMessage 0x114, 0, 0, ctrl, win ; влево
}
if dY > 0 {
loop dY
PostMessage 0x115, 1, 0, ctrl, win ; вниз
} else if dY < 0 {
loop abs(dY)
PostMessage 0x115, 0, 0, ctrl, win ; вверх
}
}
mx0 := mx1
my0 := my1
}
}
Скрипты проверялись в AutoHotKey 2.0.2
Чтобы не вводить команды для показа паролей от Wi-Fi, вставьте в консоль cmd.exe, запущенную от имени администратора, следующую команду (это одна строка):
For /f "tokens=4*" %a in ('netsh wlan show profiles^|findstr профили') do @Echo %b & @netsh wlan show profile name="%b" key=clear|findstr "Содержимое" & @Echo -----------------
проверял на русской версии win 7.
Можно сохранить в файл .cmd, но тогда символы процента надо удваивать и не забыть pause в конце, чтобы увидеть результат:
:: wifipass.cmd
For /f "tokens=4*" %%a in ('netsh wlan show profiles^|findstr профили') do @echo %%b & @netsh wlan show profile name="%%b" key=clear|findstr "Содержимое" & @echo -----------------Сохранять надо в кодировке 866. Запускать тоже от имени администратора.
pause
Когда Вы выбираете поисковую систему по умолчанию в chrome (chrome://settings/searchEngines), то в новой вкладке, помимо последних посещённых сайтов, начинает показываться «спонсорский контент» — погода, пробки, реклама, яндекс.дзен, пульс мейл.ру, новости bing и т.д.
Можно, конечно, указать свою поисковую строку, например https://yandex.ru/search?text=%25s , но тогда пропадают поисковые подсказки в адресной строке (омнибокс).
Можно установить расширение, которое очищает/меняет/перенаправляет путь к «новой вкладке», но есть способ гораздо проще и быстрее. В реестре делаем так:
Windows Registry Editor Version 5.00Можно заменить about:blank на другой путь. Например, chrome://bookmarks/ — панель закладок, chrome://bookmarks/?id=2 — папка «другие закладки», https://ya.ru/white — минималистичный яндекс и т.п.
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
"NewTabPageLocation"="about:blank"
Теперь в новой вкладке открывается то, что Вы хотите, при этом в адресной строке работают подсказки от яндекса/гугла/мейл.ру.
Вы увеличили масштаб в PowerPoint и прокрутили слайд мышкой в самый низ, например, для регулировки размеров изображения в этом месте. Одно неосторожное движение колёсиком и слайд переключается на следующий! УЪУЪУ, бесит!
Сейчас мы будем решать эту проблему. На ленте выберите Вид → Образец слайдов. Выберите самый первый образец в колонке слева, он чуть больше остальных. Поставьте маленький масштаб. Разместите сверху и снизу от слайда (подальше) какие-нибудь фигуры.
Проделайте то же самое на других образцах слайдов, например, на образце титульного слайда, пустого слайда (по желанию). Нажмите «Закрыть режим образца» на первой вкладке.
Готово! Теперь колесо мышки не переключает слайды при редактировании (а при демонстрации, как и положено, переключает).
В следующих постах обсудим необычные методы прокрутки в офисных приложениях.
Источник: superuser
Есть один редко встречающийся глюк, описанный в заголовке.
Вы вставляете звуковой файл и указываете в параметрах, чтобы он звучал для нескольких слайдов или на всю презентацию:
...нажимаете просмотр, и тут — БАЦ! PowerPoint вылетает сразу или при переключении на следующий слайд:
Как починить: откройте «Панель управления» — Установка и удаление программ — Включение и отключение компонентов Windows (можно просто написать слово «компонент» в поисковой строке в пуске).
Активируйте проигрыватель Windows Media и всё. Вам не требуется использовать, обновлять, настраивать его по умолчанию, просто активировать. Возможно, потребуется выход из системы или перезагрузка.
Не [Моё], источник — microsoft.com, но у меня такое было на разных поверпоинтах и виндах.
Кстати, немного оффтоп: если у Вас Windows 10, а в сети есть машины с XP, то активируйте компонент «Клиент SMB 1.0/CIFS», чтобы заходить на них. Кто сказал wannacry?
Правильная ссылка на эту надстройку: https://gitflic.ru/project/yabalak/powerpoint-speaker-notes-...
Допустим, Вы планируете выступление на областной конференции.
Чтобы слушатели Вас точно запомнили, Вы приготовили раздаточный материал в виде листочка, на котором с одной стороны указаны основные тезисы Вашего доклада, а с другой — схема сборки самолётика.
Теперь Вы готовите слайды в PowerPoint. Текст, произносимый при показе каждого слайда, Вы указываете в специальной области «Заметки к слайду» («Заметки докладчика») в нижней части окна powerpoint.
Слайды готовы, теперь надо выгрузить все заметки докладчика в аккуратный документ «Речь», чтобы подглядывать по ходу доклада.
В таком документе указаны номера слайдов и сама речь.
Но как это сделать? Сайт MS рекомендует нам некоторые неудобные способы, например по одному слайду на страницу с текстом внизу.
Но нам надо распечатать аккуратную таблицу с номерами слайдов и речью, как на картинке.
Тут-то и поможет нам надстройка SpeakerNotes.ppam. Она добавляет в PowerPoint кнопочку ↓
↑ по нажатию на которую у Вас сформируется документ с речью в ворде.
Ясное дело, что запускать всякие непонятные вещи, взятые из интернета небезопасно! Поэтому антивирус — Ваш друг.
А для самых проницательных имеется исходный код этой утилиты в VBA, а также скрипт на языке AutoHotKey 2.0 (там же).
Скрипт легче редактировать и адаптировать под свои нужды (поменять шрифт, границы, отступы), но зато надстройка аккуратно интегрируется в интерфейс PowerPoint. Функционал такой же.
Желаю всем блистательных выступлений!