AZJIO

SaveFolders (PureBasic)

May 23rd, 2018
788
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Declare Create_ini(ini$)
  2.  
  3. If OpenWindow(0, 100, 150, 300, 100, "PureBasic - SysTray Example", #PB_Window_SystemMenu | #PB_Window_Invisible)
  4.     ExtractIconEx_("shell32.dll",4,0,@hIco,1) ; извлекаем иконку из shell32.dll
  5.     AddSysTrayIcon(1, WindowID(0),hIco)       ; иконка в трее
  6.     SysTrayIconToolTip(1, "SaveFolders")      ; Название проги в подсказке
  7.    
  8.     CreatePopupImageMenu(0)
  9.    
  10.     ArrSize = 100
  11.     Dim ArrPath.s(ArrSize)
  12.     ; получаем путь к ини по имени программы
  13.     ini$ = GetPathPart(ProgramFilename()) + GetFilePart(ProgramFilename(), #PB_FileSystem_NoExtension) + ".ini"
  14.     ;   Debug ini$
  15.     If FileSize(ini$) = -1 And Not Create_ini(ini$)
  16.         MessageRequester("Ошибка", "Не найден файл и не удаётся создать" + #CRLF$ + ini$)
  17.         End
  18.     EndIf
  19.     ; заполнение массива
  20.     OpenPreferences(ini$)
  21.     i=0
  22.     ExaminePreferenceGroups()
  23.     While NextPreferenceGroup()
  24.        
  25.         tmp$ = PreferenceGroupName()
  26.         OpenSubMenu(tmp$, hIco)
  27.         ;       Debug tmp$
  28.        
  29.         ExaminePreferenceKeys()
  30.         While NextPreferenceKey()
  31.             ;           Param.s = PreferenceKeyValue()
  32.             ;           If Param<>""
  33.             ;               Param = " - параметры: "+Param
  34.             ;           EndIf
  35.             tmp$ = PreferenceKeyName()
  36.             If Not FileSize(tmp$) = -2 ; Если путь не является существующим каталогом, то игнор и следующий
  37.                 Continue
  38.             EndIf
  39.             i+1
  40.             If i > ArrSize
  41.                 ArrSize + 100
  42.                 ReDim ArrPath(ArrSize)
  43.             EndIf
  44.             MenuItem(i, tmp$, hIco)
  45.             ArrPath(i) = tmp$
  46.             ;           Debug tmp$
  47.         Wend
  48.         CloseSubMenu()
  49.        
  50.     Wend
  51.     ClosePreferences()
  52.    
  53.     MenuBar()
  54.     MenuItem(999, "Выход")
  55.     ;   MenuItem(998, "Инфа")
  56.     ;   Q = 0
  57.     Repeat
  58.         Event = WaitWindowEvent()
  59.         If Event = #PB_Event_SysTray
  60.             Select EventType()
  61.                 Case #PB_EventType_LeftClick, #PB_EventType_RightClick
  62.                     DisplayPopupMenu(0, WindowID(0))          ; показ вспывающего меню
  63.             EndSelect
  64.         EndIf
  65.         If Event = #PB_Event_Menu
  66.             em = EventMenu()
  67.             If em >= 1 And em <= i
  68.                 RunProgram(ArrPath(em), "", "")
  69.                 ;           ElseIf em = 998
  70.                 ;               Debug ArrPath()
  71.             ElseIf em = 999
  72.                 Break
  73.             EndIf
  74.         EndIf
  75.     ForEver
  76. EndIf
  77.  
  78. End
  79.  
  80.  
  81. Procedure Create_ini(ini$)
  82.     Protected hfile, Text$, Disk$
  83.     Disk$ = LSet(GetHomeDirectory(), 3)
  84.     Text$ = "[Windows]" + #CRLF$ + GetHomeDirectory() + #CRLF$ + Disk$ + "Windows\Web\Wallpaper" + #CRLF$ + Disk$ + "Windows\System32" + #CRLF$ + Disk$ + "Windows" + #CRLF$ + Disk$ + "Program Files" + #CRLF$ + #CRLF$ + "[PureBasic]" + #CRLF$ + GetCurrentDirectory() + #CRLF$ + #PB_Compiler_Home
  85.     hfile = OpenFile(#PB_Any, ini$, #PB_UTF8)
  86.     If hfile
  87.         If WriteString(hfile, Text$, #PB_UTF8)
  88.             CloseFile(hfile)
  89.             ProcedureReturn 1
  90.         EndIf
  91.         CloseFile(hfile)
  92.     EndIf
  93.     ProcedureReturn 0
  94. EndProcedure
RAW Paste Data