Página 2 de 3

Abertura de outro programa console via hwgui

Enviado: 15 Mar 2024 17:57
por Itamar M. Lins Jr.
Olá!
Tem muita coisa para diminuir no seu código.
Isso aqui por exemplo:

Código: Selecionar todos

if us="I" .or. us="V" .or. us="Y" .or. us="G" .or. us="J" .or. us="D" .or. us="Z" .or. us="N" .or. us="W" .or. us="E"
//Para
If us $ "IVYGJDZNWE" ou assim If us $ "I V Y G J D Z N W E" ou assim If us $ "I/V/Y/G/J/D/Z/N/W/E" levando em consideração que não aceite o espaço em branco ou "/" no campo US.
Mesma coisa aqui:
if "N293S0U"$upper(netname()) .or. "INACIO"$upper(netname()) .or. "INACIOCARVALHO"$upper(netname()) .or. "RODRIGO"$upper(netname()) .or. "CAMYLLA"$upper(netname()) .or. "VANESSA"$upper(netname()) .or. "LUIZ"$upper(netname()) .or. "MVAZ"$upper(netname())
//Para:
if upper(netname()) $ "N293S0U INACIO INACIOCARVALHO RODRIGO CAMYLLA VANESSA LUIZ MVAZ" 
Essas partes acredito que não tem necessidade:

Código: Selecionar todos

...
    private nTecla2 :=lastkey()
    private nTecla :=lastkey()
...     
            do case
                case us="I"
                     @ a,b clear to a+21,b+39
                     @ a,b to a+21,b+39 double
            case us="V" .or. us="W"
                     @ a,b clear to a+13,b+39
                     @ a,b to a+13,b+39 double
            case us="G"
                     @ a,b clear to a+15,b+39
                     @ a,b to a+15,b+39 double
                case us="Y" .or. us="J" .or. us="N" .or. us="V" .or. us="Z"
                     @ a,b clear to a+14,b+39
                     @ a,b to a+14,b+39 double
            case us="E"
                     @ a,b clear to a+15,b+39
                     @ a,b to a+15,b+39 double
            case us="Z" .or. us="D"
                     @ a,b clear to a+15,b+39
                     @ a,b to a+13,b+39 double
                otherwise
                     @ a,b clear to a+11,b+39
                     @ a,b to a+11,b+39 double
             endcase
save screen e restore screen não usa também para de desenho vira coisa do passado.
Aqui vc usa para acrescentar mais opções.

Código: Selecionar todos

          if us="I"
             a=a+3
          endif
Nos botões que eu desenhei vc pode fazer da mesma forma.
O ultimo botão foi esse:
@ 10,280 BUTTON "Por data de audiência" SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
Veja que não precisa dessas linhas.

Código: Selecionar todos

 
 if us="I"
     a=a+3
 endif
Aqui vc continua colocando os botões BUTTON equivale ao PROMPT. Só seguir a lógica de pular 30 que é a LARGURA DO BOTÃO

Código: Selecionar todos

       if us="I" .or. us="V" .or. us="Y" .or. us="G" .or. us="J" .or. us="D" .or. us="Z" .or. us="N" .or. us="W" .or. us="E" // .or. us="U" .and. date()>ctod("04/02/16")) .or. us="F" .or. us="M"
                @ a+8,b+1 prompt "Telefones                             "
                @ a+9,b+1 prompt "Dados pessoais                        "
                @ a+10,b+1 prompt "Lista de compras                      "
            @ a+11,b+1 prompt "Transferências bancárias              "
            @ a+12,b+1 prompt "Notas para lançamento                 "
            if us="J" .or. us="Z"
               @ a+13,b+1 prompt "Transferência para músicos           "
            endif
            if us="E"
                @ a+13,b+1 prompt "Despesas Bia                         "
               @ a+14,b+1 prompt "Despesas Meg                         "
            endif
            if us="G"
               @ a+13,b+1 prompt "Atividades externas                   "
               @ a+14,b+1 prompt "Contas pra pagar                      "
            endif
            if us="Z"
               @ a+14,b+1 prompt "Contas pra pagar                      "
            endif
             endif
             if us="I"
                @ a+13,b+1 prompt "Prioridade zero                       "
                @ a+14,b+1 prompt "Por vínculo                           "
                @ a+15,b+1 prompt "Por usuário                           "
                @ a+16,b+1 prompt "Por usuário não resolvida             "
             endif

