Есть программа. У нее значок в трее. Вопрос соотв. в subj
Printable View
Есть программа. У нее значок в трее. Вопрос соотв. в subj
[QUOTE=PavelA;114159]Есть программа. У нее значок в трее. Вопрос соотв. в subj[/QUOTE]
ну опять я не знаю, как это по-русски:):
В общем надо войти в раздел установок для слабовидящих и включить режим Клавиатура-мышь.
В принципе символы в трее в большинстве случаев управляются из программного интерфейса.
[QUOTE=PavelA;114159]Есть программа. У нее значок в трее. Вопрос соотв. в subj[/QUOTE]
Клавиша "Windows", далее Tab несколько раз, пока не дойдете до значка скрытия/отображения значков трея, далее клавиши "стрелка вправо"/"стрелка влево" (уже внутри Tray Notification area).
@Rene-gad Этот способ мне известен. Нельзя его в программу скрипта
встроить.
@aintrust К сожалению, после нажатия кл. "Виндовс" после ТАВ никуда не ухожу.
Естесно ... жать то надо Ctrl+Tab, а Win+Tab для панели инструментов тока.
Кстати вот так лучше ... Win+Tab (падаем на панел) -> Ctrl+Tab (перемещаемся куда надо)
[QUOTE=PavelA;114178]@Rene-gad Этот способ мне известен. Нельзя его в программу скрипта встроить.
[/QUOTE]Можешь раэьяснить в деталях, что ты конкретно хочешь:
- удалить программу из трея через клаву
- вызвать программу из трея через клаву
- что-то еще
???
[QUOTE=Rene-gad;114182]Можешь раэьяснить в деталях, что ты конкретно хочешь:
- удалить программу из трея через клаву
- вызвать программу из трея через клаву
- что-то еще
???[/QUOTE]
- вызвать программу из трея через клаву. А затем ее настраивать. Доделать не имею возможности, буржуинская она.
@MacRos-78 Спасибо.
К сожалению, понял, что этот способ не прокатит. Я не знаю сколько программ в данный момент запущено и ск. сидит в трее, да и в каком порядке. Будем искать другой способ.
[QUOTE=PavelA;114183]К сожалению, понял, что этот способ не прокатит. Я не знаю сколько программ в данный момент запущено и ск. сидит в трее, да и в каком порядке. Будем искать другой способ.[/QUOTE]
Если это надо сделать на уровне скрипта, вряд ли вообще что-либо "прокатит" (в общем случае это зависит от кол-ва отображенных панелей)... Похоже, вы не совсем корректно сформулировали исходный вопрос.
[QUOTE=PavelA;114183]- вызвать программу из трея через клаву.[/QUOTE]
AFAIK это возможно только с помощью настроки определенных клавиш вместо мышиных клавиш и шарика-ролика-сканнера, т.е. как я написал и как тебе известно. Через скрипт наверное тоже как-то можно, но для этого надо устроиться на работу в Ричмонде ;).
[QUOTE]Доделать не имею возможности, буржуинская она.[/QUOTE]
Придется тебе, Мальчиш-Плохиш, в Буржуинство записаться :D
[QUOTE=MakRos-78;114181]Естесно ... жать то надо Ctrl+Tab, а Win+Tab для панели инструментов тока.
Кстати вот так лучше ... Win+Tab (падаем на панел) -> Ctrl+Tab (перемещаемся куда надо)[/QUOTE]
Ctrl+Tab просто "перепрыгивает" через область taskbar, только и всего... Про Win+Tab я не писал - не знаю, где вы это взяли...
[B]aintrust[/B]
Я то же не писал что это вы писали. А взял это с клавиатуры.
Тем более я не виноват что ваш способ у человека не сработал. Возможно у него что-то запущено, что этому и мешает. Встречал я токае.
Если вас это обидело .. [COLOR="Red"]приношу извенения[/COLOR] ... задних мыслей не имел.
Просто щитал что для достижения цели любой способ можно использовать, лишь бы сработало как надо.
[QUOTE=MakRos-78;114199]
...
Просто щитал что для достижения цели любой способ можно использовать, лишь бы сработало как надо.[/QUOTE]
[B]No problemo[/B], как говорил Шварц в [I]Терминаторе-2[/I]! ;) Я с вами согласен - лишь бы сработало! У меня (да и не только у меня) это работает в том виде, что я описал, и этому есть вполне определенное объяснение с точки зрения виндового и-фейса. И я этим пользуюсь уже много лет. Вполне вероятно, что по каким-то причинам это где-то не срабатывает - что же, всяко бывает... Жаль только, что вопрос был совсем не про это! :P
А из-за чего собственно вопрос? Если для создания скрипта - можно использовать AutoIt, из скрипта окно с определенным содержимым или атрибутами можно распахнуть принудительно, судя по задаче необходима "нажималка" кнопок, на Au3 "нажималка" пишется просто.
[QUOTE=RiC;114226]...можно использовать AutoIt, из скрипта окно с определенным содержимым или атрибутами можно распахнуть принудительно...[/QUOTE]
Не у всякой иконки (точнее, не у всякого пункта popup-меню иконки), что болтается в трее, есть соответствующее ей "спрятанное" окно (возьмите, к примеру, иконку [I]Сетевого соединения[/I], хотя это и немного особый случай). Создание и отображение окна/диалога может являться реакцией только на нажатие пункта popup-меню иконки. Тем самым вам придется как-то вызывать нажатие кнопки мыши на определенной иконке (последовательность и число иконок в трее может изменяться). Системное окошко, где располагаются иконки (его заголовок в русской версии "Область уведомлений", класс ToolbarWindow32) - одно на все пользовательские иконки в трее, и чтобы угадать, где именно находится ваша конкретная иконка (чтобы затем "щелкнуть" на ней), в скрипте придется применить что-то типа распознавания образов. Я уже не говорю о тех случаях, когда у приложения может быть "вырожденное" окно (применяемое только для отслеживания сообщений) или когда все содержимое окна отрисовывается вручную без использования контролов (например, с целью защиты от "нажималок").
Или же с помощью AutoIt эта задача решается просто (я просто не знаю, не видел этот продукт)?
А может я сильно усложняю поставленную задачу?
[QUOTE=aintrust;114229]Или же с помощью AutoIt эта задача решается просто (я просто не знаю, не видел этот продукт)?
А может я сильно усложняю поставленную задачу?[/QUOTE]
[url=http://www.autoitscript.com/]Autoit[/url] заточен под написание разного рода скиптов, кликалок и т.д. пример кликанья в трей -
[code]
#include<Systray.au3>
#include<Array.au3>
Global $title = "XXX"
;Global $prcoess = "icqlite.exe"
Global $prcoess = "winampa.exe"
;clickSysTrayByTitle($title, "right")
clickSysTrayByProcess($prcoess, "right")
Func clickSysTrayByTitle($winTitle, $click = "left", $times = 1)
Local $a = _SysTrayIconTitles ()
Local $p = MouseGetPos()
For $i = 0 To UBound($a) - 1
If $a[$i] = $winTitle Then
$pos = _SysTrayIconPos($i)
MouseClick($click, $pos[0], $pos[1], $times, 1)
ExitLoop
EndIf
Next
MouseMove($p[0], $p[1], 1)
EndFunc ;==>clickSysTray
Func clickSysTrayByProcess($winProcess, $click = "left", $times = 1)
Local $a = _SysTrayIconProcesses()
;_ArrayDisplay($a, "")
Local $p = MouseGetPos()
For $i = 0 To UBound($a) - 1
If $a[$i] = $winProcess Then
$pos = _SysTrayIconPos($i)
MouseClick($click, $pos[0], $pos[1], $times, 1)
ExitLoop
EndIf
Next
MouseMove($p[0], $p[1], 1)
EndFunc ;==>clickSysTray
[/code]
[QUOTE=RiC;114270][url=http://www.autoitscript.com/]Autoit[/url] заточен под написание разного рода скиптов, кликалок и т.д. пример кликанья в трей -
...
[/QUOTE]
Что же, это довольно интересно и, при должном прилежании, вполне может подойти в качестве средства для решения "проблемы". Правда я не нашел в документации на сайте [I]AutoIt[/I] описания функций [I]_SysTrayIconProcesses()[/I] и [I]_SysTrayIconTitles()[/I], хотя из названия и можно предположить об их функционале.
Вчера был в отгуле, не читал форум. Спасибо [b]RiC[/b] за скрипт. Именно эту программу и собирался использовать для борьбы/настройки.
До чего же я отвык от программирования :( Почитал скрипт и понял насколько же это элементарно можно сделать.
@aintrust Вопрос начальный был сформулирован точно. Встраивание этого дела в программу - другая тема.
[QUOTE=RiC;114270][url=http://www.autoitscript.com/]Autoit[/url] заточен под написание разного рода скиптов, кликалок и т.д. пример кликанья в трей -
...
[/QUOTE]
[B]RiC[/B], а у вас тот код, что вы привели, работает? Файла [I]Systray.au3[/I] (с функциями работы с треем [I]_SysTrayIconTitles()[/I] и [I]_SysTrayIconProcesses()[/I]) нет в каталоге [I]Include[/I], поиск на форуме не привел к приемлемому результату. Нашелся лишь какой-то [I]SysTray_UDF.au3[/I] (который, как оказалось, написан для беты 3-й версии [I]AutoIt[/I]), но он сразу же потребовал небольшой правки в константах, после чего уже посыпались ошибки в тексте приведенного вами куска. Может, вы поделитесь файлом [I]Systray.au3[/I], раз уж сослались на него ранее, чтобы мне "не париться" в поисках этого инклуда?
[QUOTE=aintrust;114523][B]RiC[/B], а у вас тот код, что вы привели, работает? [/QUOTE]
Работает вот с этим - [url]http://www.autoitscript.com/forum/index.php?act=attach&type=post&id=8946[/url]
Описание константы [i]Const $WM_GETTEXT = 13[/i] в инклуде лишнее и его нужно удалить.
Это тот же самый файл [I]SysTray_UDF.au3[/I], о котором я уже писал в предыдущем посте, и с которым скрипт у меня (Windows XP, русская версия) не работает.
Сообщение при этом следующее:
[CODE]MouseClick($click, $pos[0], $pos[1], $times, 1)
MouseClick($click, $pos^ERROR
Error: Subscript used with non-Array variable.[/CODE]
Насколько я могу понять, функция [I]_SysTrayIconPos()[/I] в строке
[CODE]...
$pos = _SysTrayIconPos($i)
...[/CODE]
возвращает переменную, отличную от ожидаемого типа "массив" (точнее, она сразу же возвращает значение -1, что означает ошибку в работе), в результате чего дальнейшее использование этой переменной и вызывает ошибку.
PS. Пока все это описывал, решил глянуть на код функций из этого инклуда. В общем, теперь мне понятно, почему эта функция не работает как надо - все написано на скорую руку, код довольно ненадежный, и я вряд ли буду его использовать (лучше уж написать свой). Похоже, что он может сработать в Windows 2000, но мне это не на чем проверить (да и не особо хочется, если честно). У вас случаем не эта ОС?
PPS. Да, забыл сказать. Функции [I]_SysTrayIconTitles()[/I] и [I]_SysTrayIconProcesses()[/I] у меня возвращают неверные значения. К примеру [I]_SysTrayIconTitles()[/I] ошибочно многократно (от двух и более раз) возвращает одно из значений, пропуская при этом (что более важно) часть того, что должно быть выведено. В общем, получается полный suxx... (=