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

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

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

    [+] [-]
  • Откуда: из прошлого
nikzzzz, AZJIO,
сорри что вмешиваюсь, но попробуйте вместо
RunWait('"BootIce.exe"'
использовать
ShellExecuteWait('"BootIce.exe"'
работает и без админских прав, и drag&drop в порядке
Ну, не знаю... У меня всё равно требует права Администратора...
ShellExecute_(0, "Open", GetExePath()+"BootIce.exe", "/edit_bcd /easymode /file="+Chr(34)+File+Chr(34), "", #SW_SHOWNORMAL)
Попробуйте сами... Исходник в комплекте.
Портативный пьюрик можно скачать тут


Последний раз редактировалось: Joker-2013 (2018-04-10 12:24), всего редактировалось 2 раз(а)

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

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

    [+] [-]
Joker-2013,
52660У меня всё равно требует права Администратора..
Может надо в манифесте прописать
level="asInvoker"

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

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

    [+] [-]
  • Откуда: из прошлого
nikzzzz, в манифесте чего? Бутайса или моей утили?

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

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

    [+] [-]
Joker-2013,
В твоей.

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

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

    [+] [-]
  • Откуда: из прошлого
nikzzzz,
Лучше помоги мне реализовать функцию перетаскивания, нормальную...
Тут стали обсуждать, но тема заглохла...
Если бы не было проблем с перетаскиванием, я бы написал еще несколько проектов на пьюрике...

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

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

    [+] [-]
Joker-2013,
Я как-то делал такую функцию на Autoit, когда возникли проблемы на Win8, вроде проблемы исчезли.
Сделал два аналога на пурике.

вариант с Callback, тот, что использовал на Autoit

Procedure WndProc(hwnd, uMsg, wParam, lParam)
OperationResult.i = #PB_ProcessPureBasicEvents
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)
GetCursorPos_(p.POINT)
PbGadgetId.i = GetDlgCtrlID_(WindowFromPoint_(p\x + p\y << 32))
AddGadgetItem(PbGadgetId.i, -1, CharacterBuffer.s)
Next
DragFinish_(*DroppedFilesArea)
EndSelect
ProcedureReturn OperationResult.i
EndProcedure
OpenWindow(0, 0, 0, 200, 200, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(2, 10, 10, 180, 180)
DragAcceptFiles_(WindowID(0), 1)
SetWindowCallback(@WndProc())
Repeat
Select WaitWindowEvent ()
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1

вариант без Callback

OpenWindow(0, 0, 0, 200, 200, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(2, 10, 10, 180, 180)
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(PbGadgetId.i, -1, CharacterBuffer.s)
Next
DragFinish_(*DroppedFilesArea)
EndSelect
Until Event = #PB_Event_CloseWindow

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

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

    [+] [-]
  • Откуда: из прошлого
nikzzzz, Второй вариант:

но что можно заметить, если не в объект тащить, а в окно, то кружочек не перечеркнутый...
В манифесте прописан запуск от имени Администратора, UAC - включен
Вариант первый:

Прогресс есть, но...
Похоже, ты где то не дожал....
То есть оба проекта работают сейчас одинаково.
Функция перетаскивания работает на окне, но заблокирована на гаджете...

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

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

    [+] [-]
Joker-2013,
Не знаю, надо смотреть, у меня проблем нет.
Вообще-то первый вариант предпочтительнее.
К стати, кому не сложно,протестируйте три тестовых скомпилированных скрипта.

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

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

    [+] [-]
  • Откуда: из прошлого
52675протестируйте три тестовых скомпилированных скрипта.
Так они у тебя, без завышения прав манифестом.
Третий пример славливает, но не отображает в окне путь...

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

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

    [+] [-]
52674Функция перетаскивания работает на окне, но заблокирована на гаджете...
Попробуй этот вариант.
OpenWindow(0, 0, 0, 200, 200, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(4, 10, 10, 180, 70,#PB_Editor_ReadOnly)
EditorGadget(5, 10, 100, 180, 70,#PB_Editor_ReadOnly)
DragAcceptFiles_(GadgetID(4), 1)
DragAcceptFiles_(GadgetID(5), 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(PbGadgetId.i, -1, CharacterBuffer.s)
Next
DragFinish_(*DroppedFilesArea)
EndSelect
Until Event = #PB_Event_CloseWindow

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

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

    [+] [-]
  • Откуда: из прошлого
nikzzzz,

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

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

    [+] [-]
  • Откуда: из прошлого
nikzzzz,

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

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

    [+] [-]
Если бы не было проблем с перетаскиванием, я бы написал еще несколько проектов на пьюрике...
В таких случаях я добавляю кнопку выбора папки/файла. Так как в этих случаях проблема нудного ручного поиска пути, то тут есть 2 варианта, указать по умолчанию путь наиболее вероятного варианта. Либо перед умолчальным проверить буфер обмена, если в нём существующий путь, то выкинуть диалог типа "Обнаружен путь в буфере обмена, открыть его?". Ну и третий вариант в своей проге с повышенными правами перетащить курсор захвата содержимого из окна с пониженными правами, как это делает Au3Info.exe из комплекта AutoIt3.

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


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

Текущее время: 29-Мар 01:06

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


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