![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как инициализировать звуковую карту до загрузки Windows [D7, WinXP]
AndreiDeJavu © (2007-09-26 14:04:00)Доброго времени суток!
Работаю над проектом голосовой авторизации, нашел на 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;
Leonid Troyanovsky (2007-09-26 15:48:00) [1]
> AndreiDeJavu (26.09.07 15:41) [13]
> Я не нашел ее описания даже в MSDN, единственное, что приходит
> на ум,- дизассемблировать winmm.dll...
Видимо, есть отдельно распространяемый SDK.
Начать лучше с google.com, IMHO.
--
Regards, LVT.
AndreiDeJavu (2007-09-26 15:42:00) [2]
> Ты хочешь сказать, что "хватает и пишет" уже "по месту",
> т.е. до входа юзера ?
Да, именно до входа юзера, после включения компа. =)
AndreiDeJavu (2007-09-26 15:41:00) [3]
> Leonid Troyanovsky © (26.09.07 15:25) [11]
> Т.е., хорошо бы, все же, найти описание WinmmLogon.
Я не нашел ее описания даже в MSDN, единственное, что приходит на ум,- дизассемблировать winmm.dll...
Сергей М. (2007-09-26 15:39:00) [4]
> звук микрон хватает и пишет
Ты хочешь сказать, что "хватает и пишет" уже "по месту", т.е. довхода юзера ?
Leonid Troyanovsky (2007-09-26 15:25:00) [5]
> AndreiDeJavu (26.09.07 15:13) [10]
> Сергей, я использовал GetLastError
Обычно ее используют в сочетании с результатом,
возвращаемым вызываемой функцией.
И если он не успешен, в соответствии с документацией,
то вызывают GetLastError и анализируют код ошибки.
Т.е., хорошо бы, все же, найти описание WinmmLogon.
--
Regards, LVT.
AndreiDeJavu (2007-09-26 15:13:00) [6]
> Сергей М. © (26.09.07 14:41) [6]
> > я и не могу GetLastError использоватьРелигия не позволяет
> ?> не знаю как это можно перевести на Дельфиtype TWinmmLogon
> = procedure(Value: Boolean); stdcall;var WinmmLogon: TWinmmLogon;
> ..WinmmLogon := GetProcAddress(hDll, 'WinmmLogon');..WinmmLogon(True);
>
Сергей, я использовал GetLastError(), но она возвращает 0, поэтому и не использую.=) За код спасибо большое, сработало, звук микрон хватает и пишет))).
Сергей М. (2007-09-26 15:05:00) [7]
> Leonid Troyanovsky © (26.09.07 14:57) [8]
Конечно сам)
Оно мне надо - искать готовую декларацию ?
> скорее всего, Longbool
По барабану.
Boolean тоже сойдет, ибо компилятору указана конвенция.
> скорее всего, function(Value: Longbool): Longbool.
Мож и функция, мне пофих - я перевел "в лоб" то что там написано.
> на счет stdcall я просто не уверен.
Я тоже. Хотя и наиболее вероятно.
Да и подправить конвенцию никогда не поздно.
Leonid Troyanovsky (2007-09-26 14:57:00) [8]
> Сергей М. © (26.09.07 14:41) [6]
> TWinmmLogon = procedure(Value: Boolean); stdcall;
Сам сочинил? :)
Во-первых, скорее всего, Longbool.
Во-вторых, скорее всего, function(Value: Longbool): Longbool.
Ну, а на счет stdcall я просто не уверен.
--
Regards, LVT.
Leonid Troyanovsky (2007-09-26 14:52:00) [9]
> AndreiDeJavu (26.09.07 14:35) [5]
> Что касается pfn(TRUE), то не знаю как это можно перевести
> на Дельфи...((
Ну, я тоже не знаю, бо не знаю как выглядит ее прототип даже на C.
Т.е., что имелось ввиду под pfWinmmLogon.
--
Regards, LVT.
Сергей М. (2007-09-26 14:41:00) [10]
> я и не могу GetLastError использовать
Религия не позволяет ?
> не знаю как это можно перевести на Дельфи
type
TWinmmLogon = procedure(Value: Boolean); stdcall;
var
WinmmLogon: TWinmmLogon;
..
WinmmLogon := GetProcAddress(hDll, 'WinmmLogon');
..
WinmmLogon(True);
AndreiDeJavu (2007-09-26 14:35:00) [11]
> Нет там "кода инициализации".Инициализацию карты осуществляет
> драйвер режима ядра, стартующий намного раньше.
Согласен, неправильная формулировка.
> Ну, а где ж обсуждавшийся там вызов pfn(TRUE) ?Кроме того,
> там была речь о том, что в случае ошибок,принято проверять
> GetLastError.И еще, а откуда уверенность в том, что до логонасмогут
> работать формы vs окна.
Формы у меня нормально работают, я написал обертку для WlxLoggedOutSAS, там то формы и создаются... еще до окна авторизации. А ошибок то и нет, потому я и не могу GetLastError использовать,- когда пользователь авторизован, процедура работает, а до авторизации- нет.
Что касается pfn(TRUE), то не знаю как это можно перевести на Дельфи...((
Leonid Troyanovsky (2007-09-26 14:24:00) [12]
> AndreiDeJavu (26.09.07 14:04)
> pPointer:=GetProcAddress(hDll, 'WinmmLogon');
Ну, а где ж обсуждавшийся там вызов pfn(TRUE) ?
Кроме того, там была речь о том, что в случае ошибок,
принято проверять GetLastError.
И еще, а откуда уверенность в том, что до логона
смогут работать формы vs окна.
--
Regards, LVT.
Сергей М. (2007-09-26 14:20:00) [13]
> в котором есть фрагмент кода, необходимый мне для инициализации
> звуковой карты
Нет там "кода инициализации".
Инициализацию карты осуществляет драйвер режима ядра, стартующий намного раньше.
Сергей М. (2007-09-26 14:16:00) [14]А если ноги растут отсюда
http://rsdn.ru/Forum/message/1207889.flat.aspx
то это вовсе не " дозагрузки Windows")
Сергей М. (2007-09-26 14:12:00) [15]
> Как инициализировать звуковую карту до загрузки Windows
Поместив соответсвующий код, например, в BIOS POST - это и будет истинным " дозагрузки Windows".
Только накой ляд это может понадобиться, если в ходе загрузки Windows все равно займется этим по-новой ?