Amiguinhos,
asimões
:*

Moderador: Moderadores
#include "wvtwin.ch"
#include "hbgtinfo.ch"
#include "hbgtwvg.ch"
#include "wvgparts.ch"
#include "dbinfo.ch"
#include "fileio.ch"
#include "hbdyn.ch"
#include "hbthread.ch"
#include "hbhrb.ch"
#include "common.ch"
#include "error.ch"
#include "hboo.ch"
#include "inkey.ch"
#include "hbver.ch"
THREAD STATIC AppSaveScreen := {}
FUNCTION MAIN(cTeste)
LOCAL hLib, nStatus, oElemento
PRIVATE cErro:="", cTituloJanela:=""
PRIVATE cColorPrompt := "W+/B, W+/B*,,,B/W*"
PRIVATE cColorMenu := "W+/B*, W+/B*,,,B/W*"
PRIVATE cColorGet := "W+/B, B+/GR,,,B/W*"
PRIVATE cColorDbData := "W+/B, B+/GR, B/W*, W+/R*"
PRIVATE cCorCaixa := "W+/B"
PRIVATE cCorBorda := "GR+/B"
Try
IF hb_FileExists("DarumaFrameWork.dll")
hLib := hb_LibLoad( "DarumaFrameWork.dll" )
ELSE
cErro :="DLL DarumaFrameWork.dll, ausente"
cTituloJanela:="Modem Daruma"
Break
ENDIF
IF hLib != Nil
hwg_MsgInfo("DLL DarumaFrameWork.dll, carregada com sucesso", "Modem Daruma")
ELSE
cErro :="DLL DarumaFrameWork.dll, não foi carregada"
cTituloJanela:="Modem Daruma"
Break
ENDIF
SetColor(cColorPrompt)
DO WHILE .T.
Caixa(00, 00, 08, 20, "D", , cCorCaixa)
cColor := SetColor()
@ 01, 01 PROMPT "Inicializar Modem " MESSAGE {|| Msg("Iniciar o modem para as demais operações")}
@ 02, 01 PROMPT "Enviar SMS " MESSAGE {|| Msg("Enviar mensagem SMS para um telefone")}
@ 03, 01 PROMPT "Listar SMS Telefone" MESSAGE {|| Msg("Listar SMS de um telefone")}
@ 04, 01 PROMPT "Listar SMS Modem " MESSAGE {|| Msg("Listar todos SMS")}
@ 05, 01 PROMPT "Receber SMS " MESSAGE {|| Msg("Mostrar na tela todos os SMS recebidos não lidos")}
@ 06, 01 PROMPT "Trocar SIM1/SIM2 " MESSAGE {|| Msg("Trocar o chip SIM")}
@ 07, 01 PROMPT "Sair " MESSAGE {|| Msg("Sair")}
*
MENU TO nOpc
SetColor(cColor)
SWITCH nOpc
CASE 1
IniciarModem(hLib)
EXIT
CASE 2
wSave()
EnviarSms(hLib)
WRestore()
EXIT
CASE 3
wSave()
ListarSMSTelefone(hLib)
WRestore()
EXIT
CASE 4
wSave()
ListarSMSModem(hLib)
WRestore()
EXIT
CASE 5
wSave()
MostrarSMSRecebido(hLib)
WRestore()
EXIT
CASE 6
wSave()
TrocarSim(hLib)
WRestore()
EXIT
CASE 7
hb_libFree( hLib )
QUIT
EXIT
ENDSWITCH
ENDDO
Catch
hwg_MsgStop(cErro, cTituloJanela)
hb_libFree( hLib )
Finally
hb_libFree( hLib )
End
RETURN Nil
FUNCTION IniciarModem(hLib)
LOCAL iRetorno
Msg("Aguarde, iniciando o modem.")
iRetorno := hb_dynCall( { "eInicializar_MODEM_DarumaFramework", hLib, HB_DYN_CALLCONV_STDCALL})
IF iRetorno != 1
hwg_MsgStop("Modem iniciado com erro, código de erro "+hb_ntos(iRetorno), "eInicializar_MODEM_DarumaFramework")
ELSE
hwg_MsgInfo("Modem iniciado com sucesso", "eInicializar_MODEM_DarumaFramework")
ENDIF
Msg("")
RETURN iRetorno
FUNCTION EnviarSMS(hLib)
LOCAL iRetorno, cTelefone, cMens1, cMens2
cTelefone:=Space(11)
cMens1 :=Space(70)
cMens2 :=Space(70)
Caixa(09, 00, 14, MaxCol(), , , cCorCaixa, .F.)
SetColor(cColorGet)
@ 10, 01 SAY "Telefone: " GET cTelefone
@ 11, 01 SAY "Mensagem (até 140 caracteres) ex. 2198472XXXX"
@ 12, 01 GET cMens1
@ 13, 01 GET cMens2
READ
IF !Empty(cTelefone) .AND. !Empty(cMens1+cMens2)
Msg("Aguarde, enviando SMS.")
iRetorno := hb_dynCall( { "tEnviarSms_MODEM_DarumaFramework", hLib, HB_DYN_CALLCONV_STDCALL}, cTelefone, cMens1 + cMens2)
IF iRetorno != 1
hwg_MsgStop("Modem com erro, código de erro "+hb_ntos(iRetorno), "tEnviarSms_MODEM_DarumaFramework")
ELSE
hwg_MsgInfo("Mensagem enviada com sucesso", "tEnviarSms_MODEM_DarumaFramework")
ENDIF
Msg("")
ENDIF
RETURN iRetorno
FUNCTION ListarSMSTelefone(hLib)
LOCAL iRetorno, cTelefone:=Space(11)
fErase("ListaSmsTelefone.txt")
Caixa(09, 00, 11, MaxCol(), , , cCorCaixa, .F.)
SetColor(cColorGet)
@ 10, 01 SAY "Telefone: " GET cTelefone
READ
IF !Empty(cTelefone)
//iRetorno := hb_dynCall( { "rListarSMSTelefone_MODEM_DarumaFramework", hLib, HB_DYN_CALLCONV_STDCALL}, '+5521984723382')
Msg("Aguarde, enviando comando.")
iRetorno := hb_dynCall( { "rListarSMSTelefone_MODEM_DarumaFramework", hLib, HB_DYN_CALLCONV_STDCALL}, '+55'+cTelefone)
IF iRetorno != 1
hwg_MsgStop("Modem com erro, código de erro "+hb_ntos(iRetorno), "rListarSMSTelefone_MODEM_DarumaFramework")
ELSE
hwg_MsgInfo("Comando enviado com sucesso", "rListarSMSTelefone_MODEM_DarumaFramework")
ENDIF
Msg("")
IF hb_FileExists("ListaSmsTelefone.txt")
hwg_MsgInfo("Lista de mensagens do telefone "+cTelefone+ " criada com sucesso", "Modem Daruma")
ENDIF
ENDIF
RETURN iRetorno
FUNCTION ListarSMSModem(hLib)
LOCAL iRetorno
fErase("ListaSms.txt")
Msg("Aguarde, enviando comando.")
iRetorno := hb_dynCall( { "rListarSms_MODEM_DarumaFramework", hLib, HB_DYN_CALLCONV_STDCALL})
IF iRetorno != 1
hwg_MsgStop("Modem com erro, código de erro "+hb_ntos(iRetorno), "rListarSms_MODEM_DarumaFramework")
ELSE
hwg_MsgInfo("Comando enviado com sucesso", "rListarSms_MODEM_DarumaFramework")
ENDIF
Msg("")
IF hb_FileExists("ListaSms.txt")
hwg_MsgInfo("Lista de mensagens do modem criada com sucesso", "Modem Daruma")
ENDIF
RETURN iRetorno
FUNCTION MostrarSMSRecebido(hLib)
LOCAL lContinua:=.T., nLineLen:= 77, lWrap:=.T.
Caixa(09, 00, 23, MaxCol(), , , cCorCaixa, .F.)
DO WHILE lContinua
sIndiceSMS := Space(5)
sNumFone := Space(15)
sData := Space(10)
sHora := Space(10)
sMsg := Space(500)
Msg("Aguarde, enviando comando.")
iRetorno := hb_dynCall( { "rReceberSms_MODEM_DarumaFramework", hLib, HB_DYN_CALLCONV_STDCALL}, @sIndiceSMS,;
@sNumFone,;
@sData,;
@sHora,;
@sMsg)
IF iRetorno < 0
hwg_MsgStop("Retorno modem código "+hb_ntos(iRetorno), "rReceberSms_MODEM_DarumaFramework")
lContinua:=.F.
ELSE
Msg("")
IF !Empty(sMsg)
sIndiceSMS:=SubStr(RTrim(sIndiceSMS), 1, Len(RTrim(sIndiceSMS))-1)
sNumFone :=SubStr(RTrim(sNumFone), 1, Len(RTrim(sNumFone))-1)
sData :=SubStr(RTrim(sData), 1, Len(RTrim(sData))-1)
sHora :=SubStr(RTrim(sHora), 1, Len(RTrim(sHora))-1)
sMsg :=SubStr(RTrim(sMsg), 1, Len(RTrim(sMsg))-1)
@ 10, 01 SAY "Indice : " + sIndiceSMS
@ 11, 01 SAY "Telefone : " + sNumFone
@ 12, 01 SAY "Data : " + sData
@ 13, 01 SAY "Hora : " + sHora
@ 14, 01 SAY "Mensagem : "
hb_MemoWrit("sms_recebido.txt", sMsg)
iMax := MLCount( sMsg, nLineLen, 0, .T. )
nLin := 16
FOR i:=1 TO iMax
@ nLin, 01 SAY MemoLine( sMsg, nLineLen, i, 0, .T. )
nLin++
NEXT
hwg_MsgInfo("Comando executado com sucesso", "Modem Daruma")
@ 10, 01 CLEAR TO MaxRow()-1, MaxCol()-1
IF Empty(sIndiceSMS)
EXIT
ENDIF
ELSE
EXIT
ENDIF
ENDIF
ENDDO
RETURN iRetorno
FUNCTION TrocarSim(hLib)
LOCAL iRetorno, cSIM:=Space(4)
Caixa(09, 00, 11, MaxCol(), , , cCorCaixa, .F.)
SetColor(cColorGet)
@ 10, 00 SAY "Informe SIM1 ou SIM2: " GET cSIM PICTURE "@!" VALID cSIM $ "SIM1, SIM2"
READ
IF !Empty(cSIM)
iRetorno := hb_dynCall( { "regBandejaInicio_MODEM_DarumaFramework", hLib, HB_DYN_CALLCONV_STDCALL}, cSIM)
IF iRetorno != 1
hwg_MsgStop("Modem com erro, código de erro "+hb_ntos(iRetorno), "regBandejaInicio_MODEM_DarumaFramework")
ENDIF
ENDIF
RETURN iRetorno
FUNCTION Caixa(nLinI, nColI, nLinF, nColF, cTipo, cCorBox, cCorWin, lSombra, lClear)
hb_Default(@cTipo, "")
hb_Default(@cCorBox, "GR+/B")
hb_Default(@cCorWin, "GR+/B")
hb_Default(@lSombra, .T.)
hb_Default(@lClear, .F.)
IF cTipo = "D"
@ nLinI, nColI TO nLinF, nColF DOUBLE COLOR cCorBox
ELSE
@ nLinI, nColI TO nLinF, nColF COLOR cCorBox
ENDIF
IF lClear
ClearWin(nLinI+1, nColI+1, nLinF-1, nColF-1, cCorWin)
ENDIF
ColorWin(nLinI+1, nColI+1, nLinF-1, nColF-1, cCorWin)
RETURN Nil
FUNCTION Msg(cMsg)
hb_Default(@cMsg, "")
IF !Empty(cMsg)
@ MaxRow(), 00 SAY PADC(cMsg, MaxCol()+1) COLOR "W+/B*"
ELSE
@ MaxRow(), 00 SAY PADC("", MaxCol()+1) COLOR "W+/B*"
ENDIF
RETURN .T.
INIT FUNCTION AppSetup()
ANNOUNCE hwg_ErrSys
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST HB_CODEPAGE_PTISO
HB_LANGSELECT("PT")
HB_CDPSELECT( "PT850" )
HB_CDPSELECT( "PTISO" )
REQUEST DBFNTX
REQUEST DBFCDX
RddSetDefault("DBFCDX")
SET TYPEAHEAD TO 0
SET INTENSITY ON
SET SCOREBOARD OFF
SET DELETED ON
SET SAFETY OFF
SET DATE ANSI
SET ESCAPE ON
SET DATE FORMAT "DD/MM/YY"
SET DELIMITERS TO
SET EXCLUSIVE OFF
SET WRAP ON
SET EPOCH TO 1920
SET OPTIMIZE ON
SET AUTOPEN ON //OFF
SET DBFLOCKSCHEME TO DB_DBFLOCK_CLIPPER
SET MESSAGE TO 24 CENTER
Set( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE )
hb_gtReload( "WVT" )
GtSetupPalette()
SetColor("W+/B")
CLS
IniciaJanela()
RETURN Nil
FUNCTION GtSetupPalette
LOCAL aPaletteRgb, aPalette, nCont
aPalette := { ;
wapi_Rgb( 30, 30, 30 ), ; // 0 N Black Preto New Form Font Color
wapi_Rgb( 0, 0, 140 ), ; // 1 B Blue Azul 170
wapi_Rgb( 54, 66, 6 ), ; // 2 G Green Verde
wapi_Rgb( 0, 133, 133 ), ; // 3 BG Cyan Azul Celeste Title and Selected BackGround
wapi_Rgb( 150, 0, 0 ), ; // 4 R Red Vermelho
wapi_Rgb( 133, 0, 133 ), ; // 5 RB Magenta Rosa
wapi_Rgb( 255, 255, 0 ), ; // 6 GR Brown Marrom
wapi_Rgb( 211, 237, 250 ), ; // 7 W White Branco
wapi_Rgb( 42, 42, 42 ), ; // 8 N+ Gray Cinza
wapi_Rgb( 0, 114, 198 ), ; // 9 B+ +Blue Azul Claro
wapi_Rgb( 42, 42, 42 ), ; // 10 G+ +Green Verde Claro // 0,96,64
wapi_Rgb( 132, 150, 173 ), ; // 11 BG+ +Cyan Azul Celeste Claro
wapi_Rgb( 248, 0, 38 ), ; // 12 R+ +Red Vermelho Claro Alert
wapi_Rgb( 64, 0, 64 ), ; // 13 RB+ +Magenta Rosa Claro
wapi_Rgb( 216, 152, 0 ), ; // 14 GR+ Yellow Amarelo
wapi_Rgb( 255, 255, 255 ) } // 15 W+ +White Branco Claro New Get and Selected Font Color
hb_gtInfo( HB_GTI_PALETTE, aPalette )
RETURN Nil
FUNCTION WSave()
Aadd( AppSaveScreen, SaveScreen(0, 0, MaxRow() ,MaxCol()) )
RETURN NIL
FUNCTION WRestore()
IF Len( AppSaveScreen ) > 0
RestScreen(0, 0, MaxRow(), MaxCol(), ATail( AppSaveScreen ) )
aSize( AppSaveScreen, Len( AppSaveScreen ) - 1 )
ENDIF
RETURN NIL
FUNCTION IniciaJanela()
cTituloJanela:="Teste Envio SMS Com Modem Daruma Min210B USB"
HB_gtInfo(HB_GTI_FONTNAME, "Lucida Console")
HB_gtInfo(HB_GTI_WINTITLE, cTituloJanela)
HB_gtInfo(HB_GTI_ICONFILE, "P:\GERAL\HARBOUR\HARB_WIN.ICO" )
HB_gtInfo(HB_GTI_CLOSABLE, .F. )
HB_gtInfo(HB_GTI_ISGRAPHIC, .T. )
HB_gtInfo(HB_GTI_STDERRCON, .T. )
HB_gtInfo(HB_GTI_COMPATBUFFER, .T. )
HB_gtInfo(HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED )
HB_gtInfo(HB_GTI_SPEC, HB_GTS_SHOWWINDOW, SW_NORMAL )
HB_GtInfo(HB_GTI_MAXIMIZED, .T. )
RETURN Nil
FUNCTION HB_GTSYS()
REQUEST HB_GT_WVT_DEFAULT
REQUEST HB_GT_WVG
REQUEST HB_GT_WGU
REQUEST HB_GT_WVT
RETURN Nil
#pragma BEGINDUMP
#include <windows.h>
#include <windef.h>
#include <tlhelp32.h>
#include <hbapi.h>
#include <hbapiitm.h>
HB_FUNC_EXTERN( INKEYGUI );
HB_FUNC( INKEYGUI )
{
MSG Msg;
BOOL lNoLoop=FALSE;
UINT dwTimer, nRet=0, uTimeout=10;
if( HB_ISNUM(1) ) uTimeout = hb_parni(1);
//if( HB_ISNUM(1) ) uTimeout = hb_partd(1);
if( uTimeout==0 ) uTimeout = 0x0FFFFFFF;
if( uTimeout>0 ) uTimeout = uTimeout * 1000;
dwTimer = SetTimer( NULL, 0, uTimeout, NULL);
while( GetMessage(&Msg, NULL, 0, 0) )
{
switch( Msg.message )
{
case WM_KEYDOWN :
case WM_SYSKEYDOWN : { nRet = Msg.wParam; lNoLoop = TRUE; break; }
case WM_TIMER : { lNoLoop = Msg.wParam == dwTimer; break; }
}
if( lNoLoop )
{
KillTimer( NULL, dwTimer );
hb_retni( nRet );
return ;
}
else
{
TranslateMessage( &Msg ); // Translates virtual key codes
DispatchMessage( &Msg ); // Dispatches message to window
}
}
}
#pragma ENDDUMP
#pragma BEGINDUMP
/****************************
*
*
*/
#include "windows.h"
#include <windef.h>
#include <tlhelp32.h>
#include <hbapi.h>
//#include <hbapiitm.h>
/*
* WIN_GETPROCESSLIST( aArray [, ] ) -> nResult
* Get current process list on Windows OS. by Vailton Renato
*
* Returns:
*
* 0 - Success
* 1 - Argument error
* 2 - Unable to obtain current process list.
* 3 - Error retrieving information about processes.
*
* 15/12/2009 - 18:58:58
*/
static
BOOL GetUserAndDomainFromPID( DWORD ProcessId, PHB_ITEM pUser, PHB_ITEM pDomain )
{
HANDLE hToken;
HANDLE ProcessHandle;
DWORD cbBuf;
SID_NAME_USE snu;
char *User = NULL;
char *Domain = NULL;
DWORD UserSize = 0L;
DWORD DomainSize = 0L;
BOOL bResult = FALSE;
ProcessHandle = OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, ProcessId );
if (ProcessHandle)
{
if (OpenProcessToken(ProcessHandle, TOKEN_QUERY, &hToken))
{
BOOL bSuccess = FALSE;
PTOKEN_USER ptiUser;
if (!GetTokenInformation(hToken, TokenUser, NULL, 0, &cbBuf ))
{
ptiUser = (TOKEN_USER *) hb_xgrab( cbBuf );
bSuccess = GetTokenInformation( hToken, TokenUser, (LPVOID) ptiUser, cbBuf, &cbBuf);
}
CloseHandle(hToken);
if (bSuccess)
{
LookupAccountSid( NULL, ptiUser->User.Sid, NULL, &UserSize, NULL, &DomainSize, &snu);
if (UserSize != 0 && DomainSize != 0)
{
User = (char *) hb_xgrab( UserSize );
Domain = (char *) hb_xgrab( DomainSize );
if (LookupAccountSid( NULL, ptiUser->User.Sid, User, &UserSize,
Domain, &DomainSize, &snu))
{
/* Result OK */
bResult = TRUE;
}
}
}
if (ptiUser)
hb_xfree( ptiUser );
}
CloseHandle(ProcessHandle);
}
if (!User)
hb_itemPutC( pUser, "" );
else
hb_itemPutCLPtr( pUser, User, UserSize );
if (!Domain)
hb_itemPutC( pDomain, "" );
else
hb_itemPutCLPtr( pDomain, Domain, DomainSize );
return bResult;
}
HB_FUNC( WIN_GETPROCESSLIST )
{
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
PHB_ITEM pArray = hb_param( 1, HB_IT_ARRAY );
const char * szAppName = hb_parcx(2);
BOOL bCanAdd = TRUE;
if( !pArray )
{
hb_retni( 1 );
return;
}
// Take a snapshot of all processes in the system.
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
if( hProcessSnap == INVALID_HANDLE_VALUE )
{
// CreateToolhelp32Snapshot (of processes)
hb_retni( 2 );
return;
}
// Set the size of the structure before using it.
pe32.dwSize = sizeof( PROCESSENTRY32 );
// Retrieve information about the first process,
// and exit if unsuccessful
if( !Process32First( hProcessSnap, &pe32 ) )
{
hb_retni( 3 );
CloseHandle( hProcessSnap ); // clean the snapshot object
return;
}
// Ignores a empty string on seconds argument
if ( hb_parclen(2) < 1 )
szAppName = NULL;
// Now walk the snapshot of processes, and
// display information about each process in turn
do
{
PHB_ITEM pSubarray;
if (szAppName)
bCanAdd = ( hb_stricmp( szAppName, pe32.szExeFile ) == 0 );
if (bCanAdd)
{
pSubarray = hb_itemNew( NULL );
hb_arrayNew( pSubarray, 5 );
hb_arraySetC ( pSubarray, 1, pe32.szExeFile ); // Process Name
hb_arraySetNInt ( pSubarray, 2, pe32.th32ProcessID ); // Process ID
hb_arraySetNInt ( pSubarray, 3, pe32.th32ParentProcessID ); // Parent process ID
GetUserAndDomainFromPID( pe32.th32ProcessID,
hb_arrayGetItemPtr( pSubarray, 4 ), // User
hb_arrayGetItemPtr( pSubarray, 5 ) ); // Domain
hb_arrayAddForward( pArray, pSubarray );
}
} while( Process32Next( hProcessSnap, &pe32 ) );
CloseHandle( hProcessSnap );
hb_retni( 0 );
return;
}
/*
* WIN_KILLPROCESS( ) -> lKilled
* Kill a process using Win32 API. by Vailton Renato
* 16/12/2009 - 00:08:48
*/
HB_FUNC( WIN_KILLPROCESS )
{
DWORD ProcID;
BOOL Result = FALSE;
if (HB_ISNUM(1))
{
ProcID = (DWORD) hb_parnl(1);
Result = TerminateProcess(OpenProcess( PROCESS_TERMINATE, FALSE, ProcID ),0);
}
hb_retl( Result );
}
#pragma ENDDUMP
FUNCTION GravaListaSMS(cArq)
DbUseArea(.T., "DBFCDX", "LISTASMS", "LISTASMS", .T.)
INDEX ON TELEFONE+INDICE+DATA+HORA TAG "LISTASMS" TEMPORARY ADDITIVE
FT_FUSE(cArq)
FT_FGOTOP()
DO WHILE !FT_FEOF()
cLinha := FT_FREADLN()
cIndice := SubStr(cLinha, 3, 2)
cTelefone := SubStr(cLinha, 19, 15)
cData := SubStr(cLinha, 36, 8)
cHora := SubStr(cLinha, 46, 8)
cMens := SubStr(cLinha, 56, At("]", SubStr(cLinha, 56))-1)
IF !LISTASMS->(DbSeek(cTelefone+cIndice+cData+cHora))
LISTASMS->(DbAppend())
LISTASMS->Indice := cIndice
LISTASMS->Telefone := cTelefone
LISTASMS->Data := cData
LISTASMS->Hora := cHora
LISTASMS->Mensagem := cMens
LISTASMS->(DbCommit(), DbUnLock())
ENDIF
hwg_DoEvents()
FT_FSKIP()
ENDDO
FT_FUSE()
LISTASMS->(DbCloseArea())
RETURN Nil
Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes