Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 30.03.2011
Сообщений: 44

Иконка в трее, как сделать

26.07.2011, 12:48. Показов 4842. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Наткнулся в Интернете на код, который позволяет добавить иконку в трей (там где часики) и выводить сообщения (как информация Антивируса, о Интернете и т.д.). Но в этом коде нет функции, которая обрабатывает нажатия на икноку. Как сделать? Помогите, пожалуйста!
Код для добавления иконки и вывода сообщений (добавить на форму Две кнопки, TextBox и четыре Option):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce 
'               or publish this code on any web site,
'               online service, or distribute as source 
'               on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Const APP_SYSTRAY_ID = 999 'unique identifier
 
Private Const NOTIFYICON_VERSION = &H3
 
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const NIF_STATE = &H8
Private Const NIF_INFO = &H10
 
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const NIM_SETFOCUS = &H3
Private Const NIM_SETVERSION = &H4
Private Const NIM_VERSION = &H5
 
Private Const NIS_HIDDEN = &H1
Private Const NIS_SHAREDICON = &H2
 
'icon flags
Private Const NIIF_NONE = &H0
Private Const NIIF_INFO = &H1
Private Const NIIF_WARNING = &H2
Private Const NIIF_ERROR = &H3
Private Const NIIF_GUID = &H5
Private Const NIIF_ICON_MASK = &HF
Private Const NIIF_NOSOUND = &H10
 
Private Const WM_USER = &H400
Private Const NIN_BALLOONSHOW = (WM_USER + 2)
Private Const NIN_BALLOONHIDE = (WM_USER + 3)
Private Const NIN_BALLOONTIMEOUT = (WM_USER + 4)
Private Const NIN_BALLOONUSERCLICK = (WM_USER + 5)
 
'shell version / NOTIFIYICONDATA struct size constants
Private Const NOTIFYICONDATA_V1_SIZE As Long = 88  'pre-5.0 structure size
Private Const NOTIFYICONDATA_V2_SIZE As Long = 488 'pre-6.0 structure size
Private Const NOTIFYICONDATA_V3_SIZE As Long = 504 '6.0+ structure size
Private NOTIFYICONDATA_SIZE As Long
 
Private Type GUID
   Data1 As Long
   Data2 As Integer
   Data3 As Integer
   Data4(7) As Byte
End Type
 
Private Type NOTIFYICONDATA
  cbSize As Long
  hWnd As Long
  uID As Long
  uFlags As Long
  uCallbackMessage As Long
  hIcon As Long
  szTip As String * 128
  dwState As Long
  dwStateMask As Long
  szInfo As String * 256
  uTimeoutAndVersion As Long
  szInfoTitle As String * 64
  dwInfoFlags As Long
  guidItem As GUID
End Type
 
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" _
   Alias "Shell_NotifyIconA" _
  (ByVal dwMessage As Long, _
   lpData As NOTIFYICONDATA) As Long
 
Private Declare Function GetFileVersionInfoSize Lib "version.dll" _
   Alias "GetFileVersionInfoSizeA" _
  (ByVal lptstrFilename As String, _
   lpdwHandle As Long) As Long
 
Private Declare Function GetFileVersionInfo Lib "version.dll" _
   Alias "GetFileVersionInfoA" _
  (ByVal lptstrFilename As String, _
   ByVal dwHandle As Long, _
   ByVal dwLen As Long, _
   lpData As Any) As Long
 
Private Declare Function VerQueryValue Lib "version.dll" _
   Alias "VerQueryValueA" _
  (pBlock As Any, _
   ByVal lpSubBlock As String, _
   lpBuffer As Any, _
   nVerSize As Long) As Long
 
Private Declare Sub CopyMemory Lib "kernel32" _
   Alias "RtlMoveMemory" _
  (Destination As Any, _
   Source As Any, _
   ByVal Length As Long)
 
 
Private Sub Form_Load()
 
   Text1.Text = "A newer version of MyApp.exe is " & _
                "now available for download from " & _
                "http://www.somplace.com/myapp/update/."
 
   Command1.Caption = "Add Systray Icon"
   Command2.Caption = "Show Balloon Tip"
   Command2.Enabled = False
 
   Option1(0).Caption = "no icon"
   Option1(1).Caption = "information icon"
   Option1(2).Caption = "warning icon"
   Option1(3).Caption = "error icon"         
 
   Option1(1).Value = True
 
End Sub
 
 
Private Sub Form_Unload(Cancel As Integer)
 
   ShellTrayRemove
 
End Sub
 
 
Private Sub Command1_Click()
 
   Call ShellTrayAdd
   Command2.Enabled = True
 
End Sub
 
 
Private Sub Command2_Click()
 
   ShellTrayModifyTip GetSelectedOptionIndex()
 
End Sub
 
 
Private Sub ShellTrayAdd()
 
   Dim nid As NOTIFYICONDATA
 
   If NOTIFYICONDATA_SIZE = 0 Then SetShellVersion
 
  'set up the type members
   With nid
 
      .cbSize = NOTIFYICONDATA_SIZE
      .hWnd = Form1.hWnd
      .uID = APP_SYSTRAY_ID
      .uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
      .dwState = NIS_SHAREDICON
      .hIcon = Form1.Icon
 
      'szTip is the tooltip shown when the
      'mouse hovers over the systray icon. 
      'Terminate it since the strings are 
      'fixed-length in NOTIFYICONDATA
      .szTip = "New Download Watcher" & vbNullChar
      .uTimeoutAndVersion = NOTIFYICON_VERSION
 
   End With
 
  'add the icon ...
   Call Shell_NotifyIcon(NIM_ADD, nid)
 
  '... and inform the system of the
  'NOTIFYICON version in use
   Call Shell_NotifyIcon(NIM_SETVERSION, nid)
 