Código: Selecionar todos

@ 10,280 BUTTON "Por data de audiência"                   SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
//O próximo será
if us="I" .or. us="V" .or. us="Y" .or. us="G" .or. us="J" .or. us="D" .or. us="Z" .or. us="N" .or. us="W" .or. us="E"
@ 10,310 BUTTON "Telefones"                   SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")} 
Vc mostra ou não a opção para a pessoa de acordo esse tal US
Uma outra forma é vc mostrar TODAS AS OPÇÕES e de acordo ao US ele poder ou não executar.

Código: Selecionar todos

@ 10,310 BUTTON "Telefones"                   SIZE 350,30 On Click {||iif(fTemPermissao(),hwg_MsgInfo("Em desenvolvimento"),hwg_msgStop("Sem permissão para essa opção"))} 
Saudações,
Itamar M. Lins Jr.

Abertura de outro programa console via hwgui

Enviado: 16 Mar 2024 00:52
por cjp
Testei teu exemplo aqui, funcionou.
Exceto quanto à acentuação, que ficou toda bagunçada. Testei com várias codepages. No meu teste também está com problema de acentuação (ia até abrir outro tópico pra isso).
Mas coloquei a função no meu teste, e daí não funcionou. Por favor, veja se fiz algo errado:

Código: Selecionar todos

#include "hwgui.ch"
REQUEST HB_GT_GUI_DEFAULT
REQUEST HB_LANG_PT, HB_CODEPAGE_PTISO, HB_CODEPAGE_PT850, HB_CODEPAGE_UTF8EX

FUNCTION Main
         Local cRet, oSay1, oSay2, oSay3, nId, cTxt
		 Local oFont := HFont():Add( "MS Sans Serif",0,-13 )
		 private vers :="12/07/22"
		 private oDlg, cnSQL, us, nmus, seis
		 private cSair :="N"
		 private hrabertura :=time()
		 private nProvAtiv :=3

