d7d1cd
Пользователи-
Постов
277 -
Зарегистрирован
-
Посещение
-
Победитель дней
7
Весь контент d7d1cd
-
Тоже решил воспользоваться халявой. Однако из любого браузера по ссылке я попадаю на сайт Embarcadero, а конкретно сюда: http://store.embarcadero.ru. Пробовал на сайте аллсофт найти, но тщетно. Видимо халява кончилась...
-
Все верно. Счетчик сам ничего послать не может. Он только дает ответы на запросы. Теперь понятно, мне нужен компонент TIdTCPClient. Спасибо за помощь. Теперь далее... При работе через СОМ порт я отправляю в него запросы в виде массивов байт. Подскажите, как теперь эти же массивы байт отправлять через компонент TIdTCPClient на определенный IP и порт?
-
С тем, как работает роутер VR-006, понятно. Теперь вопрос какой именно компонент использовать: TIdTCPClient или TIdTCPServer? Вроде ранее обсуждалось, что прибор (то есть счетчик через VR-006) - это источник данных, поэтому надо использовать компонент Клиент. В последнем сообщении говорится, что надо использовать Клиент, а лучше Сервер. Исходя из того, что я никогда не работал ни с одним из указанных компонентов, то подскажите, что конкретно мне использовать?
-
Не было установлено ни одного плагина. У кого-то из посетителей этой темы установлен C++Builder 10.1? Не Delphi 10.1!!!
-
Ну не знаю как на месте. У меня вот так, как на картинке. Кстати, до добавления функции FormCreate на конструкторе формы злополучный плюсик был, а после добавления пропал. Причем если удалить добавленную функцию, то плюсик на конструкторе так и не появляется.
-
Приветствую. Установил Builder 10.1 Berlin и при открытии своего проекта, ранее созданного в Seattle, обнаружил, что в редакторе кода нельзя сложить тело функции (плюсик рядом с объявлением), а в окне Structure, когда открыт код, вообще ничего нет (когда открыт дизайнер, компоненты в этом окне есть). Пробовал создать новый проект, там сразу все нормально, но когда добавляются функции, то складывание тоже пропадает. Это вообще решаемо или это глюк новоиспеченной системы?
-
А ведь можно еще попробовать сделать по-другому: с помощью какой-нибудь программы-монитора "подсмотреть" что отправляет существующее приложение по протоколу TCP/IP. Протокол обмена со счетчиком известен, поэтому, я думаю, будет несложно "разгадать" протокол обмена по веб-интерфейсу (ну если только там нет какого-нибудь шифрования).
-
Само устройство является посредником. Так сказать интерфейсом связи. Оно принимает команду от удаленного компьютера через интернет и передает ее конечному прибору. Данный прибор отвечает на полученную команду. Устройство этот ответ отправляет на удаленный компьютер. Вообще для работы с конечным прибором существует готовое приложение. В этом приложении можно выбрать один из нескольких типов интерфейсов: COM-порт, Bluetooth и, в том числе, TCP/IP. При выборе последнего программа просит указать IP адрес, порт (фиксирован - 7001), а так же некоторые параметры, как при работе с COM-портом - скорость обмена с конечным устройством, четность, время ожидания ответа. Работать с конечным устройством через COM-порт я умею. Теперь хочу научиться работать через TCP/IP.
-
Электросчетчики "Меркурий" - Отправка (получение) данных с IP адреса
d7d1cd опубликовал вопрос в Прочие вопросы
Привет всем. Возникла необходимость через интернет работать с устройством: отправлять в него данные и получать данные от устройства. У устройства в сети есть статический IP адрес и строго задан порт для данных. Подскажите с помощью каких компонентов (функций, методов) можно решить мою задачу? -
Обработчик MouseMove надо вешать не на фрейм, а на листбокс.
-
Как я понимаю, MAC адрес будет только в том случае, если в компьютере есть сетевая карта. А мне надо сделать привязку к такому оборудованию, которое гарантированно есть в компьютере. Например к процессору. У него есть уникальный номер?
-
Нашел готовый код: void GetWmiInfo(TStrings *lpList, wchar_t* wsQuery) { HRESULT hres; // устанавливаем контекст бехопасности hres = CoInitializeSecurity( NULL, -1, // COM authentication NULL, // Authentication services NULL, // Reserved RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation NULL, // Authentication info EOAC_NONE, // Additional capabilities NULL // Reserved ); IWbemLocator *pWbemLocator = NULL; // провайдер WMI // инициализируем провайдера if(CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL, CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**)&pWbemLocator) == S_OK) { IWbemServices *pWbemServices = NULL; // обьект, которому будем скармливать запрос (целевая машина) wchar_t* wsNamespace = (L"ROOT\\CIMV2"); // пространство имён // подключаемся к целевой машине if(pWbemLocator->ConnectServer(wsNamespace, NULL, NULL, NULL, 0, NULL, NULL, &pWbemServices) == S_OK){ IEnumWbemClassObject *pEnumClassObject = NULL; // энумератор записей wchar_t* wsWQL=(L"WQL"); // язык запросов WQL //wchar_t* wsQuery=(L"select * from WIN32_diskdrive");//+wsClass; // сам запрос к классу // выполняем запрос if(pWbemServices->ExecQuery(wsWQL, wsQuery, WBEM_FLAG_RETURN_IMMEDIATELY,NULL, &pEnumClassObject) == S_OK){ // параметры для перебора коллекции записей IWbemClassObject *pClassObject = NULL; ULONG uCount = 1, uReturned = 0; if(pEnumClassObject->Reset() == S_OK) { // ????????? int iEnumIdx = 0; hres = pEnumClassObject->Next(WBEM_INFINITE, uCount, &pClassObject, &uReturned); // перебираем колекцию while( hres == S_OK) { lpList->Add("---------------- ["+IntToStr(iEnumIdx)+"] -----------------"); SAFEARRAY *pvNames = NULL; if(pClassObject->GetNames(NULL, WBEM_FLAG_ALWAYS | WBEM_MASK_CONDITION_ORIGIN, NULL, &pvNames) == S_OK) { long vbl, vbu; SafeArrayGetLBound(pvNames, 1, &vbl); SafeArrayGetUBound(pvNames, 1, &vbu); for(long idx=vbl; idx<=vbu; idx++) { long aidx = idx; wchar_t *wsName = 0; VARIANT vValue; VariantInit(&vValue); SafeArrayGetElement(pvNames, &aidx, &wsName); BSTR bs = SysAllocString(wsName); HRESULT hRes = pClassObject->Get(bs, 0, &vValue, NULL, 0); SysFreeString(bs); if(hRes == S_OK) { AnsiString s; Variant v = *(Variant*)&vValue; if(v.IsArray()){ for(int i=v.ArrayLowBound(); i<=v.ArrayHighBound(); i++){ Variant a = v.GetElement(i); if(!s.IsEmpty()) s+=", "; s+=VarToStr(a); } } else { s = VarToStr(v); } lpList->Add(AnsiString(wsName)+"="+s); } VariantClear(&vValue); SysFreeString(wsName); } } if(pvNames)SafeArrayDestroy(pvNames); iEnumIdx++; hres = pEnumClassObject->Next(WBEM_INFINITE, uCount, &pClassObject, &uReturned); } // конец по WHILE if(hres != S_OK) lpList->Add((hres&0xFFFF)); } // конец по pEnumClassObject->Reset() if(pClassObject)pClassObject->Release(); } // конец по выполнению запроса if(pEnumClassObject)pEnumClassObject->Release(); } // конец по подключению if(pWbemServices)pWbemServices->Release(); } // конец инициализации провайдера if(pWbemLocator)pWbemLocator->Release(); } void __fastcall TForm1::Button1Click(TObject *Sender) { Memo1->Lines->Add("================== [WMI WQL] ================="); wchar_t* ss=(L"Select * from Win32_MotherboardDevice"); GetWmiInfo(Memo1->Lines, ss); Memo1->Lines->Add(""); } Данный код выдает следующее: Так и не смог понять где тут UUID...
-
kami, прошу прощения. Сразу не внимательно прочитал. А что, Ваш вариант мне подходит. Видимо его и буду использовать. ZuBy, Ваш код я бы использовал, но я кодирую на С++, а перевести с Паскаля у меня его так и не получилось...
-
Но ведь пользователь может запустить программу-"подготовщик" на любом количестве компьютеров и потом запускать там рабочее приложение. Какая же это защита?
-
Как это сделать? И вообще, может быть у кого-то есть решение как сделать простую защиту программы не используя UUID и интернет?