Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.08;
Скачать: CL | DM;

Вниз

Как инициализировать звуковую карту до загрузки Windows   Найти похожие ветки 

 
AndreiDeJavu   (2007-09-26 14:04) [0]

Доброго времени суток!

Работаю над проектом голосовой авторизации, нашел на RSDN
топик http://rsdn.ru/Forum/message/1207889.flat.aspx, в котором есть фрагмент кода, необходимый мне для инициализации звуковой карты, перевел на Дельфи, но у людей в том топике проблема не решена, и у меня пока не получается сделать... Буду благодарен за комментарии и помощь в решении проблемы.  Вот код:
procedure TformProperty.ShowInfo;
var
  hDll:HModule;
  pPointer, fPointer:Pointer;
  WaveNums, i: integer;
  WaveInCaps: TWaveInCaps;  

begin

  hDll:=LoadLibrary("WINMM.dll");

   if (hDll<>NULL) then

     begin

       pPointer:=GetProcAddress(hDll, "WinmmLogon");

       if (pPointer<>nil)     then

         begin
               

               fPointer := GetProcAddress(hDll, "waveInGetNumDevs");
                 if (fPointer<>nil) then
                   begin
                     WaveNums:=waveInGetNumDevs;
                     Edit1.Text:="Работает!";
                     if WaveNums>0 then          
                    begin
                      for i:=0 to WaveNums-1 do  
                         begin
                           waveInGetDevCaps(i,@WaveInCaps,sizeof(TWaveInCaps));
                                 
                                  ComboBox.Items.Add(PChar(@WaveInCaps.szPname));
                          end;
                       ComboBox.ItemIndex:=0;
                   ComboBox.OnChange(self);
                   end
                      else
                    Edit1.Text:="Не работает!";

               //WaveNums:=waveInGetNumDevs;

  end;

         end;

    end;

end;


 
Сергей М. ©   (2007-09-26 14:12) [1]


> Как инициализировать звуковую карту до загрузки Windows


Поместив соответсвующий код, например, в BIOS POST - это и будет истинным "до загрузки Windows".

Только накой ляд это может понадобиться, если в ходе загрузки Windows все равно займется этим по-новой ?


 
Сергей М. ©   (2007-09-26 14:16) [2]

А если ноги растут отсюда

http://rsdn.ru/Forum/message/1207889.flat.aspx

то это вовсе не "до загрузки Windows")


 
Сергей М. ©   (2007-09-26 14:20) [3]


> в котором есть фрагмент кода, необходимый мне для инициализации
> звуковой карты


Нет там "кода инициализации".

Инициализацию карты осуществляет драйвер режима ядра, стартующий намного раньше.


 
Leonid Troyanovsky ©   (2007-09-26 14:24) [4]


> AndreiDeJavu   (26.09.07 14:04)  

>        pPointer:=GetProcAddress(hDll, "WinmmLogon");

Ну, а где ж обсуждавшийся там вызов pfn(TRUE) ?

Кроме того, там была речь о том, что в случае ошибок,
принято проверять GetLastError.

И еще, а откуда уверенность в том, что до логона
смогут работать формы  vs окна.

--
Regards, LVT.


 
AndreiDeJavu   (2007-09-26 14:35) [5]


> Нет там "кода инициализации".Инициализацию карты осуществляет
> драйвер режима ядра, стартующий намного раньше.

Согласен, неправильная формулировка.

> Ну, а где ж обсуждавшийся там вызов pfn(TRUE) ?Кроме того,
>  там была речь о том, что в случае ошибок,принято проверять
> GetLastError.И еще, а откуда уверенность в том, что до логонасмогут
> работать формы  vs окна.


