Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Новые компоненты"
Ответов: 315
Рейтинг: 26
#1: 2021-09-25 17:08:40 ЛС | профиль | цитата
Приветствую всех.
В системе одновременно бывает подключено два или три аппарата, компонент Перечисление COM-портов показывает только порт устройства (пример- COM3) но не имя и каждый раз приходится открывать диспетчер и смотреть какой порт от чего, что очень неудобно. Компонент KernelChip (параметры поиска я ему немного переделал код будет ниже) тоже ищет порты, но как надо (пример- HUAWEI Mobile Connect - Fake Acm Interface (COM3) COM3) но выдаёт все порты даже которые были подключены когда то, не понятно что подключено а что нет, да и список как туалетная бумага длинный так как подключаются разные телефоны.
Мне нужно переделать компонент KernelChip что бы в свойствах компонента был параметр показывать все устройства либо только подключённые.
Если это возможно сделать то можно будет в свойства компонента добавить ClassGUID

Переделанный KernelChip
unit hiKE_DetectDevices;

interface

uses windows,Kol,Share,Debug;

type
THIKE_DetectDevices = class(TDebug)
private
public
_event_onSearch:THI_Event;
_event_onEndSearch:THI_Event;

procedure _work_doSearch(var _Data:TData; Index:word);
end;

implementation

procedure THIKE_DetectDevices._work_doSearch;
var
hk:HKEY;
List,devs:PStrList;
i,c:smallint;
s:string;
dt,d:TData;
f:PData;
begin
hk := kol.RegKeyOpenRead(HKEY_LOCAL_MACHINE,'SYSTEM\ControlSet001\Enum\USB');
List := NewStrList;
devs := NewStrList;
kol.RegKeyGetSubKeys(hk,List);
kol.RegKeyClose(hk);
c := 0;
for i := 0 to List.Count-1 do
begin
s := 'SYSTEM\ControlSet001\Enum\USB\' + List.Items[i];
hk := kol.RegKeyOpenRead(HKEY_LOCAL_MACHINE,s);
kol.RegKeyGetSubKeys(hk,devs);
kol.RegKeyClose(hk);

hk := kol.RegKeyOpenRead(HKEY_LOCAL_MACHINE,s + '\' + devs.Items[0]);
if kol.RegKeyGetStr(hk, 'ClassGUID') = '{4d36e978-e325-11ce-bfc1-08002be10318}' then
begin
dtString(dt, kol.RegKeyGetStr(hk, 'FriendlyName'));
kol.RegKeyClose(hk);
hk := kol.RegKeyOpenRead(HKEY_LOCAL_MACHINE,s + '\' + devs.Items[0] + '\Device Parameters');
s := kol.RegKeyGetStr(hk, 'PortName');
delete(s,1,3);
dtInteger(d, str2int(s));
AddMTData(@dt, @d, f);
_hi_OnEvent(_event_onSearch, dt);
FreeData(f);
inc(c);
end
else kol.RegKeyClose(hk);
end;
List.Free;
devs.free;
_hi_OnEvent(_event_onEndSearch, c);
end;

end.


Вопрос решил Gunta за это ему ОГРОМНОЕ СПАСИБО

Редактировалось 6 раз(а), последний 2022-12-26 18:27:32
карма: 2
0
Ответов: 793
Рейтинг: 168
#2: 2021-09-25 20:49:31 ЛС | профиль | цитата
envoy_sky, попробуй. Информации достаточно? У меня телефоны подключаются через ADB-драйвер. Проверял на переходнике USB-COM.

Add(MainForm,2953706,56,70)
{
link(onCreate,12839125:doData,[])
}
Add(Charset,9621626,210,84)
{
link(onCharset,6056519:doAdd,[])
}
Add(WinExec,13023946,161,70)
{
FileName="powershell"
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
link(onConsoleResult,9621626:doCharset,[])
}
Add(DoData,12839125,112,84)
{
Data=String(Get-WmiObject Win32_PnPEntity | Where Name -match 'COM\d+')
link(onEventData,13023946:doConsoleExec,[])
}
Add(Memo,6056519,266,84)
{
Left=550
Top=160
Align=5
ScrollBars=3
}


Проверялось на Windows10 64
карма: 16

0
Ответов: 315
Рейтинг: 26
#3: 2021-09-25 21:15:25 ЛС | профиль | цитата
Gunta писал(а):
попробуй.

И что это мне даст?
Непонятная писанина в окне и всё.

Редактировалось 2 раз(а), последний 2021-09-26 14:07:24
карма: 2
0
Ответов: 793
Рейтинг: 168
#4: 2021-09-25 22:40:46 ЛС | профиль | цитата
envoy_sky писал(а):
И что это мне даст?
Непонятная писанина в окне и всё.



Add(MainForm,1998830,343,147)
{
Width=504
Height=83
}
Add(Button,15347235,399,147)
{
Left=12
Top=10
Width=75
Caption="Порты"
link(onClick,14810329:doString,[])
}
Add(FormatStr,13519124,539,63)
{
Mask="%1 COM%2"
}
Add(ComboBox,861826,609,147)
{
Left=110
Top=9
Width=363
Height=21
Text=""
DataType=1
ReadOnly=0
}
Add(KE_DetectDevices,10942688,462,63)
{
link(onSearch,13519124:doString,[])
}
Add(Charset,9621626,560,147)
{
link(onCharset,861826:doAdd,[])
}
Add(WinExec,13023946,511,133)
{
FileName="powershell"
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
link(onConsoleResult,9621626:doCharset,[])
}
Add(FormatStr,14810329,455,147)
{
Mask="Get-WmiObject Win32_PnPEntity | Where Name -match 'COM\d+' | Select-Object -Property Name | fl"
link(onFString,13023946:doConsoleExec,[])
}

карма: 16

0
Ответов: 315
Рейтинг: 26
#5: 2021-09-26 09:43:19 ЛС | профиль | цитата
Спасибо!
задумка хорошая
Работает с глюками

Редактировалось 4 раз(а), последний 2021-09-26 12:44:44
карма: 2
0
Ответов: 793
Рейтинг: 168
#6: 2021-09-26 12:54:12 ЛС | профиль | цитата
envoy_sky писал(а):
Работает с глюками

А так?
Add(MainForm,1998830,315,175)
{
Width=504
Height=83
}
Add(Button,15347235,371,175)
{
Left=12
Top=10
Width=75
Caption="Порты"
link(onClick,13023946:doConsoleExec,[])
}
Add(ComboBox,861826,497,154)
{
Left=110
Top=9
Width=363
Height=21
Text=""
DataType=1
ReadOnly=0
}
Add(WinExec,13023946,434,161)
{
FileName="powershell"
Param="-nologo -noprofile -command "& {(Get-PnpDevice -PresentOnly -Class 'Ports').Name }""
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
link(onConsoleResult,861826:doText,[])
}


--- Добавлено в 2021-09-26 13:01:23

Add(MainForm,1998830,301,175)
{
Width=504
Height=83
}
Add(Button,15347235,357,175)
{
Left=12
Top=10
Width=75
Caption="Порты"
link(onClick,13023946:doConsoleExec,[])
}
Add(ComboBox,861826,483,154)
{
Left=110
Top=9
Width=363
Height=21
Text=""
DataType=1
ReadOnly=0
link(onClick,15123142:doSearch,[])
}
Add(WinExec,13023946,420,161)
{
FileName="powershell"
Param="-nologo -noprofile -command "& {(Get-PnpDevice -PresentOnly -Class 'Ports').Name }""
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
link(onConsoleResult,861826:doText,[])
}
Add(Debug,10118881,595,161)
{
LogCount=100
}
Add(BlockFind,15123142,539,161)
{
IncludeBlock=1
StartBlock="("
EndBlock=")"
link(onSearch,10118881:doEvent,[])
}


Чуть изменил 2 схему.

Редактировалось 2 раз(а), последний 2021-09-26 13:19:04
карма: 16

0
Ответов: 315
Рейтинг: 26
#7: 2021-09-26 13:12:50 ЛС | профиль | цитата
Gunta писал(а):
А так?

Вы просто маг, колдун и чародей.
Так работает гораздо лучше.
карма: 2
0
7
Сообщение
...
Прикрепленные файлы
(файлы не залиты)