oribeiro Posted March 23, 2019 Report Share Posted March 23, 2019 Pessoal, Para aumentar a segurança do sistema dentro do Terminal Server, eu criei uma rotina para abrir uma tela de explorador de arquivos onde o usuário não consegue apagar os arquivos, mas apenas selecioná-los: function xGetFiles( cMask, cTitle, nDefaultMask, cInitDir, lNova ) // Permite a seleção de múltiplos arquivos #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 Local cSelect, cPath, cAux, cAux1, nAt, nFlags, lSave:=.F., aFiles := {} Default cMask := "Todos (*.*)|*.*|" Default cTitle := "Selecione o arquivo" Default nDefaultMask := 1 Default cInitDir := "" Default lNova := .F. cInitDir:= iif(Empty(cInitDir), PastaTxt(), cInitDir) if lNova // Tela nova do Windows (mas permite que o usuário apague arquivos) nFlags := nOr( OFN_PATHMUSTEXIST, OFN_NOCHANGEDIR, OFN_ALLOWMULTISELECT, OFN_EXPLORER, OFN_LONGNAMES, OFN_HIDEREADONLY, OFN_NONETWORKBUTTON ) MsgRun("Esperando você selecionar o arquivo...",,{|| aFiles := cGetFile(cMask, cTitle, nDefaultMask, cInitDir, lSave, .T., nFlags) }) if Len( aFiles ) > 1 for nAt := 2 to Len( aFiles ) aFiles[ nAt ] := aFiles[ 1 ] + "\" + aFiles[ nAt ] next ADel( aFiles, 1 ) ASize( aFiles, Len( aFiles ) - 1 ) endif else // Tela Antiga que limita o usuário. nFlags := nOr( OFN_PATHMUSTEXIST, OFN_NOCHANGEDIR, OFN_ALLOWMULTISELECT, OFN_LONGNAMES, OFN_HIDEREADONLY, OFN_NONETWORKBUTTON ) MsgRun("Esperando você selecionar o arquivo...",,{|| aFiles := cGetFile(cMask, cTitle, nDefaultMask, cInitDir, lSave, .T., nFlags) }) if "\ "$aFiles[1] // Se selecionou múltiplos arquivos cSelect := aFiles[1] aFiles := {} cPath := Left(cSelect, RAT("\", cSelect)) // Caminho cSelect := Alltrim(Subst(cSelect, Len(cPath)+1, Len(cSelect))) Do While "."$cSelect cAux := Left(cSelect, AT(".",cSelect)) // Nome do Arquivo cSelect := Alltrim(Subst(cSelect, Len(cAux )+1, Len(cSelect))) if " "$cSelect cAux1 := Left(cSelect, AT(" ",cSelect)) // Extenção do Arquivo cSelect:= Alltrim(Subst(cSelect, Len(cAux1)+1, Len(cSelect))) else cAux1 := cSelect cSelect:= "" endif AAdd(aFiles, cPath+Alltrim(cAux)+AllTrim(cAux1)) EndDo endif endif return( aFiles ) Agora eu preciso que os arquivos que o usuário selecionou sejam colocados na área de transferência (Ctrl+C) mas não estou conseguindo, alguém pode me ajudar? aFiles := xGetFiles("Todos (*.*)|*.*|", "Selecione o arquivo(x)", 1, "", .F. ) oClp:=TClipboard():New() oClp:Clear() for i=1 to len(aFiles) oClp:SetText( aFiles[1] ) next oClp:End() Tentei assim, mas também os arquivos não foram para a área de transferência: aFiles := xGetFiles("Todos (*.*)|*.*|", "Selecione o arquivo(x)", 1, "", .F. ) OpenClipboard( GetDesktopWindow() ) for i=1 to len(aFiles) SetClipboardData( 1, aFiles[i] ) next CloseClipboard() Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 26, 2019 Report Share Posted March 26, 2019 Quote Link to comment Share on other sites More sharing options...
mkyx Posted March 26, 2019 Report Share Posted March 26, 2019 Faz assim define ClipBoard oCopiar of objetododialogo // esse comando só pode ser dado uma vez, senao, o comando anterior será desfeito. ------------ aFiles := xGetFiles("Todos (*.*)|*.*|", "Selecione o arquivo(x)", 1, "", .F. ) // oClp:=TClipboard():New() // oClp:Clear() define ClipBoard oClp of objetodasuajanela_ou_dialog for i=1 to len(aFiles) oClp:SetText( aFiles[1] ) next Quote Link to comment Share on other sites More sharing options...
oribeiro Posted March 28, 2019 Author Report Share Posted March 28, 2019 Obrigado pelas dicas. Tentei dessa forma também, mas ele não copia os arquivos para a área de transferência (CTRL+C) Eu preciso que os arquivos vão para a área de transferência para que o usuário copie com (CTRL+V) para alguma pasta do seu disco local; isso porque ele está acessando o servidor através do Web RDP Guacamole onde o disco local não é compartilhado no servidor. Então, uma rotina dentro do sistema que copie os arquivos de uma pasta para outra não funcionará porque a pasta destino não está disponível no servidor, mas somente na máquina local. Alguém já conseguiu copiar arquivos de um diretório para a área de transferência? aFiles := xGetFiles("Todos (*.*)|*.*|", "Selecione o arquivo(x)", 1, "", .F. ) // oClp:=TClipboard():New() // oClp:Clear() define ClipBoard oClp of objetodasuajanela_ou_dialog for i=1 to len(aFiles) oClp:SetText( aFiles[1] ) next Quote Link to comment Share on other sites More sharing options...
mkyx Posted March 28, 2019 Report Share Posted March 28, 2019 Olá, eu fiz o teste da rotina abaixo, e guardou o ultimo arquivo, da lista, na área de transferência. aFiles := xGetFiles("Todos (*.*)|*.*|", "Selecione o arquivo(x)", 1, "", .F. ) define ClipBoard oClp of odlg // odlg é um dialog desta rotina for i=1 to len(aFiles) oClp:SetText( aFiles[1] ) next para guardar todos os nomes dos arquivos da pasta lida, vc deve concatena-los. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted March 28, 2019 Author Report Share Posted March 28, 2019 Por favor, assim que possível, poste a rotina inteira, com o DLG que você criou. Aqui não está funcionando. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.