:: Visual Foxpro, Foxpro for DOS
Серийный номер USB
sphinx

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Коллеги, вроде через WMI наваял на коленке, но по факту сказали не работает на разных флешках.

Может, чтобы не изобретать велосипед (и в помощь не мне, Татьяне - Олега Димухаметова жена, хороший был человек, сейчас сопровождаю его проекты, в целом успешно, но сложность высокого уровня) - кто чем богат. Я нагуглю и решу. Но время против нас.

Стеб и ненужные комментарии - непродуктивно. Лучше пройдите мимо. На Сергеев надеюсь (avvhokink, я по памяти, прошу простить, буду точнее в нике, уважаю Серегу).

Жаль, что не видно корифеев (Серега давно в их числе!) других - Рома, Володя (Aspid)...

Ну или пните в технологию, поди ума хватит. Не жаловался на недостаток.

Я написал, что через WMI на коленке. Оказывается не работает. Не хочется заново изобретать квадратный лисапед, если у кого есть решения.

С уважением к ПО СУЩЕСТВУ.

Спасиб!


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Серийный номер USB
leonid

Сообщений: 3202
Откуда: Рига
Дата регистрации: 03.02.2006
Когда-то такое работало, но давно не проверял

Ratings: 0 negative/1 positive
Re: Серийный номер USB
akvvohinc

Сообщений: 4202
Откуда: Москва
Дата регистрации: 11.11.2008
Сам никогда таким не занимался, но если бы нужно было сделать это быстро, то сначала просто бы воспользовался какими-нибудь готовыми бесплатными консольными утилитами, выдающими необходимую информацию в виде файла.
Первая же ссылка, которую выдал Гугл - USBDeview.exe - вполне подходит для решения проблемы.

Запускал бы её как-то так:
STRTOFILE('@USBDeview.exe /stext usb.txt /DisplayDisconnected 0 /DisplayNoPortSerial 0','usbinfo.cmd')
ws = CreateObject('WScript.Shell')
ws.Run('usbinfo.cmd',2,.T.)
MODIFY COMMAND usb.txt
А потом, если потребуется, можно спокойно искать, изучать и отлаживать варианты через WinAPI и т.п.
----------

Сейчас посмотрел - эта утилита может явно ответить на вопрос, вставлен ли накопитель с указанным серийным номером в комп (если это и есть конечная цель):
USBDeview.exe /is_connected_by_serial "3384600601" 
echo %ERRORLEVEL%



Исправлено 3 раз(а). Последнее : akvvohinc, 04.03.23 16:47
Ratings: 0 negative/0 positive
Re: Серийный номер USB
sphinx

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Так по ней и сверял. Сказали код через ВМИ - всегда одно и то же выдает.

Леонид, как всегда выручаешь. Я гляну, должно работать. Правда, спасибо!


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Серийный номер USB
sphinx

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
А потом, если потребуется, можно спокойно искать, изучать и отлаживать варианты через WinAPI и т.п.

Да все так, базара нет.

Можно и через утилиту, инструкции дам, каждые пять минут точно не надо. Но хочется по фен-шую.

Друзья, спасибо.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Серийный номер USB
akvvohinc

Сообщений: 4202
Откуда: Москва
Дата регистрации: 11.11.2008
sphinx
Можно и через утилиту, инструкции дам
По поводу инструкций я не понял - пользователю вообще ничего знать о реализации не потребуется - всё будет внутри проги, даже та утилита.
Ratings: 0 negative/0 positive
Re: Серийный номер USB
sphinx

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Да я на тот случай, если через батник-скриптами. Тогда Тане инструкции. А так да, все в программе.

В общем материал есть, значит меньше поиском.

Все запустим. Какой вариант полетел/остановился - да, напишу. И другим пригодится.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/1 positive
Re: Серийный номер USB
akvvohinc

Сообщений: 4202
Откуда: Москва
Дата регистрации: 11.11.2008
sphinx
Да я на тот случай, если через батник-скриптами. Тогда Тане инструкции. А так да, все в программе.
И всё равно не понял - при чем здесь батник и инструкции Тане?
Всё без исключения, включая батник и даже инструкции Тане, будет зашито в программу, и это сделает тот, кто пишет прогу (это Таня или ты?).
Пользователь проги вообще ничего не будет знать ни об утилите, ни о том, каким образом она запускается.

Недавно была похожая тема, где с помощью Powershell что-то там выясняли.
Разница лишь в одном - Powershell-утилита - часть Windows, а утилиту USBDeview надо сначала скачать.