End Sub
 
 
Private Sub ShellTrayRemove()
 
   Dim nid As NOTIFYICONDATA
 
   If NOTIFYICONDATA_SIZE = 0 Then SetShellVersion
 
   With nid
      .cbSize = NOTIFYICONDATA_SIZE
      .hWnd = Form1.hWnd
      .uID = APP_SYSTRAY_ID
   End With
 
   Call Shell_NotifyIcon(NIM_DELETE, nid)
 
End Sub
 
 
Private Sub ShellTrayModifyTip(nIconIndex As Long)
 
   Dim nid As NOTIFYICONDATA
 
   If NOTIFYICONDATA_SIZE = 0 Then SetShellVersion
 
   With nid
      .cbSize = NOTIFYICONDATA_SIZE
      .hWnd = Form1.hWnd
      .uID = APP_SYSTRAY_ID
      .uFlags = NIF_INFO
      .dwInfoFlags = nIconIndex
 
      'InfoTitle is the balloon tip title, 
      'and szInfo is the message displayed. 
      'Terminating both with vbNullChar prevents 
      'the display of the unused padding in the
      'strings defined as fixed-length in NOTIFYICONDATA.
      .szInfoTitle = "New Download Available!" & vbNullChar
      .szInfo = Text1.Text & vbNullChar
   End With
 
   Call Shell_NotifyIcon(NIM_MODIFY, nid)
 
End Sub
 
 
Private Sub SetShellVersion()
 
   Select Case True
      Case IsShellVersion(6)
         NOTIFYICONDATA_SIZE = NOTIFYICONDATA_V3_SIZE '6.0+ structure size
 
      Case IsShellVersion(5)
         NOTIFYICONDATA_SIZE = NOTIFYICONDATA_V2_SIZE 'pre-6.0 structure size
 
      Case Else
         NOTIFYICONDATA_SIZE = NOTIFYICONDATA_V1_SIZE 'pre-5.0 structure size
   End Select
 
End Sub
 
 
Private Function IsShellVersion(ByVal version As Long) As Boolean
 
  'returns True if the Shell version
  '(shell32.dll) is equal or later than
  'the value passed as 'version'
   Dim nBufferSize As Long
   Dim nUnused As Long
   Dim lpBuffer As Long
   Dim nVerMajor As Integer
   Dim bBuffer() As Byte
 
   Const sDLLFile As String = "shell32.dll"
 
   nBufferSize = GetFileVersionInfoSize(sDLLFile, nUnused)
 
   If nBufferSize > 0 Then
 
      ReDim bBuffer(nBufferSize - 1) As Byte
 
      Call GetFileVersionInfo(sDLLFile, 0&, nBufferSize, bBuffer(0))
 
      If VerQueryValue(bBuffer(0), "\", lpBuffer, nUnused) = 1 Then
 
         CopyMemory nVerMajor, ByVal lpBuffer + 10, 2
 
         IsShellVersion = nVerMajor >= version
 
      End If  'VerQueryValue
 
   End If  'nBufferSize
 
End Function
 
 
Private Function GetSelectedOptionIndex() As Long
 
  'returns the selected item index from
  'an option button array. Use in place
  'of multiple If...Then statements!
  'If your array contains more elements,
  'just append them to the test condition,
  'setting the multiplier to the button's
  'negative -index.
   GetSelectedOptionIndex = Option1(0).Value * 0 Or _
                            Option1(1).Value * -1 Or _
                            Option1(2).Value * -2 Or _
                            Option1(3).Value * -3
End Function
Помогите!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.07.2011, 12:48
Ответы с готовыми решениями:

Как сделать, чтоб в трее показывалась иконка, какой язык, а не какая раскладка клав
Запутался, уже, в трее мне надо, чтоб показывался какой язык(RU, EN) при переключении языка, а в трее показывается раскладка, она все...

Как узнать на каких координатах расположена в трее нужная программе иконка?
Надо как то узнать где именно в трее расположена нужная мне иконка, например иконка звука, или подключение к сети, или например Стима и...

Иконка в трее
Столкнулся с такой проблемой: Никак немогу создать иконку в трее.И чтобы нажали на иконку вышло контекстное меню с пунктами: первый...

2
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
26.07.2011, 15:32
Тебе просто пример достался не очень... С треем легко работать через PopUpMenu
Вот полный пример со всеми событиями:
Вложения
Тип файла: zip Sys2.zip (4.1 Кб, 344 просмотров)
0
1 / 1 / 0
Регистрация: 30.03.2011
Сообщений: 44
27.07.2011, 01:21  [ТС]
Спасибо, полезный материал))
Вот только, как вызывать тогда информационное сообщение?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.07.2011, 01:21
Помогаю со студенческими работами здесь

Иконка в трее
Есть функция, по задумке должно быть клик левой - окно на передний план, клик правой - меню, но вместе с меню появляется и окно. Как...

Иконка в трее
Коллеги, добрый день Ситуация следующая, есть приложение и в нем есть события, которые сворачивают и разварачивают окно программы, все...

Иконка в трее
Всем здравствуйте. Можете мне подсказать, как сделать так, чтобы иконка NotifyIcon в трее не пряталась, а была всегда видна? Или это...

Иконка в трее
Собственно весь вопрос в названии. С громадным трудом, преодолевая труднейшие ломки моей чувствительной психики, перехожу на Delphi XE...

иконка в трее
Привет. Не пойму как реализовать одно действие. Есть программа, которая отслеживает нажатие кнопок нам, капс и скрол локи. При...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru