puhpol
Стаж : 9 лет 6 месяцев Сообщений : 888 Репутация :73 [+] [-]
EasyBOOTICE v1.4 -
Очень удобная программа для редактирования файлов BCD, GRLDR, Menu.lst. Программа проста, просто перетащите файл в нужное окно программы. Откроется окно BootIce для редактирования файла. Окно утилиты сохраняет свою позицию в файл конфигурации. В файле конфигурации можно "включить" режим: "Поверх всех окон" Кино:Новая версия 1.4 Добавлена х64 При двойном клике на кнопки, открывается соответствующее окно BootICE Решена проблема с перетаскиванием, при включенном UAC и запуском от имени АдминистратораБлагодарю nikzzzz за помощь! Файл подписан самопальным сертификатом, что бы UAC писал корректные данные, установите Sert.cer в систему (не обязательно)
Вложение
EasyBootIce_v1.4.zip
(2 MB, Скачано: 2991 раз)
Последний раз редактировалось: puhpol (2017-01-27 18:45), всего редактировалось 1 раз
Joker-2013
Стаж : 8 лет 10 месяцев Сообщений : 2053 Репутация :120 [+] [-] Откуда : из прошлого
AZJIO , Проблему с перетаскиванием, решили даже в AutoPlay Media Studio, где работа с API ограниченна... Неужеле на пьюрике, не решим... Не буду же я перед каждым пользователем оправдываться, почему не работает... Писать какой то проект и упираться в данное ограничение, не хочется....
AZJIO
Стаж : 6 лет 2 месяца Сообщений : 1286 Репутация :127 [+] [-]
Joker-2013 Проверил несколько продвинутых прог, ни в одной под админом нет удачного перетащить-бросить.решили даже в AutoPlay Media Studio, где работа с API ограниченна...
ну ограничена она наверно для пользователя, а не для программистов этой проги. Скинь EXE в котором работает.
Joker-2013
Стаж : 8 лет 10 месяцев Сообщений : 2053 Репутация :120 [+] [-] Откуда : из прошлого
nikzzzz
Стаж : 9 лет 3 месяца Сообщений : 3114 Репутация :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
Стаж : 8 лет 10 месяцев Сообщений : 2053 Репутация :120 [+] [-] Откуда : из прошлого
nikzzzz , Работают оба варианта, но только при переносе в верхний гаджет.
nikzzzz
Стаж : 9 лет 3 месяца Сообщений : 3114 Репутация :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
Стаж : 8 лет 10 месяцев Сообщений : 2053 Репутация :120 [+] [-] Откуда : из прошлого
nikzzzz , Всё, во всех вариантах, работает!
Joker-2013
Стаж : 8 лет 10 месяцев Сообщений : 2053 Репутация :120 [+] [-] Откуда : из прошлого
nikzzzz , Теперь бы все оптимизировать для повседневного использования... Типо: EnableGadgetDrop()
nikzzzz
Стаж : 9 лет 3 месяца Сообщений : 3114 Репутация :127 [+] [-]
52704 Всё, во всех вариантах, работает!
А почему до этого не работала?
Joker-2013
Стаж : 8 лет 10 месяцев Сообщений : 2053 Репутация :120 [+] [-] Откуда : из прошлого
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
Стаж : 8 лет 10 месяцев Сообщений : 2053 Репутация :120 [+] [-] Откуда : из прошлого
Я так понимаю, что нужно написать процедуру, типо этой: 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
Стаж : 9 лет 3 месяца Сообщений : 3114 Репутация :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
Стаж : 8 лет 10 месяцев Сообщений : 2053 Репутация :120 [+] [-] Откуда : из прошлого
nikzzzz , так хочется без отбельного кальбека...
Joker-2013
Стаж : 8 лет 10 месяцев Сообщений : 2053 Репутация :120 [+] [-] Откуда : из прошлого
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
Стаж : 9 лет 3 месяца Сообщений : 3114 Репутация :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 его желательно выключить.
Страница 2 из 5
Текущее время: 06-Май 06:55
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы