[Цитировать]

    puhpol
  • 2
  • Стаж: 10 лет
  • Сообщений: 892
  • Репутация:75

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

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

v1.4 Fix4



Последний раз редактировалось: puhpol (2017-01-27 18:45), всего редактировалось 1 раз

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 9 лет 5 месяцев
  • Сообщений: 2053
  • Репутация:120

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

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 9 месяцев
  • Сообщений: 1324
  • Репутация:127

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

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 9 лет 5 месяцев
  • Сообщений: 2053
  • Репутация:120

    [+] [-]
  • Откуда: из прошлого
AZJIO, http://usbtor.ru/viewtopic.php?t=798

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет
  • Сообщений: 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
  • 1039
  • Стаж: 9 лет 5 месяцев
  • Сообщений: 2053
  • Репутация:120

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

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет
  • Сообщений: 3114
  • Репутация: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)

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 9 лет 5 месяцев
  • Сообщений: 2053
  • Репутация:120

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

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 9 лет 5 месяцев
  • Сообщений: 2053
  • Репутация:120

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

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет
  • Сообщений: 3114
  • Репутация:127

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

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 9 лет 5 месяцев
  • Сообщений: 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
  • 1039
  • Стаж: 9 лет 5 месяцев
  • Сообщений: 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
  • 215
  • Стаж: 9 лет
  • Сообщений: 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
  • 1039
  • Стаж: 9 лет 5 месяцев
  • Сообщений: 2053
  • Репутация:120

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

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 9 лет 5 месяцев
  • Сообщений: 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
  • 215
  • Стаж: 9 лет
  • Сообщений: 3114
  • Репутация: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 его желательно выключить.

Страница 2 из 5


Показать сообщения:    

Текущее время: 03-Дек 20:25

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы