Abrir uma pasta como janela?

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

Moderador: Moderadores

Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Abrir uma pasta como janela?

Mensagem por Adalberto »

Caros amigos do foro

Estou trabalhando com XHb em modo consola, necessito abrir uma pasta, desde o aplicativo, mais não se como proceder. Por favor, me ajudem.

Gostaria de poder mostrar a pasta aberta, como uma janela mais.

Aguardo e agradeço sua colaboração.

Deus abençoe cada um de vocês e seus amados.

[] Adalberto
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Abrir uma pasta como janela?

Mensagem por Pablo César »

Hola Adalberto, puedes explicar mejor lo que estás precisando ?

Quieres abrir el Windows Explorer en determinada carpeta (directorio) desde tu aplicacion console ?

O quieres exibir el contenido de una carpeta con los archivos em modo console ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Abrir uma pasta como janela?

Mensagem por Adalberto »

Hola Pablo César,

gracias por tu interés en colaborarme.

Lo que necesito es poder abrir una carpeta en Windows (explorer), desde la aplicacion, (la primera opcion que citas). permiteme que diga un ejemplo:

Si tengo una carpeta en el escritorio y le doy doble click, la carpeta se abre y permanece como una ventana, así quiero que ocurra desde la plicacion, con cualquier carpeta.

Espero tu ayuda, mietras tanto aprovecho para hacerte saber que deseo para vos y tus amados las mas ricas bendiciones del cielo.

[] Adalberto
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Abrir uma pasta como janela?

Mensagem por Euclides »

Adalberto,
Solução por Enrico Maria Giordano

Código: Selecionar todos

#include "Hbdll.ch"

FUNCTION MAIN()

    SHELLEXECUTE( 0, 0, "C:\xHarbour", 0, 0, 1 )

RETURN NIL

DLL STATIC FUNCTION SHELLEXECUTE( hWnd AS LONG, cOperation AS LPSTR, cFile ;
    AS LPSTR, cParameters AS LPSTR, cDirectory AS LPSTR, nShowCmd AS LONG ) AS LONG;
    PASCAL FROM "ShellExecuteA" LIB "shell32.dll"
Saludos, Euclides
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Abrir uma pasta como janela?

Mensagem por Pablo César »

Eu não sei se irá compilar ou até mesmo ser executado:

DLL STATIC FUNCTION SHELLEXECUTE( hWnd AS LONG, cOperation AS LPSTR, cFile ;
AS LPSTR, cParameters AS LPSTR, cDirectory AS LPSTR, nShowCmd AS LONG ) AS LONG;
PASCAL FROM "ShellExecuteA" LIB "shell32.dll"

Por conter PASCAL. Mas sendo em xHarbour, ai não posso afirmar nada, pois eu não uso.

No HMG eu compilo e executo apenas:

SHELLEXECUTE( 0, 0, "C:\Windows", 0, 0, 1 ) // sem DLL

Tem outras formas também. Tente e diga-nos se deu certo.

Tem este código em C que também pode ajudar:

Código: Selecionar todos

#define SAVE_NAME hb_CurDrive() + ":\" + CurDir() + "\MyPicture.jpg"

Function Main()
SHELLEXECUTE( 0, 0, "C:\Windows", 0, 0, 1 )

ShellExecute(0,"open","explorer.exe","/select,"+SAVE_NAME,NIL,1)

Return Nil


#pragma BEGINDUMP

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

HB_FUNC( SHELLEXECUTE )
{
   hb_retnl( (LONG) ShellExecute( (HWND) hb_parnl(1),HB_ISNIL(2) ? NULL : (LPCSTR) hb_parc(2),(LPCSTR) hb_parc(3),HB_ISNIL(4) ? NULL : (LPCSTR) hb_parc(4),HB_ISNIL(5) ? NULL : (LPCSTR) hb_parc(5),hb_parni(6) ) ) ;
}

#pragma ENDDUMP
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Abrir uma pasta como janela?

Mensagem por Euclides »

