Разобрался в чем дело было: нужно было создать иконку. Теперь другая проблема: иконка не меняется на другую, а меняются местами. Что не так делаю?
;-----------------------USB-переключатель------------------------- ;{---------Запрет на запуск программы более одного раза----------- a = CreateSemaphore_(#Null,0,1,"USB-переключатель") If a<>0 And GetLastError_()= #ERROR_ALREADY_EXISTS CloseHandle_(a) End EndIf ;}--------------------------------------------------------------- ;{----------------------Глобальные переменные------------------ #USB_PID=$EF22 ;идентификатор PID #USB_VID=$AAAA ;идентификатор VID #Name="USB-переключатель" ;сообщения программы #NO_Device="Нет связи с USB-переключателем" ;сообщения программы Global IN_TV.s="телевизор" ;сообщения программы Global IN_Speakers.s="колонки" ;сообщения программы Global R_DeviceHandle, W_DeviceHandle ;}--------------------------------------------------------------- Procedure ProgramAtStartup(State, ProgName.s) ; Управление автозагрузкой программы valueName$=ProgramFilename() GetHandle = RegOpenKeyEx_(#HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", 0, #KEY_ALL_ACCESS, @hKey) If GetHandle = #ERROR_SUCCESS If State=1 RegSetValueEx_(hKey, @ProgName, 0, #REG_SZ, @valueName$, Len(valueName$)) Else RegDeleteValue_(hKey, @ProgName) EndIf RegCloseKey_(hKey) EndIf EndProcedure Procedure FindDevice_Timer(); таймер - процедура проверки подключения нашего устройства Static Old_Test Test=HID_Lib_DeviceTest(#USB_PID, #USB_VID) If Test<>Old_Test Old_Test=Test If Test HID_Lib_CloseDevice(R_DeviceHandle) : HID_Lib_CloseDevice(W_DeviceHandle) W_DeviceHandle=HID_Lib_OpenDevice(#USB_PID, #USB_VID) R_DeviceHandle=HID_Lib_OpenDevice(#USB_PID, #USB_VID) SetGadgetText(0,"USB-переключатель подключён") Else HID_Lib_CloseDevice(R_DeviceHandle) : HID_Lib_CloseDevice(W_DeviceHandle) R_DeviceHandle=0 : W_DeviceHandle=0 SetGadgetText(0,#NO_Device) EndIf EndIf EndProcedure Procedure SendDevice() IconName$ = "F:\USB-переключатель\Колонки.ico" IconName1$ = "F:\USB-переключатель\Телек.ico" Command.a=0 Dim OutBytes.a(2) If GetGadgetState(5)=1 Command | 1 TextGadget(54, 83, 17, 80 ,15, IN_TV) SetMenuItemState(68,4,1) SetMenuItemState(68,3,0) AddSysTrayIcon(1, WindowID(0), LoadImage(0, IconName$)) ChangeSysTrayIcon (1, LoadImage(30, IconName1$)) Else Command & %11111110 TextGadget(54, 83, 17, 80 ,15, IN_Speakers) SetMenuItemState(68,3,1) SetMenuItemState(68,4,0) AddSysTrayIcon(2, WindowID(0), LoadImage(1, IconName1$)) ChangeSysTrayIcon (2, LoadImage(31, IconName$)) EndIf Command << 1 If W_DeviceHandle OutBytes(0) = 0 OutBytes(1) = Command HID_Lib_WriteDevice(W_DeviceHandle, @OutBytes(), 2) Else MessageRequester(#Name, #NO_Device, 16) EndIf EndProcedure Procedure DateStatusBar(); Эта процедура вызывается по таймеру два раза в секунду. Time.s = FormatDate("%hh:%ii:%ss", Date() ) ; Узнаём текущее время Date.s = FormatDate("%dd.%mm.%yyyy", Date() ) ; узнаем дату StatusBarText(0, 0,Date, #PB_StatusBar_Center) ; Выводим строку в область с идентификатором 0. StatusBarText(0, 2,Time, #PB_StatusBar_Center) ; Выводим строку в область с идентификатором 2. EndProcedure IconName$ = "F:\USB-переключатель\Колонки.ico" IconName1$ = "F:\USB-переключатель\Телек.ico" OpenWindow(0, 0, 0, 230, 83, "USB-переключатель", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) CompilerIf #PB_Editor_CreateExecutable ProgramAtStartup(1, "USB-переключатель");"Добавить в автозагрузку" CompilerEndIf StickyWindow(0,1);поверх всех открытых окон TextGadget(0,0,0,230,15,#NO_Device, #PB_Text_Center) ButtonGadget(5,65,33,100,23,"Переключить",#PB_Button_Toggle) TextGadget(2, 33, 17, 50 ,15,"Выход на ") TextGadget(54, 83, 17, 80 ,15, IN_Speakers) ;-----------Создаём строку состояния----------- CreateStatusBar(0, WindowID(0)) ; Делим её на области AddStatusBarField(70) AddStatusBarField(90) AddStatusBarField(70) StatusBarText(0, 1,"Дата и время", #PB_StatusBar_Center) ; Выводим строку в область с идентификатором 1. OpenLibrary(0,"user32.dll") ; Открываем файл "user32.dll" CallFunction(0,"SetTimer",WindowID(0), 1, 500, @DateStatusBar() ) ; Вызываем функцию "SetTimer" ;-----------Системный трей----------- AddSysTrayIcon(67, WindowID(0), ExtractIcon_(0,ProgramFilename(),0)) SysTrayIconToolTip(67, "USB-переключатель") ;Добавим к иконке меню CreatePopupMenu(68) ;MenuItem(1, "Развернуть") ;MenuItem(2, "Свернуть") MenuItem(3, "Колонки") SetMenuItemState(68,3,1) MenuItem(4, "Телевизор") MenuBar() MenuItem(10, "Выход") HideWindow(0,0) FindDevice_Timer() AddWindowTimer(0, 2, 400) Repeat Event=WaitWindowEvent() If Event=#PB_Event_Timer If EventTimer()=2 FindDevice_Timer() EndIf ElseIf Event=#PB_Event_Gadget Select EventGadget() Case 5 SendDevice() EndSelect EndIf If Event = #PB_Event_SysTray If EventType() = #PB_EventType_RightClick ; Обработка правой кнопки мышки DisplayPopupMenu(68, WindowID(0)) ; показ вспывающего меню ; Break EndIf If EventType() = #PB_EventType_LeftClick ; Обработка левой кнопки мышки HideWindow(0, 1) EndIf If EventType() = #PB_EventType_LeftDoubleClick ; Обработка двойного нажатия левой кнопки мышки HideWindow(0, 0) SetWindowState(0, #PB_Window_Normal) EndIf EndIf If Event = #PB_Event_Menu Select EventMenu() ; Case 1 ;"Развернуть" ; HideWindow(0, 0) ; SetWindowState(0, #PB_Window_Normal) ;Case 2 ;"Свернуть" ; HideWindow(0, 1) Case 3 ;"Колонки" SetGadgetState(5, 0) SendDevice() TextGadget(54, 83, 17, 80 ,15, IN_Speakers) SetMenuItemState(68,3,1) SetMenuItemState(68,4,0) AddSysTrayIcon(1, WindowID(0), LoadImage(0, IconName$)) ChangeSysTrayIcon (1, LoadImage(30, IconName1$)) Case 4 ;"Телевизор" SetGadgetState(5, 1) SendDevice() TextGadget(54, 83, 17, 80 ,15, IN_TV) SetMenuItemState(68,4,1) SetMenuItemState(68,3,0) AddSysTrayIcon(2, WindowID(0), LoadImage(1, IconName1$)) ChangeSysTrayIcon (2, LoadImage(31, IconName$)) Case 10 ;"Выход" Break EndSelect EndIf If Event=#PB_Event_MinimizeWindow ;Событие при сворачивании окна HideWindow(0,1) ;свернуть окно EndIf Until Event=#PB_Event_CloseWindow ; Вызываем функцию "KillTimer" CallFunction(0,"KillTimer",WindowID(0),1) ; Закрываем файл "user32.dll". CloseLibrary(0)