Что нового

Закрытие всплывающих уведомлений в трее через 3 секунды.

kuz

Новичок
Сообщения
6
Репутация
0
Версия AutoIt: 3.3.12.0

Описание: задача скрипта - ограничить по времени отображение всплывающего уведомления справа в трее ("подключение по локальной сети сейчас подключено", "теперь устройство можно извлечь"... и т.п. системные) и прибить его через 3 секунды.

Примечания: операционная система - Windows Xp Professional sp3 x86.
 
Автор
K

kuz

Новичок
Сообщения
6
Репутация
0
Re: Как закрыть всплывающие уведомления в трее ?

joiner

Создал скрипт по вашей ссылке - он сразу закрывается, экзешник тоже. Сразу два вопроса:

1) Как я понимаю, чтобы отловить и прибить всплывающее сообщение, скрипт(экзешник) должен быть постоянно запущен. Иначе какой в нём смысл ?

2) Как скрипту приказать отображать всплывающее сообщение 3 секунды и закрыть его ?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Re: Как закрыть всплывающие уведомления в трее ?

kuz,
ИМХО, Вам надо в Стол заказов.
Переоформите тему в соответствии с Правилами обязательного оформления тем в разделе "Стол заказов" и я ее туда перенесу.


Добавлено:
Сообщение автоматически объединено:

kuz,
А сообщения от программ тоже скрывать?
 
Автор
K

kuz

Новичок
Сообщения
6
Репутация
0
Re: Как закрыть всплывающие уведомления в трее ?

madmasles сказал(а):
А сообщения от программ тоже скрывать?

Нет, только строго системные. Особенно несколько частовсплывающих, таких как "подключение по локальной сети...", "теперь устройство можно извлечь...", "подключение по локальной сети отсутствует...".
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
kuz [?]
Нет, только строго системные. Особенно несколько частовсплывающих
Тогда дайте точный список тех, которые надо убирать.
 
Автор
K

kuz

Новичок
Сообщения
6
Репутация
0
madmasles сказал(а):
Тогда дайте точный список тех, которые надо убирать.
Вот дословный текст:

Оборудование может быть удалено

Подключение по локальной сети

Подключение по локальной сети сейчас подключен

P.S. Благодарю за терпение.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
kuz [?]
Вот дословный текст:
Это их заголовки, а надо текст, который отображается в предупреждении, например, "Теперь устройство "Запоминающее устройство для USB" может быть безопасно извлечено из компьютера."


Добавлено:
Сообщение автоматически объединено:

Вы можете получить список предупреждений и выбрать те, которые надо убирать, если запустите следующий скрипт и сделаете так, чтобы эти предупреждения появились.
Код:
#include <WinAPI.au3>
#include <ToolTipConstants.au3>
#include <Constants.au3>

Global $hTray = WinGetHandle('[CLASS:Shell_TrayWnd]')
HotKeySet('{Esc}', '_Exit');Esc - выход
AdlibRegister('_FindTrayTip', 1000)

While Sleep(250)
WEnd

Func _FindTrayTip()
	Local $a_List, $i_Style

	$a_List = WinList('[CLASS:tooltips_class32]')
	For $i = 1 To $a_List[0][0]
		If (BitAND(WinGetState($a_List[$i][1]), 2)) And (_WinAPI_GetParent($a_List[$i][1]) = $hTray) Then
			$i_Style = _WinAPI_GetWindowLong($a_List[$i][1], $GWL_STYLE)
			If BitAND($i_Style, $TTS_CLOSE) Then
				FileWrite(@ScriptDir & '\TrayTip.txt', WinGetTitle($a_List[$i][1]) & @CRLF & @CRLF)
			EndIf
		EndIf
	Next
EndFunc   ;==>_FindTrayTip

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
K

kuz

Новичок
Сообщения
6
Репутация
0
Благодарю, вот тексты уведомлений, зафиксированные вашим скриптом:

Теперь устройство "Запоминающее устройство для USB" может быть безопасно извлечено из компьютера.

Сетевой кабель не подключен

Скорость: 100.0 Мбит/с
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
kuz,
Тестируйте.
Код:
#NoTrayIcon

#include <GUIToolTip.au3>
#include <WinAPI.au3>
#include <Constants.au3>

Global $hTray, $hTrayTip, $iTimer = 3000

$hTray = WinGetHandle('[CLASS:Shell_TrayWnd]')
HotKeySet('{Esc}', '_Exit');Esc - выход
AdlibRegister('_FindTrayTip', 500)

While Sleep(250)
WEnd

Func _FindTrayTip()
	Local $a_List = WinList('[CLASS:tooltips_class32]')
	For $i = 1 To $a_List[0][0]
		If Not BitAND(WinGetState($a_List[$i][1]), 2) Then ContinueLoop
		If _WinAPI_GetParent($a_List[$i][1]) <> $hTray Then ContinueLoop
		If Not BitAND(_WinAPI_GetWindowLong($a_List[$i][1], $GWL_STYLE), $TTS_CLOSE) Then ContinueLoop
		If Not StringRegExp(WinGetTitle($a_List[$i][1]), '^(Теперь устройство|Сетевой|Скорость:)') Then ContinueLoop
		$hTrayTip = $a_List[$i][1]
		AdlibUnRegister('_FindTrayTip')
		AdlibRegister('_HideTrayTip', $iTimer)
		Return
	Next
EndFunc   ;==>_FindTrayTip

Func _HideTrayTip()
	If (BitAND(WinGetState($hTrayTip), 2)) Then
		_GUIToolTip_TrackActivate($hTrayTip, 0)
		$hTrayTip = 0
	EndIf
	AdlibUnRegister('_HideTrayTip')
	AdlibRegister('_FindTrayTip', 500)
EndFunc   ;==>_HideTrayTip

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
K

kuz

Новичок
Сообщения
6
Репутация
0
madmasles

Спасибище ! Работает ! :beer:

P.S. Если я правильно понял, весь текст popup сообщений вводить необязательно, достаточно одного-двух первых слов; это поэтому Вы там смайлик нарисовали ? ;D
 
Верх