Установка свойств модема
От: Sidus  
Дата: 17.05.04 12:46
Оценка:
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 );
            }
Re: Установка свойств модема
От: Protey Россия  
Дата: 20.05.04 10:14
Оценка:
Здравствуйте, 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 модема на заданные. Работает.
Re[2]: Установка свойств модема
От: Sidus  
Дата: 23.05.04 13:15
Оценка:
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?
Re[3]: Установка свойств модема
От: Protey Россия  
Дата: 24.05.04 07:22
Оценка:
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.