576

Re: AHK: Замена "Window Spy"

Malcev пишет:

Так и сейчас можно.

Сделать переключение языка? Нет, нельзя.

577

Re: AHK: Замена "Window Spy"

Я имею в виду сейчас уже можно выложить на оф.форуме.
Для этого не надо делать переключение языка.

578

Re: AHK: Замена "Window Spy"

Заметил такой недочёт: грузит процессор на 3 — 5%, даже если курсор остаётся на месте.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

579

Re: AHK: Замена "Window Spy"

Да, у меня тоже грузит.

580

Re: AHK: Замена "Window Spy"

Malcev пишет:

Я имею в виду сейчас уже можно выложить на оф.форуме.

Т.е. я поймал на оверквотинге?

Malcev пишет:

Для этого не надо делать переключение языка.

Переключение языка нужно явно не для выкладки на оффорум.

581

Re: AHK: Замена "Window Spy"

Flasher пишет:

А, понятно. Это если окошко совсем маленьким по высоте сделать, то смысл в этом, вероятно, появляется. )

Ну это если у пользователя совсем запущенный случай... А так например если в "Control Text" большой текст, и надо перейти в "AccInfo", то наверное смысл очевиден.

Flasher пишет:

Так опцию вкл./выкл. независимого от фокуса поиска добавите? Очень надо.

Добавил - "Work with the active window".

teadrinker пишет:

Заметил такой недочёт: грузит процессор на 3 — 5%, даже если курсор остаётся на месте.

Ну а как он ещё узнает что что то изменилось под курсором не собрав всю информацию. Или у тебя над окном сабжа грузит, или когда свёрнуто?

сделать переключение языка

Описание пунктов меню есть на русском, один раз настроил и забыл, если какие то часто выбираешь, то машинально. В инглише не силён, но вроде всё понятно читая пункты при поиске нужного. Делать поддержку разных языков пока желания нет, ради чего этим усложнять код тоже не ясно.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

582

Re: AHK: Замена "Window Spy"

serzh82saratov пишет:

Ну это если у пользователя совсем запущенный случай.

Наверно. Благо у меня не он.

serzh82saratov пишет:

Добавил - "Work with the active window".

Спасибо.

serzh82saratov пишет:

если какие то часто выбираешь, то машинально

Автору легко говорить. Я же постоянно глаза ломаю, напряжно.

serzh82saratov пишет:

ради чего этим усложнять код тоже не ясно

По-моему, прочесть из ini значения ключей - это самое простое, что можно сделать в подобном коде. Так себе усложнение.

Что по кнопкам?

583 (изменено: teadrinker, 2017-01-23 22:34:57)

Re: AHK: Замена "Window Spy"

serzh82saratov пишет:

Ну а как он ещё узнает что что то изменилось под курсором не собрав всю информацию.

А зачем всю-то? Нужно только хэндл объекта (или accObject) и его координаты. Если эти данные не изменились, всё остальное получать скорее всего не нужно. Понятно, что может измениться какой-то текст, но вряд ли это так принципиально. Потом, нагрузка, скорее всего, из-за использования WMI, без которого можно обойтись.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

584

Re: AHK: Замена "Window Spy"

Flasher, не вижу здесь оверквотинга.
По-моему, всё понятно, что я хотел сказать.
- По-хорошему, надо все надписи брать из файла настроек и сделать переключение языка. Тогда можно и на буржуйском форуме выложить.
- Так и сейчас можно. Меню же всё на английском.

585

Re: AHK: Замена "Window Spy"

Malcev
Вы неверно трактуете мысль. Под "Тогда" подразумевалось не "И в этом случае уже",  а "Вдобавок к этому уже".

586

Re: AHK: Замена "Window Spy"

Никогда не встречал такое трактование слова "тогда".
http://gramota.ru/slovari/dic/?word=%D1 … &all=x

587

Re: AHK: Замена "Window Spy"

Трактовать мысль - не то же, что слово. С союзом "и" предложение носит добавочный (побочный) характер, т.е. в значении "при данных обстоятельствах".
На этом заключении данный оффтопик тут сворачиваем. YMP, если захочет, уточнит.

588

Re: AHK: Замена "Window Spy"

Я имел в виду, что если есть разнобой в языке надписей, то после его устранения можно выложить и там. Мы и так можем пользоваться, а на буржуйском форуме русского не знают. Но если всё на английском, то этого препятствия нет.

589

Re: AHK: Замена "Window Spy"

teadrinker пишет:

Если эти данные не изменились, всё остальное получать скорее всего не нужно. Понятно, что может измениться какой-то текст, но вряд ли это так принципиально.

Кто его знает, что иногда может понадобится, по мне так пусть грузит, всё равно окно свернёшь если определять ничего не надо.

teadrinker пишет:

Потом, нагрузка, скорее всего, из-за использования WMI, без которого можно обойтись.

Ты про GetCommandLineProc? Это работает в 1000+ раз быстрее, можно заменить. Но при замене, на общую нагрузку, насколько я заметил, принциниально не влияет.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

590

Re: AHK: Замена "Window Spy"

teadrinker
SeDebugPrivilege() нужен только при старте скрипта?

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

591

Re: AHK: Замена "Window Spy"

Да, один раз для процесса. GetCommandLine также заодно и ProcessPath возвращает:

F11:: 
   WinGet, PID, PID, A
   obj := GetCommandLine(PID, true, true)
   MsgBox, % "CommandLine = " obj.cmd "`nImagePath = " obj.path
   Return

GetCommandLine(PID, SetDebugPrivilege := false, GetImagePath := false)  {
   static SetDebug := 0, PROCESS_QUERY_INFORMATION := 0x400, PROCESS_VM_READ := 0x10, STATUS_SUCCESS := 0
   
   if (SetDebugPrivilege && !SetDebug)  {
      if !res := SeDebugPrivilege()
         SetDebug := 1
      else  {
         MsgBox, 4, Ошибка SeDebugPrivilege(), Не удалось установить привилегии.`nОшибка %res%`nПродолжить?
         IfMsgBox, No
            Return
      }
   }
   hProc := DllCall("OpenProcess", UInt, PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, Int, 0, UInt, PID, Ptr)
   (A_Is64bitOS && DllCall("IsWow64Process", Ptr, hProc, UIntP, IsWow64))
   if (!A_Is64bitOS || IsWow64)
      PtrSize := 4, PtrType := "UInt", pPtr := "UIntP", offsetCMD := 0x40
   else
      PtrSize := 8, PtrType := "Int64", pPtr := "Int64P", offsetCMD := 0x70

   hModule := DllCall("GetModuleHandle", "str", "Ntdll", Ptr)
   if (A_PtrSize < PtrSize)  {            ; скрипт 32, целевой процесс 64
      if !QueryInformationProcess := DllCall("GetProcAddress", Ptr, hModule, AStr, "NtWow64QueryInformationProcess64", Ptr)
         failed := "NtWow64QueryInformationProcess64"
      if !ReadProcessMemory := DllCall("GetProcAddress", Ptr, hModule, AStr, "NtWow64ReadVirtualMemory64", Ptr)
         failed := "NtWow64ReadVirtualMemory64"
      info := 0, szPBI := 48, offsetPEB := 8
   }
   else  {
      if !QueryInformationProcess := DllCall("GetProcAddress", Ptr, hModule, AStr, "NtQueryInformationProcess", Ptr)
         failed := "NtQueryInformationProcess"
      ReadProcessMemory := "ReadProcessMemory"
      if (A_PtrSize > PtrSize)            ; скрипт 64, целевой процесс 32
         info := 26, szPBI := 8, offsetPEB := 0
      else                                ; скрипт и целевой процесс одной битности
         info := 0, szPBI := PtrSize * 6, offsetPEB := PtrSize
   }
   if failed  {
      DllCall("CloseHandle", Ptr, hProc)
      MsgBox, Не удалось получить указатель на функцию %failed%
      Return
   }
   VarSetCapacity(PBI, 48, 0)
   if DllCall(QueryInformationProcess, Ptr, hProc, UInt, info, Ptr, &PBI, UInt, szPBI, UIntP, bytes) != STATUS_SUCCESS  {
      DllCall("CloseHandle", Ptr, hProc)
      Return
   }
   pPEB := NumGet(&PBI + offsetPEB, PtrType)
   DllCall(ReadProcessMemory, Ptr, hProc, PtrType, pPEB + PtrSize * 4, pPtr, pRUPP, PtrType, PtrSize, UIntP, bytes)
   DllCall(ReadProcessMemory, Ptr, hProc, PtrType, pRUPP + offsetCMD, UShortP, szCMD, PtrType, 2, UIntP, bytes)
   DllCall(ReadProcessMemory, Ptr, hProc, PtrType, pRUPP + offsetCMD + PtrSize, pPtr, pCMD, PtrType, PtrSize, UIntP, bytes)
   
   VarSetCapacity(buff, szCMD, 0)
   DllCall(ReadProcessMemory, Ptr, hProc, PtrType, pCMD, Ptr, &buff, PtrType, szCMD, UIntP, bytes)
   obj := { cmd: StrGet(&buff, "UTF-16") }
   
   if (GetImagePath && obj.cmd)  {
      DllCall(ReadProcessMemory, Ptr, hProc, PtrType, pRUPP + offsetCMD - PtrSize*2, UShortP, szPATH, PtrType, 2, UIntP, bytes)
      DllCall(ReadProcessMemory, Ptr, hProc, PtrType, pRUPP + offsetCMD - PtrSize, pPtr, pPATH, PtrType, PtrSize, UIntP, bytes)
      
      VarSetCapacity(buff, szPATH, 0)
      DllCall(ReadProcessMemory, Ptr, hProc, PtrType, pPATH, Ptr, &buff, PtrType, szPATH, UIntP, bytes)
      obj.path := StrGet(&buff, "UTF-16") . (IsWow64 ? " *32" : "")
   }
   DllCall("CloseHandle", Ptr, hProc)
   Return obj
}

SeDebugPrivilege()  {
   static PROCESS_QUERY_INFORMATION := 0x400, TOKEN_ADJUST_PRIVILEGES := 0x20, SE_PRIVILEGE_ENABLED := 0x2
   
   hProc := DllCall("OpenProcess", UInt, PROCESS_QUERY_INFORMATION, Int, false, UInt, DllCall("GetCurrentProcessId"), Ptr)
   DllCall("Advapi32\OpenProcessToken", Ptr, hProc, UInt, TOKEN_ADJUST_PRIVILEGES, PtrP, token)
   
   DllCall("Advapi32\LookupPrivilegeValue", Ptr, 0, Str, "SeDebugPrivilege", Int64P, luid)
   VarSetCapacity(TOKEN_PRIVILEGES, 16, 0)
   NumPut(1, TOKEN_PRIVILEGES, "UInt")
   NumPut(luid, TOKEN_PRIVILEGES, 4, "Int64")
   NumPut(SE_PRIVILEGE_ENABLED, TOKEN_PRIVILEGES, 12, "UInt")
   DllCall("Advapi32\AdjustTokenPrivileges", Ptr, token, Int, false, Ptr, &TOKEN_PRIVILEGES, UInt, 0, Ptr, 0, Ptr, 0)
   res := A_LastError
   DllCall("CloseHandle", Ptr, token)
   DllCall("CloseHandle", Ptr, hProc)
   Return res  ; в случае удачи 0
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg
+ DD

592 (изменено: serzh82saratov, 2017-02-04 05:09:36)

Re: AHK: Замена "Window Spy"

Отлично, ещё забрал разрядность процесса для 64 bit OS.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

593

Re: AHK: Замена "Window Spy"

teadrinker пишет:

GetCommandLine также заодно и ProcessPath возвращает:

Почему-то, если забросить в окно программы новый файл, то CommandLine возвращает адрес об изначально открытом файле.

594

Re: AHK: Замена "Window Spy"

DD, ничего не понял. О каком окне идёт речь?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

595

Re: AHK: Замена "Window Spy"

teadrinker, в смысле — программы, из которой по F11 возвращаем адрес. К примеру, из стандартного Блокнота: если открыть через него файл, а потом перетащить в его окно другой файл — данные по F11 будут о первом файле. Хотя, возможно, это не считается за командную строку.

596

Re: AHK: Замена "Window Spy"

Есть у кого возможность вытянуть из "Window Spy" код, относящийся к получению URL'ов?

597

Re: AHK: Замена "Window Spy"

DD, командную строку процесса можно посмотреть в диспетчере задач.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

598

Re: AHK: Замена "Window Spy"

Есть у кого возможность вытянуть из "Window Spy" код, относящийся к получению URL'ов?

А разве там есть такой функционал?

599

Re: AHK: Замена "Window Spy"

Malcev
То есть, там такая графа есть — «URL: ...». Например, он показывает локальные адреса из CHM и Universal Viewer (чего в последнем случае у меня другие скрипты не делали).

600

Re: AHK: Замена "Window Spy"

DD
Можно скриншот Window Spy с таким параметром. И что за другие скрипты?
Собственно в сабже URL: в CHM есть, чем не устраивает.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).