Jump to content
Fivewin Brasil

Substituto para cGetFile por motivo de segurança


oribeiro

Recommended Posts

Consegui isso aqui...

      cFotoNew:= cGetFile( "Bitmap (*.bmp)| *.bmp|"+      ;
                           "DIB   (*.dib)| *.dib|" +      ;
                           "PCX   (*.pcx)| *.pcx|" +      ;
                           "JPEG  (*.jpg)| *.jpg|" +      ;
                           "GIF   (*.gif)| *.gif|" +      ;
                           "TARGA (*.tga)| *.tga|" +      ;
                           "RLE   (*.rle)| *.rle|" +      ;
                           "Todos os Arquivos (*.*)|*.*|" ;
                          ,"Selecione a Foto Desejada",1,,.F.,,0x00000200) // OFN_ALLOWMULTISELECT

Mas ele retorna um texto muito longo no nome do arquivo. Por favor, confira..

Link to comment
Share on other sites

Veja se esta bom assim:



#Include 'Fivewin.Ch'

#define OFN_PATHMUSTEXIST 0x00000800
#define OFN_NOCHANGEDIR 0x00000008
#define OFN_ALLOWMULTISELECT 0x00000200
#define OFN_EXPLORER 0x00080000 // new look commdlg
#define OFN_LONGNAMES 0x00200000 // force long names for 3.x modules
#define OFN_ENABLESIZING 0x00800000
#define OFN_HIDEREADONLY 0x00000004 // Oculta a caixa de seleção Somente leitura.

function aGetFiles( cMask, cTitle, nDefaultMask, cInitDir )

local cSelect, nAt, aFiles := {}
/*
local nFlags := nOr( OFN_PATHMUSTEXIST , OFN_NOCHANGEDIR , ;
OFN_ALLOWMULTISELECT , OFN_EXPLORER , ;
OFN_LONGNAMES, OFN_ALLOWMULTISELECT )
*/
local nFlags := nOr( OFN_PATHMUSTEXIST, OFN_NOCHANGEDIR, OFN_ALLOWMULTISELECT, OFN_LONGNAMES )

//cSelect := cGetFile( cMask, cTitle, nDefaultMask, cInitDir, .f., .t., nFlags )
cSelect := cGetFile( "Bitmap (*.bmp)| *.bmp|"+ ;
"DIB (*.dib)| *.dib|" + ;
"PCX (*.pcx)| *.pcx|" + ;
"JPEG (*.jpg)| *.jpg|" + ;
"GIF (*.gif)| *.gif|" + ;
"TARGA (*.tga)| *.tga|" + ;
"RLE (*.rle)| *.rle|" + ;
"Todos os Arquivos (*.*)|*.*|" ;
,"Selecione a Foto Desejada",1,,.F.,, nFlags )

cSelect := Left( cSelect, At( Chr( 0 ) + Chr( 0 ), cSelect ) - 1 )

if ! Empty( cSelect )
cSelect := StrTran( cSelect, Chr( 0 ), "," )
aFiles := hb_aTokens( cSelect, "," )
if Len( aFiles ) > 1
for nAt := 2 TO Len( aFiles )
aFiles[ nAt ] := aFiles[ 1 ] + "\" + aFiles[ nAt ]
next nAt
ADel( aFiles, 1 )
ASize( aFiles, Len( aFiles ) - 1 )
endif
endif

return aFiles


abs,

Link to comment
Share on other sites

Resolveu!!! Muito obrigado por mais essa.

Fica aqui a função para quem desejar utilizar.

*********************************************************************************************
Function oaGetFile( cMask, cTitle, nDefaultMask, cInitDir )
*********************************************************************************************
   Local aFiles := aGetFiles( cMask, cTitle, nDefaultMask, cInitDir )
   Local i,cFile:= ""
   if Len(aFiles)>0 // Retorna apenas um arquivo selecionado
      if AT(" ",aFiles[1])>0
         cFile     := Alltrim(Left(aFiles[1], AT(" ",aFiles[1])))
         aFiles[1] := Alltrim(Subst( aFiles[1], AT(" ",aFiles[1]), Len(aFiles[1])))
         cFile     := cFile + Alltrim(Left(aFiles[1], AT(" ",aFiles[1])))
      else
         cFile     := aFiles[1]
      endif
   endif
Return( cFile )

