Вверх ↑
Этот топик читают: Гость
Ответов: 286
Рейтинг: 5
#16: 2018-11-12 15:47:17 ЛС | профиль | цитата
driverquery > "%userprofile%\driver-list.txt"
карма: 0

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#17: 2018-11-12 15:56:02 ЛС | профиль | цитата
Короче, вот тебе парсер на скорую руку

Схема

Add(MainForm,9982853,77,140)
{
Width=741
Height=264
}
Add(WinExec,385351,175,77)
{
FileName="driverquery.exe"
Mode=0
Point(doConsoleExec)
Point(doConsoleInput)
Point(onConsoleResult)
link(onConsoleResult,16628860:doCharset,[])
}
Add(Button,9958066,77,84)
{
Left=325
Top=200
link(onClick,3199062:doEvent1,[])
}
Add(Charset,16628860,238,91)
{
link(onCharset,1062029:doStrCatDlm,[])
}
Add(Hub,3199062,126,84)
{
OutCount=3
link(onEvent1,1062029:doClear,[(151,90)(151,69)(277,69)(277,104)])
link(onEvent2,385351:doConsoleExec,[])
link(onEvent3,9446271:doTimer,[(158,104)(158,146)])
}
Add(ArrayRW,304584,406,259)
{
Index=Integer(2)
link(onRead,2857252:doSplit,[(445,265)(445,97)])
link(Array,9758948:Var2,[])
}
Add(Timer,9446271,175,140)
{
Enable=1
AutoStop=1
link(onTimer,5668561:doEvent1,[])
}
Add(StringTable,14516997,833,448)
{
Left=5
Top=5
Width=713
Height=190
Font=[Courier,10,0,0,204]
Columns=#10:Модуль=120|12:Название=220|16:Тип драйвера=130|15:Дата ссылки=220|
Point(doEnsureVisible)
Point(EndIdx)
}
Add(StrCatDelim,1062029,392,91)
{
Point(doClear)
link(Str1,10427497:Var1,[(398,82)(384,82)(384,131)])
}
Add(GetDataEx,10427497,392,126)
{
link(Data,1062029:Result,[])
}
Add(Hub,5668561,224,140)
{
OutCount=8
link(onEvent1,11998545:doText,[(368,146)(368,195)])
link(onEvent2,304584:doRead,[(359,153)(359,265)])
link(onEvent3,6486934:doWork1,[(291,160)])
link(onEvent4,9976784:doWork1,[(284,167)])
link(onEvent5,9976784:doWork2,[(277,174)(277,188)])
link(onEvent6,13112648:doEnum,[(270,181)(270,321)])
link(onEvent7,600651:doData,[(263,188)(263,524)])
link(onEvent8,1951999:doString,[(256,195)(256,573)])
}
Add(MultiStrData,2857252,469,91)
{
Char=" "
Count=4
link(onPart1,15773544:doLength,[])
link(onPart2,11269905:doLength,[(536,104)(536,167)])
link(onPart3,15163764:doLength,[(529,111)(529,230)])
link(onPart4,205461:doLength,[(522,118)(522,279)])
}
Add(VisualStrings,7005235,308,182)
{
Lines=#1:0|
Point(doText)
Point(onText)
link(onText,11998545:doDelete,[])
}
Add(ArrayEnum,13112648,371,315)
{
link(onItem,13264563:doEvent1,[])
link(Array,9758948:Var1,[(377,236)])
}
Add(GetDataEx,9758948,406,231)
{
link(Data,11998545:Array,[])
}
Add(Length,15773544,560,91)
{
link(onLength,882078:doOperation,[])
}
Add(Math,882078,623,91)
{
Op2=2
ResultType=0
}
Add(FormatStr,2744193,770,448)
{
DataCount=4
Mask="%1;%2;%3;%4"
link(onFString,14516997:doAdd,[])
link(Str1,9919733:Value,[])
link(Str2,16609988:Value,[(783,397)(790,397)])
link(Str3,8020019:Value,[(790,439)(804,439)])
}
Add(Length,11269905,609,161)
{
link(onLength,11549349:doOperation,[])
}
Add(Math,4529045,770,161)
{
Op2=1
ResultType=0
}
Add(Copy,4262830,546,315)
{
Position=1
link(onCopy,9919733:doValue,[])
link(Count,15773544:Result,[])
}
Add(Copy,2525696,581,357)
{
link(onCopy,16609988:doValue,[])
link(Position,8546385:Var1,[(594,145)])
link(Count,11269905:Result,[(601,201)(615,201)])
}
Add(Hub,13264563,490,315)
{
OutCount=4
link(onEvent1,4262830:doCopy,[])
link(onEvent2,2525696:doCopy,[(536,328)(536,363)])
link(onEvent3,11636668:doCopy,[(529,335)(529,405)])
link(onEvent4,5747740:doCopy,[(522,342)(522,454)])
}
Add(Length,15163764,630,224)
{
link(onLength,5427601:doOperation,[])
}
Add(Math,7843728,728,224)
{
Op2=1
ResultType=0
}
Add(Copy,11636668,616,399)
{
link(onCopy,8020019:doValue,[])
link(Position,9832520:Var2,[(629,264)(776,264)])
link(Count,15163764:Result,[])
}
Add(Math,11549349,658,161)
{
ResultType=0
link(onResult,4529045:doOperation,[])
link(Op1,8546385:Var3,[(664,145)])
}
Add(GetDataEx,8546385,623,140)
{
link(Data,882078:Result,[])
}
Add(Math,5427601,679,224)
{
ResultType=0
link(onResult,7843728:doOperation,[])
link(Op1,9832520:Var1,[(685,208)])
}
Add(GetDataEx,9832520,770,203)
{
link(Data,4529045:Result,[])
}
Add(Copy,5747740,665,448)
{
link(onCopy,2744193:doString,[])
link(Position,7843728:Result,[(678,439)(734,439)])
link(Count,205461:Result,[])
}
Add(Length,205461,679,273)
{
}
Add(HubEx,6486934,287,182)
{
link(onEvent,7005235:doText,[])
}
Add(HubEx,9976784,280,182)
{
link(onEvent,6486934:doWork2,[])
}
Add(Memory,9919733,770,315)
{
}
Add(Memory,16609988,784,357)
{
}
Add(Memory,8020019,798,399)
{
}
Add(StrList,11998545,392,168)
{
link(Str,10427497:Var2,[])
}
Add(DoData,600651,672,518)
{
link(onEventData,14516997:doEnsureVisible,[(711,524)(711,489)])
link(Data,6312405:Var1,[(678,502)])
}
Add(StatusBar,1763416,833,567)
{
}
Add(FormatStr,1951999,749,567)
{
DataCount=1
Mask="Найдено модулей -- %1"
link(onFString,1763416:doText,[])
link(Str1,6312405:Var2,[])
}
Add(GetDataEx,6312405,749,497)
{
Angle=1
link(Data,14516997:EndIdx,[(853,502)])
}


