Inteiração com ferramentas do Windows

Seção onde você poderá tirar suas dúvidas sobre Sistemas Operacionais. (Windows, Linux...)

Moderador: Moderadores

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á

Inteiração com ferramentas do Windows

Mensagem por Pablo César »

Quem ja precisou chamar o instalador de impressoras porque não existia impressora alguma instalada. Ou o cliente ligar pra você dizendo o programa no funciona em determinado terminal e você logo percebe que deve ter algum problema de rede. Não seria bom exibir os computadores que estão conectados no grupo ?

Disponibilizei na seção de Downloads um utilitários com os fontes feito em HMG para exemplificar como acessar certas funções do Windows, espero que gostem: https://pctoledo.org/forum/fileba ... 157&page=1
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.
sambomb
Usuário Nível 3
Usuário Nível 3
Mensagens: 250
Registrado em: 24 Out 2008 17:02
Localização: Itaocara - RJ - Brasil

Re: Inteiração com ferramentas do Windows

Mensagem por sambomb »

Ficou muito bom! Poderia disponibilizar de onde você obteve o nome dos aplicativos do windows?
Imagem

Rca Sistemas - Itaocara - RJ
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Inteiração com ferramentas do Windows

Mensagem por Toledo »

Bom, só para complementar... veja o tópico abaixo que tem algumas outros opções:

https://pctoledo.org/forum/viewto ... 43&t=10810

Código: Selecionar todos

{ "Copia de discos"                             , "rundll32.exe diskcopy.dll,DiskCopyRunDll"                       } ,;
{ "Formatar 'Disco (A)'"                        , "rundll32.exe shell32.dll,SHFormatDrive"                         } ,;
{ "URL Rlogin / Telnet / TN3270"                , "rundll32.exe url.dll,TelnetProtocolHandler %l"                  } ,;
{ "Abrir arquivo qualquer"                      , "rundll32.exe shell32.dll,OpenAs_RunDLL %1"                      }  }
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
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á

Inteiração com ferramentas do Windows

Mensagem por Pablo César »

Primeiramente ví algo parecido feito com arrays e aproveitei os comandos que utilizava o rundll32.exe, mas decidí que seria mais útil se o utilitário pudesse inserir novos comandos. Então coloquei em dbf e adicionei as rotinas de manutenção ao BD, também procurei na internet para adicionar novos exemplos, tem basto material sobre esse tema, este é um deles: http://pplware.sapo.pt/truques-dicas/14 ... o-windows/

O que não consegui consertar: é a barra de rolagem que desaparece após 2ª tela de editação de registros. Os outros componentes resolví chamando a função "Restaurar", mas a barra de rolagem do browse não conseguí rexibir. Notem que só aparece após passar o mouse por cima. Tentei este código mas não consigo achar o handle do browse:

Código: Selecionar todos

SetProperty("oForm1","oList","vScrollBar",.T.)
hWnd := GetFormHandle("oForm1")
SetScrollPos ( hWnd , 1 , This.Row , 1 )
SendMessage( hWnd , 0x0115 , 0 , 0 )
Talvez se acessasse a matriz interna talvez consiga. Tiver alguma dica, será bem vinda.
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.
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á

Inteiração com ferramentas do Windows

Mensagem por Pablo César »

Toledo escreveu:Bom, só para complementar... veja o tópico abaixo que tem algumas outros opções:

viewtopic.php?f=43&t=10810
Foi num exemplo parecido, não foi exatamente neste. Talvez devesse mencionar em forma de agradecimento pela contribuição dos comandos e pela idéia ao colega e compatriota: Lucho Miranda. Mas como o código é totalmente próprio, até os ícones foram criados novos e todos reditados, então não creio que isso seja necessário. Eis a o layout da tela para quem quiser conferir:

Imagem
Gostou Sr. Toledo ? Tem alguma dica sobre o scrollbar do browse ?
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.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Inteiração com ferramentas do Windows

Mensagem por Toledo »

Pablo César escreveu:O que não consegui consertar: é a barra de rolagem que desaparece após 2ª tela de editação de registros.
Pablo, o problema todo está no comando DRAW RECTANGLE.

Faça um teste com este código:

Código: Selecionar todos

#include <hmg.ch>
#define  QUEBRA       CHR(13)+CHR(10)

Function Main()
Set Date British
Set Century on
Set Exclusive OFF
Set Delete ON

USE WINUTILS NEW
SET LANGUAGE TO PORTUGUESE
SET MULTIPLE OFF WARNING
SET TOOLTIPSTYLE BALLOON
DEFINE WINDOW oForm1 AT 67,020 WIDTH 786 HEIGHT 476   ;
   TITLE 'Inteiração com o Windows' MAIN NOSIZE NOMAXIMIZE ;
   BACKCOLOR {236,233,216} ICON "WINUTILS"
   ON KEY ESCAPE ACTION ThisWindow.Release

   DEFINE STATUSBAR 
     STATUSITEM PADC(WindowsVersion()[1],55) WIDTH 300
	 STATUSITEM PADC("Usuário: "+AllTrim(NetName()),30) WIDTH 142
	 STATUSITEM PADR("Desenvolvido por Pablo César Arrascaeta",45) WIDTH 260 RAISED               ;
       ACTION MsgINFO (PadC("*** WinUtils V.1.0 ***",60)+QUEBRA+                                  ;
                       PadC(" ",60)+QUEBRA+                                                       ;
                       PadC(" Utilitário Freeware - Contribuição ao Fórum PCTOLEDO",60)+QUEBRA+   ;
                       PadC(" ",60)+QUEBRA+                                                       ;
                       PadC(" Desenvolvido com Harbour/MiniGUI - HMG 3.0.35",60),"A respeito de") ;
       ICON 'Imagens\CliqueAqui_16x16.ico'  TOOLTIP "Clique aqui para ver detalhes do desenvolvimento"                
	 STATUSITEM DTOC(DATE()) WIDTH 072
	 CLOCK 
   END STATUSBAR
   
   @ 013,014 BUTTON oButton_1 CAPTION "&Incluir" PICTURE "INCLUIR" LEFT WIDTH 110 HEIGHT 42 ;
   FONT 'MS Sans Serif' SIZE 10 BOLD ACTION Cadastrar(.t.) TOOLTIP "Inclui novos comandos"
   
   @ 013,142 BUTTON oButton_2 CAPTION "&Editar" PICTURE "EDITAR" LEFT WIDTH 110 HEIGHT 42        ;
   FONT 'MS Sans Serif' SIZE 10 BOLD ACTION Cadastrar(.f.) TOOLTIP "Altera comandos existentes"

   @ 013,270 BUTTON oButton_3 CAPTION "E&xcluir" PICTURE "EXCLUIR" LEFT WIDTH 110 HEIGHT 42        ;
   FONT 'MS Sans Serif' SIZE 10 BOLD ACTION Excluir() TOOLTIP "Elimina comando existente"
   
   @ 013,398 BUTTON oButton_4 CAPTION "Executa&r " PICTURE "EXECUTAR" LEFT WIDTH 110 HEIGHT 42 ;
   FONT 'MS Sans Serif' SIZE 10 BOLD ACTION Executar() TOOLTIP "Executa os comandos existentes"
   
   @ 013,526 BUTTON oButton_5 CAPTION "&Copiar" PICTURE "CLIPBOARD" LEFT WIDTH 110 HEIGHT 42        ;
   FONT 'MS Sans Serif' SIZE 10 BOLD ACTION Copiar() TOOLTIP "Copia para a Área de Transferência o comandos"
        
   @ 013,654 BUTTON oButton_6 CAPTION "&Sair" PICTURE "SAIR" LEFT WIDTH 110 HEIGHT 42        ;
   FONT 'MS Sans Serif' SIZE 10 BOLD ACTION ThisWindow.Release TOOLTIP "Encerra o programa"

   @ 080,008 BROWSE oList WIDTH 762 HEIGHT 326       ;
      OF oForm1 TOOLTIP "Mostra comandos existentes" ;
      Fields {"DESCRICAO","COMANDO"}                 ;
      HEADERS {"Descrição do Serviço","Comandos"}    ;
      WIDTHS {340,400}                               ;
      WORKAREA WINUTILS LOCK                         ;
	  FONT "Ms Sans Serif" SIZE -010                 ;
	  BACKCOLOR {255,255,255} FONTCOLOR {0,0,0}      ;
      ON CHANGE DBGOTO( oForm1.oList.VALUE )         ;
      ON DblClick Cadastrar(.f.)

   ON ENTER    Executar()
   oForm1.oList.SetFocus