*********************************************************************************************
Function aGetFiles( cMask, cTitle, nDefaultMask, cInitDir )
*********************************************************************************************
   #define OFN_PATHMUSTEXIST     0x00000800
   #define OFN_NOCHANGEDIR       0x00000008
   #define OFN_ALLOWMULTISELECT  0x00000200
   #define OFN_EXPLORER          0x00080000     // new look commdlg
   #define OFN_LONGNAMES         0x00200000     // force long names for 3.x modules
   #define OFN_ENABLESIZING      0x00800000
   #define OFN_HIDEREADONLY      0x00000004     // Oculta a caixa de seleção Somente leitura.
   Local cSelect, nAt, aFiles := {}
   Local nFlags := nOr( OFN_PATHMUSTEXIST, OFN_NOCHANGEDIR, OFN_ALLOWMULTISELECT, OFN_LONGNAMES )
// Param.  := cGetFile( cMask, cTitle, nDefaultMask, cInitDir, lSave, lLongNames, nFlags )
   cSelect := cGetFile( cMask, cTitle, nDefaultMask, cInitDir,   .F.,        .T., nFlags )
   cSelect := Left( cSelect, At( Chr( 0 ) + Chr( 0 ), cSelect ) - 1 )
   if ! Empty( cSelect )
      cSelect := StrTran( cSelect, Chr( 0 ), "," )
      aFiles  := hb_aTokens( cSelect, "," )
      if Len( aFiles ) > 1
         for nAt := 2 TO Len( aFiles )
            aFiles[ nAt ] := aFiles[ 1 ] + "\" + aFiles[ nAt ]
         next nAt
         ADel( aFiles, 1 )
         ASize( aFiles, Len( aFiles ) - 1 )
      endif
   endif
Return( aFiles )

Link to comment
Share on other sites

Para o cGetFile eu encontrei o parâmetro e já o implementei: (( Resolvido ))

#define OFN_NONETWORKBUTTON 0x20000 // Desabilita o botão [ REDE ] da Dlg

Também, achei o parâmetro para o PrinterSetup():

#DEFINE PD_NONETWORKBUTTON 0x00200000 Parece que essa é a solução, mas não tenho a mínima ideia de como utilizá-lo.
Link to comment
Share on other sites

Valeu Karinha!!!

Está resolvido. Pelo que entendi posso substituir o PrinterSetup() pelo GetPrintDC() sem nenhum efeito colateral no sistema. A vantagem é que esse último não apresenta famigerado botão [ REDE ].

Agora, com o uso do Cliente do Terminal Server o meu sistema passa a apresentar um excelente grau de segurança, pois eu fechei o acesso direto aos dados de todas as formas.

Muito obrigado.

Link to comment
Share on other sites

Sérgio, é só seguir este exemplo.



#include 'fivewin.ch'

#define OFN_PATHMUSTEXIST 0x00000800
#define OFN_NOCHANGEDIR 0x00000008
#define OFN_ALLOWMULTISELECT 0x00000200
#define OFN_EXPLORER 0x00080000 // new look commdlg
#define OFN_LONGNAMES 0x00200000 // force long names for 3.x modules
#define OFN_ENABLESIZING 0x00800000
#define OFN_HIDEREADONLY 0x00000004 // Oculta a caixa de seleção Somente leitura.
#define OFN_NONETWORKBUTTON 0x20000 // Desabilita o botão [ REDE ] da Dlg

function aGetFiles( cMask, cTitle, nDefaultMask, cInitDir )

local cSelect, nAt, aFiles := {}
/*
local nFlags := nOr( OFN_PATHMUSTEXIST , OFN_NOCHANGEDIR , ;
OFN_ALLOWMULTISELECT , OFN_EXPLORER , ;
OFN_LONGNAMES, OFN_ALLOWMULTISELECT )
*/
local nFlags := nOr( OFN_PATHMUSTEXIST, OFN_NOCHANGEDIR, OFN_ALLOWMULTISELECT, ;
OFN_LONGNAMES, OFN_NONETWORKBUTTON )

SKINBUTTONS()

//cSelect := cGetFile( cMask, cTitle, nDefaultMask, cInitDir, .f., .t., nFlags )
cSelect := cGetFile( "Bitmap (*.bmp)| *.bmp|"+ ;
"DIB (*.dib)| *.dib|" + ;
"PCX (*.pcx)| *.pcx|" + ;
"JPEG (*.jpg)| *.jpg|" + ;
"GIF (*.gif)| *.gif|" + ;
"TARGA (*.tga)| *.tga|" + ;
"RLE (*.rle)| *.rle|" + ;
"Todos os Arquivos (*.*)|*.*|" ;
,"Selecione a Foto Desejada",1,,.F.,, nFlags )

cSelect := Left( cSelect, At( Chr( 0 ) + Chr( 0 ), cSelect ) - 1 )

if ! Empty( cSelect )
cSelect := StrTran( cSelect, Chr( 0 ), "," )
aFiles := hb_aTokens( cSelect, "," )
if Len( aFiles ) > 1
for nAt := 2 TO Len( aFiles )
aFiles[ nAt ] := aFiles[ 1 ] + "\" + aFiles[ nAt ]
next nAt
ADel( aFiles, 1 )
ASize( aFiles, Len( aFiles ) - 1 )
endif
endif

return aFiles

Link to comment
Share on other sites

Vamos lá, para inibir o acesso dos usuários ao banco de dados do sistema, os passos que sigo são:

1º) Uso "Cliente de Terminal Server" com abertura do sistema no login e logoff ao sair do sistema. Também, desabilito o acesso ao "Gerenciador de Tarefas" no servidor de TS.

2º) Troquei o cGetDir32() pelo comando: cGetDir("Selecione a UNIDADE e a PASTA dos dados.",,,"Selecione o local e pressione o botão <OK>", 0x00000008) // OFN_NOCHANGEDIR

3º) Troquei o PrinterSetup() pelo comando: GetPrintDC()

4º) Troquei o cGetFile() pela função: oaGetFile() abaixo:

*********************************************************************************************
Function oaGetFile( cMask, cTitle, nDefaultMask, cInitDir, lSave )
*********************************************************************************************
   Local aFiles := aGetFiles( cMask, cTitle, nDefaultMask, cInitDir )
   Local i,cFile:= ""
   if Len(aFiles)>0 // Retorna apenas um arquivo selecionado
      if AT(" ",aFiles[1])>0
         cFile     := Alltrim(Left(aFiles[1], AT(" ",aFiles[1])))
         aFiles[1] := Alltrim(Subst( aFiles[1], AT(" ",aFiles[1]), Len(aFiles[1])))
         cFile     := cFile + Alltrim(Left(aFiles[1], AT(" ",aFiles[1])))
      else
         cFile     := aFiles[1]
      endif
   endif
Return( cFile )

*********************************************************************************************
Function aGetFiles( cMask, cTitle, nDefaultMask, cInitDir, lSave )
*********************************************************************************************
   #define OFN_PATHMUSTEXIST     0x00000800
   #define OFN_NOCHANGEDIR       0x00000008
   #define OFN_ALLOWMULTISELECT  0x00000200     // permite a seleção de vários arquivos em tela simplificada (não abre a tela de seleção do Windows)
   #define OFN_LONGNAMES         0x00200000     // force long names for 3.x modules
   #define OFN_HIDEREADONLY      0x00000004     // Oculta a caixa de seleção Somente leitura.
   #define OFN_NONETWORKBUTTON   0x20000        // Desabilita o botão [ REDE ] da Dlg
   Local   cSelect, nAt, aFiles := {}
   Local   nFlags       := nOr( OFN_PATHMUSTEXIST, OFN_NOCHANGEDIR, OFN_ALLOWMULTISELECT, OFN_LONGNAMES, OFN_HIDEREADONLY, OFN_NONETWORKBUTTON  )
   Default cMask        := "Todos (*.*)|*.*|"
   Default cTitle       := "Selecione o arquivo"
   Default nDefaultMask := 1
   Default lSave        := .F.
// Sintaxe := cGetFile( cMask, cTitle, nDefaultMask, cInitDir, lSave, lLongNames, nFlags )
   cSelect := cGetFile( cMask, cTitle, nDefaultMask, cInitDir, lSave,        .T., nFlags )
   cSelect := Left( cSelect, At( Chr( 0 ) + Chr( 0 ), cSelect ) - 1 )
   if ! Empty( cSelect )
      cSelect := StrTran( cSelect, Chr( 0 ), "," )
      aFiles  := hb_aTokens( cSelect, "," )
      if Len( aFiles ) > 1
         for nAt := 2 TO Len( aFiles )
            aFiles[ nAt ] := aFiles[ 1 ] + "\" + aFiles[ nAt ]
         next nAt
         ADel( aFiles, 1 )
         ASize( aFiles, Len( aFiles ) - 1 )
      endif
   endif
Return( aFiles )

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...