Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2009, 19:12   #11
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
можно как нибудь средствами VBA посчитать контрольную сумму и вставить её например в Excel?
Да, можно. Когда-то давно видел пример кода.
Вообще, средствами VBA можно сделать почти всё, что угодно (используя WinAPI)
В этом плане VBA мало отличается от других языков программирования.

CRC какого файла надо подсчитать?
Вставить в тот же файл точно не получится, т.к. после вставки CRC файла изменится.
Впрочем, можно вставить CRC в имя файла.

Для exe-файлов всё просто:
Код:
Private Declare Function MapFileAndCheckSumA Lib "Imagehlp.dll" _
                                             (ByVal FileName As String, HeaderSum As Long, CheckSum As Long) As Long

'crc уже прошита в экзешник,
'данная функция читает его из экзешника
Public Function GetHeadCrc(ByVal Path As String) As Long
    Dim lRet&, crcH&, crcC&
    lRet = MapFileAndCheckSumA(Path, crcH, crcC)
    GetHeadCrc = crcH
End Function

'здесь вызывается функция, которая пересчитывает crc любого переданного файла
'результат данной функции обязан совпадать с результатом функции написанной выше
'иначе файл однозначно модифицирован!
Public Function GetRealCrc(ByVal Path As String) As Long
    Dim lRet&, crcH&, crcC&
    lRet = MapFileAndCheckSumA(Path, crcH, crcC)
    GetRealCrc = crcC
End Function

Public Function IsEXECorrupted(ByVal Path As String) As Boolean
    Dim lRet&, crcH&, crcC&
    lRet = MapFileAndCheckSumA(Path, crcH, crcC)
    IsEXECorrupted = crcH <> crcC
End Function

Sub test()
    FileName = "C:\Documents and Settings\Игорь\Рабочий стол\Regmon.exe"
    Debug.Print IsEXECorrupted(FileName)
End Sub
А в случае с офисными документами придётся придумывать что-то другое...
Точнее, считать-то CRC не проблема, а вот проверить его сложнее.
Если же он записан где-то в другом файле, сравнить значения не представляет никаких сложностей.

Последний раз редактировалось EducatedFool; 21.06.2009 в 19:28.
EducatedFool вне форума Ответить с цитированием
Старый 21.06.2009, 19:30   #12
The_Andrei
Пользователь
 
Регистрация: 19.06.2009
Сообщений: 11
По умолчанию

В Excel нужно вставить контрольную сумму архива (.rar).
Было бы вообще замечательно, если бы вставлялось в одну ячейку название архива а в другую контрольная сумма - это возможно?

Последний раз редактировалось EducatedFool; 21.06.2009 в 19:48. Причина: Совсем необязательно полностью цитировать сообщения...
The_Andrei вне форума Ответить с цитированием
Старый 21.06.2009, 19:47   #13
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Ну так в чём проблема?

Используй код из предыдущего поста + простейший макрос:
Код:
Sub test()
    FileName = "C:\Documents and Settings\Игорь\Рабочий стол\МойАрхив.rar"
    [a1] = GetRealCrc(FileName): [b1] = Dir(FileName)
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 21.06.2009, 20:30   #14
The_Andrei
Пользователь
 
Регистрация: 19.06.2009
Сообщений: 11
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Ну так в чём проблема?

Используй код из предыдущего поста + простейший макрос:
Код:
Sub test()
    FileName = "C:\Documents and Settings\Игорь\Рабочий стол\МойАрхив.rar"
    [a1] = GetRealCrc(FileName): [b1] = Dir(FileName)
End Sub
Спасибо огромное щас попробую.

Я поправил макрос (Макрос сохранения и вставки.txt), посмотрите пожалуйста его. При выполнении выскакивает ошибка (на картинке)
2 ошибка макрос создает документ из 2 страниц, хотя 2 страница пустая как её убрать?


