Página 1 de 1

Teste do dia

Enviado: 03 Jul 2017 15:41
por JoséQuintas
Só testei e funcionou.
Acho que os nomes no fonte dizem tudo.

Código: Selecionar todos

#include "hbdyn.ch"
#include "hbclass.ch"
#require "hbwin.hbc"

PROCEDURE Main

   ControlPanel():Panel()
   ControlPanel():AddRemove()
   ControlPanel():NetworkConn()
   ControlPanel():Power()
   ControlPanel():Regional()
   ControlPanel():SafetyRemove()
   ControlPanel():SoundProperties()
   ControlPanel():SystemProperties()
   ControlPanel():SystemPropertiesAdvanced()
   ControlPanel():SystemRemote()
   ControlPanel():SystemComputerName()
   ControlPanel():SystemHardware()
   ControlPanel():WindowsSecurityCenter()
   ControlPanel():WindowsFirewall()

   Inkey(10)

   RETURN

CREATE CLASS ControlPanel
   METHOD Run( m, d, a )             INLINE hb_DynCall( { m, d, HB_DYN_CALLCONV_STDCALL }, 0, 0, a, WIN_SW_NORMAL )
   METHOD ControlRunDll( cApp )      INLINE ::Run( "Control_RunDLL", "shell32.dll", cApp )
   METHOD Panel()                    INLINE ::ControlRunDll( "" )
   METHOD SysDM()                    INLINE ::ControlRunDll( "sysdm.cpl" )
   METHOD AddRemove()                INLINE ::ControlRunDll( "appwiz.cpl" )
   METHOD NetworkConn()              INLINE ::ControlRunDll( "ncpa.cpl" )
   METHOD Power()                    INLINE ::ControlRunDll( "powercfg.cpl" )
   METHOD Regional()                 INLINE ::ControlRunDll( "intl.cpl,,0")
   METHOD SafetyRemove()             INLINE ::ControlRunDll( "HotPlug.dll" )
   METHOD SoundProperties()          INLINE ::ControlRunDll( "Mmsys.cpl,,0" )
   METHOD SystemProperties()         INLINE ::ControlRunDll( "Sysdm.cpl,,3" )
   METHOD SystemPropertiesAdvanced() INLINE ::ControlRunDll( "Sysdm.cpl,,4")
   METHOD SystemRemote()             INLINE ::ControlRunDll( "sysdm.cpl,,5" )
   METHOD SystemComputerName()       INLINE ::ControlRunDll( "Sysdm.cpl,,1" )
   METHOD SystemHardware()           INLINE ::ControlRunDll( "Sysdm.cpl,,2" )
   METHOD WindowsSecurityCenter()    INLINE ::ControlRunDll( "wscui.cpl" )
   METHOD WindowsFirewall()          INLINE ::ControlRunDll( "firewall.cpl" )

   END CLASS

Teste do dia

Enviado: 03 Jul 2017 16:23
por alxsts
Olá!

Interessante mesmo. O exemplo compilou e linkeditou. Na hora da execução deu RTE acusando a falta da variável "WIN_SW_NORMAL". Falta algum include ou parâmetro de compilação? Ou o nome da constante está incorreto.
Capturar.JPG
Se me permite, sugiro que altere o título do tópico para um que reflita o assunto do mesmo.

Teste do dia

Enviado: 03 Jul 2017 16:58
por JoséQuintas
coloquei #require "hbwin.hbc" mas não fez efeito, é ela que precisa: hbwin.hbc pra já acrescentar o CH

Testei mais alguns arquivos CPL da pasta
cpanel.png

Teste do dia

Enviado: 03 Jul 2017 17:13
por JoséQuintas
Aproveitando....

Compile usando -w3 -es2
Já teria o aviso na própria compilação de estar faltando isso.
Essa é uma das vantagens de compilar usando -w3 -es2
Não tem surpresas em run-time.
d:\temp>hbmk2 test
hbmk2: Processing environment options: -comp=mingw
hbmk2: Processing configuration: d:\harbour\bin\hbmk.hbc
Harbour 3.4.0dev (f8911388ba) (2017-06-04 18:03)
Copyright (c) 1999-2017, https://github.com/vszakats/harbour-core/
Compiling 'test.prg'...
500
test.prg:16: warning W0001 Ambiguous reference 'WIN_SW_NORMAL'

No code generated.

Teste do dia

Enviado: 03 Jul 2017 17:34
por JoséQuintas
Pensei até que tinha errado.
d:\cdrom\FONTES\INTEGRA>hbmk2 *.hbp -m -n
hbmk2: Processing environment options: -comp=mingw
hbmk2: Processing configuration: d:\harbour\bin\hbmk.hbc
hbmk2: Triggered by #require directive: hbhpdf.hbc
hbmk2: Triggered by #require directive: hbzebra.hbc
hbmk2: Triggered by #require directive: hbziparc.hbc
hbmk2: Triggered by #require directive: hbnetio.hbc
hbmk2: Triggered by #require directive: hbwin.hbc
hbmk2: Triggered by #require directive: hbtip.hbc
Agora fiquei sem entender o funcionamento de #require
Isso dá a impressão de que adicionaria automático.

Teste do dia

Enviado: 03 Jul 2017 18:15
por alxsts
Olá!

Desculpe mas não entendi o que queres dizer... Continua sem funcionar aqui...

Teste do dia

Enviado: 03 Jul 2017 18:55
por Toledo
alxsts escreveu:acusando a falta da variável "WIN_SW_NORMAL".
Alexandre, esta variável não existe no Harbour 32, então troque esta variável por 1 ou crie ela:

Código: Selecionar todos

#define WIN_SW_NORMAL     1
Abraços,

Teste do dia

Enviado: 03 Jul 2017 19:21
por JoséQuintas
Nem lembrava disso, no Harbour 3.4 o Viktor procurou deixar as variáveis do Windows como WIN_
No 3.2 deve ter algum equivalente, talvez procurando SW_NORMAL nos arquivos CH.
Também tinha na GTWVG mas não lembro se está como WIN_ ou outra coisa.

Aqui no Harbour 3.4 basta colocar HBWIN.HBC, e a variável está em hbwin.ch caso fosse #include

hbmk2 test hbwin.hbc

Teste do dia

Enviado: 03 Jul 2017 20:36
por alxsts
Olá!

Obrigado!

Agora funcionou!

WindowsControlPanel

Teste do dia

Enviado: 03 Jul 2017 21:44
por alxsts
Olá!

Duas coisas que me chamaram a atenção neste código: a classe ControlPanel não tem o método construtor e na Main() foi chamada diretamente. O normal que conheço é criar uma instância e usar...

Código: Selecionar todos

PROCEDURE Main

   LOCAL oWcp := ControlPanel():New()

   oWcp:Panel()
   oWcp:AddRemove()
   oWcp:NetworkConn()
   oWcp:Power()
   oWcp:Regional()
   oWcp:SafetyRemove()
   oWcp:SoundProperties()
   oWcp:SystemProperties()
   oWcp:SystemPropertiesAdvanced()
   oWcp:SystemRemote()
   oWcp:SystemComputerName()
   oWcp:SystemHardware()
   oWcp:WindowsSecurityCenter()
   oWcp:WindowsFirewall()

   Inkey(10)

   RETURN
Não sabia que isto é possível.

Teste do dia

Enviado: 03 Jul 2017 22:10
por JoséQuintas
Essa opção é interessante pra economizar variável e fonte.