|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
Привет! Чтобы юзать под фоксой WinAPI, о фунциях которого можно почитать на MSDN , я постоянно сталкиваюсь с одной проблемой - там описывается функция, и почти всегда для нее есть какие-то флаги, названные зарезервированным "словом", за которыми стоят числа. Когда я буду юзать такую функцию под фоксой, мне необходимо заранее знать их числовые значения, например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: plaintext 1. 2. 3. 4. 5.
Вопрос - где или как можно узнать какие значения стоят за подобными флагами? Может есть ли какой-то ресурс, на той же MSDN или еще где-то? Или можно как-то это через другую функцию выньапи узнать или еще как-то? спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 13:38 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
Если стоит MS VC++ то делаешь поиск в подпапке Include и находишь *.h файл где эта константа объявлена. В данном случае: MMSystem.h ... #define SND_SYNC 0x0000 /* play synchronously (default) */ #define SND_ASYNC 0x0001 /* play asynchronously */ #define SND_NODEFAULT 0x0002 /* silence (!default) if sound not found */ #define SND_MEMORY 0x0004 /* pszSound points to a memory file */ #define SND_LOOP 0x0008 /* loop the sound until next sndPlaySound */ #define SND_NOSTOP 0x0010 /* don't stop any currently playing sound */ ... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 14:03 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
Ну, а поскольку C или его наследники, как правило, не стоят, то ищешь значения констант по интернету. Насколько я знаю, на сайте Microsoft в открытом доступе этих заголовочных файлов нет (файлов, с расширенем из одной буквы h). И значений констант тоже нигде нет. Вот как хочешь, так и ищи... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 14:23 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
ВладимирМНасколько я знаю, на сайте Microsoft в открытом доступе этих заголовочных файлов нет Есть вроде: Windows SDKThe Windows SDK for Windows Server® 2008 and .NET Framework 3.5 provides documentation, samples, header files , libraries, and tools designed to help you develop Windows applications using both native ( Win32 ®) and managed (.NET Framework) technologies. Только там кроме хэдеров еще 1.3 Гб всякой всячины. Если кому надо могу в мыло кинуть. Их 40 Мб (3.5 Мб в архиве) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 14:38 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
Да вот так вот постоянно и рыскаю по инету в поисках, блин. И причем не всегда успешно. 2Dima_T - вышли мне на мыло, пожалуйста :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 19:27 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
Выслал ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2008, 08:38 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
спасибо еще раз. А мож подскажете в догонку как этот сионисткий код на вфп переводится: Код: plaintext 1.
функция | - это BITOR << BITLSHIFT? (DWORD) - наверное STRCONV(cVar,1) (BYTE) - ASC()? т.е. Код: plaintext
а что получается с 0x00010000L? L означает младший разряд, но как в фоксе его получить? типа через MOD(0x00010000,65536)? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2008, 15:13 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
http://]http://www.news2news.com/vfp/w32constants.php?tpl=INTERNET_OPEN_TYPE_D&mode=1 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2008, 15:19 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
CTAC-KOспасибо еще раз. А мож подскажете в догонку как этот сионисткий код на вфп переводится: Код: plaintext 1.
Ты цитируй построчно хотя бы, а не кусками. Если тебе синтаксис не понятен, не запутывай других. Там вроде так написано: MMSystem.h#define SND_ALIAS 0x00010000L /* name is a registry alias */ ... #define SND_ALIAS_START 0 /* alias base */ ... #define sndAlias(ch0, ch1) (SND_ALIAS_START + (DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8)) 0x00010000L = 0x00010000 = 65536 (Буква L - обозначает что делать четырехбайтовое значение) sndAlias(ch0, ch1) - это уже макрос, а не константа. Означает следующее: Код: plaintext
DWORD - четырехбайтовое беззнаковое целое, т.е. остаток от деления на 2^32 BYTE - однобайтовое беззнаковое целое, т.е. остаток от деления на 256 => mod(X, 256) или X % 256 PS Может все-таки тебе уже Си осваивать пора? Писать там DLL-ки и их юзать из фокса. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2008, 15:52 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
Спасибо! Си оно конечно хорошо бы освоить, но если я за 5 лет толком и вфп-то не освоил, что уж про си говорить... по последнему вопросу: дословно получается так: Код: plaintext
Код: plaintext
ведь chr0 и chr1 - строковые, над ними нельзя же просто сделать mod допустим я хочу проиграть звук SYSTEMSTART по его алиас_ИД. Я там проще нашел путь, но хочется добить этот вариант. вот строчки дефайнов Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
Код: plaintext
чему же реально получится равен SND_ALIAS_SYSTEMSTART? У меня выходит 21331, но звука нет :( хотя через упомянутый более простой путь - играет: Код: plaintext
значит 21331 - неправильный результат? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2008, 01:45 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
Почитал про этот PlaySound() в MSDN. Без бутылки не разобраться и самплесов нет. Извращенцы разработчики этой функции Попробуй еше так: Код: plaintext
Код: plaintext
Покажи еще код как ты ее вызываешь из фокса. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2008, 09:39 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
SND_ALIAS_ID = 0x00110000 = 1114112 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2008, 09:44 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
запускаю вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Код: plaintext 1.
а на мсдн таки есть примеры и даже по алиас_ид есть мсднThe following example plays a system-event sound: Код: plaintext
The following example is equivalent to the previous example, but uses an identifier for the system event: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2008, 13:07 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
Aptex news2news спасибо, там тоже все есть (наверное прямо по .Н-файлам ищет), и в большинстве случаев поможет, но, к примеру, по рассматриваемой фукнции с сайта можно только узнать, что Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2008, 13:15 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
Так работает: Код: plaintext 1. 2.
Почему так: первый параметр может быть как четырехбайтовое целое (INTEGER в фоксе), так и указатель на строку (STRING в фоксе) - это четырехбайтовый адрес в памяти, по которому лежит символьная строка заканчивающаяся нулем. Что ждет функция в первом параметре зависит от 3-го. Конструкция X | (Y << 8) при однобайтовых целых X и Y (от 0 до 255) равнозначна X + Y * 2^8 только операции | (побитовое ИЛИ) и << (сдвиг влево на N бит) выполняются процессором гораздо быстрее чем сложение и тем более умножение. Думаю все-таки Си (не С++) тебе надо поизучать, хотя бы в части типы данных, т.к. преобразования там далеко не такие как в фоксе. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2008, 14:07 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2.
На фоксе будет так Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2008, 14:20 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
Немного про тип BYTE: это не тип Си а тип MS Си :) Означает однобайтовое беззнаковое целое. Реально это Сишный тип unsigned char char в Си это тип для хранения кода символа. Т.е. запись 'A' означает код символа 'A' это число 65 и соответственно 'A' + 'A' = 130 а не строка "AA" Типа строка в Си вообще нет, есть указатель на массив символов (LPSTR или LPСSTR) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2008, 14:34 |
|
Подскажите по WinAPI: как или где можно узнать реальные значения флагов?
|
|||
---|---|---|---|
#18+
Dima TТак работает: Код: plaintext 1. 2.
мде, весело получается. в зависимости от того что хочешь проиграть и декларить нада соответственно... ну я, конечно, по алиас_ид не буду играть, ну его нафиг такие сложности, но ценный опыт трансляции кода с Си получил, за что спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2008, 15:31 |
|
|
start [/forum/topic.php?fid=41&msg=35496811&tid=1587366]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 157ms |
0 / 0 |