Автор Тема: Быстрый поиск ключа в CLSID  (Прочитано 9913 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн snoitaleR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 854

  • Автор темы
  • Репутация: 223
  • Пол: Мужской
    • Награды
Re: Быстрый поиск ключа в CLSID
« Ответ #15, Отправлен: Декабрь 25, 2009, 12:03:08 »
Yashied
Супер... +1  :)
WINAPI который раз выручает AUTOIT...


Добавлено: Декабрь 25, 2009, 13:48:56
Latoid
Хотелось бы и твой вариант завершить...
Он быстрее стандартного, может, когда пригодится... :)
Однако функция _ArrayDisplay ($aRecords2), насколько я понял, выдала мне весь массив из 70000 строк...
То есть, не отфильтровала нужные ключи...

Точнее, _ArrayDisplay ($aRecords) выдала весь массив строк, а _ArrayDisplay ($aRecords2) ничего не выдала...
Хотя строки нужные точно есть в файле...

Кстати, размер строковой переменной 2147483647 символов...
А мой файл 2,8 МБ, что больше, поэтому строковая переменная могла переполниться...
« Последнее редактирование: Декабрь 25, 2009, 14:24:47 от snoitaleR, Причина: Объединение сообщений »
Главное в жизни человека - это отношение...

Русское сообщество AutoIt

Re: Быстрый поиск ключа в CLSID
« Ответ #15 Отправлен: Декабрь 25, 2009, 12:03:08 »

Оффлайн Latoid [?]

  • Новичок
  • *
  • Сообщений: 95
  • Репутация: 11
    • Награды
Re: Быстрый поиск ключа в CLSID
« Ответ #16, Отправлен: Декабрь 25, 2009, 14:47:59 »
Точнее, _ArrayDisplay ($aRecords) выдала весь массив строк, а _ArrayDisplay ($aRecords2) ничего не выдала...
Хотя строки нужные точно есть в файле...

Кстати, размер строковой переменной 2147483647 символов...
А мой файл 2,8 МБ, что больше, поэтому строковая переменная могла переполниться...

1. Поправил регэксп. См. выше. У меня нормально отрабатывает. Он раньше учитывал только цифры в первых восьми символах, теперь и буквы тоже
2. Из справки:
15. What are the current technical limits of AutoIt v3?
...
Maximum string length: 2,147,483,647 characters
....

Т.е. 2 Гб.

Оффлайн snoitaleR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 854

  • Автор темы
  • Репутация: 223
  • Пол: Мужской
    • Награды
Re: Быстрый поиск ключа в CLSID
« Ответ #17, Отправлен: Декабрь 25, 2009, 14:55:40 »
Latoid
Да, действительно, теперь работает... :)
Спасибо... +1

Думаю, тему можно закрыть...

Русское сообщество AutoIt

Re: Быстрый поиск ключа в CLSID
« Ответ #17 Отправлен: Декабрь 25, 2009, 14:55:40 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8082
  • Репутация: 2314
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Быстрый поиск ключа в CLSID
« Ответ #18, Отправлен: Декабрь 25, 2009, 15:00:40 »
Yashied
Я тут попробовал также с WinAPI пронумирировать значения ключей (RegEnumValue), но у меня скрипт постоянно крашится, я видимо неправильно расшифровываю описание использования функций:

Код: AutoIt [Выделить]
$nHKEY_LOCAL_MACHINE = 0x80000002
$sRegKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

$aRet = DllCall('advapi32.dll', 'long', 'RegOpenKeyExW', 'ulong_ptr', $nHKEY_LOCAL_MACHINE, _
    'wstr', $sRegKey, 'dword', 0, 'dword', 0xF003F, 'ulong_ptr*', 0)
If @error Or $aRet[0] Then Exit

$hKey = $aRet[5]
$tData = DllStructCreate('char[1024]')
$pData = DllStructGetPtr($tData)

$i = 0

While 1
    $aRet = DllCall('advapi32.dll', 'long', 'RegEnumValue', 'ulong_ptr', $hKey, 'dword', $i, 'ptr', $pData, 'dword', 1024, 'ptr', 0)
    If @error Or $aRet[0] Then ExitLoop
   
    $sRegKey_Name = DllStructGetData($tData, 1)
    $i += 1
   
    ConsoleWrite($sRegKey_Name & @CRLF)
WEnd

DllCall('advapi32.dll', 'long', 'RegCloseKey', 'ulong_ptr', $hKey)


Есть идеи как это использовать корректно?


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2700
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Быстрый поиск ключа в CLSID
« Ответ #19, Отправлен: Декабрь 25, 2009, 16:35:48 »
CreatoR

Код: AutoIt [Выделить]
DllCall('advapi32.dll', 'long', 'RegEnumValue', 'ulong_ptr', $hKey, 'dword', $i, 'ptr', $pData, 'dword*', 1024, 'ptr', 0, 'ptr', 0, 'ptr', 0, 'ptr', 0)


'dword*' - In/Out

Лучше пользоваться оффициальным MSDN.


Думай, прежде чем говорить.

Русское сообщество AutoIt

Re: Быстрый поиск ключа в CLSID
« Ответ #19 Отправлен: Декабрь 25, 2009, 16:35:48 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8082
  • Репутация: 2314
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Быстрый поиск ключа в CLSID
« Ответ #20, Отправлен: Декабрь 25, 2009, 17:21:04 »
Yashied [?]
Цитировать
Лучше пользоваться оффициальным MSDN
Я там и смотрел (на narod привёл ссылку чтобы было понятнее большинству), хотя там мне ещё сложнее понять что либо.
Спасибо, особенно за тип с In/Out :)

Русское сообщество AutoIt

Re: Быстрый поиск ключа в CLSID
« Ответ #20 Отправлен: Декабрь 25, 2009, 17:21:04 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
144801 Просмотров
Последний ответ Июль 18, 2009, 19:36:48
от `p r o x y
0 Ответов
2055 Просмотров
Последний ответ Апрель 22, 2012, 15:28:50
от madmasles
11 Ответов
4590 Просмотров
Последний ответ Сентябрь 14, 2012, 16:16:46
от Yashied
4 Ответов
4793 Просмотров
Последний ответ Октябрь 15, 2012, 04:46:56
от QQruza
0 Ответов
1605 Просмотров
Последний ответ Февраль 15, 2014, 21:55:38
от bytek76
7 Ответов
2431 Просмотров
Последний ответ Март 18, 2014, 18:01:37
от gregaz
7 Ответов
1890 Просмотров
Последний ответ Декабрь 06, 2014, 13:55:25
от Ksaan
1 Ответов
560 Просмотров
Последний ответ Октябрь 01, 2017, 12:46:03
от musicstashall
1 Ответов
597 Просмотров
Последний ответ Январь 10, 2018, 00:04:53
от Vovsla
4 Ответов
2498 Просмотров
Последний ответ Октябрь 14, 2018, 01:53:23
от vaf