Privet vsem!
Vot takaya voznikla problema — nugno vyrubit' dinamiki modema, ya delau tak, no ono ne pashet

To4nee pComConf->wcProviderData ne sodergit infu ot modema.
Kto-to moget byt' ustanavlival svoistva modema?
HANDLE hModem = INVALID_HANDLE_VALUE;
LPCOMMCONFIG pComConf = NULL;
__try
{
hModem = CreateFile( "\\\\.\\Rockwell 56000 External Modem PnP",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, NULL);
if ( hModem == INVALID_HANDLE_VALUE )
__leave;
DWORD cbNeed = sizeof(COMMCONFIG);
pComConf = (LPCOMMCONFIG)GlobalAlloc( GMEM_ZEROINIT, cbNeed );
if ( !pComConf )
__leave;
GetCommConfig( hModem, pComConf, &cbNeed );
if ( cbNeed > sizeof(COMMCONFIG) )
{
GlobalFree( pComConf );
pComConf = (LPCOMMCONFIG)GlobalAlloc( GMEM_ZEROINIT, cbNeed );
GetCommConfig( hModem, pComConf, &cbNeed );
}
if ( pComConf->dwProviderSubType != PST_MODEM )
__leave;
if ( pComConf->dwProviderOffset == 0 )
__leave;
LPMODEMSETTINGS pModemSettings = (LPMODEMSETTINGS)&pComConf->wcProviderData;
pModemSettings->dwSpeakerMode = MDMSPKR_OFF;
SetCommConfig( hModem, pComConf, cbNeed );
}
__finally
{
if ( pComConf != NULL )
GlobalFree( pComConf );
if ( hModem != INVALID_HANDLE_VALUE )
CloseHandle( hModem );
}
Здравствуйте, Sidus, Вы писали:
S>Privet vsem!
S>Vot takaya voznikla problema — nugno vyrubit' dinamiki modema, ya delau tak, no ono ne pashet
S>To4nee pComConf->wcProviderData ne sodergit infu ot modema.
S>Kto-to moget byt' ustanavlival svoistva modema?
#define MODEM_CLASS "SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E96D-E325-11CE-BFC1-08002BE10318}" - по хорошему нужно ещё его искать в реестре по "Modems", но .. вроде как всё работает.
#define INIT_STR "AT......" - по желанию короче.
int INTERNPROC SetModemInfo(HKEY ModemKey)
{
static const char Value[] = INIT_STR;
return RegSetValueEx(ModemKey,
"UserInit",
NULL,
REG_SZ,
(LPBYTE)&Value[0],
CountOf(Value) - 1);
}
int INTERNPROC SetExtraDialParams(TString DevName)
{
HKEY hKey;
HKEY ModemKey;
int I,Modems;
char KeyModemName[500];
DWORD dwKeyNameSize;
char Value[500];
DWORD dwValueSize;
DWORD dwResult;
dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
MODEM_CLASS,
0,
KEY_READ,
&hKey);
if(dwResult == ERROR_SUCCESS){
Modems = HowManySubKeys(hKey);
if(Modems != -1){
for(I=0;I<Modems;I++){
dwKeyNameSize = sizeof(KeyModemName);
if(RegEnumKeyEx(hKey,I,&KeyModemName[0],&dwKeyNameSize,NULL,NULL,NULL,NULL) == ERROR_SUCCESS){
if(RegOpenKeyEx(hKey, &KeyModemName[0], 0, KEY_ALL_ACCESS, &ModemKey) != ERROR_SUCCESS) return 1;
}
else break;
//Check and Set
dwValueSize = sizeof(Value);
dwResult = RegQueryValueEx(ModemKey,
"FriendlyName",
NULL,
NULL,
(LPBYTE)&Value[0],
&dwValueSize);
if(dwResult == ERROR_ACCESS_DENIED)
return 1;
if(dwResult != ERROR_SUCCESS)
printf("\r\nError %s", LogWinErrorByCode(dwResult));
else
if(StrIComp(Value, DevName) == 0)
SetModemInfo(ModemKey);
}
}
else{
printf("\r\nThis System have not modem(s)!");
}
}
else{
printf("No modem CLASSS : %s", MODEM_CLASS);
printf("\r\nError %s", LogWinErrorByCode(dwResult));
};
return 0;
}
Всё это безобразие меняет Extra Dila Parametrs модема на заданные. Работает.
Spasibo! Eto deistvitelno rabotaet!
No..IMHO horoshaya proga ne dolgna uzat' takie metody, ved' ne fact 4to v sleduus4ei versii Windows
etot parametr reestra budet sohranen.
Tot put', 4to predlogil ya bolee pravilnyi tak kak uzaet API, no ne pashet

poka 4to.
Moget kto-to es4o stalkivalsya?
Здравствуйте, Sidus, Вы писали:
S>Spasibo! Eto deistvitelno rabotaet!
S>No..IMHO horoshaya proga ne dolgna uzat' takie metody, ved' ne fact 4to v sleduus4ei versii Windows
S>etot parametr reestra budet sohranen.
Дядя Билли с..а, НОРМАЛЬнЫХ средств поменять всё это НЕТ.
RAS не был писан M$, это была разработка левой конторы для НТ 3.5. После этого Dealer для винды никто не переписывал.
S>Tot put', 4to predlogil ya bolee pravilnyi tak kak uzaet API, no ne pashet
poka 4to.
S>Moget kto-to es4o stalkivalsya?
Это не поможет, ибо 1) нужна поддержка драйвера для выполнения данных комманд. 2) Extra Dial всегда имеет приоритет над ComCFG.