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

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

    [+] [-]
73545 ради одной команды тащить в скрипт UDF
Зато команда будет выполнена корректно, без плясок с бубнами, да и зачем изобретать велосипед?
Ну, размер исходника немного возрастет, стрипер выбросит не нужное, так, что возрастет незначительно, скорость будет выше, чем у твоего скрипта за счет того, что все делается напрямую, а не посылкой каких-то команд, с ожиданием отклика или задержкой, в твоем скрипте, например, куча Sleep().
Да и читаемость лучше, а это не маловажный фактор.

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

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

    [+] [-]
AZJIO
К стати, ты не знаешь аналога hh.exe для использования в WinPe ?
Просмотрщиков много, но для работы со справками большинство неудобны.
Я пока остановился на KchmViewer, наиболее близок по функционалу к hh.exe , но у него свои заморочки, не на всех chm файлах корректно работает.

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

    niknikto
  • 20306
  • Стаж: 5 лет 2 месяца
  • Сообщений: 60
  • Репутация:7

    [+] [-]
73549AZJIO
К стати, ты не знаешь аналога hh.exe для использования в WinPe ?
Просмотрщиков много, но для работы со справками большинство неудобны.
Я пока остановился на KchmViewer, наиболее близок по функционалу к hh.exe , но у него свои заморочки, не на всех chm файлах корректно работает.
SumatraPDF читает chm файлы

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

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

    [+] [-]
niknikto
73551SumatraPDF читает chm файлы
Знаю, к сожалению не подходит, для работы со справками неудобен. ak

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

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

    [+] [-]
Перезалил Help.7z
если указать Exact_match=1 то заголовок справки определяется точным соответствием.
Если PathCHM=http..... то справка открывается по ссылке, а искомый текст в ссылке определяется %s. Можно сформировать ссылку как поиск в домене.
Если не найден ini или связанная с расширением секция, то появляется информационное сообщение с предложением искать в Google.
73549не знаешь аналога hh.exe
не знаю

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

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

    [+] [-]