Проверь несколько раз, если не всегда отображает до конца, то увеличь время таймера. Вроде секунды должно хватать. Это все из-за того, что нет события конца завершения консольной команды. Можешь использовать этот парсер и для чтения полученного файла driver-list.txt.

WinExec обнови, у него появился скрытый режим консоли.

Редактировалось 6 раз(а), последний 2018-11-12 16:08:33
карма: 22

0
Ответов: 286
Рейтинг: 5
#18: 2018-11-12 16:18:33 ЛС | профиль | цитата
Да расти мне еще и расти.Спасибо.
А я бы до сих пор мучился бы BlockFind
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#19: 2018-11-13 14:54:58 ЛС | профиль | цитата
Мне так (почему-то) больше нравится...


Add(MainForm,9982853,224,112)
{
Width=703
Height=264
Caption="Search for Windows drivers"
BorderStyle=1
Position=1
Point(onClose)
link(onCreate,3199062:doEvent1,[])
}
Add(WinExec,385351,322,119)
{
FileName="driverquery.exe"
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
Point(doConsoleTerminate)
Point(onConsoleTerminate)
link(onConsoleResult,16628860:doCharset,[])
}
Add(Charset,16628860,371,133)
{
link(onCharset,12987917:doStrCat,[])
}
Add(Hub,3199062,273,126)
{
OutCount=3
link(onEvent1,5393472:doWork1,[(302,132)(302,110)(418,110)])
link(onEvent2,385351:doConsoleExec,[])
link(onEvent3,9446271:doTimer,[(305,146)(305,188)])
}
Add(Timer,9446271,322,182)
{
Interval=2000
Enable=1
AutoStop=1
link(onTimer,5668561:doEvent1,[])
}
Add(StringTable,14516997,539,252)
{
Width=697
Height=236
Align=5
Font=[Courier,10,0,0,204]
Columns=#10:Модуль=120|12:Название=220|16:Тип драйвера=130|15:Дата ссылки=190|
Grid=0
Point(doEnsureVisible)
Point(EndIdx)
}
Add(Hub,5668561,371,182)
{
OutCount=5
link(onEvent1,385351:doConsoleTerminate,[(397,188)(397,173)(313,173)(313,146)])
link(onEvent2,14516997:doClear,[(533,195)(533,265)])
link(onEvent3,11998545:doText,[(409,202)(409,223)])
link(onEvent4,5393472:doWork3,[(418,209)])
link(onEvent5,10563126:doW1,[(397,216)(397,258)])
}
Add(StrList,11998545,434,196)
{
link(Str,13757289:Var2,[])
}
Add(StatusBar,1763416,602,308)
{
}
Add(FormatStr,1951999,553,308)
{
DataCount=1
Mask="Найдено модулей -- %1"
link(onFString,1763416:doText,[])
link(Str1,14516997:EndIdx,[])
}
Add(StrCat,12987917,434,133)
{
Point(doClear)
link(Str1,13757289:Var3,[(440,119)(478,119)(478,173)])
}
Add(GetDataEx,13757289,434,168)
{
link(Data,12987917:Result,[])
}
Add(InlineCode,10563126,448,252)
{
WorkPoints=#4:doW1|
EventPoints=#5:onRes|5:onEnd|
DataPoints=#2:Ar|
Code=#15:unit HiAsmUnit;|0:|9:interface|16://Tad 13.11.2018|29:uses windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|15:// Event Points|33: Ar, onRes, onEnd : THI_Event;|0:|15:// Work Points |45: Procedure doW1(var _Data:TData; Index:word);|5: end;|0:|14:implementation|38:// ----------Work Procedures----------|28:Procedure THiAsmClass.doW1;|20: var i, k : integer;|21: FItem,Ind : TData;|18: s, ss : string;|27: d : array[0..2] of byte;|17: Arr : PArray; |5:BEGIN|22: Arr := ReadArray(Ar);|18: dtInteger(ind,2);|21: Arr._Get(ind,FItem);|22: s := toString(FItem);|8: k := 0;|25: for i:=1 to Length(s) do|47: if s[i]=' ' then begin d[k]:=i; inc(k); end;|9: i := 3;|20: dtInteger(Ind,I);|37: while Arr._Get(Ind,FItem) do begin|23: s:= toString(FItem);|18: s[d[0]] := ';';|18: s[d[1]] := ';';|18: s[d[2]] := ';';|49:// ============== Для красоты. Можно выбросить |30: ss:=trim(copyend(s, d[2]));|24: if length(ss)=19 then|10: begin |27: replace(ss,' ',' ');|32: s:=copy(s,1,d[0]+d[1])+ss;|8: end;|34:// ============= Конец красоты |24: _hi_onEvent(onRes,s);|11: inc(I);|21: dtInteger(Ind,I);|6: end;|21: _hi_onEvent(onEnd);|4:END;|0:|4:end.|0:|
link(onRes,14516997:doAdd,[])
link(onEnd,7440730:doEvent1,[])
link(Ar,11998545:Array,[])
}
Add(Hub,7440730,490,259)
{
link(onEvent1,1951999:doString,[(523,265)(523,314)])
link(onEvent2,11998545:doClear,[(513,272)(513,296)(422,296)(422,209)])
}
Add(HubEx,5393472,414,140)
{
link(onEvent,12987917:doClear,[])
}

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#20: 2018-11-13 15:26:08 ЛС | профиль | цитата
Tad писал(а):
Мне так (почему-то) больше нравится...

