1 (изменено: Clannad5, 2022-09-14 16:57:10)

Тема: AHK: воспроизведение звукого файла с помощью PlaySound в Ahk_H v2

Здравствуйте!

Возможно это не совсем подходящий форум по вопросам AHK V2, но всё же вопрос идёт с проблемой вызова Playsound, может быть знающие смогут мне объяснить, почему функция отказывается принимать мой файл, который я поместил в буфер?

Это метод воспроизведения для AHK_L:


fileread,sound,*c C:\Windows\Media\notify.wav
PlaySound(sound)
Sleep, 1000
ExitApp

PlaySound(sound) {
	DllCall("winmm.dll\PlaySound","uint",&sound,"uint",0,"uint",0x4)
	}

В AHK_L Функция PlaySound спокойно принимает буфер данные, используя на конце код 0x4.

Используя AHK_H V2, я сталкиваюсь с некоторыми проблемами:


sound := fileread("C:\Windows\Media\notify.wav", "RAW")
PlaySound(sound)
Sleep 1000
ExitApp

PlaySound(sound) {
	DllCall("winmm.dll\PlaySound","uint",&sound,"uint",0,"uint",0x4)
	}

Мне пишет:

https://i.imgur.com/fl5YN57.png

Что же я делаю не так?Возможно AHK_H V2 передаёт параметры неправильно?Или я делаю что-то не так?

UPD:

На зарубежном форуме мне помогли найти ответ:


Sound := FileRead("C:\1.wav", "RAW")
PlaySound(Sound)
Sleep 1000

PlaySound( Sound ) {
	Return DllCall("winmm.dll\PlaySound" ( 1 ? "W" : "A" ), "Ptr", Sound, "UInt", 0
	, "UInt", ((SND_MEMORY:=0x4)|(SND_NODEFAULT:=0x2)))
	}

Вопрос решён.

2

Re: AHK: воспроизведение звукого файла с помощью PlaySound в Ahk_H v2

А что означает ( 1 ? "W" : "A" ) и зачем оно нужно?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Clannad5, 2022-09-14 17:34:11)

Re: AHK: воспроизведение звукого файла с помощью PlaySound в Ahk_H v2

teadrinker

Честно без понятия, вроде там учитывается кодировка, не буду врать и придумывать.
Однако я покопался еще и нашел метод, который уже встроен в AHK v2 "GetCommandLine", который вызывает методы WinApi.

Сократил по итогу код в две строчки:


Sound := FileRead("C:\1.wav", "RAW")
PlaySound(Sound, 0, 0x4|0x2)

4

Re: AHK: воспроизведение звукого файла с помощью PlaySound в Ahk_H v2

А что за метод GetCommandLine? Я в справке такого не нашёл.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: воспроизведение звукого файла с помощью PlaySound в Ahk_H v2

teadrinker
https://hotkeyit.github.io/v2/docs/commands/WinApi.htm

6

Re: AHK: воспроизведение звукого файла с помощью PlaySound в Ahk_H v2

Хм, а что DllCall в v2 не работает?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

7 (изменено: Clannad5, 2022-09-14 22:44:08)

Re: AHK: воспроизведение звукого файла с помощью PlaySound в Ahk_H v2

serzh82saratov
Почему же, работает.
Я выше пример готовый приводил:


Sound := FileRead("C:\1.wav", "RAW")
PlaySound(Sound)
Sleep 1000

PlaySound( Sound ) {
	Return DllCall("winmm.dll\PlaySound" ( 1 ? "W" : "A" ), "Ptr", Sound, "UInt", 0
	, "UInt", ((SND_MEMORY:=0x4)|(SND_NODEFAULT:=0x2)))
	}

8

Re: AHK: воспроизведение звукого файла с помощью PlaySound в Ahk_H v2

Не знал про эту фичу, забавно. Но GetCommandLine — это не название какого-то метода AHK, это просто пример вызова winapi-функции, которая как раз так и называется. Но это, по-моему, только в AHK_H, в обычном такого нет.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: воспроизведение звукого файла с помощью PlaySound в Ahk_H v2

Clannad5 пишет:

вроде там учитывается кодировка

Ничего там не учитывается.
Всегда будет "W".

10

Re: AHK: воспроизведение звукого файла с помощью PlaySound в Ahk_H v2

Malcev
Спасибо за уточнение.