Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Получение средствами VBA серийного номера процессора
 
Цитата
Через WMI SerialNumber определяется только для IDE-накопителей, SATA-не распознает.

Я попробовал - все мои пять винтов, все SATA, один из них SSD, и всем четко определен серийный номер.
Может еще в ОС дело? У меня Windows 7 x64, под XP нет возможности проверить.

Код
Sub GetHDD_SerNum()
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive", , 48)
    For Each Item In colItems
        MsgBox Item.SerialNumber
    Next
End Sub


Для первого HDD можно в запрос добавить "WHERE Index=0"
Получение средствами VBA серийного номера процессора
 
Эх, хотел лечь спать пораньше... Можно, конечно, и к mac-адресу привязаться. Запросить его через тот же WMI "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE MACAddress IS NOT NULL". И, кстати, заменить его гораздо сложнее, чем серийный номер тома. Не все драйвера это так просто позволяют.
Там же можно посмотреть железный, не изменяемый, серийный номер HDD.
Просто замените команду на "SELECT * FROM Win32_DiskDrive WHERE Index = 0" и проверяйте параметр .SerialNumber.
Я просто привел пример с номером тома, т.к. это самая простая защита от л.. пользователя.
Прикол в том, что это был мой первый опыт с VBA пару лет назад. Ну, привязал программист к железу софт, но реально комп накрылся, а данные нужны! Защиту с проекта я снял, погуглив 5 минут. И еще через пару минут вместо "<>", поставил "=".
Я это к чему говорю: любая программная зашита ломается при желании!! А для уж совсем дремучих юзеров любой метод пойдет и не стоит огород городить...
Изменено: caban_2001 - 12.08.2013 03:47:31
Получение средствами VBA серийного номера процессора
 
Ну, скажем так - на эту тему сломано кучу копий. Любая защита ломается. Даже все возможные hard lock'и. Но если просто от пользователя, проще всего привязаться к номеру тома. К номеру винта сложнее, т.к. требуются низкоуровневые операции. Минус - он меняется при форматировании, да и может быть изменен руками. Но мы же надеемся на то что пользователь лопух! :)

вот где-то так:
Код
Private Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

Private Const Original_Vol_SN = 1032938

Private Sub Check_SerNum()
    Dim Vol_SN As Long
    Dim DrvPath As String
    DrvPath = Left(Application.Path, 3) ' смотрим откуда запустили нашу программу
    GetVolumeInformation DrvPath, vbNullString, 0, Vol_SN, 0, 0, vbNullString, 0
    If Vol_SN <> Original_Vol_SN Then
        MsgBox "Вы, мерзкие пиратишки, украли мою гениальную программу!", vbCritical
    End If
End Sub



Где константа Original_Vol_SN - текушй сер.номер тома
Получение средствами VBA серийного номера процессора
 
Первый раз слышу что бы у процессора (CPU, я правильно понял?) был уникальный серийный номер! Т.е. он, конечно есть, но выгравирован на крышке и нигде не прошит. Если вы хотите привязаться к компьютеру можете попробовать прочесть серийный номер HDD.
Пропадает объединение ячеек после Copy-Paste
 
По-первому пункту, обеими руками за. Но кстати, из специальных вставок нормально в моем примере корректно (т.е. как мне надо) работала только одна и уж совсем хитрая для блондинок, а именно "значение и форматы чисел"
По-второму, можно не просто запретить вставку, а переопределить через OnKey Ctrl-V принцип вставки?
Изменено: caban_2001 - 11.08.2013 19:46:41
Пропадает объединение ячеек после Copy-Paste
 
Цитата
Объясняйте всё же оператором про спец. вставку - не думаю, что они у Вас совсем бестолковые.

Ох, они ужасно бестолковые! Видели бы вы что они чудят в таблицах, которые я отсылаю им на е-mail для заполнения! Защищаю от изменений все и вся... И все равно обратно присылают черти-что!
Ну, это лирика, извиняюсь отвлекся от темы.

Связь та что в обоих случаях такой момент в форматировании как признак объединенных ячеек теряется.
Событий по вставке я не обнаружил, сколько не читал документацию по XL. Единственная мысль, которая крутиться в голове - по Worksheet_Change возвращать форматирование назад. Но это как-то грубо и не по фен-шую...

Может все же есть какая-нибудь милая опция xlCopyPaste = FormatOnly ?

Или другое решение?
Пропадает объединение ячеек после Copy-Paste
 
Чуть более сложный случай. В таблице ячейки объединены по-строчно. (файл Таблица_с_объед.ячейками.xlsx)
Копируем ячейку в буфер обмена.
Выделяем все строки, как показано на рисунке ВыделеноНесколькоСтрок.jpg
И вставляем ее! Результат - потеря форматирования, разделение объединенных ячеек.
Тут я еще могу немного понять логику Excel. Он использовал форматирование исходной ячейки, что в принципе логично.
НО, мне надо изменить его логику. Надо что бы всегда вставлялось как не форматированный текст, не затрагивая исходного форматирования.
Почему и прошу помощи на форуме у опытных и мудрых.


Рисунки удалены: превышение допустимого размера вложения [МОДЕРАТОР]
Изменено: caban_2001 - 30.09.2016 16:43:42
Пропадает объединение ячеек после Copy-Paste
 
Самый просто случай выделяете сгруппированные ячейки (они выделяются одним кликом, они ведь сгруппированные!), нажимаете Ctrl-C, затем Ctrl-V (в то же место, не двигая фокус) и вуаля! Они разъединенны!

Файлы удалены: превышение допустимого размера вложения [МОДЕРАТОР]
Пропадает объединение ячеек после Copy-Paste
 
Я уже изрядно с ними намучился, но для красоты таблицы создал колонки из объединенных ячеек, и все вроде неплохо, но при вставке в них значений из буфера обмена, форматирование теряется. Конечно, есть "специальная вставка", но операторам, которые должны будут заполнять табличку я этого не объясню. Пример не привожу, т.к. он слишком примитивный. Просто 4 ячейки объединены в одну. И вот при вставке через Ctrl-V они снова разделяются...
Пропадает объединение ячеек после Copy-Paste
 
Имеем: Предположим 4 смежные ячейки в одной строке объединены в одну. После вставки из буфера обмена, данное форматирование пропадает! Достаточно даже просто нажать Ctrl-C/Ctrl-V и все! Ячейки разделены!
Как с этим бороться? Не хочется полностью запрещать вставку, т.к. пользователю может быть удобно копировать значения в ячейку. На форуме первый раз, просьба ногами не бить!
Страницы: 1
Наверх