windows tray

hashion

Есть консольная прога, собранная под винды...
Как запихнуть её в трей без больших проблем? Чтобы вместо консоли была иконка в трее и менюшка по правой кнопке: вкл/выкл?

Elina74

Ты хочешь это сделать, не изменяя самой программы? Имхо, лучше дописать прогу.
Вот пример на VB, думаю, имея его перед глазами (а лучше, глядя в MSDN можно написать все требуемое.
Private Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Dim TaskIcon As NOTIFYICONDATA
Const NIM_ADD = &H0
Const NIM_MODIFY = &H1
Const NIM_DELETE = &H2
Const NIF_MESSAGE = &H1
Const NIF_ICON = &H2
Const NIF_TIP = &H4
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202
Const WM_MOUSEMOVE = &H200
Const WM_MOUSEDOWN = &H400
Const WM_RBUTTONDOWN = &H204
Const WM_RBUTTONUP = &H205
Private Sub Command1_Click
Form1.Visible = False
End Sub
Private Sub Form_Load
TaskIcon.cbSize = Len(TaskIcon)
TaskIcon.hWnd = Picture1.hWnd
TaskIcon.uID = 1&
TaskIcon.uFlags = NIF_MESSAGE + NIF_ICON + NIF_TIP
TaskIcon.uCallbackMessage = WM_LBUTTONDOWN
TaskIcon.hIcon = Picture1.Picture
TaskIcon.szTip = "Shell_NotifyIcon Test" & Chr$(0)
Shell_NotifyIcon NIM_ADD, TaskIcon
mnuOn_Click
End Sub
Private Sub Form_Terminate
mnuClose_Click
End Sub
Private Sub mnuClose_Click
Shell_NotifyIcon NIM_DELETE, TaskIcon
End
End Sub

hashion

неферштейн... приложение на сях... причём кроссплатформенное, компилятор - gcc..
То есть спасибо, наверное даже это пригодится...

artimon

Может проще воспользоваться котеровской программкой?

bleyman

> неферштейн... приложение на сях... причём кроссплатформенное, компилятор - gcc..
Даааааа
Действительно, черезмерное употребление многоточий является прекрасным индикатором органического повреждения мозга.
ЧУВАК! Какой нах систем трей в кросплатформенном консольном приложении? Ты о чём вообще? Ты хочешь, чтобы оно под никсами в трей сворачивалось?
Выделяешь платформозависимый код в #ifdef/#endif и всё.

bleyman

Охххх
Что, кажется страшным и негибким? Да ничего подобного. Связываться с дополнительными конфигурационными файлами для столь простой утилиты — безумие. Передавать имя программы в командной строке неудобно. Остается один выход — хранить название прямо внутри EXE-шника.
Давно таких извращенцефф не видел. Я б даже мизинцем к его коду не притрагивался. На всякий случай. Вдруг это заразно?

hashion

> Вдруг это заразно?
Выё...ся - это точно заразно.
> Ты хочешь, чтобы оно под никсами в трей сворачивалось?
Да это как раз просто
Трей для винды, чтобы чёрным окошком не висело
> Выделяешь платформозависимый код в #ifdef/#endif и всё.
Просветил... Суть - приложение построено не на виндовых колбэках, а управляется средствами poll.
Вот я и спрашиваю как это всё по-человечиски сделать, что ИМЕННО запихнуть в ifdef WIN32...

maggi14

poischi v loriene ApacheTray, v nem v kode dostatochno zamenit slovo "apache.exe" na chto-nibud drugoe
Оставить комментарий
Имя или ник:
Комментарий: