[Quote]

    puhpol
  • 2
  • Longevity: 10 years
  • Posts: 892
  • REPUTATION:75

    [+] [-]
EasyBOOTICE v1.4- Очень удобная программа для редактирования файлов BCD, GRLDR, Menu.lst.
Программа проста, просто перетащите файл в нужное окно программы.
Откроется окно BootIce для редактирования файла.
Окно утилиты сохраняет свою позицию в файл конфигурации.
В файле конфигурации можно "включить" режим: "Поверх всех окон"
Кино:

Новая версия 1.4
Добавлена х64
При двойном клике на кнопки, открывается соответствующее окно BootICE
Решена проблема с перетаскиванием, при включенном UAC и запуском от имени Администратора
Благодарю nikzzzz за помощь!
Файл подписан самопальным сертификатом, что бы UAC писал корректные данные, установите Sert.cer в систему (не обязательно)
Attachments

v1.4 Fix4



Last edited by puhpol on 2017-01-27 18:45; edited 1 time in total

[Quote]

    Joker-2013
  • 1039
  • Longevity: 9 years 6 months
  • Posts: 2053
  • REPUTATION:120

    [+] [-]
  • Location: из прошлого
AZJIO, Проблему с перетаскиванием, решили даже в AutoPlay Media Studio, где работа с API ограниченна...
Неужеле на пьюрике, не решим...
Не буду же я перед каждым пользователем оправдываться, почему не работает...
Писать какой то проект и упираться в данное ограничение, не хочется....

[Quote]

    AZJIO
  • 17953
  • Longevity: 6 years 10 months
  • Posts: 1328
  • REPUTATION:127

    [+] [-]
Joker-2013
Проверил несколько продвинутых прог, ни в одной под админом нет удачного перетащить-бросить.
решили даже в AutoPlay Media Studio, где работа с API ограниченна...
ну ограничена она наверно для пользователя, а не для программистов этой проги. Скинь EXE в котором работает.

[Quote]

    Joker-2013
  • 1039
  • Longevity: 9 years 6 months
  • Posts: 2053
  • REPUTATION:120

    [+] [-]
  • Location: из прошлого
AZJIO, http://usbtor.ru/viewtopic.php?t=798

[Quote]

    nikzzzz
  • 215
  • Longevity: 9 years
  • 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)

[Quote]

    Joker-2013
  • 1039
  • Longevity: 9 years 6 months
  • Posts: 2053
  • REPUTATION:120

    [+] [-]
  • Location: из прошлого
nikzzzz, Работают оба варианта, но только при переносе в верхний гаджет.

[Quote]

    nikzzzz
  • 215
  • Longevity: 9 years
  • Posts: 3114
  • REPUTATION:127

    [+] [-]
Joker-2013,
Попробуй следующее
EditorGadget(5, 10, 200, 380, 180,[b]#PB_Editor_ReadOnly[/b])
А так-же попробуй вариант с двумя TextGadget
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)
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)

[Quote]

    Joker-2013
  • 1039
  • Longevity: 9 years 6 months
  • Posts: 2053
  • REPUTATION:120

    [+] [-]
  • Location: из прошлого
nikzzzz, Всё, во всех вариантах, работает! ay

[Quote]

    Joker-2013
  • 1039
  • Longevity: 9 years 6 months
  • Posts: 2053
  • REPUTATION:120

    [+] [-]
  • Location: из прошлого
nikzzzz,
Теперь бы все оптимизировать для повседневного использования...
Типо: EnableGadgetDrop()

[Quote]

    nikzzzz
  • 215
  • Longevity: 9 years
  • Posts: 3114
  • REPUTATION:127

    [+] [-]
52704Всё, во всех вариантах, работает!
А почему до этого не работала?

[Quote]

    Joker-2013
  • 1039
  • Longevity: 9 years 6 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
Добавил к первому варианту верхние три строчки...

[Quote]

    Joker-2013
  • 1039
  • Longevity: 9 years 6 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

[Quote]

    nikzzzz
  • 215
  • Longevity: 9 years
  • 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 ().

[Quote]

    Joker-2013
  • 1039
  • Longevity: 9 years 6 months
  • Posts: 2053
  • REPUTATION:120

    [+] [-]
  • Location: из прошлого
nikzzzz, так хочется без отбельного кальбека...

[Quote]

    Joker-2013
  • 1039
  • Longevity: 9 years 6 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

[Quote]

    nikzzzz
  • 215
  • Longevity: 9 years
  • Posts: 3114
  • REPUTATION:127

    [+] [-]
Joker-2013, aa
А зачем мучиться ?
Второй вариант
;Второй вариант ------------------------------------------------------------
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


Display posts:    

Current time is: 17-Jan 23:49

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