puhpol
Longevity : 8 years 10 months Posts : 885 REPUTATION :72 [+] [-]
EasyBOOTICE v1.4 -
Очень удобная программа для редактирования файлов BCD, GRLDR, Menu.lst. Программа проста, просто перетащите файл в нужное окно программы. Откроется окно BootIce для редактирования файла. Окно утилиты сохраняет свою позицию в файл конфигурации. В файле конфигурации можно "включить" режим: "Поверх всех окон" Кино:Новая версия 1.4 Добавлена х64 При двойном клике на кнопки, открывается соответствующее окно BootICE Решена проблема с перетаскиванием, при включенном UAC и запуском от имени АдминистратораБлагодарю nikzzzz за помощь! Файл подписан самопальным сертификатом, что бы UAC писал корректные данные, установите Sert.cer в систему (не обязательно)
Attachments
EasyBootIce_v1.4.zip
(2 MB, Downloaded: 2780 times)
Last edited by puhpol on 2017-01-27 18:45; edited 1 time in total
Joker-2013
Longevity : 8 years 3 months Posts : 2053 REPUTATION :120 [+] [-] Location : из прошлого
AZJIO , Проблему с перетаскиванием, решили даже в AutoPlay Media Studio, где работа с API ограниченна... Неужеле на пьюрике, не решим... Не буду же я перед каждым пользователем оправдываться, почему не работает... Писать какой то проект и упираться в данное ограничение, не хочется....
AZJIO
Longevity : 5 years 6 months Posts : 1216 REPUTATION :127 [+] [-]
Joker-2013 Проверил несколько продвинутых прог, ни в одной под админом нет удачного перетащить-бросить.решили даже в AutoPlay Media Studio, где работа с API ограниченна...
ну ограничена она наверно для пользователя, а не для программистов этой проги. Скинь EXE в котором работает.
Joker-2013
Longevity : 8 years 3 months Posts : 2053 REPUTATION :120 [+] [-] Location : из прошлого
nikzzzz
Longevity : 8 years 7 months Posts : 3114 REPUTATION :127 [+] [-]
Joker-2013 , Потестируй, там два варианта, чтобы проверить второй, надо его раскомментировать и закомментировать первый.Global lpOldWndProc Procedure WndProc(hwnd, uMsg, wParam, lParam) Select uMsg Case #WM_DROPFILES *DroppedFilesArea = wParam NumberOfCharactersDropped.i = DragQueryFile_(*DroppedFilesArea , $FFFFFFFF, ReturnedFileName.s, 0) For CharacterIndex.i = 0 To NumberOfCharactersDropped.i - 1 CharacterBuffer.s = Space(#MAX_PATH) DragQueryFile_(*DroppedFilesArea , CharacterIndex.i, CharacterBuffer.s, #MAX_PATH) Select hwnd Case GadgetID(4) SetGadgetText(4, GetGadgetText(4) + CharacterBuffer.s + Chr(10)) Case GadgetID(5) AddGadgetItem(5, -1, CharacterBuffer.s) EndSelect Next DragFinish_(*DroppedFilesArea) EndSelect ProcedureReturn CallWindowProc_(lpOldWndProc, hWnd, uMsg, wParam, lParam) EndProcedure hWnd = OpenWindow(0, 0, 0, 400, 400, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) TextGadget(4, 10, 10, 380, 180,"",#PB_Text_Border ) EditorGadget(5, 10, 200, 380, 180) ;Первый вариант ----------------------------------------------------------------- OpenLibrary(0, "USER32.DLL") *ChangeWindowMessageFilterEx = GetFunction(0, "ChangeWindowMessageFilterEx") CallFunctionFast(*ChangeWindowMessageFilterEx, GadgetID(4), #WM_DROPFILES,#MSGFLT_ADD, 0) CallFunctionFast(*ChangeWindowMessageFilterEx, GadgetID(4), #WM_COPYDATA,#MSGFLT_ADD, 0) CallFunctionFast(*ChangeWindowMessageFilterEx, GadgetID(4), $0049,#MSGFLT_ADD, 0) CallFunctionFast(*ChangeWindowMessageFilterEx, GadgetID(5), #WM_DROPFILES,#MSGFLT_ADD, 0) CallFunctionFast(*ChangeWindowMessageFilterEx, GadgetID(5), #WM_COPYDATA,#MSGFLT_ADD, 0) CallFunctionFast(*ChangeWindowMessageFilterEx, GadgetID(5), $0049,#MSGFLT_ADD, 0) CloseLibrary(0) ;-------------------------------------------------------------------------------- ;Второй вариант ----------------------------------------------------------------- ;ChangeWindowMessageFilter_(#WM_DROPFILES,#MSGFLT_ADD) ;ChangeWindowMessageFilter_(#WM_COPYDATA,#MSGFLT_ADD) ;ChangeWindowMessageFilter_($0049,#MSGFLT_ADD) ;-------------------------------------------------------------------------------- DragAcceptFiles_(GadgetID(4), 1) DragAcceptFiles_(GadgetID(5), 1) lpOldWndProc = SetWindowLongPtr_(GadgetID(4), #GWL_WNDPROC, @WndProc()) SetWindowLongPtr_(GadgetID(5), #GWL_WNDPROC, @WndProc()) Repeat eventz=WaitWindowEvent () Select eventz Case #PB_Event_CloseWindow Quit = 1 EndSelect Until Quit = 1 SetWindowLongPtr_(GadgetID(4), #GWL_WNDPROC, lpOldWndProc) SetWindowLongPtr_(GadgetID(5), #GWL_WNDPROC, lpOldWndProc)
Joker-2013
Longevity : 8 years 3 months Posts : 2053 REPUTATION :120 [+] [-] Location : из прошлого
nikzzzz , Работают оба варианта, но только при переносе в верхний гаджет.
nikzzzz
Longevity : 8 years 7 months Posts : 3114 REPUTATION :127 [+] [-]
Joker-2013 , Попробуй следующееEditorGadget(5, 10, 200, 380, 180,[b]#PB_Editor_ReadOnly[/b])
А так-же попробуй вариант с двумя TextGadgetGlobal lpOldWndProc Procedure WndProc(hwnd, uMsg, wParam, lParam) Select uMsg Case #WM_DROPFILES *DroppedFilesArea = wParam NumberOfCharactersDropped.i = DragQueryFile_(*DroppedFilesArea , $FFFFFFFF, ReturnedFileName.s, 0) For CharacterIndex.i = 0 To NumberOfCharactersDropped.i - 1 CharacterBuffer.s = Space(#MAX_PATH) DragQueryFile_(*DroppedFilesArea , CharacterIndex.i, CharacterBuffer.s, #MAX_PATH) Select hwnd Case GadgetID(4) SetGadgetText(4, GetGadgetText(4) + CharacterBuffer.s + Chr(10)) Case GadgetID(5) SetGadgetText(5, GetGadgetText(5) + CharacterBuffer.s + Chr(10)) ; AddGadgetItem(5, -1, CharacterBuffer.s) EndSelect Next DragFinish_(*DroppedFilesArea) EndSelect ProcedureReturn CallWindowProc_(lpOldWndProc, hWnd, uMsg, wParam, lParam) EndProcedure hWnd = OpenWindow(0, 0, 0, 400, 400, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) TextGadget(4, 10, 10, 380, 180,"",#PB_Text_Border ) TextGadget(5, 10, 200, 380, 180,"",#PB_Text_Border ) ;EditorGadget(5, 10, 200, 380, 180,#PB_Editor_ReadOnly) ;Первый вариант ----------------------------------------------------------------- OpenLibrary(0, "USER32.DLL") *ChangeWindowMessageFilterEx = GetFunction(0, "ChangeWindowMessageFilterEx") CallFunctionFast(*ChangeWindowMessageFilterEx, GadgetID(4), #WM_DROPFILES,#MSGFLT_ADD, 0) CallFunctionFast(*ChangeWindowMessageFilterEx, GadgetID(4), #WM_COPYDATA,#MSGFLT_ADD, 0) CallFunctionFast(*ChangeWindowMessageFilterEx, GadgetID(4), $0049,#MSGFLT_ADD, 0) CallFunctionFast(*ChangeWindowMessageFilterEx, GadgetID(5), #WM_DROPFILES,#MSGFLT_ADD, 0) CallFunctionFast(*ChangeWindowMessageFilterEx, GadgetID(5), #WM_COPYDATA,#MSGFLT_ADD, 0) CallFunctionFast(*ChangeWindowMessageFilterEx, GadgetID(5), $0049,#MSGFLT_ADD, 0) CloseLibrary(0) ;-------------------------------------------------------------------------------- ;Второй вариант ----------------------------------------------------------------- ;ChangeWindowMessageFilter_(#WM_DROPFILES,#MSGFLT_ADD) ;ChangeWindowMessageFilter_(#WM_COPYDATA,#MSGFLT_ADD) ;ChangeWindowMessageFilter_($0049,#MSGFLT_ADD) ;-------------------------------------------------------------------------------- DragAcceptFiles_(GadgetID(4), 1) DragAcceptFiles_(GadgetID(5), 1) lpOldWndProc = SetWindowLongPtr_(GadgetID(4), #GWL_WNDPROC, @WndProc()) SetWindowLongPtr_(GadgetID(5), #GWL_WNDPROC, @WndProc()) Repeat eventz=WaitWindowEvent () Select eventz Case #PB_Event_CloseWindow Quit = 1 EndSelect Until Quit = 1 SetWindowLongPtr_(GadgetID(4), #GWL_WNDPROC, lpOldWndProc) SetWindowLongPtr_(GadgetID(5), #GWL_WNDPROC, lpOldWndProc)
Joker-2013
Longevity : 8 years 3 months Posts : 2053 REPUTATION :120 [+] [-] Location : из прошлого
nikzzzz , Всё, во всех вариантах, работает!
Joker-2013
Longevity : 8 years 3 months Posts : 2053 REPUTATION :120 [+] [-] Location : из прошлого
nikzzzz , Теперь бы все оптимизировать для повседневного использования... Типо: EnableGadgetDrop()
nikzzzz
Longevity : 8 years 7 months Posts : 3114 REPUTATION :127 [+] [-]
52704 Всё, во всех вариантах, работает!
А почему до этого не работала?
Joker-2013
Longevity : 8 years 3 months Posts : 2053 REPUTATION :120 [+] [-] Location : из прошлого
nikzzzz , Вот такой вариант даже работает...Дополнительная информация ChangeWindowMessageFilter_(#WM_DROPFILES,#MSGFLT_ADD) ChangeWindowMessageFilter_(#WM_COPYDATA,#MSGFLT_ADD) ChangeWindowMessageFilter_($0049,#MSGFLT_ADD) OpenWindow(0, 0, 0, 200, 200, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) EditorGadget(2, 10, 10, 180, 180,#PB_Editor_ReadOnly) DragAcceptFiles_(WindowID(0), 1) Repeat Event = WaitWindowEvent() Select Event Case #WM_DROPFILES *DroppedFilesArea = EventwParam() NumberOfCharactersDropped.i = DragQueryFile_(*DroppedFilesArea , $FFFFFFFF, ReturnedFileName.s, 0) For CharacterIndex.i = 0 To NumberOfCharactersDropped.i - 1 CharacterBuffer.s = Space(#MAX_PATH) DragQueryFile_(*DroppedFilesArea , CharacterIndex.i, CharacterBuffer.s, #MAX_PATH) GetCursorPos_(p.POINT) PbGadgetId.i = GetDlgCtrlID_(WindowFromPoint_(p\x + p\y << 32)) AddGadgetItem(2, -1, CharacterBuffer.s) Next DragFinish_(*DroppedFilesArea) EndSelect Until Event = #PB_Event_CloseWindow
Добавил к первому варианту верхние три строчки...
Joker-2013
Longevity : 8 years 3 months Posts : 2053 REPUTATION :120 [+] [-] Location : из прошлого
Я так понимаю, что нужно написать процедуру, типо этой: EventDropFiles() и закинуть в неё код:*DroppedFilesArea = EventwParam() NumberOfCharactersDropped.i = DragQueryFile_(*DroppedFilesArea , $FFFFFFFF, ReturnedFileName.s, 0) For CharacterIndex.i = 0 To NumberOfCharactersDropped.i - 1 CharacterBuffer.s = Space(#MAX_PATH) DragQueryFile_(*DroppedFilesArea , CharacterIndex.i, CharacterBuffer.s, #MAX_PATH) GetCursorPos_(p.POINT) PbGadgetId.i = GetDlgCtrlID_(WindowFromPoint_(p\x + p\y << 32)) AddGadgetItem(2, -1, CharacterBuffer.s) Next DragFinish_(*DroppedFilesArea) EndSelect
nikzzzz
Longevity : 8 years 7 months Posts : 3114 REPUTATION :127 [+] [-]
Joker-2013 , Это неудачное решение, в последних версиях написано про EventwParam()This function is not supported anymore and shouldn't used in new project. Use a callback to get full control over Windows message with SetWindowCallback().
Эта функция больше не поддерживается и не должна использоваться в новом проекте. Используйте обратный вызов, чтобы получить полный контроль над сообщением Windows с помощью SetWindowCallback ().
Joker-2013
Longevity : 8 years 3 months Posts : 2053 REPUTATION :120 [+] [-] Location : из прошлого
nikzzzz , так хочется без отбельного кальбека...
Joker-2013
Longevity : 8 years 3 months Posts : 2053 REPUTATION :120 [+] [-] Location : из прошлого
nikzzzz , Может сделаешь оптимизированный вариант? У меня не выходит....Window.DragDropEnable = function (hWnd) if User32:GetProcAddress_("ChangeWindowMessageFilterEx") then -- for Windows 7 and above User32.ChangeWindowMessageFilterEx(hWnd, 0x233, 1, 0); User32.ChangeWindowMessageFilterEx(hWnd, 0x004A, 1, 0); User32.ChangeWindowMessageFilterEx(hWnd, 0x0049, 1, 0); else if User32:GetProcAddress_("ChangeWindowMessageFilter") then -- for Windows Vista, Windows Server 2008 User32.ChangeWindowMessageFilter(0x233, 1); User32.ChangeWindowMessageFilter(0x004A, 1); User32.ChangeWindowMessageFilter(0x0049, 1); end end
и что будет в Vista & Windows Server 2008
nikzzzz
Longevity : 8 years 7 months Posts : 3114 REPUTATION :127 [+] [-]
Joker-2013 , А зачем мучиться ? Второй вариант;Второй вариант ------------------------------------------------------------ ChangeWindowMessageFilter_(#WM_DROPFILES,#MSGFLT_ADD) ChangeWindowMessageFilter_(#WM_COPYDATA,#MSGFLT_ADD) ChangeWindowMessageFilter_($0049,#MSGFLT_ADD) ;--------------------------------------------------------------------------------
полностью заменяет первый, его преимущество для данного случая - он применяется ко всем GUI объектам, в отличии от первого, который работает только с конкретным объектом.52719 и что будет в Vista & Windows Server 2008
Microsoft говорит , что все нормально, только для XP его желательно выключить.
Page 2 of 5
Current time is: 23-Sep 23:33
All times are UTC + 3
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum