imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 08.06.2003, 17:34     # 1
nikoTEEN
::VIP::
 
Аватар для nikoTEEN
 
Регистрация: 11.11.2002
Сообщения: 651

nikoTEEN Путь к славе только начался
Отключение модема (softmodem) от порта.

Вобщем такова суть. Нужно отключать модем от линии сразу. Как только я нажал на кнопку отключиться, он должен резко вырубаться.

А в WinXP очень много проблем с ретрейнами. Иногда бывает, что в момент ретрейна надо отключиться, а он гад ждет, пока весь ретрейн закончится и только потом отключается. В 98 такой фигни нету. Там нажал отключиться и он сразу отключает модем от линии.

Есть ли такая... ...даже не знаю... фигулька или программулька для XP, чтобы модем отключался сразу.

Может можно самому состряпать такую вещь, которая отключала порт (COM) или ещё как-нибудь. тока не говорите отключать железно от линии, типа реле или ещё как-нить. надо что-то программное

Подскажите плиз. а то у меня стоит 2 оси (XP/98) из-за этой хрени с диалапом.

ps не спрашивайте зачем. просто очень надо. спасибо заранее.

pps не знал куда все это засунуть. всмысле в какой раздел. если что, перенесите.
__________________
Каждое слово, даже шутка, которые изрыгает обгорающим ртом он,
Выбрасывается, как голая проститутка из горящего публичного дома.
(c) В. Маяковский
nikoTEEN вне форума  
Старый 08.06.2003, 17:52     # 2
nikoTEEN
::VIP::
 
Аватар для nikoTEEN
 
Регистрация: 11.11.2002
Сообщения: 651

nikoTEEN Путь к славе только начался
Вот я щас почитал. Другой вопрос. Как отучить модем от ретрейнов. Почему в 98ом нет ретрейнов, а в XP почти на каждом коннекте.

modem ACORP M-56IRW
__________________
Каждое слово, даже шутка, которые изрыгает обгорающим ртом он,
Выбрасывается, как голая проститутка из горящего публичного дома.
(c) В. Маяковский

Последний раз редактировалось nikoTEEN; 08.06.2003 в 17:55.
nikoTEEN вне форума  
Старый 09.06.2003, 11:20     # 3
donatas
Junior Member
 
Регистрация: 12.09.2002
Сообщения: 99

donatas Мелкий засранец
под 9х работает,под ХР - надо пробывать....

procedure TForm1.Button1Click(Sender: TObject);
Var COM2:TextFile;
begin
AssignFile(com2,'COM2'); // 'COM2' - порт на котором висит модем
Rewrite(Com2); // открываем порт на запись
Close(com2); // освобождаем порт
end;
_________
сразу говорю,это некрасиво,но работает
__________________
Latest Active Project: nC++
donatas вне форума  
Старый 09.06.2003, 11:34     # 4
donatas
Junior Member
 
Регистрация: 12.09.2002
Сообщения: 99

donatas Мелкий засранец
ну или чуть правильнее
TerminateThread(CommThread,0); //- "убиение" параллельного потока приема
CloseHandle(CommHandle); //- "убиение" собственно файла-порта.
__________________
Latest Active Project: nC++
donatas вне форума  
Старый 09.06.2003, 11:46     # 5
nikoTEEN
::VIP::
 
Аватар для nikoTEEN
 
Регистрация: 11.11.2002
Сообщения: 651

nikoTEEN Путь к славе только начался
Цитата:
TerminateThread(CommThread,0); //- "убиение" параллельного потока приема CloseHandle(CommHandle); //- "убиение" собственно файла-порта.
я вот это чего-то не понял. ты не думай, что я все ловлю на лету. я ещё не такой матерый программер =))

у меня модем подключен, а когда я хочу сделать assign, пишет i/o error.

вот с terminatehandle как сделать. я так понял, что во время работы модема terminatehandle отключает его каким-то фигом.
__________________
Каждое слово, даже шутка, которые изрыгает обгорающим ртом он,
Выбрасывается, как голая проститутка из горящего публичного дома.
(c) В. Маяковский
nikoTEEN вне форума  
Старый 09.06.2003, 12:05     # 6
donatas
Junior Member
 
Регистрация: 12.09.2002
Сообщения: 99

donatas Мелкий засранец
ну раз не шаришь - вот готовый юнит:
unit PortUnit;

interface
uses windows,sysutils;

var
CommHandle : integer;
DCB : TDCB;
Ovr : TOverlapped;
Stat : TComStat;
CommThread : THandle;
hEvent : THandle;
Flag,StopResive : boolean;
KolByte,Kols,Mask,TransMask,Errs : DWord;
procedure PortInit;
procedure ReadComm;
procedure WriteComm(A:byte);
procedure KillComm;

implementation

uses
Main;

procedure KillComm;
begin
TerminateThread(CommThread,0);
CloseHandle(CommHandle);
end;

procedure WriteComm(A:byte);
var
Transmit:array [0..255] of char;
begin
//послать один символ в порт
KolByte:=1;
Transmit[0]:=chr(A);
WriteFile(CommHandle,Transmit,KolByte,KolByte,@Ovr);
end;

procedure ReadComm;
var
Resive:array [0..255] of char;
begin

while true do
begin
TransMask:=0;
WaitCommEvent(CommHandle,TransMask,@Ovr); //ждем
if (TransMask and EV_RXFLAG)=EV_RXFLAG then //проверяем нужное событие
begin
ClearCommError(CommHandle,Errs,@Stat);//сбрасываем флаг
Kols := Stat.cbInQue;
ReadFile(CommHandle,Resive,Kols,Kols,@Ovr);//читаем
//тут должна идти обработка принятой информации из Resive
Form1.Panel1.Caption:=string(Resive);
//не очень хороший вариант вывода, но для примера подойдет
end;//mask
end;//while
end;

procedure PortInit;
var
ThreadID:dword;
begin
//создание и иницализация порта
KolByte:=0;

//создание порта и получение его хэндла
CommHandle := CreateFile('COM1',GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);

//ставим маску - "по пришествии определенного символа"
SetCommMask(CommHandle,EV_RXFLAG);

//построение DCB
GetCommState(CommHandle,DCB);
DCB.BaudRate:=CBR_9600;
DCB.Parity:=NOPARITY;
DCB.ByteSize:=8;
DCB.StopBits:=OneStopBit;
DCB.EvtChar:=chr(13);//задание символа для флага
//устанавливаем DCB
SetCommState(CommHandle,DCB);
//создаем паралельный поток
//там будет вертеться процедура приема строки
//с порта - ReadComm
CommThread := CreateThread(nil,0,@ReadComm,nil,0,ThreadID);
end;
end.
__________________
Latest Active Project: nC++
donatas вне форума  
Старый 09.06.2003, 12:33     # 7
nikoTEEN
::VIP::
 
Аватар для nikoTEEN
 
Регистрация: 11.11.2002
Сообщения: 651

nikoTEEN Путь к славе только начался
не посчитай меня за тормоза, но что с этим делать ?????

у меня порт открыт и мне нужно узнать хэндл этого открытого порта. как мне его узнать.

procedure KillComm;
begin
TerminateThread(CommThread,0);
CloseHandle(CommHandle);
end;

убить поток. а какой поток именно ?? я все равно не понял.

//создание порта и получение его хэндла
CommHandle := CreateFile('COM1',GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);

порт у меня уже создан и на нем работает модем. я же не могу параллельно к нему подключиться.

вобщем ещё раз ситуевина. работает подем, значит порт открыт (com3) мне надо обрубить этот порт во время работы. вроде все.
__________________
Каждое слово, даже шутка, которые изрыгает обгорающим ртом он,
Выбрасывается, как голая проститутка из горящего публичного дома.
(c) В. Маяковский
nikoTEEN вне форума  
Старый 09.06.2003, 14:11     # 8
donatas
Junior Member
 
Регистрация: 12.09.2002
Сообщения: 99

donatas Мелкий засранец
хм.....
InternetAutodialHangup
Отсоединяет модем от линии.
InternetAutodialHangup( dwReserved:Cardinal ):BOOLEAN;
Параметры
dwReserved Зарезервировано. Должно быть 0. Возвращает TRUE при успешном результате, FALSE в противном случае.

больше инфо в мсдн,но я думаю этого должно хватить
__________________
Latest Active Project: nC++
donatas вне форума  
Старый 09.06.2003, 17:08     # 9
nikoTEEN
::VIP::
 
Аватар для nikoTEEN
 
Регистрация: 11.11.2002
Сообщения: 651

nikoTEEN Путь к славе только начался
donatas
это обычное отключение от сети. так не пойдет.

получается, что во время работы нельзя отключить модем. так ?
__________________
Каждое слово, даже шутка, которые изрыгает обгорающим ртом он,
Выбрасывается, как голая проститутка из горящего публичного дома.
(c) В. Маяковский
nikoTEEN вне форума  
Старый 09.06.2003, 17:14     # 10
donatas
Junior Member
 
Регистрация: 12.09.2002
Сообщения: 99

donatas Мелкий засранец
пошли в него(в модем) в концеконцов ATH - должен трубу сразу бросить
__________________
Latest Active Project: nC++
donatas вне форума  
Старый 09.06.2003, 19:03     # 11
nikoTEEN
::VIP::
 
Аватар для nikoTEEN
 
Регистрация: 11.11.2002
Сообщения: 651

nikoTEEN Путь к славе только начался
а как я пошлю, если порт открыт ras'ом.
__________________
Каждое слово, даже шутка, которые изрыгает обгорающим ртом он,
Выбрасывается, как голая проститутка из горящего публичного дома.
(c) В. Маяковский
nikoTEEN вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 16:37.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.