Inteiração com ferramentas do Windows
Moderador: Moderadores
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Inteiração com ferramentas do Windows
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
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.
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

- Mensagens: 250
- Registrado em: 24 Out 2008 17:02
- Localização: Itaocara - RJ - Brasil
Re: Inteiração com ferramentas do Windows
Ficou muito bom! Poderia disponibilizar de onde você obteve o nome dos aplicativos do windows?

Rca Sistemas - Itaocara - RJ
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Inteiração com ferramentas do Windows
Bom, só para complementar... veja o tópico abaixo que tem algumas outros opções:
https://pctoledo.org/forum/viewto ... 43&t=10810
Abraços,
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" } }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
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
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Inteiração com ferramentas do Windows
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:Talvez se acessasse a matriz interna talvez consiga. Tiver alguma dica, será bem vinda.
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 )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.
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.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Inteiração com ferramentas do Windows
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:Toledo escreveu:Bom, só para complementar... veja o tópico abaixo que tem algumas outros opções:
viewtopic.php?f=43&t=10810
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.
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.
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Inteiração com ferramentas do Windows
Pablo, o problema todo está no comando DRAW RECTANGLE.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.
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)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
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
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Inteiração com ferramentas do Windows
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.

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.
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.
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.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Inteiração com ferramentas do Windows
Ja conseguí, foi facil: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.
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 } ) }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.
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.
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.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Inteiração com ferramentas do Windows
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.Implementei: Ico nas janelas de incluir e alterar
Ficou faltando: Ico nas janelas de excluir e copiar
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.
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.