Расчет CRC суммы у меня не получается мой код (CRC.txt), на любой архив он ставит значение "0" как быть?
Изображения
Тип файла: jpg макрос.JPG (12.6 Кб, 78 просмотров)
Вложения
Тип файла: txt Макрос сохранения и вставки.txt (2.0 Кб, 126 просмотров)
Тип файла: txt CRC.txt (1.1 Кб, 129 просмотров)

Последний раз редактировалось The_Andrei; 21.06.2009 в 20:40.
The_Andrei вне форума Ответить с цитированием
Старый 22.06.2009, 23:02   #15
The_Andrei
Пользователь
 
Регистрация: 19.06.2009
Сообщений: 11
По умолчанию

Цитата:
Сообщение от The_Andrei Посмотреть сообщение
Спасибо огромное щас попробую.

Я поправил макрос (Макрос сохранения и вставки.txt), посмотрите пожалуйста его. При выполнении выскакивает ошибка (на картинке)
2 ошибка макрос создает документ из 2 страниц, хотя 2 страница пустая как её убрать?


Все свои глупые вопросы сам решил.
Подскажите с расчетом CRC.
У меня такая ситуация.
Мне периодически нужно рассчитывать CRC сумму архивов (.rar), требуется чтобы в excel подтягивалась название архива и контрольная сумма , в
какие-нибудь ячейки допустим A2 B2. Как это реализовать.
The_Andrei вне форума Ответить с цитированием
Старый 23.06.2009, 23:46   #16
The_Andrei
Пользователь
 
Регистрация: 19.06.2009
Сообщений: 11
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Да, можно. Когда-то давно видел пример кода.
Вообще, средствами VBA можно сделать почти всё, что угодно (используя WinAPI)
В этом плане VBA мало отличается от других языков программирования.

CRC какого файла надо подсчитать?
Вставить в тот же файл точно не получится, т.к. после вставки CRC файла изменится.
Впрочем, можно вставить CRC в имя файла.

Для exe-файлов всё просто:
Код:
Private Declare Function MapFileAndCheckSumA Lib "Imagehlp.dll" _
                                             (ByVal FileName As String, HeaderSum As Long, CheckSum As Long) As Long

'crc уже прошита в экзешник,
'данная функция читает его из экзешника
Public Function GetHeadCrc(ByVal Path As String) As Long
    Dim lRet&, crcH&, crcC&
    lRet = MapFileAndCheckSumA(Path, crcH, crcC)
    GetHeadCrc = crcH
End Function

'здесь вызывается функция, которая пересчитывает crc любого переданного файла
'результат данной функции обязан совпадать с результатом функции написанной выше
'иначе файл однозначно модифицирован!
Public Function GetRealCrc(ByVal Path As String) As Long
    Dim lRet&, crcH&, crcC&
    lRet = MapFileAndCheckSumA(Path, crcH, crcC)
    GetRealCrc = crcC
End Function

Public Function IsEXECorrupted(ByVal Path As String) As Boolean
    Dim lRet&, crcH&, crcC&
    lRet = MapFileAndCheckSumA(Path, crcH, crcC)
    IsEXECorrupted = crcH <> crcC
End Function

Sub test()
    FileName = "C:\Documents and Settings\Игорь\Рабочий стол\Regmon.exe"
    Debug.Print IsEXECorrupted(FileName)
End Sub
А в случае с офисными документами придётся придумывать что-то другое...
Точнее, считать-то CRC не проблема, а вот проверить его сложнее.
Если же он записан где-то в другом файле, сравнить значения не представляет никаких сложностей.
Спасибо за скрипт.
Но скрипт выводит значение : 9942821 Макросы_).rar
А total commander : Макросы_).rar 4C135E37
как реализовать чтобы скрипт выводил такое значение как и total commander ?
The_Andrei вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
настроить при открытии Excel 2003 в окошке "Тип файлов" вывод пункта "Все файлы (*.*)" по умолчанию? Unior Microsoft Office Excel 2 01.03.2009 02:42
Перенос данных из Excel в Word Volch Microsoft Office Excel 6 19.10.2008 20:36
Перенос данных из MS Word в MS Excel ? Nickd5 Помощь студентам 2 28.06.2008 20:40
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03