Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » BINARY - последовательность значений параметров в реестре.

Ответить
Настройки темы
BINARY - последовательность значений параметров в реестре.

Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Изменения
Автор: semiono
Дата: 20-08-2010
Как красиво записать строку?

Код: Выделить весь код
$x = Binary(0) & Binary(24) & Binary(@DesktopWidth) & Binary(@DesktopHeight-52) & Binary(0)

RegWrite("HKCU\Software\PowerISO", "MainWindow", "REG_BINARY", $x)
Всмысле может быть есть лучший способ, чем я "забор нагородил" ?

Как-то так нельзя - BinaryString(0,24 & @DesktopWidth... итп...) ?

-------
Полезное сообщение


Отправлено: 19:02, 18-08-2010

 

Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Эта тема ждёт ответа, если глупый вопрос, то удалите тему.
Просто скрипт готов, и пора его кампильнуть. ))
---
А вообще суперзадача, если бы старые данные не трогать, а только записать нужные байты с определённой позиции в строке! Это лучшее решение. Позицию в строке всегда можно указать явно, парсить и искать тут не нужно.

Насколько я понял, там обычно всегда данные записанны кусками по четыре байта. То-есть в моём примере
надо заменить @DesktopWidth в строке начиная с девятого байта строки. И сам @DesktopWidth тоже знимает 4 байта,
только в перевёрнутом "форматированном" виде Binary() - 2048(десятичное) >
800(хекс) > 00 80 00 00(интелевское)

-------
Полезное сообщение


Последний раз редактировалось semiono, 20-08-2010 в 21:10.


Отправлено: 18:31, 20-08-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$tReg = DllStructCreate("int;int Data;int Width;int Height;int")
$tBin = DllStructCreate("byte["& DllStructGetSize($tReg) &"]", DllStructGetPtr($tReg))

DllStructSetData($tReg, "Data"  , 24)
DllStructSetData($tReg, "Width" , @DesktopWidth)
DllStructSetData($tReg, "Height", @DesktopHeight-52)

RegWrite("HKCU\Software\PowerISO", "MainWindow", "REG_BINARY", DllStructGetData($tBin,1))
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:03, 21-08-2010 | #3


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Кто нибудь пожалуйста можете прокоментировать, что это делает:
Код: Выделить весь код
$tBin = DllStructCreate("byte["& DllStructGetSize($tReg) &"]", DllStructGetPtr($tReg))
Хочется всётаки понимать написаное

-------
Полезное сообщение


Отправлено: 00:19, 22-08-2010 | #4


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


semiono

Думаю понятно, что одну последовательность байтов (блок памяти) можно интепретировать по разному - как массив целых, рациональных или действительных чисел, либо как массив ANSI/UNICODE/... знаков (текстовая строка) или еще как... При создании структуры через DllStructCreate() мы как раз и задаем пособ кодирования набора байтов: "int;int Data;int Width;int Height;int" - последовательность из 5 целых чисел по 4 байта =20 байт, а три элемента структуры по ходу именуем для удобства обращения.

Но при создании новой структуры мы можем указать на уже существующую структуру (последний параметр DllStructCreate()), в этом случае память под структуру не выделяется, мы лишь "перекодируем" данные первой структуры, в примере - как простую последовательность байтов - "byte[20]".

Само собой, длина второй "виртуальной" структуры не должна превышать (в байтах) длину первой "реальной" структуры, иначе последствия могут быть печальными. В нашем случае структуры одинаковой длины (DllStructGetSize() как раз возвращает длину структуры в байтах), поэтому определять их можно в любом порядке:

Код: Выделить весь код
$tBin = DllStructCreate("byte[20]")
$tReg = DllStructCreate("int;int Data;int Width;int Height;int", DllStructGetPtr($tBin))
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:00, 22-08-2010 | #5


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Для меня в основном не понятно, то что по документации DllStructCreate() инициализируется так
(разрядность имя;разрядность имя;разрядность имя;разрядность имя)
Хотя глядя на запись byte[20] можно понять, что в скобках можно ещё и указать количество,
а само имя можно иногда опустить.
Но ещё и указатель , DllStructGetPtr($tReg) )
...вообщем из справки всего этого не понятно, всех возможных определений.
Меня смутило не суперпозиция функций DllStructCreate(DllStructGetSize(), DllStructGetPtr())
а замена типов данных на указатели итп. Но к этому надо со временем привыкать просто

-------
Полезное сообщение


Отправлено: 14:00, 22-08-2010 | #6


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата semiono:
глядя на запись byte[20] можно понять, что в скобках можно ещё и указать количество »
...а глядя на справку по DllStructGetData() можно понять, что у элемента (по порядковому номеру/имени в структуре) еще может быть и индекс - как раз для элементов-массивов типа byte[20]
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:55, 22-08-2010 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » BINARY - последовательность значений параметров в реестре.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - [решено] Как сгенерировать случайное число на всем диапазоне значений int? Michael Программирование и базы данных 14 04-02-2011 17:08
Разное - Увеличение управляющих параметров в реестре janpit Microsoft Windows 2000/XP 12 08-08-2008 10:32
Интерфейс - [решено] редактирование параметров интерфейса в реестре Reset5 Microsoft Windows 2000/XP 2 14-06-2008 15:11
BIND for Win32 binary. Guest Сетевые технологии 2 05-04-2004 11:53
ftp ascii or binary AndreySpb Вебмастеру 4 09-10-2002 22:44




 
Переход