Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];

Вниз

Как инициализировать звуковую карту до загрузки 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.074 c
15-1208941436
Гость1468
2008-04-23 13:03
2008.06.08
Нанесение идентефикационной информации на документ. Как?


2-1210921200
Sergey2
2008-05-16 11:00
2008.06.08
Images в ComboBox


15-1209268074
sauron
2008-04-27 07:47
2008.06.08
Разработчикам...


8-1181824621
Manur
2007-06-14 16:37
2008.06.08
Обои


2-1211108091
assassin8899
2008-05-18 14:54
2008.06.08
OpenDialog





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский