Página 1 de 1

Abrir uma pasta como janela?

Enviado: 19 Nov 2012 13:47
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

Abrir uma pasta como janela?

Enviado: 19 Nov 2012 14:48
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 ?

Abrir uma pasta como janela?

Enviado: 20 Nov 2012 14:10
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

Abrir uma pasta como janela?

Enviado: 20 Nov 2012 17:39
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

Abrir uma pasta como janela?

Enviado: 20 Nov 2012 21:43
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

Abrir uma pasta como janela?

Enviado: 21 Nov 2012 13:30
por Euclides
Pablo,
Tentou compilar... executar?
Já olhou o HBDLL.CH ?
um xHarbour-abraço
Euclides

Abrir uma pasta como janela?

Enviado: 21 Nov 2012 15:00
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.

Abrir uma pasta como janela?

Enviado: 22 Nov 2012 11:30
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

Abrir uma pasta como janela?

Enviado: 22 Nov 2012 13:26
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

Abrir uma pasta como janela? RESOLVIDO

Enviado: 23 Nov 2012 19:28
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

Abrir uma pasta como janela?

Enviado: 24 Nov 2012 09:24
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

Abrir uma pasta como janela?

Enviado: 24 Nov 2012 19:38
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