END      WINDOW
CENTER   WINDOW oForm1
ACTIVATE WINDOW oForm1
RETURN(NIL)

Function Cadastrar(lNovo)
DEFINE WINDOW oForm2  AT 329,208 WIDTH 620 HEIGHT 166   ;
   TITLE "Editar registro" MODAL NOSIZE ;
   BACKCOLOR {236,233,116}
   ON KEY ESCAPE ACTION oForm2.Release                                             

   @ 022,022 LABEL oSDESCRICAO Value "Descrição" ;
      WIDTH 060 HEIGHT 020 OF oForm2             ;
      FONT "Ms Sans Serif" SIZE -010 BOLD        ; 
	  BACKCOLOR {236,233,116} FONTCOLOR {0,0,0}

   @ 020,090 TEXTBOX oGDESCRICAO VALUE Space(20) ;
      WIDTH 500 HEIGHT 022 OF oForm2             ;
      FONT "Ms Sans Serif" SIZE -010             ;
	  FONTCOLOR {0,0,0} BACKCOLOR {255,255,255}

   @ 050,028 LABEL oSCOMANDO Value "Comando"     ;
      WIDTH 056 HEIGHT 020 OF oForm2             ;
      FONT "Ms Sans Serif" SIZE -010 BOLD        ;
	  BACKCOLOR {236,233,116} FONTCOLOR {0,0,0}

   @ 048,090 TEXTBOX oGCOMANDO VALUE Space(20)   ;
      WIDTH 500 HEIGHT 022 OF oForm2             ;
      FONT "Ms Sans Serif" SIZE -010             ;
	  FONTCOLOR {0,0,0} BACKCOLOR {255,255,255}

   @ 088,344 BUTTON oSave CAPTION "&Salvar" PICTURE "SALVAR" LEFT   ;
      WIDTH 110 HEIGHT 034 FONT "Ms Sans Serif" SIZE -010 BOLD      ;
      ACTION Salvar(lNovo)

   @ 088,482 BUTTON oCancel CAPTION "&Cancelar" PICTURE "SAIR" LEFT ;
      WIDTH 110 HEIGHT 034 FONT "Ms Sans Serif" SIZE -010 BOLD      ;
      ACTION Cancelar()

   if !lNovo
      AbreReg()
   endif
END WINDOW
oForm2.Activate()
return nil

Function AbreReg()
oForm2.oGDESCRICAO.Value := DESCRICAO
oForm2.oGCOMANDO.Value := COMANDO
Return NIL

Function Salvar(lNovo)
If lNovo
   Append Blank
endif
RLock()
WINUTILS->DESCRICAO := oForm2.oGDESCRICAO.Value
WINUTILS->COMANDO := oForm2.oGCOMANDO.Value
UnLock
oForm1.oList.Refresh()
oForm2.Release
Return NIL

Function Cancelar()
oForm2.Release
oForm1.oList.SetFocus
Return nil

Function Executar()
LOCAL  cRun :=NIL

cRun := Alltrim(WINUTILS->COMANDO)
If "RUNDLL32" $ UPPER(cRun)
   cRun :=SUBSTR(cRun,AT(" ",cRun) +1)
   ShellExecute(0, "open","rundll32.exe", cRun  ,,1)
Else
   ShellExecute(0,nil,cRun,nil,nil,1)
Endif
oForm1.oList.SetFocus
RETURN(NIL)

Function Excluir()
If MsgYesNo("Deseja apagar o registro ?",Alltrim(WINUTILS->DESCRICAO),.t.)
   RLock()
   DELETE
   UnLock
   If Recno()=1
      SetProperty("oForm1","oList","VALUE",Recno()+1)
   Else
      SetProperty("oForm1","oList","VALUE",Recno()-1)
   Endif
   oForm1.oList.SetFocus
   oForm1.oList.Refresh()
Endif
Return Nil

Function Copiar()
LOCAL  cRun :=NIL

cCmd := Alltrim(WINUTILS->COMANDO)
Hb_GtInfo( HB_GTI_CLIPBOARDDATA, cCmd )
MsgExclamation ("Disponibilização com sucesso !","Área de Transferência")
RETURN(NIL)
Obs.: retirei a função Restaurar(), pois neste exemplo não é necessário.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
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á

Inteiração com ferramentas do Windows

Mensagem por Pablo César »

Obrigado Toledo !

Você tinha toda razão, era o DRAW RECTANGLE que estava empacando. Removí e deu certo.
Só que fiz algumas implementações e resurgiu o problema e apareceram outras questões:

Implementei: Verificar a resolução da tela, se for menor que 800x600 dar mensagem.
Ficou faltando: Acesso a tela de alteração do video na aba onde define a resolução.

Implementei: Ico nas janelas de incluir e alterar
Ficou faltando: Ico nas janelas de excluir e copiar

Implementei: Criação do DBF e adicionamento de dados quando na pasta do executável estiver faltando
Ficou faltando: Gerar o DBF com a execução de um segundo arquivo EXE

Implementei: Mudança de cor de fundo.
Ficou faltando: Devido a impossibilidade da HMG 3.0.35 em atualizar o BackColor da Janela em modo runtime, tive que retornar a chamada do Restaurar() para sobrepor a nova cor. Mas como o flecha do VScrollBar não aparece após mudar a cor, tive que apelar com o posicionamento do mouse numa posição fixa da janela (quebra galho) e não conseguí acionar o ShowScrolBar (chama em C).

Implementei: Uma opção que exibe um figura ICO simulando um CheckBox para mostrar ou ocultar os registros deletados do Browse.
Ficou faltando: Não conseguí mostrar em cor diferenciada os registros deletados.

Implementei: A verificação da pasta "Imagens" onde contém os BMPs e ICOs.
Ficou faltando: Uma forma de embutir num segundo EXE as imagens compactadas em forma binária e que descompactasse o arquivo na constatação da sua inexistência de arquivos.

Subí novamente o WinUtils com as alterações e com a nova descrição de versão. Para quem ajudar no melhoramento do aplicativo, irei mencionar em forma de agradecimento.

Essas novas implementações demostram que apesar de algumas limitações da ferramenta de desenvolvimento: é possível buscar alternativas verdadeiramente criativas para alcançar os objetivos. Vale como experiência no aprendizado.

Imagem
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.
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á

Inteiração com ferramentas do Windows

Mensagem por Pablo César »

Implementei: Uma opção que exibe um figura ICO simulando um CheckBox para mostrar ou ocultar os registros deletados do Browse.
Ficou faltando: Não conseguí mostrar em cor diferenciada os registros deletados.
Ja conseguí, foi facil:

Comecei com declarar esta matriz de cores logo no início do programa.

Código: Selecionar todos

Private fColor := { || if ( Deleted(), { 255,153,153 } , { 255,255,255 } ) }
E adicionei DYNAMICBACKCOLOR { fColor , fColor } na declaração do browse. Daí em mais é por conta do funcionamento normal do browse.

Troquei ON CHANGE de "DBGOTO( oForm1.oList.VALUE )" e fiz passei a chamar a função Skip_It() que faz mais de que uma coisa por vez.

Depois mudei os botões de Excluir/Recuperar registros caso o registro seja deleted(). Isso apenas um capricho meu. Mas isto funciona caso o "Mostrar deletados" esteja marcado. E alterei a função excluir, adicionando a opção do RECALL para caso deseje recuperar o registro deletado.

Na edição do registro também adicionei a pergunta se deseja recuperar o registro deletado.

Imagem

Só que até agora não conseguí descobrir como mudar a cor do SelectionBackColor (barra azul do browse) quando for deleted(). Mas irei descobrir após o fim de semana.
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.
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á

Inteiração com ferramentas do Windows

Mensagem por Pablo César »

Implementei: Ico nas janelas de incluir e alterar
Ficou faltando: Ico nas janelas de excluir e copiar
Isto ja conseguí resolver. Substituí o MsgYesNo() por uma função própria WAlert(), assim posso passar o parâmetro do ico que quero exibir. Nova versão considerando os registros deletados e exibição de ico nas janelas, ficou no lugar da anterior na seção de Downloads.
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.
Responder