Петр!
У меня такой вопрос:
В 8 посте этого топа код.
HotKeyAdd(WindowID(#Window_0), 44, @CreateSkrinAll(), "SkrinAll", 0,0,1)
Как сделать динамически расширяющий список горячих клавиш? ведь там кроме этого кода используется процедура. То есть заранее неизвестны горячие клавишы и неизвестно имя запускаемой программы. Я написал код утили, которая сохраняет в файл клавиши и путь к файлу, он будет работать по надобности отдельным процессом:
Код:Enumeration
#Window_0
#File
EndEnumeration
;- Gadget Constants
;
Enumeration
#Button_0 ; выбрать путь
#String_0 ; Путь к файлу
#String_1 ; клавишы
#Button_1 ; принять
#Button_2
EndEnumeration
Global Bukva$
If OpenFile(#File,"GOR.txt")
While Eof(#File) = 0
Stroka.s=ReadString(#File)
Wend
EndIf
Procedure Open_Window_0()
If OpenWindow(#Window_0, 256, 207, 775, 114, "Горячие клавиши", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
ButtonGadget(#Button_0, 745, 10, 25, 30, "")
StringGadget(#String_0, 15, 10, 720, 30, "") ; путь к файлу
StringGadget(#String_1, 270, 55, 230, 35, "") ; клавиши
ButtonGadget(#Button_1, 535, 60, 80, 25, "Принять")
ButtonGadget(#Button_2, 20, 70, 130, 25, "Файл с клавишами")
EndIf
EndProcedure
Open_Window_0() ; открыли окно
Repeat
ev=WaitWindowEvent()
Sleep_(1)
For r=4 To 255
If GetAsyncKeyState_(#VK_SHIFT)=-32767
If sh=0
Bukva$="Shift+"
sh=1
BukvaG$ +Bukva$
SetGadgetText(#String_1, BukvaG$)
EndIf
EndIf
If GetAsyncKeyState_(#VK_MENU)=-32767
If al=0
Bukva$="Alt+"
al=1
BukvaG$+Bukva$
SetGadgetText(#String_1, BukvaG$)
EndIf
EndIf
If GetAsyncKeyState_(#VK_CONTROL)=-32767
If ct=0
Bukva$="Ctrl+"
ct=1
BukvaG$ +Bukva$
SetGadgetText(#String_1, BukvaG$)
EndIf
EndIf
If bu=0
If sh=1 Or al=1 Or ct=1
If GetAsyncKeyState_(r)=-32767
If r<>16 And r<>17 And r<>18 And r<>160 And r<>161 And r<>162 And r<>163 And r<>164 And r<>165
Bukva$=Chr(r)
BukvaG$+Bukva$
SetGadgetText(#String_1, BukvaG$)
bu=1
EndIf
EndIf
EndIf
EndIf
Next r
If ev = #PB_Event_Gadget
If EventGadget() =#Button_0
Filename$ = OpenFileRequester("Выбрать файл", DefaultFile$, "EXE (*.exe)|*.exe", PatternPosition)
SetGadgetText(#String_0, Filename$)
EndIf
EndIf
If ev = #PB_Event_Gadget
If EventGadget() =#Button_2
If RunProgram("GOR.txt")
EndIf
EndIf
EndIf
If Filename$<>""
If bu=1
If ev = #PB_Event_Gadget
If EventGadget() = #Button_1
WriteStringN(#File, Str(sh)+Str(al)+Str(ct)+Bukva$+Filename$)
bu=0
sh=0
al=0
ct=0
Bukva$=""
BukvaG$=""
Filename$=""
SetGadgetText(#String_1, "")
SetGadgetText(#String_0, "")
EndIf
EndIf
EndIf
EndIf
Until ev=#PB_Event_CloseWindow
CloseFile(#File)
А в другой, которая постоянно висит у меня в процессе, нужно считать из файла и сделать динамический рост горячих клавиш. Этот код считывания:
Пока только мыслишка: создать штук 20-30 процедур, у каждой своя переменная, в которую заносить пути для запуска при считывании файла. Так же и кода этого HotKeyAdd(WindowID(#Window_0), 44, @CreateSkrinAll(), "SkrinAll", 0,0,1) накатать 20-30.
Может есть более рациональное решение?