Да, для себя и для продвинутых пойдет. Но мы же все-таки здесь собрались для того, чтобы народ учился элементарному схемопостроению. Учился строить алгоритмы простенькими элементами, рисовать красивые рабочие схемы (эх мечты, глядя на приведенные иногда примеры). Я не спорю, что в коде это займет всего один элемент, но HiAsm все же не только Delphi. Как можно писать что-то вообще в коде, когда простенький алгоритм чел не может составить из элементарных кубиков, считай блок схема (это не про ТС конкретно, это обобщенно)?
Tad, вот честно, ты сам алгоритм придумал или взял за основу то, что я нарисовал, те мою блок схему?

Редактировалось 3 раз(а), последний 2018-11-13 15:29:17
карма: 22

0
Ответов: 9906
Рейтинг: 351
#21: 2018-11-13 18:04:03 ЛС | профиль | цитата
Tad писал(а):
Мне так (почему-то) больше нравится...

А мне - НЕТ.
Стиль безобразный: выравнивание - ни к черту; одно имя - в разных регистрах.

Блин... Взялся за дело, так делай его хорошо.
В принципе, никто ведь не заставляет....
Но тогда уж не трынди по любому поводу, что IC - это штатный элемент.


Да, и вот еще: Tad, открой мне глубинный смысл этой наскальной надписи:
s:=copy(s,1,d[0]+d[1])+ss;
Как бы в моей голове не очень укладывается: как, суммируя два индекса - можно получить количество...

