FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Иконка в системном трее

Перейти вниз

Иконка в системном трее Empty Иконка в системном трее

Сообщение  DEPOzit Чт Фев 18, 2010 8:35 am

Есть данный код:
Код:

#define WIN_INCLUDEALL
#include "windows.bi"
#include "fbgfx.bi"

#define WM_SHELLNOTIFY WM_USER + 1

Declare Function NewWindowProc(As HWND,As Uinteger,wParam As WPARAM,lParam As LPARAM) As LRESULT


Dim As HWND hWin
Dim Shared As WNDPROC OldWindowProc
Dim Shared q As Integer, q1 As string
q=0
ScreenRes 640,480,32
WindowTitle "Minimize me, press any key key for quit"
ScreenControl FB.GET_WINDOW_HANDLE,cast(Integer,hWin)
OldWindowProc = cptr(WNDPROC,SetWindowLong(hWin,GWL_WNDPROC,cast(DWORD,@NewWindowProc)))

' Set up our notify icon
Dim Shared As NOTIFYICONDATA NID
With NID
  .cbSize          = SizeOf (NOTIFYICONDATA)
  .hWnd            = hWin
  .hIcon            = LoadIcon (NULL, IDI_QUESTION)
  .uFlags          = NIF_INFO Or NIF_MESSAGE Or NIF_TIP Or NIF_ICON
  .uCallbackMessage = WM_SHELLNOTIFY
  .szTip            = "The Tip"
  .szInfoTitle      = "бла-бла-бла"
  .szInfo          = "The Info"
End With




Function NewWindowProc(Byval hWin  As HWND, _
                      Byval Msg    As Uinteger, _
                      Byval wParam As WPARAM, _
                      Byval lParam As LPARAM) As LRESULT
  Dim As RECT rcWindow,rcTray
  Dim As HWND hWndTaskBar,hWndTray
   
  Select Case As Const Msg
    Case WM_SYSCOMMAND
      If wParam = SC_MINIMIZE Then
        ' Get the system tray's hWnd
        hWndTaskBar = FindWindow("Shell_TrayWnd", NULL)
        hWndTray = FindWindowEx(hWndTaskBar, 0, "TrayNotifyWnd", NULL)
        ' Show the notify icon
        Shell_NotifyIcon (NIM_ADD, @NID)
        ' Animate the window closing to the tray
        GetWindowRect hWin, @rcWindow
        GetWindowRect hwndTray, @rcTray
        DrawAnimatedRects hWin, IDANI_CAPTION, @rcWindow, @rcTray

        ' Hide the window
        ShowWindow(hWin, SW_HIDE)
        Return False
      End If
    Case WM_SHELLNOTIFY
      If lParam = WM_LBUTTONDBLCLK Then
        ' Restore the window
        ShowWindow (hWin, SW_SHOWMINIMIZED)
        SendMessage(hWin, WM_SYSCOMMAND, SC_RESTORE,0)
        Shell_NotifyIcon(NIM_DELETE,@NID)
    End If
  End Select
 
  Return OldWindowProc(hWin, Msg, wParam, lParam)
End Function
qw:
q1=InKey
If q1=Chr(27) Then End
q=q+1
If q=5000 Then
   q=0
   With NID
  .cbSize          = SizeOf (NOTIFYICONDATA)
  .hWnd            = hWin
  .hIcon            = LoadIcon (NULL, IDI_APPLICATION)
  .uFlags          = NIF_INFO Or NIF_MESSAGE Or NIF_TIP Or NIF_ICON
  .uCallbackMessage = WM_SHELLNOTIFY
  .szTip            = "ОПА!!!"
  .szInfoTitle      = "ОПА!!!"
  .szInfo          = "ОПА!!!"
   End With
   
beep   
   
   
   
EndIf
Print q
GoTo qw

И есть два вопроса)))).
1. Почему в трее не отображается иконка программы (по условию .hIcon = LoadIcon (NULL, IDI_APPLICATION)), хотя иконка основного окна отображается верно? В файле ресурсов ID иконки = 0. В чем дело?
2. Как заставить смениться иконку в трее после звукового сигнала? Она меняется разворотом и свертыванием окна. А надо самостоятельно.

DEPOzit

Сообщения : 113
Дата регистрации : 2008-05-15
Возраст : 42
Откуда : Смоленская обл.

http://freebasic.ru/

Вернуться к началу Перейти вниз

Иконка в системном трее Empty Re: Иконка в системном трее

Сообщение  DEPOzit Чт Фев 18, 2010 10:44 am

Со вторым вопросом разобрался. А первый все еще в силе.
Добавился другой вопрос:
периодически при запуске программы выскакивает ошибка, пробовал на нескольких ПК. В чем может быть косяк?

DEPOzit

Сообщения : 113
Дата регистрации : 2008-05-15
Возраст : 42
Откуда : Смоленская обл.

http://freebasic.ru/

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения