funçao tone() com harbour
Moderador: Moderadores
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
funçao tone() com harbour
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?
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?
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
funçao tone() com harbour
Tente:
Ou então tens que achar uma função no harbour, equivalente ao SNDPLAYSOUND() do FiveWin.
abs,
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
abs,
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
funçao tone() com harbour
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"
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
funçao tone() com harbour
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:
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.
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
Pra mim que não mexo com linguagem C, deste outro jeito entendo melhor o fonte.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
funçao tone() com harbour
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
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
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
funçao tone() com harbour
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.
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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
funçao tone() com harbour
Senhores, eu acho que em windows 7 ou superior, somente o PLAYSOUND() funciona.
http://msdn.microsoft.com/en-us/library ... s.85).aspx
Abs.
http://msdn.microsoft.com/en-us/library ... s.85).aspx
Abs.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
funçao tone() com harbour
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.
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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
funçao tone() com harbour
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. )
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
funçao tone() com harbour
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):
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 NilAbraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
funçao tone() com harbour
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.
abs,
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
-
Euclides
- Usuário Nível 3

- Mensagens: 154
- Registrado em: 12 Mai 2007 14:07
- Localização: São Paulo, Capital
funçao tone() com harbour
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
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