Caps Lock Desligado
Moderador: Moderadores
Em tempo: acabei de confirmar pelo fonte da função KSetCaps(). Ela realmente seta um byte no endereço 40:17 (BIOS data area) para alterar o estado das teclas Caps, Num, etc. Portanto, em kernel NT pode esquecer. Mas nos demais SOs, funciona.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Interessante,
Mas apenas complementando...
Num é nada de outro mundo ligar uma função no memoedit para só ecoar caracteres em maiúsculo, da pra fazr isso aí sim, e com tranquilidade.
Falou!
Mas apenas complementando...
Num é nada de outro mundo ligar uma função no memoedit para só ecoar caracteres em maiúsculo, da pra fazr isso aí sim, e com tranquilidade.
Falou!
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
Também olhei o fonte da função ksetcaps(), e vi que ele usa as api´s do windows(r) prá realizar a ativação/ desativação da tecla.
Então, por que não funciona em windows(r) nt?
E a Nanfor, com início FT usa o mesmo esquema!
Tudo bem, vamos fazer dois cheques de trinta (coisa de loira)!
Deixe o usuário editar a vontade, na hora de gravar a informação use um upper(cmemo).
Na próxima vez que abrir o campo, ele vai estar maiúsculo.
Como ele já vai estar maiúsculo, acho difícil o 'cidadão' não ativar o capslock e continuar no padrão.
MarceloG.
Então, por que não funciona em windows(r) nt?
E a Nanfor, com início FT usa o mesmo esquema!
Tudo bem, vamos fazer dois cheques de trinta (coisa de loira)!
Deixe o usuário editar a vontade, na hora de gravar a informação use um upper(cmemo).
Na próxima vez que abrir o campo, ele vai estar maiúsculo.
Como ele já vai estar maiúsculo, acho difícil o 'cidadão' não ativar o capslock e continuar no padrão.
MarceloG.
Água mole em pedra dura tanto bate que até espirra!
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
CapsLock e NumLock
No Windows 95, Windows 98 ou Windows Me, usa-se a função API SetKeyboardState para definir o estado da chave.
Nesse caso KSetCaps(.T.) funciona (não testei).
No Windows NT ou Windows 2000, usa-se a função keybd_event para simular uma tecla pressionada.
Então, criei a função abaixo, por favor testem Windows 95, Windows 98 ou Windows Me.
No XP e NT funcionou legal.
Espero ter ajudado.
MarceloG
Nesse caso KSetCaps(.T.) funciona (não testei).
No Windows NT ou Windows 2000, usa-se a função keybd_event para simular uma tecla pressionada.
Então, criei a função abaixo, por favor testem Windows 95, Windows 98 ou Windows Me.
No XP e NT funcionou legal.
Código: Selecionar todos
FUNCTION MAIN()
CLS
SETCAPSLOCK(.T.)
INKEY(0)
SETCAPSLOCK(.F.)
RETURN
#pragma begindump
#include <shlobj.h>
#include <windows.h>
#include "hbapi.h"
HB_FUNC( SETCAPSLOCK )
{
BYTE keyState[256];
GetKeyboardState((LPBYTE)&keyState);
if( (hb_parnl(1) && (keyState[VK_CAPITAL] & 0)) )
{
keybd_event( VK_CAPITAL,
0x45,
KEYEVENTF_EXTENDEDKEY | 0,
0 );
keybd_event( VK_CAPITAL,
0x45,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);
}
else
{
keybd_event( VK_CAPITAL,
0x45,
KEYEVENTF_EXTENDEDKEY | 0,
0 );
keybd_event( VK_CAPITAL,
0x45,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);
}
}
#pragma enddumpMarceloG
Editado pela última vez por Pablo César em 25 Fev 2013 12:30, em um total de 2 vezes.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Água mole em pedra dura tanto bate que até espirra!
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
NumLock / CapsLock / Scroll Lock
Olá pessoal,
alterei e renomeei a função para funcionar com qualquer tecla.
Espero que ajude.
MarceloG
alterei e renomeei a função para funcionar com qualquer tecla.
Código: Selecionar todos
#define HB_VK_INSERT 0x2D
#define HB_VK_CAPITAL 0x14
#define HB_VK_NUMLOCK 0x90
#define HB_VK_SCROLL 0x91
FUNCTION MAIN()
CLS
PRESSKEY(HB_VK_CAPITAL)
INKEY(0)
PRESSKEY(HB_VK_NUMLOCK)
RETURN
#pragma begindump
#include <shlobj.h>
#include <windows.h>
#include "hbapi.h"
HB_FUNC( PRESSKEY )
/*
testa a tecla e pressiona
*/
{
BYTE keyState[256];
GetKeyboardState((LPBYTE)&keyState);
if (keyState[hb_parni(1)] == 0) // testa se a tecla est ativa
{
// Simula pressionamento
keybd_event( hb_parni(1),
0x45,
KEYEVENTF_EXTENDEDKEY | 0,
0 );
keybd_event( hb_parni(1),
0x45,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0 );
}
}
#pragma enddumpMarceloG
Editado pela última vez por Pablo César em 26 Set 2012 21:03, em um total de 2 vezes.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Água mole em pedra dura tanto bate que até espirra!
Ah, só tinha visto o início do arquivo e não percebi que há uma série de diretivas de teste de sistema que, compila para DOS ou Windows (NT) de forma separada. Portanto, se não funciona pro seu Windows é porque a compilação foi feita para DOS/Win98. Veja lá. É isso. Ao invés de testarem qual o SO rodando pra direcionar pra esta ou aquela solução, eles montaram códigos separados. Como é parte do pré-processamento, logicamente, você só pode ter um ou outro bloco de código.MARCELOG escreveu:Também olhei o fonte da função ksetcaps(), e vi que ele usa as api´s do windows(r) prá realizar a ativação/ desativação da tecla.
Então, por que não funciona em windows(r) nt?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Puxa pessoal, você me fazem sentir um pouco de inveja (inveja benigna... assim que se fala Maligno ?), falo isto pelo alto nível no conhecimento de você, me deixa com muita vontade de poder encontrá-los no eventos em São Paulo (assim espero).
Você faz essa conversão de caracteres para maiusculos (para caracteres acentuados também) na função que controla o memoedit ? Pois você poderia retornar com CHR(8) dar um KEYBOARD <caracter_maiusculo>, daí daria sensação que corrigiria o minusculo por maiusculo e forçaria a tudo ser maiusculo. Isso não funcionaria em xHarbour ?Grings escreveu:Luciano, o motivo é que uso memoedit() ...//...O problema é que durante a edição aparece minúsculo.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
danielrxavier
- Usuário Nível 1

- Mensagens: 4
- Registrado em: 16 Abr 2007 22:55
usando minigui fiz o seguinte:
funciona, mas a luz do capslock não acende e continua escrevendo em minusculo.

invocado!
Código: Selecionar todos
WHILE .NOT. ISCAPSLOCKACTIVE()
Msg=MsgYesNoCancel ('ATIVE CAPSLOCK',,,,)
if Msg=1
elseif Msg=0
if KSETCAPS(.T.)
msgbox('ativou')
else
msgbox('nao ativou')
endif
else
quit
endif
ENDDOinvocado!
Editado pela última vez por Pablo César em 10 Mai 2012 20:11, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
-
danielrxavier
- Usuário Nível 1

- Mensagens: 4
- Registrado em: 16 Abr 2007 22:55