Pablo,
Tentou compilar... executar?
Já olhou o HBDLL.CH ?
um xHarbour-abraço
Euclides
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Abrir uma pasta como janela?

Mensagem por Pablo César »

Euclides escreveu:Tentou compilar... executar?
Já olhou o HBDLL.CH ?
Sim, claro. Más como não trabalho com xHarbour, por isso duvidei. Mas então se funciona, quê bom ! Pois parece que o colega precisava uma solução para xHarbour.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Abrir uma pasta como janela?

Mensagem por Adalberto »

Apreciados amigos Pablo César, y Euclides. buenos dias.

Que alegría contar con la ayuda de ustedes, tanta buena voluntad, sólo Dios puede pagar, que así sea.

He probado con xHarbour las dos opciones, sin éxito, en una de ellas me falta el archivo de cabecera "Hbdll.ch", y probando el código en C me dice que no encuenta la función ISNIL()

Les ruego y agradezco que me sigan colaborando.

¡ Disfruten la alegría de vivir !

[] Adalberto
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Abrir uma pasta como janela?

Mensagem por Euclides »

Adalberto,
Eu utilizo Harbour com Fivewin, mas eu sempre testo os meus sistemas compilando também com xHarbour.
(não podes imaginar quantas diferenças existem...)
Utilizo para testes o xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6741)
Vou anexar o HBDLL.CH para testar.
Com outras versões os resultados podem ser diferentes.

Código: Selecionar todos