nikzzzz, я обфуцировал HtmlHelp.au3 у меня получилось 344 строки, минус 23 строки кода, в итоге импортировано 321 строка. У меня из 140 строк (обновлённый, а был 82) осталось 84 строки (старый код дал 55 строк)
скорость будет выше, чем у твоего скрипта за счет того, что все делается напрямую, а не посылкой каких-то команд, с ожиданием отклика или задержкой, в твоем скрипте, например, куча Sleep().
У меня Sleep() после активности объекта справки, если что-то выделил, например часть кода, при чём указывание $hWnd не помогает исправить ситуацию, так что надо ещё проверять будет ли _GUICtrlTab_ClickTab на этом спотыкаться, ведь ControlCommand($hWnd, "", $hControl, "TabRight") также указывает дескриптор окна, дескриптор элемента, но умудряется спотыкаться. Второй Sleep(10) можно удалить, третий Sleep(50) можно заменить на клик кнопки. Но как я говорил скорость тут не важна, потому что винда делает задержи по 400мс намерено, а у меня на данный момент в сумме 110 (0,1 секунда).
nikzzzz
в HtmlHelp.au3
$hWnd = WinWait($sTitle, '', 5)
получить дескриптор, а потом пользоваться заголовком ControlClick($sTitle... во всех функциях не экономично, потому что доступ к окну всегда происходит по дескриптору. Если получить дескриптор а пользоваться заголовком это заставить скрипт каждый раз из заголовка вычислять дескриптор, причём если будет похожие по заголовку окна и по умолчанию режим поиска заголовка по началу то при активации другого окна с похожим заголовком часть скрипта выполнится для другого окна.
ControlClick($sTitle, '', '[CLASS:Button; INSTANCE:1]', 'left')
вместо left лучше main, потому что для левши с переназначенной кнопкой это вызывает конт. меню.

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

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

    [+] [-]
AZJIO, aa
73572меня получилось 344 строки, минус 23 строки кода
Посмотрел, после стрипера от библиотека осталось 254 строки кода.
Но это все не принципиально, нет особого смысла оптимизации, не та задача.
73572ControlClick($sTitle... во всех функциях не экономично
Согласен, просто нужно было быстро решить задачу, написал на скорую руку, работает, и забыл про нее, если бы не твой пост с Help.au3, вообще бы про нее не вспомнил.
Добавлено через 1 час 19 минут 7 секунд:
73572вместо left лучше main
Не знал, считал что переназначение кнопок на это не влияет, спасибо за инфу.

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

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

    [+] [-]
nikzzzz, но по умолчанию left, что кажется странным

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

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

    [+] [-]
AZJIO,
73576по умолчанию left, что кажется странным
Не понял, left - выполнить, Right - меню, свойства и т.п
Я просто считал, что переназначения кнопок в мыши через ее свойства просто ее "переворачивает" ее на 180 градусов, и левая кнопка остается левой, а правая - правой, сам этим не пользовался, правша.

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

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

    [+] [-]
73577и левая кнопка остается левой
если left, то левая кнопка остаётся левой, для левши указательный палец на правой, в итоге left должен при переназначении кнопок вызывать меню, именно поэтому я и говорил что надо main. А значит и по умолчанию предпочтительно main. Но всё это я в теории говорю, я не тестировал.

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

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

    [+] [-]
Методом поиска нашёл следующие виды переменных:
$T
$%T
$%&T
$%&&T
&T
&&T
%T
%%T
%&T
%%&T
@T
@@T
@&T
Имеет ли смысл различать их при подсветке?
Используя [@%&$]++\w++ получил список в консоль, далее заменил тексты \w++ на "T", далее удалил дубликаты и сортировал.
73522Я пользуюсь редактором SynWrite
...........
Если интересно, могу выложить.
Да, можно было бы посмотреть, в официальном не подсвечивается синтаксис AutoIt3, PureBasic и PECMD.

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

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

    [+] [-]
AZJIO, aa
73543Хотел на PureBasic переписать, чтобы компактная утилита была, но не нашёл способа манипуляций вкладок
Что-то меня это задело, обижаешь пурик ! ab
Написал утилиту

HtmlHelp

#HH_DISPLAY_TOPIC = 1
#HH_KEYWORD_LOOKUP = $0D
#HH_SYNC = $09
#HH_DISPLAY_INDEX = $02
#PB_Shortcut_SrodFlag=1<<16
Structure tAKLIN
  cbStruct.l
  fReserved.l
  pszKeywords.s
  pszUrl.s
  pszMsgText.s
  pszMsgTitle.s
  pszWindow.s
  fIndexOnFail.l
EndStructure
Global hWnd, hWnd_Find, g_ID_Search, ID , g_class.s, classText.s = Space(256)
Procedure.l enumChildren(hwnd.l)
  If hwnd
    GetClassName_(hwnd, @classText, 256)
    If classText = g_class
      ID = ID + 1
      If ID = g_ID_Search
        hWnd_Find = hwnd
        ProcedureReturn 0
      EndIf
    EndIf
    ProcedureReturn 1
  EndIf
  ProcedureReturn 0
EndProcedure
Procedure _KillProcess(Pid)
  Protected phandle = OpenProcess_(#PROCESS_TERMINATE, #False, Pid)
  If phandle <> #Null
    If TerminateProcess_(phandle, 1)
      result = #True
    EndIf
    CloseHandle_(phandle)
  EndIf
  ProcedureReturn result
EndProcedure
Procedure _KillOtherProcess(ProcName$, CurrentPid.l)
  Protected ProcNameTmp$=Space(#MAX_PATH),ProcessFound,Pid,Process.ProcessENTRY32,hProcess
  Process.ProcessENTRY32\dwSize = SizeOf(ProcessENTRY32)
  Protected psapi_dll=OpenLibrary(#PB_Any,"psapi.dll")
  Protected Snapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
  If Snapshot
    ProcessFound = Process32First_(Snapshot, @Process)
    While ProcessFound
      Pid  = Process\th32ProcessID
      If Pid <> CurrentPid
        hProcess=OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ,#Null,Pid)
        If hProcess
          CallFunction(psapi_dll,"GetModuleFileNameExW",hProcess,#Null,@ProcNameTmp$,#MAX_PATH)
          CloseHandle_(hProcess)
          If LCase(ProcName$)=LCase(ProcNameTmp$)
            _KillProcess(Pid)
          EndIf
        EndIf
      EndIf
      ProcessFound = Process32Next_(Snapshot, @Process)
    Wend
  EndIf
  CloseHandle_(Snapshot)
  CloseLibrary(psapi_dll)
EndProcedure
Procedure HtmlHelp(HelpFile.s, Keyword.s)
  Protected AKLIN.tAKLIN,hWnd.l
  Protected HHCtrl_ocx = OpenLibrary(#PB_Any, "HHCtrl.ocx")
  AKLIN\cbStruct = SizeOf(tAKLIN)
  AKLIN\fReserved = 0
  AKLIN\pszKeywords = Keyword
  AKLIN\fIndexOnFail = #True
  hWnd=CallFunction(HHCtrl_ocx, "HtmlHelpW",0, @HelpFile, #HH_KEYWORD_LOOKUP, AKLIN)
  If hWnd
    ID = 0
    g_ID_Search = 1
    g_class.s = "Button"
    EnumChildWindows_(hWnd, @enumChildren(), 0)
    SendMessage_(hWnd_Find, #BM_CLICK, 0, 0)
    CallFunction(HHCtrl_ocx, "HtmlHelpW", 0, @HelpFile, #HH_DISPLAY_TOPIC, 0)
    CloseLibrary(HHCtrl_ocx)
    While GetTopWindow_(hWnd):Delay(100):Wend
  EndIf
EndProcedure
FullPrograName$=Space(#MAX_PATH)
GetModuleFileName_(#NUL,@FullPrograName$,#MAX_PATH)
_KillOtherProcess(FullPrograName$,GetCurrentProcessId_())
HelpFile$ = ProgramParameter()
SearchWord$ = ProgramParameter()
HtmlHelp(HelpFile$, SearchWord$)
В скомпилированном виде весит 8 Kb
Не требует указания title окна, посчитал излишеством.
73601можно было бы посмотреть
Выложу чуть позже.


Последний раз редактировалось: nikzzzz (2020-02-02 12:27), всего редактировалось 1 раз

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

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

    [+] [-]
nikzzzz, дык я тоже написал вот
Нашёл баг, номера элементов после перезапуска справки меняются, надо подумать. Я как раз удалил из примера возвращаемые тексты элементов. Если пару раз выбрать другие вкладки, то начинает работать. У поля ввода нет текста, вариант с поиском по тексту отпадает.
Немного разгадал: 3 поля ввода, один в комбо, его можно отсечь по родительскому окну, два других принадлежат не вкладкам, а дочернему окну в котором находится Таб. Номер 1 получает тот, который первым открыт, он первым рисуется и получает номер. Как вариант можно в оба сделать вставку, так как для "Избранного это не мешает".
Перезалил, теперь работает стабильно.

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

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

    [+] [-]
AZJIO,
73601в официальном не подсвечивается синтаксис AutoIt3, PureBasic и PECMD.
Дополнительные лексеры можно взять здесь.
73605теперь работает стабильно.
Как-то уж больно все сложно.
Добавлено через 2 часа 35 минут 31 секунда:
AZJIO
Посмотрел твой Help.pb, красиво сделан, но уж как-то очень ненадежно выглядит, хотя для данной задачи не принципиально.
Немного подправил свой HtmlHelp (использовал твои наработки).
Добавлено через 2 часа 55 минут 20 секунд:
SynWrite
Подсветка Grub4Dos, Tbs, PeCmd.

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

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

    [+] [-]
SynWrite
Подсветка Grub4Dos, Tbs, PeCmd.
Подсветка для PureBasic

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


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

Текущее время: 19-Апр 13:40

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


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