Редактировалось 2 раз(а), последний 2018-11-13 18:08:14
карма: 9

0
Ответов: 16884
Рейтинг: 1239
#22: 2018-11-13 19:34:56 ЛС | профиль | цитата
Tad писал(а):
вот честно, ты сам алгоритм придумал или взял за основу то, что я нарисовал, те мою блок схему?
Наверное да.
Без IC.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1FIND_DRIVERS.rar [1.2KB] [393]
Разработчик
Ответов: 26061
Рейтинг: 2120
#23: 2018-11-13 20:05:03 ЛС | профиль | цитата
Tad, увы, но ты не до конца понял структуру форматирования данного текста и пошел методом "в лоб", а ведь подсказка форматирования была именно в количестве символов "=" и для названия столбцов, и для остальных строк.
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#24: 2018-11-13 21:42:46 ЛС | профиль | цитата
Про эту маску "======== ===========" я знаю уже лет 25, а может и больше.

Строка для модуля HdAudAddService:
"HdAudAddService","Драйвер функции UAA для службы High Definition Audio (Microsoft), версия 1.1","Kernel ","2009-07-14 2:51:46"
Что видно у меня
Драйвер функции UAA для службы High Definition Audio (Microsoft), версия 1.1
и то, что видно у тебя
Драйвер функции UAA д
Где понятней ?

Редактировалось 6 раз(а), последний 2018-11-13 22:04:11
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#25: 2018-11-13 22:26:33 ЛС | профиль | цитата
Tad писал(а):
Где понятней ?

Ты парсировал csv, я же парсировал обычный текст с маской. Признаюсь, что про вывод в csv я не знал, тк никогда раньше этой командой не пользовался. Я использовал ровно то, что предложил ТС, те вывод в текст.
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#26: 2018-11-13 22:33:26 ЛС | профиль | цитата
Попробуй запустить cmd-файл с таким содержанием

chcp 1251
driverquery /V /fo csv >driver.txt
exit
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#27: 2018-11-13 22:44:23 ЛС | профиль | цитата
Ну выдал еще кучу параметров, но в задаче этого не стояло, там был предложен дефолтный запуск команды. Да и вообще чел хотел только дату отслеживать. Вот если бы он попросил конкретно об универсальном решении, тогда можно было бы и заморочиться. Я сначала тоже хотел сделать более универсальный парсер, но вот только зачем, когда никто об этом не просит, разве что для себя?

Редактировалось 1 раз(а), последний 2018-11-13 22:45:00
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#28: 2018-11-13 22:54:34 ЛС | профиль | цитата
nesco писал(а):
разве что для себя?
Для себя в винде всё есть.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#29: 2018-11-13 23:01:32 ЛС | профиль | цитата
Tad писал(а):
Для себя в винде всё есть.

Я не к тому. "Для себя" я имел в виду для своего удовольствия, так, от нечего делать.
карма: 22

0
29
Сообщение
...
Прикрепленные файлы
(файлы не залиты)