Página 1 de 1

Função C

Enviado: 25 Jun 2008 18:43
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.

Enviado: 25 Jun 2008 19:10
por Maligno
Você só postou o protótipo da função e sua documentação. Faltou o código.

Re: Função C

Enviado: 26 Jun 2008 08:49
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

Enviado: 26 Jun 2008 11:22
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á.

Re: Função C

Enviado: 26 Jun 2008 13:35
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í?

Enviado: 26 Jun 2008 16:15
por Maligno
MARCELOG escreveu:Ps: é do jeito antigo, mas e daí?
Se serviu ao propósito, maravilha. :)