HB_CDPSELECT([PTISO])
hb_langselect([PT])
		 
		 set date brit
		 
         PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -13
         PREPARE FONT oFontSay NAME "MS Sans Serif" WIDTH 0 HEIGHT -13 WEIGHT 700
 
		 do while .t.
		    if us=NIL
		       cRet=login()
			endif

			if us#NIL
               cadativ("Processos34","Processos34: iniciou",,0," ",0,0," ")
               exqado("update fazendo set data='"+dtsql(date())+"',hora='"+time()+"',assunto='Iniciou o processo34' where usuario='"+us+"'",18)
			endif
			
            INIT DIALOG oDlg TITLE "Processos - Versão: "+substr(vers,7,2)+"."+substr(vers,4,2)+"."+substr(vers,1,2) AT 1, 1 SIZE 650, 600 FONT oFont

            MENU OF oDlg
                 MENU TITLE "&Finalizar" //ACTION ConfirmarFechar()
                      MENUITEM "&Sair do sistema" ACTION ConfirmarFechar() //hwg_Msginfo( "Just a test", "Message" )
                 ENDMENU

                 MENU TITLE "&Consultar" //ACTION consulta()
                      MENUITEM "&Abrir opções de consulta" ACTION consultar()  //hwg_Msginfo( HwG_Version(), "About" )
                 ENDMENU
				 
                 MENU TITLE "C&adastrar" //ACTION cadastro()
                      MENUITEM "&Abrir opções de cadastrar" ACTION cadastro()
					  
                 ENDMENU
				 
                 MENU TITLE "&Manutenção" //ACTION manutencao()
                      MENUITEM "&Abrir opções de manutenção" ACTION manutencao()   //hwg_Msginfo( HwG_Version(), "About" )
                 ENDMENU
            ENDMENU


            @ 0,110  BITMAP        Bitmap1 ;
             SHOW          "ImagemLondres.jpg" ; 
             STRETCH       0 ;
             SIZE          650,430 //nWidth, nHeight - 65

   
			if cRet="N" .or. cSair="S"
			   return .f.
				   
			elseif cRet="S"
               hb_run("start PROC2P.exe " + us + " " + "visível-"+nmus + " " + seis)			   
			   
               @ 5,60 SAY oSAY2 CAPTION "Olá, "+alltrim(nmus)+". Escolha uma das opções clicando nos botões ou nos menus acima. As opções abrirão, por enquanto, ainda na interface tradicional, até que a mudança de interface seja completada" SIZE 590, 50

               cnSQL := ConexaoMySQL()
               cProc=cnSQL:Open()
       
               cProc=cnSQL:execute("select texto from biblia where dtuso='" + Transform( DtoS( Date() ), "@R 9999-99-99" ) + "'")
			   if cProc:recordcount()=0
		          cProc=cnSQL:execute("select top 1 texto,id from biblia order by dtuso")
			      nId=cProc:Fields("id"):Value
			      cTxt=cProc:Fields("texto"):Value
			      cProc=cnSQL:execute("UPDATE biblia set dtuso='"+dtsql(date())+"' WHERE id="+alltrim(str(nId)))
			   else
			      cTxt=cProc:Fields("texto"):Value
			   endif
               cnSQL:Close()
			   oDlg:Close()
			   
               @ 0,5 BUTTON "Finalizar (Esc)" SIZE 140,50 ON CLICK {||ConfirmarFechar()}
			   
               @ 170,5 BUTTON "Consultar" SIZE 140,50 ;
                 ON CLICK {||consultar()}

               @ 340,5 BUTTON "Cadastrar" SIZE 140,50 ;
                 ON CLICK {||cadastro()}
     
               @ 510,5 BUTTON "Manutenção" SIZE 140,50 ;
                 ON CLICK {||manutencao()}

			   @ 5,540 SAY oSAY3 CAPTION "Pensamento do dia: "+ansi(cTxt) SIZE 590, 170
			   
			endif

            ACTIVATE DIALOG oDlg

			if lastkey()=27
               hwg_Msginfo( "Entrou no lastkey=27", "Message" )
			   if confirmarfechar()="S"
			      return .f.
			   else
			      loop
			   endif
			endif

		 enddo

Return		 

...
		 
Function consultar
Local oDlg,oFont, cTitle := "Menu Consultar"

PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -16

INIT DIALOG oDlg CLIPPER NOEXIT TITLE cTitle Font oFont AT 0,0 SIZE 380,450 ;
                                                       STYLE  WS_POPUP+WS_VISIBLE+WS_CAPTION+WS_SYSMENU+DS_CENTER

@ 10,010 BUTTON "Finalizar"                               SIZE 350,30 On Click {||hwg_EndDialog()}
@ 10,040 BUTTON "Item em Execução ou próximo a executar"  SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")} 
@ 10,070 BUTTON "Por Assunto"                             SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,100 BUTTON "Pelo Conteúdo"                           SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,130 BUTTON "Pelo Número do Item"                     SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,160 BUTTON "Instruções de Uso do Sistema"            SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,190 BUTTON "Programa de produtividade"               SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,220 BUTTON "Pelo número do processo"                 SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,250 BUTTON "Pela data de carga do proceso"           SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,280 BUTTON "Pro data de audiência"                   SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}

oDlg:Activate()

Return .T.
Pelo que entendi, era pra abrir uma nova janela com estas opções, mas não aconteceu nada.

Mas reitero o que disse nos posts anteriores: pra dar continuidade no meu sistema, preciso muito resolver uma questão que parece simples, mas não consigo: colocar a tela chamada em primeiro plano. Como disse, cada opção destas irá chamar nova função, com outras opções, que chamarão outras opções, e assim por diante. Obviamente, não vou pretender que vc faça todas as telas. E, na verdade, já entendi como fazer (embora aqui não esteja funcionando ainda). Enquanto vou implementando estas telas aos poucos, precisaria já colocar as prontas em funcionamento. E, pra isso, só preciso resolver a questão de colocar a nova tela em primeiro plano. Consegue me ajudar nisso?

Abertura de outro programa console via hwgui

Enviado: 16 Mar 2024 02:01
por Itamar M. Lins Jr.
Olá!
E, pra isso, só preciso resolver a questão de colocar a nova tela em primeiro plano. Consegue me ajudar nisso?
Tem esse aqui:

Código: Selecionar todos

...

function consulta
       cApp := "consultaprocessos34"
         __run("consultaprocessos34.exe "+us+" "+vers)
        hb_ShowWindow(cApp)
return
...
Coloque no final do seu PRG, essa parte pq é código em C
#pragma BEGINDUMP

#include "windows.h"
#include "hbapi.h"

HB_FUNC( HB_SHOWWINDOW )
{
   HWND hWnd = FindWindow( NULL, hb_parc( 1 ) );
   SetForegroundWindow( hWnd );
   SendMessage( hWnd, WM_SYSCOMMAND, SC_RESTORE, 0 );
}
#pragma ENDDUMP
Veja ai se vai funcionar.
Estou no Linux aqui, domingo ou segunda eu posso tentar com mais tempo.

Saudações,
Itamar M. Lins Jr.

Abertura de outro programa console via hwgui

Enviado: 16 Mar 2024 02:18
por Itamar M. Lins Jr.
Olá!
Fiz aqui sem as imagens e tirando algumas funções, que não tenho aqui.
Screenshot_20240316_022210.png

Código: Selecionar todos

#include "hwgui.ch"
REQUEST HB_LANG_PT, HB_CODEPAGE_PTISO, HB_CODEPAGE_PT850, HB_CODEPAGE_UTF8EX

FUNCTION Main
         Local cRet, oSay1, oSay2, oSay3, nId, cTxt
       Local oFont := HFont():Add( "MS Sans Serif",0,-13 )
       private vers :="12/07/22"
       private oDlg, cnSQL, us, nmus, seis
       private cSair :="N"
       private hrabertura :=time()
       private nProvAtiv :=3

HB_CDPSELECT([PTISO])
hb_langselect([PT])
       
       set date brit
       
         PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -13
         PREPARE FONT oFontSay NAME "MS Sans Serif" WIDTH 0 HEIGHT -13 WEIGHT 700
 
       do while .t.
          //if us=NIL
          //   cRet=login()
         //endif

         //if us#NIL
         //      cadativ("Processos34","Processos34: iniciou",,0," ",0,0," ")
         //      exqado("update fazendo set data='"+dtsql(date())+"',hora='"+time()+"',assunto='Iniciou o processo34' where usuario='"+us+"'",18)
         //endif
         
            INIT Window oMain MAIN TITLE "Processos - Versão: "+substr(vers,7,2)+"."+substr(vers,4,2)+"."+substr(vers,1,2) AT 1, 1 SIZE 650, 600 FONT oFont

            MENU OF oMain
                 MENU TITLE "&Finalizar" 
                      MENUITEM "&Sair do sistema" ACTION hwg_Msginfo( "Just a test", "Message" )
                 ENDMENU

                 MENU TITLE "&Consultar" 
                      MENUITEM "&Abrir opções de consulta" ACTION consultar()  //hwg_Msginfo( HwG_Version(), "About" )
                 ENDMENU
             
                 MENU TITLE "C&adastrar" 
                      MENUITEM "&Abrir opções de cadastrar" ACTION hwg_Msginfo( HwG_Version(), "About" )
                 
                 ENDMENU
             
                 MENU TITLE "&Manutenção" 
                      MENUITEM "&Abrir opções de manutenção" ACTION hwg_Msginfo( HwG_Version(), "About" )
                 ENDMENU
            ENDMENU
