Имя: Пароль:
IT
Веб-мастеринг
Как на JavaScript отловить событие прихода данных на Com-порт?
0 Ислам
 
27.03.14
13:34
Собственно сабж.
Желательно без использования устаревшей mscomm32.ocx
1 dangerouscoder
 
27.03.14
13:45
2 Ислам
 
27.03.14
13:52
(1) Эту штуку я уже смотрел, она платная.
3 Ислам
 
27.03.14
13:56
И что-то не нашел как отловить событие
4 Ислам
 
27.03.14
13:57
На другом форуме мне посоветовали через Win API сделать, вроде все круто, но там тоже нет событий, нужно тупо в программе сидеть и ждать прихода данных.
5 CPU0
 
27.03.14
14:24
(0) Лол, в посте №55 (javascript диалог выбора каталога) ты с пеной у рта доказывал, что речь идет не о HTA...
6 Serginio1
 
27.03.14
14:24
(4) Создаешь событие в своем ActiveX
и привязываешься к нему через attachEvent

http://social.msdn.microsoft.com/Forums/vstudio/en-US/0a8400bc-e726-4f09-89a3-90f7c438b34c/ie-crashes-using-c-activex-control-with-threadevent
7 Serginio1
 
27.03.14
14:27
http://www.codeproject.com/Articles/35532/C-COM-Object-for-Use-In-JavaScript-HTML-Including

Посмотри как у меня сделано событие
8 Serginio1
 
27.03.14
14:39
9 Ислам
 
28.03.14
06:09
(5) Лол. Капитан О. Там еще и не про насекомых которые испытывают боль.
10 Ислам
 
28.03.14
06:15
(7) А это событие должно быть видно как свойство объекта в отладчике? Типа как у другох объектов видно ***.onClick, и пр. А то у меня его не видно, и если присврить функцию obj.onComm = fyfunc по аналогии с onClick, то свойство появляется, но ничего не срабатывает. Через attachEvent должно по другому происходить или нет разницы?
11 Serginio1
 
28.03.14
10:22
Я с JavaScript  только учусь (посыпаю пеплом местами седую голову), но вот они должны быть комовскими которые в 1С например срабатывают через
ДобавитьОбработчик Событие.СобытиеСПараметром, ПолучениеДанныхПоTCP;

Ну и надо смотреть в отладчике когда реальное событие срабатывает, и что оно вызывает
12 Ислам
 
28.03.14
11:03
Короче, вообще не работает событие у меня.

Решил через Win API делать как советовали по правильному.

Вот кусок кода не понятный:


   if not WaitCommEvent(hPort, dwMask, @OverRead) then
   begin
    if GetLastError = ERROR_IO_PENDING then
      WaitForSingleObject(OverRead.hEvent, INFINITE)
    else
      raise Exception.Create('Error waiting port event');
   end;


Функция WaitCommEvent ждет событие от ком-порта, так?
Событие происходит (пришли данные), обрабатываем их дальше.
Тогда не понятно зачем функция WaitForSingleObject. Похоже она делает то же самое: Ждет какое-то событие. Тогда вопрос: Зачем их две? Что они делают?
13 Serginio1
 
28.03.14
13:53
(12) А чего гугл забанили?
http://www.vsokovikov.narod.ru/New_MSDN_API/Comm_res/fn_waitcommevent.htm


Функция WaitCommEvent осуществляет текущий контроль за пакетом событий для заданного коммуникационного ресурса. Чтобы установить и сделать запрос текущей маски события коммуникационного ресурса, используйте функции SetCommMask и GetCommMask.

Если асинхронная операция не может завершиться немедленно, функцией возвращается ЛОЖЬ (FALSE), а функцией GetLastError возвращается значение ERROR_IO_PENDING, указывая, что операция исполняет код в фоновом режиме. Когда это случается, система устанавливает член hEvent структуры OVERLAPPED в несигнальное состояние прежде, чем WaitCommEvent возвращает значение, а затем она устанавливает структуру в сигнальное состояние, когда происходит одно из определенных событий или ошибка. Вызывающий процесс может использовать одну из функций ожидания, чтобы выяснить состояние объекта события, а затем использовать функцию GetOverlappedResult, чтобы выяснить результат работы  WaitCommEvent. Функция GetOverlappedResult сообщает об успешном завершении или сбое операции, а переменная, на которую указывает параметр lpEvtMask устанавливается так, чтобы обозначить событие, которое произошло.

Если процесс пытается изменить маску события дескриптора устройства, используя функцию SetCommMask, в то время, когда происходит асинхронная операция WaitCommEvent, функция WaitCommEvent возвращает значение немедленно. Переменная, на которую указывает параметр lpEvtMask устанавливается в нуль ('0').
14 Serginio1
 
28.03.14
13:54
(12) Ты бы показал код со своим событием
Ошибка? Это не ошибка, это системная функция.