.NET и WIN32 API
необходимо импортировать ф-цию WIN32 в управляемый код.
К примеру пусть это будет ф-ция
С первыми двумя параметрами все понятно, но вот третий параметр(флаг) вызывает некоторое недоумение...
[quote="Выдержка из MSDN"]
fdwSound
Flags for playing the sound. The following values are defined.
Value Meaning
SND_APPLICATION The sound is played using an application-specific association.
SND_ALIAS The pszSound parameter is a system-event alias in the registry or the WIN.INI file. Do not use with either SND_FILENAME or SND_RESOURCE.
SND_ALIAS_ID The pszSound parameter is a predefined sound identifier.
...................................................................................................
[/quote]
Как мне узанать какое значение принимает каждый из флагов, а если ипользовать несколько тогда что?
Есть ли где-нибудь документация по значению параметров API ф-ций. В МСДНе про это ни слова не сказано.
Пока писал пост пришло решение - написать свою ДЛЛ на С, в которой буду вызывать API ф-ции с известными мне параметрами. Вот интересно есть ли другой способ?
Using the PlaySound Function with Waveform Audio Files
PlaySound (TEXT("\\SOUNDS\\BELLS.WAV"), NULL, SND_SYNC | SND_NODEFAULT);
///////////////////
Using PlaySound with Registry-Specified Sounds
The PlaySound function also plays sounds that are referred to by a key name in the registry. Using this capability, you can let users assign selected or custom sounds to system alerts and warnings. Sounds that are associated with system alerts and warnings are called sound events.
To play a sound event
Call PlaySound, and set the pszSound parameter so that pzSound points to a string that contains the name of the registry entry that identifies the sound.
The following code example shows how to use PlaySound to play a sound event.
PlaySound (TEXT("MouseClick"), NULL, SND_SYNC);
///////////////
Using PlaySound with a Resource Identifier
The following code example shows how to use the PlaySound function to play a wave resource sound.
PlaySound (TEXT("soundName"), hInst, SND_RESOURCE | SND_ASYNC);
In contrast, the following code example shows how to use the sndPlaySound function to play a wave resource sound.
{
BOOL bRtn;
LPTSTR lpRes;
HANDLE hResInfo, hRes;
// Find the wave resource.
hResInfo = FindResource (hInst, lpName, "WAVE");
if (hResInfo == NULL)
return FALSE;
// Load the wave resource.
hRes = LoadResource (hInst, hResInfo);
if (hRes == NULL)
return FALSE;
// Lock the wave resource and play it.
lpRes = LockResource (hRes);
if (lpRes != NULL)
{
bRtn = sndPlaySound (lpRes, SND_MEMORY | SND_SYNC | SND_NODEFAULT);
}
else
bRtn = 0;
return bRtn;
}
По моему все предельно ясно..
Я могу реализовать. Как я писал раньше:
Пока писал пост пришло решение - написать свою ДЛЛ на С, в которой буду вызывать API ф-ции с известными мне параметрами.
Но мне интересно есть ли более человеческий способ, неужели мелкософт это не предусмотрело?
Ведь флаги в С это DWORD - значит должно принимать значения 1,2,3, и т.д. Интересно какое именно соотвествует данному флагу?
Есть ли документация по всем флагам API ф-ций?
Перед тем как создать эту тему я так и сделал. Воспользовался ф-цией MS VS 2005 Quick Find(Ctrl + F). Данный поиск мне ничего не дал. Позже я решил посмотреть какие include включает в себя файл mmsystem.h, на это мне поисковик опять ничего не дал, тогда я удивился и посмотрел повнимательнее на настройки поиска и увидел что стоит опция Look in = Current project. В этом то и была моя ошибка - проклятая невнимательность. Все всем спасибо. Извиняйте за мою невнимательность.:D
необходимо импортировать ф-цию WIN32 в управляемый код.
К примеру пусть это будет ф-ция
С первыми двумя параметрами все понятно, но вот третий параметр(флаг) вызывает некоторое недоумение...
Объявления:
public enum PlaySoundFlags : int {
SND_SYNC = 0x0000, /* play synchronously (default) */
SND_ASYNC = 0x0001, /* play asynchronously */
SND_NODEFAULT = 0x0002, /* silence (!default) if sound not found */
SND_MEMORY = 0x0004, /* pszSound points to a memory file */
SND_LOOP = 0x0008, /* loop the sound until next sndPlaySound */
SND_NOSTOP = 0x0010 , /* don't stop any currently playing sound */
SND_NOWAIT = 0x00002000L, /* don't wait if the driver is busy */
SND_ALIAS = 0x00010000L, /* name is a registry alias */
SND_ALIAS_ID = 0x00110000L, /* alias is a predefined ID */
SND_FILENAME = 0x00020000L, /* name is file name */
SND_RESOURCE = 0x00040004L, /* name is resource name or atom */
SND_PURGE = 0x0040, /* purge non-static events for task */
SND_APPLICATION = 0x0080 /* look for application specific association */
}
[System.Runtime.InteropServices.DllImport("winmm.DLL", EntryPoint = "PlaySound", SetLastError = true)]
public static extern bool PlaySound(string szSound, System.IntPtr hMod, PlaySoundFlags flags);
К элементам перечисления PlaySoundFlags употребимы побитовые операции.
З.Ы. Значения и комменты для PlaySoundFlags сперты из Mmsystem.h в BDS2006