/*
            @ 0,110  BITMAP        Bitmap1 ;
             SHOW          "ImagemLondres.jpg" ; 
             STRETCH       0 ;
             SIZE          650,430 //nWidth, nHeight - 65
*/
   
         if cRet="N" .or. cSair="S"
            return .f.
               
         elseif cRet="S"
               hb_run("start PROC2P.exe " + us + " " + "visível-"+nmus + " " + seis)            
            
               @ 5,60 SAY oSAY2 CAPTION "Olá, "+alltrim(nmus)+". Escolha uma das opções clicando nos botões ou nos menus acima. As opções abrirão, por enquanto, ainda na interface tradicional, até que a mudança de interface seja completada" SIZE 590, 50
/*
               //cnSQL := ConexaoMySQL()
               //cProc=cnSQL:Open()
       
               //cProc=cnSQL:execute("select texto from biblia where dtuso='" + Transform( DtoS( Date() ), "@R 9999-99-99" ) + "'")
            if cProc:recordcount()=0
                cProc=cnSQL:execute("select top 1 texto,id from biblia order by dtuso")
               nId=cProc:Fields("id"):Value
               cTxt=cProc:Fields("texto"):Value
               cProc=cnSQL:execute("UPDATE biblia set dtuso='"+dtsql(date())+"' WHERE id="+alltrim(str(nId)))
            else
               cTxt=cProc:Fields("texto"):Value
            endif
               cnSQL:Close()*/
               
           // -> oDlg:Close() Tá fechando o quê ?
            
               @ 0,5 BUTTON "Finalizar (Esc)" SIZE 140,50 ON CLICK hwg_Msginfo( HwG_Version(), "About" ) //{||ConfirmarFechar()}
            
               @ 170,5 BUTTON "Consultar" SIZE 140,50 ;
                 ON CLICK {||consultar()}

               @ 340,5 BUTTON "Cadastrar" SIZE 140,50 ;
                 ON CLICK {||.t.}
     
               @ 510,5 BUTTON "Manutenção" SIZE 140,50 ;
                 ON CLICK {||.t.}

            @ 5,540 SAY oSAY3 CAPTION "Pensamento do dia: "+"abc" /*ansi(cTxt)*/ SIZE 590, 170
            
         endif

            ACTIVATE DIALOG oMain

         if lastkey()=27
               hwg_Msginfo( "Entrou no lastkey=27", "Message" )
            //if confirmarfechar()="S"
            //   return .f.
            //else
            //   loop
            //endif
         endif

       enddo

Return       


       
Function consultar
Local oDlg,oFont, cTitle := "Menu Consultar"

PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -16

INIT DIALOG oDlg CLIPPER NOEXIT TITLE cTitle Font oFont AT 0,0 SIZE 380,450 ;
                                                       STYLE  WS_POPUP+WS_VISIBLE+WS_CAPTION+WS_SYSMENU+DS_CENTER

@ 10,010 BUTTON "Finalizar"                               SIZE 350,30 On Click {||hwg_EndDialog()}
@ 10,040 BUTTON "Item em Execução ou próximo a executar"  SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")} 
@ 10,070 BUTTON "Por Assunto"                             SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,100 BUTTON "Pelo Conteúdo"                           SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,130 BUTTON "Pelo Número do Item"                     SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,160 BUTTON "Instruções de Uso do Sistema"            SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,190 BUTTON "Programa de produtividade"               SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,220 BUTTON "Pelo número do processo"                 SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,250 BUTTON "Pela data de carga do proceso"           SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}
@ 10,280 BUTTON "Pro data de audiência"                   SIZE 350,30 On Click {||hwg_MsgInfo("Em desenvolvimento")}

oDlg:Activate()

Return .T.
Detalhe, mudei a DIALOG por uma WINDOW MAIN(Principal) de oDlg para oMain., -> Menu OF oMAIN.

Saudações,
Itamar M. Lins Jr.

Abertura de outro programa console via hwgui

Enviado: 16 Mar 2024 03:03
por JoséQuintas
Interrompendo um pouco:

