Página 1 de 2
funçao tone() com harbour
Enviado: 11 Set 2014 07:52
por Nascimento
Amigos tenho uma funçao alarme que usa o beep do computador e pra minha surpresa no harbour nao funciona mais
pelo que observei so no windows 7 no xp ainda beepa há alguma especie de configuraçao no windows 7 que direcione a funçao beep para o pc-speak?
funçao tone() com harbour
Enviado: 11 Set 2014 16:59
por Kapiaba
Tente:
Código: Selecionar todos
#pragma BEGINDUMP
#include <hbapi.h>
#include <windows.h>
HB_FUNC( BEEP )
{
Beep( hb_parnl( 1 ), hb_parnl( 2 ) * 1000 );
}
#pragma ENDDUMP
Ou então tens que achar uma função no harbour, equivalente ao SNDPLAYSOUND() do FiveWin.
abs,
funçao tone() com harbour
Enviado: 11 Set 2014 17:02
por Kapiaba
funçao tone() com harbour
Enviado: 11 Set 2014 17:03
por Kapiaba
Código: Selecionar todos
#include "FiveWin.ch"
function Main()
SndPlaySound( "test.wav" )
return nil
DLL FUNCTION SndPlaySound( cFile AS LPSTR, nType AS WORD ) AS BOOL ;
PASCAL FROM "sndPlaySoundA" LIB "WINMM.DLL"
funçao tone() com harbour
Enviado: 11 Set 2014 17:04
por Kapiaba
funçao tone() com harbour
Enviado: 11 Set 2014 17:06
por Kapiaba
funçao tone() com harbour
Enviado: 11 Set 2014 17:47
por JoséQuintas
Kapiaba.
Sobre a função que postou (Beep), é apenas uma dúvida.
Se usa API do WIndows, tem vantagem em fazer direto em C usando esse #pragma?
Por exemplo, uso pra pegar nome do usuário Windows:
Código: Selecionar todos
FUNCTION wapi_GetUserName()
LOCAL cUserName := Space(255), nSize := 250
CallDll( "GetUserNameA", "advapi32.dll", @cUserName, @nSize )
cUserName := Trim( cUserName )
RETURN cUserName
Imagino que seja pra velocidade, mas na prática não sei mesmo, por isso estou perguntando.
Pra mim que não mexo com linguagem C, deste outro jeito entendo melhor o fonte.
funçao tone() com harbour
Enviado: 11 Set 2014 21:47
por Nascimento
amigo Kapiaba eu preciso que toque n pc-speak ou seja naquele beepzinho que tem na placa mae ou em algumas tem o conectorzinho
com falei a cima no xp ele ainda funciona dando os beeps pelo pc-speak ja no windows 7 como citado nao sai pelo pc-speak sai so pela placa de audio mais com um som estranho pacas , por isso queria ver se tem alguma forma de direcionar pra o pc-speak no windows 7
funçao tone() com harbour
Enviado: 11 Set 2014 22:20
por JoséQuintas
Lembrei agora de uma situação:
Uma cliente e seu notebook. Dependendo do momento, o beep dispara, e vira um som irritante.
Quando vi aquilo, retirei o beep. Isso foi há alguns anos atrás.
Se estiver usando janela gráfica, tem a mensagem de alerta do Windows, que usa o som configurado no Windows.
Dá uma olhada na hbwin, messagebox.
funçao tone() com harbour
Enviado: 12 Set 2014 10:00
por Kapiaba
Senhores, eu acho que em windows 7 ou superior, somente o PLAYSOUND() funciona.
http://msdn.microsoft.com/en-us/library ... s.85).aspx
Abs.
funçao tone() com harbour
Enviado: 12 Set 2014 11:22
por rochinha
Amiguinhos,
Josivan Nascimento,
- Verificou no SETUP se existe alguma opção que desligue o BEEP.
- Verificou na opção de som do Windows qual o esquema padrão de sons e se está ativado.
Tem umas máquinas, não sei se característica delas mas elas permitem que o som da multimídia, musicas, saia pelo auto-falante interno.
Como nosso amigo Kapiaba postou, voce pode usar o SndPlaySound() no Harbour por se tratar do uso direto de API do Windows.
Fiz este uso uma vez em um cliente e coloquei o som de chegada de email do Outlook 2007, para anunciar novos pedidos para o pc do caixa.
José Quintas,
O uso de #pragma permite embutir codigo não xBase diretamente no mesmo. Na compilação o Harbour trata cada caso.Acaba funcionando como um Wrappler, lembrando o método que usámos no Clipper para embutir código ASM e C.
Como eu não manjo de C prefiro usar o mesmo método que voce, mas algumas situações torna-se interessante fazer este uso.
Tanto o Harbour como o xHarbour tem suas funções de chamadas as APIs sendo CallDll() e DllCall(), respectivamente, cada uma com sua finalidade e resultado.
funçao tone() com harbour
Enviado: 12 Set 2014 12:17
por Kapiaba
Senhores, o problema, é que a maioria das novas máquinas(computadores) não vem mais com alto falante interno, por isso, o comando BEEP() não funciona, como é o meu caso, meu PC, Ssomente tem CAIXAS DE SOM e não mais alto falantes.
Código: Selecionar todos
#include "FiveWin.ch"
function Main()
Beep(4)
return nil
FUNCTION Beep(SOM) // assim, nao funciona em windows 7/8
// assim, funciona:
SndPlaySound(".\bdia.Wav", 0 ) // Caixa de Som
SET CONSOLE ON
// alto falante - nao funciona
IF SOM=1 &&Sinal de Abandono
TONE(87.3,2)
TONE(40,7)
ELSEIF SOM=2 &&Abertura
TONE(1300,8)
TONE(1800,5)
ELSEIF SOM=3 &&Erro
TONE(3000,1) ; TONE(2000,1) ; TONE(1000,1)
ELSEIF SOM=4 &&Alerta
TONE(2500,9)
ELSEIF SOM=5 &&Confirma‡ao-I
TONE(5000.1)
TONE(5000.1)
ELSEIF SOM=6 &&Abertura de menus
TONE(5000.1)
ELSEIF SOM=7
TONE(50,4)
TONE(70,4)
TONE(130.8,6)
TONE(196.0,6)
TONE(500, 3)
TONE(900, 2)
TONE(1000)
TONE(1000, 2)
TONE(1500)
TONE(1500, 2)
TONE(1700, 1)
TONE(2000)
TONE(2000, 2)
TONE(2400, 2)
TONE(2800, 2)
TONE(2500, 2)
TONE(2600, 3)
TONE(3000, 2)
ENDIF
SET CONSOLE OFF
RETURN( .T. )
funçao tone() com harbour
Enviado: 12 Set 2014 12:56
por Jairo Maia
Olá Pessoal,
A rigor, eu gostaria de ver algum colega postando uma solução para essa questão, pois mesmo com windows 7 o cliente não precisaria ter caixas de som para eventuais alertas sonoros do sistema. Mas pelo que vejo parece que não tem solução.
Outra coisa: Além de não mais as novas máquinas virem com alto-falantes internos, a partir do Windows 7 as funções de emissão de sons os emitem através da placa de som, e não diretamente pelo alto-falante interno. Lembrando também que no Harbour essas funções: Beep() e Tone() usam a API do Windows. Em OS até o XP, se não é detectado a placa de som (e a API do XP não faz essa comunicação), é emitido no alto-falante interno. Porém, a partir do 7 a API usa somente a placa.
Como o som gerado pela função Tone() é muito ruim no 7, acabei alterando minha função Alertar( nTipo ) para chamar a função
Wapi_MessageBeep( nTipo ). Pelo menos os sons são mais agradáveis (usar a lib hbwin):
Código: Selecionar todos
#define BEEP_OK 0x00000000
#define BEEP_TOQUE 0x00000010
#define BEEP_PERGUNTA 0x00000020
#define BEEP_EXCLAMACAO 0x00000030
#define BEEP_ASTERISCO 0x00000040
#define BEEP_SIMPLES 0xffffffff
Function Main()
Clear Screen
? "BEEP_OK", " => ", Wapi_MessageBeep( BEEP_OK )
Inkey( 1 )
? "BEEP_TOQUE", " => ", Wapi_MessageBeep( BEEP_TOQUE )
Inkey( 1 )
? "BEEP_PERGUNTA", " => ", Wapi_MessageBeep( BEEP_PERGUNTA )
Inkey( 1 )
? "BEEP_EXCLAMACAO", " => ", Wapi_MessageBeep( BEEP_EXCLAMACAO )
Inkey( 1 )
? "BEEP_ASTERISCO", " => ", Wapi_MessageBeep( BEEP_ASTERISCO )
Inkey( 1 )
? "BEEP_SIMPLES", " => ", Wapi_MessageBeep( BEEP_SIMPLES )
Return Nil
funçao tone() com harbour
Enviado: 12 Set 2014 15:26
por Kapiaba
Em fivewin e xHarbour esta função funciona, somente com as caixas de som ligadas.
E o som é o mesmo, não difere um do outro. mas funciona.
Código: Selecionar todos
#include "FiveWin.ch"
#define BEEP_OK 0x00000000
#define BEEP_TOQUE 0x00000010
#define BEEP_PERGUNTA 0x00000020
#define BEEP_EXCLAMACAO 0x00000030
#define BEEP_ASTERISCO 0x00000040
#define BEEP_SIMPLES 0xffffffff
Function Main()
? "BEEP_OK", " => ", MessageBeep( BEEP_OK )
? "BEEP_TOQUE", " => ", MessageBeep( BEEP_TOQUE )
? "BEEP_PERGUNTA", " => ", MessageBeep( BEEP_PERGUNTA )
? "BEEP_EXCLAMACAO", " => ", MessageBeep( BEEP_EXCLAMACAO )
? "BEEP_ASTERISCO", " => ", MessageBeep( BEEP_ASTERISCO )
? "BEEP_SIMPLES", " => ", MessageBeep( BEEP_SIMPLES )
Return Nil
abs,
funçao tone() com harbour
Enviado: 13 Set 2014 09:18
por Euclides
Kapi, o comando MsgBeep() não tem parametro e por isso é que os DEFINES não funcionam.
Na seção FiveWin, coloquei um MsgBeep(n) com parametros.
Para produzir som nos altofalantes ou no "speaker", funciona o seguinte pelo comando DOS.
rundll32 user32.dll,MessageBeep
Isso pode ser executado dentro do programa também.
T+
Euclides