Função C

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Função C

Mensagem por MARCELOG »

Alguém poderia me dar uma ajuda e converter essa função da api do Windows para o xHarbour.

Sempre me confundo com os hb_parc... da vida.

Obrigado.

MarceloG

UINT SendInput( UINT nInputs,
LPINPUT pInputs,
int cbSize
);
Parameters
nInputs
[in] Number of structures in the pInputs array.
pInputs
[in] Pointer to an array of INPUT structures. Each structure represents an event to be inserted into the keyboard or mouse input stream.
cbSize
[in] Specifies the size, in bytes, of an INPUT structure. If cbSize is not the size of an INPUT structure, the function fails.
Água mole em pedra dura tanto bate que até espirra!
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Você só postou o protótipo da função e sua documentação. Faltou o código.
[]'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!
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Re: Função C

Mensagem por MARCELOG »

A função é da API do Windows.
Quero fazer o pressionamento do botão direito do mouse.
Segundo informações obtidas pela internet a mouse_event() deve ser substituída por SendInput() para compatibilidade geral, inclusive com o Vista.
Assim, o protótipo ficaria +/- assim:

HB_FUNC(SENDINPUT)
{
SendInput(hb_par...(1),hb_par...(2),alguma coisa aqui).
}

A zebra é que não conheço os tipos dos dados e não tem documentação dos hb_par... para tentar fazer eu mesmo a função.

UINT SendInput( UINT nInputs,
LPINPUT pInputs,
int cbSize)

MarceloG
Água mole em pedra dura tanto bate que até espirra!
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Agora entendi. Infelizmente não conheço as funções de leitura de parâmetros. Mas pelo que pude notar, me parece que essas funções seguem os mesmos padrões do Clipper quanto aos seus nomes. Então, se você ler o manual do Clipper (Technical Reference), creio que será apenas o caso de acrescentar o sufixo "hb_". Ou, se preferir, pode ver se há alguma descrição dessas funções no manual de referência do XHarbour, que há no meu site. Se nada disso der certo, uma outra opção é ler alguns fontes do XHarbour e tentar "sacar" alguma coisa de lá.
[]'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!
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Re: Função C

Mensagem por MARCELOG »

Resorvi, tem base?!

Código: Selecionar todos

#pragma begindump

#include <shlobj.h> 
#include <windows.h> 
#include "hbapi.h"

HB_FUNC( PRESSKEY ) 

/* 
Testa a tecla e pressiona 
Recebe o valor da tecla
*/ 

{ 

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), 
0, 
KEYEVENTF_EXTENDEDKEY | 0, 
0 ); 

keybd_event( hb_parni(1), 
45, 
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 
0 ); 
} 

} 


HB_FUNC( PRESSMOUSE )

/* 
Simula pressionamento dos botäes do mouse
Recebe 
.T. - Esquerdo
.F. - Direito
*/ 

{ 
 if ( hb_parl(1) )

 {
  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) ;
  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) ;

 }

 else

 {

  mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0) ;
  mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0) ;

 }

}

#pragma enddump


MarceloG

Ps: é do jeito antigo, mas e daí?
Editado pela última vez por Pablo César em 24 Mai 2012 20:02, 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
Água mole em pedra dura tanto bate que até espirra!
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

MARCELOG escreveu:Ps: é do jeito antigo, mas e daí?
Se serviu ao propósito, maravilha. :)
[]'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!
Responder