Era assim mesmo que usava no aplicativo anterior, ou mudou depois de separar o fonte ?
Estranhei o Ansi( cTxt ), não sei se colocou isso depois de separar o fonte.
Não está certo, mas ... se já usava assim, continua assim.
Se isso foi depois de separar o fonte.... aí é outra história.

Sobre a janela:
Verifique hwg_FindWindow() e hwg_BringToTop()

Abertura de outro programa console via hwgui

Enviado: 17 Mar 2024 23:45
por cjp
Tem esse aqui:

Veja ai se vai funcionar.
Estou no Linux aqui, domingo ou segunda eu posso tentar com mais tempo.
Não funcionou. Não está trazendo a janela pra frente.

Olá!
Fiz aqui sem as imagens e tirando algumas funções, que não tenho aqui.

Detalhe, mudei a DIALOG por uma WINDOW MAIN(Principal) de oDlg para oMain., -> Menu OF oMAIN.
Esta parte funcionou.


Interrompendo um pouco:

Era assim mesmo que usava no aplicativo anterior, ou mudou depois de separar o fonte ?
Estranhei o Ansi( cTxt ), não sei se colocou isso depois de separar o fonte.
Não está certo, mas ... se já usava assim, continua assim.
Se isso foi depois de separar o fonte.... aí é outra história.
No meu sistema sem hwgui não preciso dessa ansi pra isso (até uso ela em outras situações).
Tinha colocado ela pra tentar resolver a acentuação, sem sucesso.
Mas vi agora que, tirando ela, e com a intrução da PTISO antes sugerida, o problema foi solucionado.



Sobre a janela:
Verifique hwg_FindWindow() e hwg_BringToTop()
Também não funcionou. Não sei se fiz certo:

Código: Selecionar todos

function consulta
       cApp := "consultaprocessos34"
         __run("consultaprocessos34.exe "+us+" "+vers)
		 hwg_FindWindow(cApp)
		 hwg_BringToTop(cApp)
return

Abertura de outro programa console via hwgui

Enviado: 18 Mar 2024 09:02
por JoséQuintas
hwg_FindWindow() é pra procurar a janela pelo título e retornar o handle.
Veja qual é a sintaxe a ser usada, se for igual API Windows, o primeiro parâmetro é NIL ou vazio.
E usa o handle na hwg_BringToTop().
Confere também no manual. Tem lib que trabalha com ponteiro e tem lib que trabalha com ponteiro convertido pra número.

Abertura de outro programa console via hwgui

Enviado: 18 Mar 2024 11:27
por Itamar M. Lins Jr.
Olá!
Não funcionou. Não está trazendo a janela pra frente.

Código: Selecionar todos

...
@ 10,280 BUTTON "Por data de audiência"                   SIZE 350,30 On Click {||consulta()}
...
Function Consulta
hb_ProcessOpen("..\exe\PROC2P.exe")
return .t.
No aplicativo antigo no console "PROC2P.exe" e demais coloque essas 2 linhas depois da FUNCTION MAIN

Código: Selecionar todos

FUNCTION MAIN 
LOCAL ... etc
HB_GtInfo( HB_GTI_ISFULLSCREEN, .F. )
HB_GtInfo( HB_GTI_MAXIMIZED, .T. )
...
Testei aqui no meu ruindows e funcionou a contento!

Saudações,
Itamar M. Lins Jr.

Abertura de outro programa console via hwgui

Enviado: 18 Mar 2024 12:12
por marcosgambeta
Não testei, mas talvez funcione com esta função da hbwin:

Código: Selecionar todos

wapi_ShellExecute(oMainWindow:handle, "open", "c:/caminho/arquivo.exe")
O valor 'default' do sexto parâmetro já é SHOWNORMAL Sendo assim, a janela do programa deve aparecer corretamente.

Se houver parâmetros, devem ser passados no quarto parâmetro.

Abertura de outro programa console via hwgui

Enviado: 18 Mar 2024 13:41
por marcosgambeta
Tinha me esquecido da função equivalente da HWGUI:

Código: Selecionar todos

/*
 * ShellExecute( cFile, cOperation, cParams, cDir, nFlag )
 */