Формы у меня нормально работают, я написал обертку для  WlxLoggedOutSAS, там то формы и создаются... еще до окна авторизации. А ошибок то и нет, потому я и не могу GetLastError использовать,- когда пользователь авторизован, процедура работает, а до авторизации- нет.
Что касается pfn(TRUE), то не знаю как это можно перевести на Дельфи...((


 
Сергей М. ©   (2007-09-26 14:41) [6]


> я и не могу GetLastError использовать


Религия не позволяет ?


> не знаю как это можно перевести на Дельфи


type
 TWinmmLogon = procedure(Value: Boolean); stdcall;

var
 WinmmLogon: TWinmmLogon;

..
WinmmLogon := GetProcAddress(hDll, "WinmmLogon");
..
WinmmLogon(True);


 
Leonid Troyanovsky ©   (2007-09-26 14:52) [7]


> AndreiDeJavu   (26.09.07 14:35) [5]

> Что касается pfn(TRUE), то не знаю как это можно перевести
> на Дельфи...((

Ну, я тоже не знаю, бо не знаю как выглядит ее прототип даже на C.
Т.е., что имелось ввиду под pfWinmmLogon.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2007-09-26 14:57) [8]


> Сергей М. ©   (26.09.07 14:41) [6]

>  TWinmmLogon = procedure(Value: Boolean); stdcall;

Сам сочинил? :)

Во-первых, скорее всего, Longbool.
Во-вторых, скорее всего, function(Value: Longbool): Longbool.
Ну, а на счет stdcall я просто не уверен.

--
Regards, LVT.


 
Сергей М. ©   (2007-09-26 15:05) [9]


> Leonid Troyanovsky ©   (26.09.07 14:57) [8]


Конечно сам)

Оно мне надо - искать готовую декларацию ?


> скорее всего, Longbool


По барабану.
Boolean тоже сойдет, ибо компилятору указана конвенция.


> скорее всего, function(Value: Longbool): Longbool.


Мож и функция, мне пофих - я перевел "в лоб" то что там написано.


> на счет stdcall я просто не уверен.


Я тоже. Хотя и наиболее вероятно.
Да и подправить конвенцию никогда не поздно.


 
AndreiDeJavu   (2007-09-26 15:13) [10]


> Сергей М. ©   (26.09.07 14:41) [6]
> > я и не могу GetLastError использоватьРелигия не позволяет
> ?> не знаю как это можно перевести на Дельфиtype  TWinmmLogon
> = procedure(Value: Boolean); stdcall;var  WinmmLogon: TWinmmLogon;
> ..WinmmLogon := GetProcAddress(hDll, "WinmmLogon");..WinmmLogon(True);
>

Сергей, я использовал GetLastError(), но она возвращает 0, поэтому и не использую.=) За код спасибо большое, сработало, звук микрон хватает и пишет))).


 
Leonid Troyanovsky ©   (2007-09-26 15:25) [11]


> AndreiDeJavu   (26.09.07 15:13) [10]

> Сергей, я использовал GetLastError

Обычно ее используют в сочетании с результатом,
возвращаемым вызываемой функцией.
И если он не успешен, в соответствии с документацией,
то вызывают GetLastError и анализируют код ошибки.

Т.е., хорошо бы, все же, найти описание WinmmLogon.

--
Regards, LVT.


 
Сергей М. ©   (2007-09-26 15:39) [12]


> звук микрон хватает и пишет


Ты хочешь сказать, что "хватает и пишет" уже "по месту", т.е. до входа юзера ?


 
AndreiDeJavu   (2007-09-26 15:41) [13]


> Leonid Troyanovsky ©   (26.09.07 15:25) [11]



> Т.е., хорошо бы, все же, найти описание WinmmLogon.


Я не нашел ее описания даже в MSDN, единственное, что приходит на ум,- дизассемблировать  winmm.dll...


 
AndreiDeJavu   (2007-09-26 15:42) [14]


> Ты хочешь сказать, что "хватает и пишет" уже "по месту",
>  т.е. до входа юзера ?

Да, именно до входа юзера, после включения компа. =)


 
Leonid Troyanovsky ©   (2007-09-26 15:48) [15]


> AndreiDeJavu   (26.09.07 15:41) [13]

> Я не нашел ее описания даже в MSDN, единственное, что приходит
> на ум,- дизассемблировать  winmm.dll...

Видимо, есть отдельно распространяемый SDK.
Начать лучше с google.com, IMHO.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2008.06.08;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
4-1190818620
H@kker
2007-09-26 18:57
2008.06.08
Нужно добавит новый пункт в системное контекстное меню...


15-1209129042
Ega23
2008-04-25 17:10
2008.06.08
А может так спонтанно на Чистые пруды?


2-1211024078
Шестаков Антон
2008-05-17 15:34
2008.06.08
Заполнение Мемо


9-1170551643
TGLCube
2007-02-04 04:14
2008.06.08
Как повернуть матрицу вокруг заданного вектора на определённый


15-1208931582
ILR
2008-04-23 10:19
2008.06.08
Помогите с задачей