Перейти к содержанию
Fire Monkey от А до Я

d7d1cd

Пользователи
  • Постов

    277
  • Зарегистрирован

  • Посещение

  • Победитель дней

    7

Весь контент d7d1cd

  1. Тоже решил воспользоваться халявой. Однако из любого браузера по ссылке я попадаю на сайт Embarcadero, а конкретно сюда: http://store.embarcadero.ru. Пробовал на сайте аллсофт найти, но тщетно. Видимо халява кончилась...
  2. Вижу, что тут компонент TIdTCPClient вообще не используется. Так же здесь приведен пример отправки массива байт. А как получить ответ с этого же IP и порта?
  3. Все верно. Счетчик сам ничего послать не может. Он только дает ответы на запросы. Теперь понятно, мне нужен компонент TIdTCPClient. Спасибо за помощь. Теперь далее... При работе через СОМ порт я отправляю в него запросы в виде массивов байт. Подскажите, как теперь эти же массивы байт отправлять через компонент TIdTCPClient на определенный IP и порт?
  4. С тем, как работает роутер VR-006, понятно. Теперь вопрос какой именно компонент использовать: TIdTCPClient или TIdTCPServer? Вроде ранее обсуждалось, что прибор (то есть счетчик через VR-006) - это источник данных, поэтому надо использовать компонент Клиент. В последнем сообщении говорится, что надо использовать Клиент, а лучше Сервер. Исходя из того, что я никогда не работал ни с одним из указанных компонентов, то подскажите, что конкретно мне использовать?
  5. Не было установлено ни одного плагина. У кого-то из посетителей этой темы установлен C++Builder 10.1? Не Delphi 10.1!!!
  6. Ну не знаю как на месте. У меня вот так, как на картинке. Кстати, до добавления функции FormCreate на конструкторе формы злополучный плюсик был, а после добавления пропал. Причем если удалить добавленную функцию, то плюсик на конструкторе так и не появляется.
  7. Приветствую. Установил Builder 10.1 Berlin и при открытии своего проекта, ранее созданного в Seattle, обнаружил, что в редакторе кода нельзя сложить тело функции (плюсик рядом с объявлением), а в окне Structure, когда открыт код, вообще ничего нет (когда открыт дизайнер, компоненты в этом окне есть). Пробовал создать новый проект, там сразу все нормально, но когда добавляются функции, то складывание тоже пропадает. Это вообще решаемо или это глюк новоиспеченной системы?
  8. Показания, профиль мощности, журналы событий, тарифное расписание и еще много того, что хранит счетчик. Вообще получить все это я могу, но только когда счетчик рядом. Сейчас же я хочу научиться получать эти данные, когда счетчик далеко.
  9. Это не веб форма. Это интерфейс заводской программы для работы со счетчиками.
  10. Во первых, у меня пока нет устройства. Во вторых, производитель устройства ясно сказал, что при отправке данных на IP адрес они отправляются в таком же виде, как и при работе через COM порт. Отсюда делается вывод, что нельзя выйти на веб интерфейс через IP адрес.
  11. Подскажите тогда, какой компонент мне использовать? Чтобы было как можно проще.
  12. Ну что, получил ответ от производителя устройства. Вот текст моего письма: Получил такой ответ: Из ответа я понял, что запросы для счетчика нужно отправлять на IP адрес так же, как и в COM порт. Правильно?
  13. А ведь можно еще попробовать сделать по-другому: с помощью какой-нибудь программы-монитора "подсмотреть" что отправляет существующее приложение по протоколу TCP/IP. Протокол обмена со счетчиком известен, поэтому, я думаю, будет несложно "разгадать" протокол обмена по веб-интерфейсу (ну если только там нет какого-нибудь шифрования).
  14. Отправил производителю запрос на получение протокола обмена. Как будет ответ, буду дальше задавать вопросы
  15. Ссылка на процедуру соединения с прибором http://incotex-counter.blogspot.ru/2015/10/3g4g-vr-006.html.
  16. Само устройство является посредником. Так сказать интерфейсом связи. Оно принимает команду от удаленного компьютера через интернет и передает ее конечному прибору. Данный прибор отвечает на полученную команду. Устройство этот ответ отправляет на удаленный компьютер. Вообще для работы с конечным прибором существует готовое приложение. В этом приложении можно выбрать один из нескольких типов интерфейсов: COM-порт, Bluetooth и, в том числе, TCP/IP. При выборе последнего программа просит указать IP адрес, порт (фиксирован - 7001), а так же некоторые параметры, как при работе с COM-портом - скорость обмена с конечным устройством, четность, время ожидания ответа. Работать с конечным устройством через COM-порт я умею. Теперь хочу научиться работать через TCP/IP.
  17. У меня поставщик данных - это прибор. Получается, что он - сервер. Однако этот сервер не пришлет мне данные, пока я не отправлю ему запрос. Из всего этого я делаю вывод, что для решения моей задачи необходимо использовать только один компонент: TNetHTTPClient. Я правильно понимаю?
  18. Привет всем. Возникла необходимость через интернет работать с устройством: отправлять в него данные и получать данные от устройства. У устройства в сети есть статический IP адрес и строго задан порт для данных. Подскажите с помощью каких компонентов (функций, методов) можно решить мою задачу?
  19. Обработчик MouseMove надо вешать не на фрейм, а на листбокс.
  20. Как я понимаю, MAC адрес будет только в том случае, если в компьютере есть сетевая карта. А мне надо сделать привязку к такому оборудованию, которое гарантированно есть в компьютере. Например к процессору. У него есть уникальный номер?
  21. Нашел готовый код: 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...
  22. kami, прошу прощения. Сразу не внимательно прочитал. А что, Ваш вариант мне подходит. Видимо его и буду использовать. ZuBy, Ваш код я бы использовал, но я кодирую на С++, а перевести с Паскаля у меня его так и не получилось...
  23. Но ведь пользователь может запустить программу-"подготовщик" на любом количестве компьютеров и потом запускать там рабочее приложение. Какая же это защита?
  24. Как это сделать? И вообще, может быть у кого-то есть решение как сделать простую защиту программы не используя UUID и интернет?
×
×
  • Создать...