HB_FUNC( HWG_SHELLEXECUTE )
{
#if defined( HB_OS_WIN_CE )
   hb_retni( -1 );
#else
   void *hOperation;
   void *hFile;
   void *hParameters;
   void *hDirectory;
   LPCTSTR lpDirectory;

   lpDirectory = HB_PARSTR( 4, &hDirectory, NULL );
   if( lpDirectory == NULL )
      lpDirectory = TEXT( "C:\\" );

   hb_retnl( ( LONG ) ShellExecute( GetActiveWindow(  ),
               HB_PARSTRDEF( 2, &hOperation, NULL ),
               HB_PARSTR( 1, &hFile, NULL ),
               HB_PARSTR( 3, &hParameters, NULL ),
               lpDirectory, HB_ISNUM( 5 ) ? hb_parni( 5 ) : SW_SHOWNORMAL ) );

   hb_strfree( hOperation );
   hb_strfree( hFile );
   hb_strfree( hParameters );
   hb_strfree( hDirectory );
#endif
}
Podem desconsiderar a função da hbwin.

Abertura de outro programa console via hwgui

Enviado: 18 Mar 2024 23:54
por cjp
hwg_FindWindow() é pra procurar a janela pelo título e retornar o handle.
Veja qual é a sintaxe a ser usada, se for igual API Windows, o primeiro parâmetro é NIL ou vazio.
E usa o handle na hwg_BringToTop().
Confere também no manual. Tem lib que trabalha com ponteiro e tem lib que trabalha com ponteiro convertido pra número.

Não sei se entendi corretamente.
Fiz assim:

Código: Selecionar todos

function consulta
       cApp := "consultaprocessos"
         __run("consultaprocessos.exe "+us+" "+vers)
		 x=hwg_FindWindow(cApp)
		 hwg_BringToTop(x)
return
Não está colocando a tela console em primeiro plano.




HB_GtInfo( HB_GTI_ISFULLSCREEN, .F. )
HB_GtInfo( HB_GTI_MAXIMIZED, .T. )
Está dando erro: Variable does not exist: HB_GTI_ISFULLSCREEN

wapi_ShellExecute(oMainWindow:handle, "open", "c:/caminho/arquivo.exe")
Não está aparecendo a tela console, embora, aparentemente, esteja abrindo, tanto que a tela hwgui fica ocupada.

Abertura de outro programa console via hwgui

Enviado: 19 Mar 2024 00:13
por Itamar M. Lins Jr.
Olá!
Coloca no inicio:
#include "hbgtinfo.ch"
Faça primeiro o que eu te disse.
Se não funcionar, teste as outras opções.

Saudações,
Itamar M. Lins Jr.

Abertura de outro programa console via hwgui

Enviado: 19 Mar 2024 00:21
por cjp
Fiz.
Não dá mais erro.
Mas continua não abrindo a tela em primeiro plano.

Abertura de outro programa console via hwgui

Enviado: 19 Mar 2024 00:24
por Itamar M. Lins Jr.
Olá!
hb_ProcessOpen("..\exe\PROC2P.exe")
Tá chamando com essa opção hb_processOpen() ?
PQ vai abrir o EXE MAXIMIZADO!

Isso que passei é para colocar no outro.

Código: Selecionar todos

HB_GtInfo( HB_GTI_ISFULLSCREEN, .F. )
HB_GtInfo( HB_GTI_MAXIMIZED, .T. )
É pra colocar nesse prg -> consultaprocessos.exe

Saudações,
Itamar M. Lins Jr.

Abertura de outro programa console via hwgui

Enviado: 19 Mar 2024 00:52
por cjp
Testei com as várias opções mencionadas neste tópico, inclusive com a hb_processopen(), assim:

Código: Selecionar todos

function consulta
         hb_processOpen("consultaprocessos.exe "+us+" "+vers)
return
E no consultaprocessos:

Código: Selecionar todos

HB_GtInfo( HB_GTI_ISFULLSCREEN, .F. )
HB_GtInfo( HB_GTI_MAXIMIZED, .T. )