Исправлено 1 раз(а). Последнее : akvvohinc, 06.03.23 01:21
Ratings: 0 negative/0 positive
Re: Серийный номер USB
sphinx

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Код от Леонида рабочий (в одном месте убрать перенос (;), протестировано.
Проблема закрыта.
Всем, кто обсуждал и пытался помочь - респект!


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Серийный номер USB
akvvohinc

Сообщений: 4202
Откуда: Москва
Дата регистрации: 11.11.2008
Особого смысла не имеет, но всё же дополню.
Леонид писал код, видимо, до появления в Фоксе функций CTOBIN() и BINTOC().
С их помощью можно заменить функцию word2str и прочие подобные функции его кода.

TrimEnd тоже теперь можно заменить стандартной TRIM().



Исправлено 1 раз(а). Последнее : akvvohinc, 11.03.23 02:26
Ratings: 0 negative/0 positive
Re: Серийный номер USB
sphinx

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Да, я обратил внимание. Дойдут руки - подправлю.
Спасибо!


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Серийный номер USB
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
sphinx
Да, я обратил внимание. Дойдут руки - подправлю.
Спасибо!
А вот тебе для затравки:
Function word2str
Lparameter m.wrd
*ssa* Local m.wrd1, m.st1
*ssa* m.wrd1=m.wrd%65536
*ssa* Declare RtlMoveMemory In Win32API String @st1, Integer @wrd, Integer Cnt
*ssa* m.st1=Chr(0)+Chr(0)
*ssa* RtlMoveMemory(@m.st1, @m.wrd, 2)
*ssa* Return m.st1
Return Left(BinToC(Right(m.wrd,2),'4rs'),2)+Left(BinToC(Left(m.wrd,2),'4rs'),2)
TrimEnd заменяется на Rtrim
Function Guid
Lparameter m.Guid
m.Guid=Chrtran(m.Guid,"{}-","")
Return ;
chr(Eval("0x"+Substr(m.Guid,07,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,05,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,03,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,01,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,11,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,09,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,15,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,13,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,17,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,19,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,21,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,23,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,25,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,27,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,29,2)))+ ;
chr(Eval("0x"+Substr(m.Guid,31,2)))
*ssa* word2str(Eval("0x"+Substr(m.Guid,5,4)))+ ;
*ssa* word2str(Eval("0x"+Substr(m.Guid,1,4)))+ ;
*ssa* word2str(Eval("0x"+Substr(m.Guid,9,4)))+ ;
*ssa* word2str(Eval("0x"+Substr(m.Guid,13,4)))+ ;


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Серийный номер USB
akvvohinc

Сообщений: 4202
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Function word2str
Lparameter m.wrd
Return Left(BinToC(Right(m.wrd,2),'4rs'),2)+Left(BinToC(Left(m.wrd,2),'4rs'),2)
Нет, здесь иначе - функция принимает число и возвращает строку длиной 2:
RETURN LEFT(BINTOC(m.wrd,'4r'),2)
Ratings: 0 negative/0 positive
Re: Серийный номер USB
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
akvvohinc
Цитата:
Function word2str
Lparameter m.wrd
Return Left(BinToC(Right(m.wrd,2),'4rs'),2)+Left(BinToC(Left(m.wrd,2),'4rs'),2)
Нет, здесь иначе - функция принимает число и возвращает строку длиной 2:
RETURN LEFT(BINTOC(m.wrd,'4r'),2)
Угу. Я, оказалось, тестировал не некорректных данных. Недоглядел. Надо бы посыпать голову пеплом, да взять его негде, не курю.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Серийный номер USB
akvvohinc

Сообщений: 4202
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
chr(Eval("0x"+Substr(m.Guid,07,2)))
А так на одну функцию меньше:
Eval("0h"+Substr(m.Guid,07,2))



Исправлено 1 раз(а). Последнее : akvvohinc, 11.03.23 18:34
Ratings: 0 negative/0 positive
Re: Серийный номер USB
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> Eval("0h"+Substr(m.Guid,07,2))

? 0h + Substr(m.Guid,07,2) - вернет тоже самое
Ratings: 0 negative/0 positive
Re: Серийный номер USB
akvvohinc

Сообщений: 4202
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
0h + Substr(m.Guid,07,2) - вернет тоже самое
А если проверить?

В первом случае извлекаемые символы трактуются как 16-ричные цифры (каждые 2 символа строки преобразуются в 1 байт),
а во втором - как "просто символы", каждый из которых используется "как есть" (1 байт каждый).

Иными словами, символ и код символа - совсем не одно и то же:
? EVAL('0h'+'0A')  && 0h0A
? 0h+'0A'          && 0h3041



Исправлено 5 раз(а). Последнее : akvvohinc, 12.03.23 03:29
Ratings: 0 negative/1 positive
Re: Серийный номер USB
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> EVAL('0h'+'0A') && 0h0A
естественно - это же 0h0A
она же
x = '0h'+'0A'
? &x && 0h0A
...
да, упустил компиляцию (EVAL) в мозгу, звоночки... )

() я использую конструкцию
x = 0h + строка
? &x && Q-строка, изображается в фоксовом окне как 0haabbcc... - набор 16-ричных пар чисел... удобно, что с левого (младшего) символа... все такое...



Исправлено 1 раз(а). Последнее : of63, 13.03.23 19:51
Ratings: 0 negative/0 positive
Re: Серийный номер USB
akvvohinc

Сообщений: 4202
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
() я использую конструкцию
x = 0h + строка
? &x
Не может быть.
В макро нельзя использовать переменные с типом Q - только C.
Ratings: 0 negative/0 positive
Re: Серийный номер USB
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
[quote akvvohinc][quote]() я использую конструкцию
x = 0h + строка
? &x[/quote]
Не может быть.
В макро нельзя использовать переменные с типом Q - только C.[/quote]

а да ошибся, блин (
x = "'0h'" + "'"+строка+"'"
? EVAL(x) && задел, Сергей )[/quote]

... туплю



Исправлено 1 раз(а). Последнее : of63, 13.03.23 21:09
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 23 (Гостей: 23)

© 2000-2024 Fox Club 
Яндекс.Метрика