#ifndef __DLL_CH
   #define __DLL_CH

   #define DC_MICROSOFT           0x0000      // Default
   #define DC_BORLAND             0x0001      // Borland compat
   #define DC_CALL_CDECL          0x0010      // __cdecl
   #define DC_CALL_STD            0x0020      // __stdcall
   #define DC_RETVAL_MATH4        0x0100      // Return value in ST
   #define DC_RETVAL_MATH8        0x0200      // Return value in ST

   // Avoid xHarbour code when included by dllcall.c
   #ifdef __PLATFORM__Windows
      #include "cstruct.ch"
      #include "wintypes.ch"

      // Native Syntax
      #xcommand IMPORT [<Qualifier: STATIC>] [<CallConvention: 0x0000, 0x0001, 0x0010, 0x0020, 0x0100, 0x0200> ] ;
                       <FuncName>( [<ArgName> [, <ArgNameN>] ] ) FROM [<!DllFuncName!> OF ] <(DllName)> => ;
          UTILITY [<Qualifier>] FUNCTION <FuncName>( <ArgName> [, <ArgNameN>] );;
             STATIC cTemplate;;
             ;;
             IF cTemplate == NIL;;
                cTemplate := DllPrepareCall( <(DllName)>, IIF( <.CallConvention.>, <CallConvention>, DC_CALL_STD ), IIF( <.DllFuncName.>, #<DllFuncName>, #<FuncName> ) );;
             ENDIF;;
             ;;
             IF <.ArgName.>;;
                RETURN DllExecuteCall( cTemplate, <ArgName> [, <ArgNameN>] );;
             ENDIF;;
          RETURN DllExecuteCall( cTemplate )

      #xcommand IMPORT [<Qualifier: STATIC>] [<CallConvention: 0x0000, 0x0001, 0x0010, 0x0020, 0x0100, 0x0200> ] ;
                       <FuncName>( [<ArgName> [, <ArgNameN>] ] ) FROM <(DllName)> [EXPORTED AS <!DllFuncName!>] => ;
          UTILITY [<Qualifier>] FUNCTION <FuncName>( <ArgName> [, <ArgNameN>] );;
             STATIC cTemplate;;
             ;;
             IF cTemplate == NIL;;
                cTemplate := DllPrepareCall( <(DllName)>, IIF( <.CallConvention.>, <CallConvention>, DC_CALL_STD ), IIF( <.DllFuncName.>, #<DllFuncName>, #<FuncName> ) );;
             ENDIF;;
             ;;
             IF <.ArgName.>;;
                RETURN DllExecuteCall( cTemplate, <ArgName> [, <ArgNameN>] );;
             ENDIF;;
          RETURN DllExecuteCall( cTemplate )


      #xcommand IMPORT [<Qualifier: STATIC>] [<CallConvention: 0x0000, 0x0001, 0x0010, 0x0020, 0x0100, 0x0200> ] ;
                       <Type> <FuncName>( [0] [<ArgType> <ArgName> [, <ArgTypeN> <ArgNameN>] ] ) FROM <(DllName)> [EXPORTED AS <!DllFuncName!>] => ;
          UTILITY [<Qualifier>] FUNCTION <FuncName>( <ArgName> [, <ArgNameN>] );;
             STATIC cTemplate;;
             ;;
             IF cTemplate == NIL;;
                cTemplate := DllPrepareCall( <(DllName)>, IIF( <.CallConvention.>, <CallConvention>, DC_CALL_STD ), IIF( <.DllFuncName.>, #<DllFuncName>, #<FuncName> ) );;
             ENDIF;;
             ;;
             IF <.ArgName.>;;
                RETURN DllExecuteCall( cTemplate, <ArgName> [, <ArgNameN>] );;
             ENDIF;;
          RETURN DllExecuteCall( cTemplate )

      #xcommand IMPORT [<Qualifier: STATIC>] [<CallConvention: 0x0000, 0x0001, 0x0010, 0x0020, 0x0100, 0x0200> ] ;
                       <Type> <FuncName>( [0] [<ArgType> <ArgName> [, <ArgTypeN> <ArgNameN>] ] ) FROM [<!DllFuncName!> OF ] <(DllName)> => ;
          UTILITY [<Qualifier>] FUNCTION <FuncName>( <ArgName> [, <ArgNameN>] );;
             STATIC cTemplate;;
             ;;
             IF cTemplate == NIL;;
                cTemplate := DllPrepareCall( <(DllName)>, IIF( <.CallConvention.>, <CallConvention>, DC_CALL_STD ), IIF( <.DllFuncName.>, #<DllFuncName>, #<FuncName> ) );;
             ENDIF;;
             ;;
             IF <.ArgName.>;;
                RETURN DllExecuteCall( cTemplate, <ArgName> [, <ArgNameN>] );;
             ENDIF;;
          RETURN DllExecuteCall( cTemplate )

      // FoxPro Syntax
      #xcommand DECLARE <!Type!> <!FuncName!> IN <(DllName)> [AS <(DllFuncName)>] [<ArgType> [@] [<ArgName>] [, <ArgTypeN> [@] [<ArgNameN>]]] => ;
          UTILITY FUNCTION <FuncName>( ... );;
             STATIC cTemplate;;
             ;;
             IF cTemplate == NIL;;
                cTemplate := DllPrepareCall( <(DllName)>, DC_CALL_STD, IIF( <.DllFuncName.>, <(DllFuncName)>, #<FuncName> ) );;
             ENDIF;;
             ;;
             SWITCH PCount();;
                CASE 0;;
                   RETURN DllExecuteCall( cTemplate );;
                CASE 1;;
                   RETURN DllExecuteCall( cTemplate, PValue(1) );;
                CASE 2;;
                   RETURN DllExecuteCall( cTemplate, PValue(1), PValue(2) );;
                CASE 3;;
                   RETURN DllExecuteCall( cTemplate, PValue(1), PValue(2), PValue(3) );;
                CASE 4;;
                   RETURN DllExecuteCall( cTemplate, PValue(1), PValue(2), PValue(3), PValue(4) );;
                CASE 5;;
                   RETURN DllExecuteCall( cTemplate, PValue(1), PValue(2), PValue(3), PValue(4), PValue(5) );;
                CASE 6;;
                   RETURN DllExecuteCall( cTemplate, PValue(1), PValue(2), PValue(3), PValue(4), PValue(5), PValue(6) );;
                CASE 7;;
                   RETURN DllExecuteCall( cTemplate, PValue(1), PValue(2), PValue(3), PValue(4), PValue(5), PValue(6), PValue(7) );;
                CASE 8;;
                   RETURN DllExecuteCall( cTemplate, PValue(1), PValue(2), PValue(3), PValue(4), PValue(5), PValue(6), PValue(7), PValue(8) );;
                CASE 9;;
                   RETURN DllExecuteCall( cTemplate, PValue(1), PValue(2), PValue(3), PValue(4), PValue(5), PValue(6), PValue(7), PValue(8), PValue(9) );;
             END;;
             ;;
          RETURN NIL

      // FWH
      #xcommand DLL [<Qualifier: STATIC>] FUNCTION <FuncName>( [ <ArgName> AS <ArgType> ] [, <ArgNameN> AS <ArgTypeN> ] ) AS <Type> [<Pascal: PASCAL>] [ FROM <DllFuncName> ] LIB <(DllName)> => ;
          UTILITY [<Qualifier>] FUNCTION <FuncName>( <ArgName> [, <ArgNameN>] );;
             STATIC cTemplate;;
             ;;
             IF cTemplate == NIL;;
                cTemplate := DllPrepareCall( <(DllName)>, IIF( <.Pascal.>, DC_CALL_STD, DC_CALL_CDECL ), IIF( <.DllFuncName.>, <(DllFuncName)>, #<FuncName> ) );;
             ENDIF;;
             ;;
          RETURN DllExecuteCall( cTemplate [, <ArgName>] [, <ArgNameN>] )

      #xcommand DLL32 [<Qualifier: STATIC>] FUNCTION <FuncName>( [ <ArgName> AS <ArgType> ] [, <ArgNameN> AS <ArgTypeN> ] ) AS <Type> [<Pascal: PASCAL>] [ FROM <DllFuncName> ] LIB <(DllName)> => ;
          UTILITY [<Qualifier>] FUNCTION <FuncName>( <ArgName> [, <ArgNameN>] );;
             STATIC cTemplate;;
             ;;
             IF cTemplate == NIL;;
                cTemplate := DllPrepareCall( <(DllName)>, IIF( <.Pascal.>, DC_CALL_STD, DC_CALL_CDECL ), IIF( <.DllFuncName.>, <(DllFuncName)>, #<FuncName> ) );;
             ENDIF;;
             ;;
          RETURN DllExecuteCall( cTemplate [, <ArgName>] [, <ArgNameN>] )

   #endif
#endif

Saludos, Euclides
Editado pela última vez por anacatacombs em 22 Nov 2012 14:11, em um total de 1 vez.
Razão: Mensagem editada para a correção da tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Abrir uma pasta como janela? RESOLVIDO

Mensagem por Adalberto »

Caro amigo Euclides.

El colega y buen amigo Vicente Guerra compartio conmigo este conocimiento:

RUN Explorer C:\NomeDaPasta

Funciona muy bien, pruebalo, te va a agradar.

Dios te bendiga y haga properar todos tus emprendimientos.

¡Disfruta la alegría de vivir !

[] Adalberto
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Abrir uma pasta como janela?

Mensagem por Euclides »

Hola Adalberto!
Tens razão. Eu não utilizava o comando RUN desde os tempos de Clipper (1995).
Uma curiosidade a mais...
Em vez de usar o comando RUN Explorer C:\windows
podes utilizar o comando: RUN start C:\windows
E isso pertmite também outras possibilidades como:
RUN start arquivo.doc
Que vai abrir o ´arquivo.doc´ no WORD do MS Office
Isso vale para qualquer outro tipo de arquivo.
T+
Euclides
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Abrir uma pasta como janela?

Mensagem por Adalberto »

Euclides,

Con gran alegría vuelvo a agradecer tu ayuda, Dios recompense tu generosidad.

Pondre en práctica lo que me has enseñado.

¿Disfruta la alegría de vivir!

[] Adalberto
Responder