Clipper On Line • Ver Tópico - Função WIN_OSNETREGOK()

Função WIN_OSNETREGOK()

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Função WIN_OSNETREGOK()

Mensagempor Itamar M. Lins Jr. » 22 Out 2010 13:43

Ola!

Função muito importate, pois ajusta o registro do windows otimiza para trabalhar com DBF.
Já coloque aqui no inicio do meu sistema, notei uma maior velocidade no XP na abertura dos DBF's :-)
Falta os testes com Win7 pois notei que está mais lento na indexação só que é em um cliente.


If !WIN_OSNETREGOK() //Precisa direitos ADM
   If !WIN_OSNETREGOK(.t.,.t.) //primeiro .t. é para ajustar XP/W98..., o segundo ajusta no vista.
      MsgInfo('Registro do windows não ajustado !')
   EndIf   
EndIf



Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6960
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 313 vezes
Mens.Curtidas: 508 vezes

Re: Função WIN_OSNETREGOK()

Mensagempor lugab » 22 Out 2010 16:58

O fórum agradece por vc compartilhar seus conhecimentos, Itamar.

Duas duvidas:

-O jeito que está o código q vc postou, é só pra windows XP, né ?

-o ajuste de regoistro só tem efeito na estação que executa a rotina, né ?

Gabriel
lugab
lugab
Colaborador

Colaborador
 
Mensagens: 843
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 38 vezes

Re: Função WIN_OSNETREGOK()

Mensagempor Itamar M. Lins Jr. » 22 Out 2010 18:06

Ola!
O jeito que está o código q vc postou, é só pra windows XP, né ?

É para todas as versões do windows inclusive win7.
-o ajuste de registro só tem efeito na estação que executa a rotina, né ?


Exato e precisa dos direitos de admin no Vista/7 etc..

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6960
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 313 vezes
Mens.Curtidas: 508 vezes

Re: Função WIN_OSNETREGOK()

Mensagempor lugab » 22 Out 2010 20:00

Obrigado, Itamar.

Agora eu Vou experimentar ela num ambiente de produção.

Uma última pergunta: Vc sabe dizer o nome da lib q tem essa função, pra quem usa Xharbour ?

Obrigado por tudo

gabriel
lugab
lugab
Colaborador

Colaborador
 
Mensagens: 843
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 38 vezes

Re: Função WIN_OSNETREGOK()

Mensagempor TerraSoftware » 23 Out 2010 10:37

Caros colegas.
Eu tambem nao encontrei a respectiva funcao no meu xharbour.
Pode nos ajudar Itamar?
Ou é exclusividade de quem usa harbour?
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
Avatar de usuário

TerraSoftware
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 353
Data de registro: 28 Jul 2004 13:14
Cidade/Estado: Cianorte-PR
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Função WIN_OSNETREGOK()

Mensagempor Itamar M. Lins Jr. » 23 Out 2010 10:46

Ola!
É exclusiva do Harbour, mas nada impede que seja ajustada para o xHarbour.
Os ajustes podem ser feitos até manualmente.
Abaixo o código da duas funções. Eu cortei a parte da Licença.
Tem também a WIN_OSNETVREDIROK() para os Win9X

#include "common.ch"
#include "directry.ch"
#include "hbwin.ch"

/* NOTE: To change any of these registry settings
         Administrator rights are required by default in Windows. [vszakats] */

FUNCTION WIN_OSNETREGOK( lSetIt, lDoVista )
   LOCAL bRetVal := .T.
   LOCAL cKeySrv
   LOCAL cKeyWks

   IF ! ISLOGICAL( lSetIt )
      lSetIt := .F.
   ENDIF
   IF ! ISLOGICAL( lDoVista )
      lDoVista := .T.
   ENDIF

   IF ! lDoVista .AND. win_osIsVistaOrUpper()
      /* do nothing */
   ELSEIF hb_osIsWin9x()
      bRetVal := win_regQuery( WIN_HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\VxD\VREDIR", "DiscardCacheOnOpen", 1, lSetIt )
   ELSE
      cKeySrv := "System\CurrentControlSet\Services\LanmanServer\Parameters"
      cKeyWks := "System\CurrentControlSet\Services\LanmanWorkStation\Parameters"

      IF lSetIt
         lSetIt := ! hb_osIsWinNT() .OR. wapi_IsUserAnAdmin()
      ENDIF

      /* Server settings */
      bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "CachedOpenLimit", 0, lSetIt )
      bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "EnableOpLocks", 0, lSetIt ) /* Q124916 */
      bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "EnableOpLockForceClose", 1, lSetIt )
      bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "SharingViolationDelay", 0, lSetIt )
      bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "SharingViolationRetries", 0, lSetIt )

      IF win_osIsVistaOrUpper()
         /* If SMB2 is enabled turning off oplocks does not work, so SMB2 is required to be turned off on Server. */
         bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "SMB2", 0, lSetIt )
      ENDIF

      /* Workstation settings */
      bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "UseOpportunisticLocking", 0, lSetIt )
      bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "EnableOpLocks", 0, lSetIt )
      bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "EnableOpLockForceClose", 1, lSetIt )
      bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "UtilizeNtCaching", 0, lSetIt )
      bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "UseLockReadUnlock", 0, lSetIt )

      IF win_osIsVistaOrUpper()
         bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "FileInfoCacheLifetime", 0, lSetIt )
         bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "FileNotFoundCacheLifetime", 0, lSetIt )
         bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "DirectoryCacheLifetime", 0, lSetIt )
      ENDIF

      IF hb_osIsWin2K()
         bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\MRXSmb\Parameters", "OpLocksDisabled", 1, lSetIt )
      ENDIF
   ENDIF

   RETURN bRetVal

FUNCTION WIN_OSNETVREDIROK( /* @ */ nResult )
   LOCAL aFiles

   nResult := 0

   IF hb_osIsWin9x()
      aFiles := Directory( hb_GetEnv( "WINDIR", "C:\WINDOWS" ) + "\SYSTEM\VREDIR.VXD" )  /* Check for faulty files. */
      IF ! Empty( aFiles )
         IF aFiles[ 1 ][ F_SIZE ] == 156749 .AND. aFiles[ 1 ][ F_TIME ] == "11:11:10"
            nResult := 1111
         ELSEIF aFiles[ 1 ][ F_SIZE ] == 140343 .AND. aFiles[ 1 ][ F_TIME ] == "09:50:00"
            nResult := 950
         ENDIF
      ENDIF
   ENDIF

   RETURN Empty( nResult )


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6960
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 313 vezes
Mens.Curtidas: 508 vezes

Re: Função WIN_OSNETREGOK()

Mensagempor TerraSoftware » 23 Out 2010 10:50

Caro colega Itamar.
Isso realmente melhora o uso de dbf's? Vale a pena?
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
Avatar de usuário

TerraSoftware
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 353
Data de registro: 28 Jul 2004 13:14
Cidade/Estado: Cianorte-PR
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Função WIN_OSNETREGOK()

Mensagempor Itamar M. Lins Jr. » 23 Out 2010 11:31

Lógico, que melhora, algumas dessas é até crucial.
É um ajuste de como o windows irá tratar os travamentos dos DBF's, porque o windows interfere na abertura e fechamento dos arquivos.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6960
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 313 vezes
Mens.Curtidas: 508 vezes

Re: Função WIN_OSNETREGOK()

Mensagempor alaminojunior » 24 Out 2010 20:32

Ajustado para xHarbour. Por favor tirem suas conclusões.
#include "common.ch"
#include "directry.ch"

#define WIN_HKEY_LOCAL_MACHINE 0
#define WIN_HKEY_CLASSES_ROOT 1
#define WIN_HKEY_CURRENT_USER 2
#define WIN_HKEY_CURRENT_CONFIG 3
#define WIN_HKEY_LOCAL_MACHINE 4
#define WIN_HKEY_USERS 5

/* NOTE: To change any of these registry settings
         Administrator rights are required by default in Windows. [vszakats] */

FUNCTION WIN_OSNETREGOK( lSetIt, lDoVista )
   LOCAL bRetVal := .T.
   LOCAL cKeySrv
   LOCAL cKeyWks

   IF ! ISLOGICAL( lSetIt )
      lSetIt := .F.
   ENDIF
   IF ! ISLOGICAL( lDoVista )
      lDoVista := .T.
   ENDIF

   IF ! lDoVista .AND. Os_IsWinVISTA() //win_osIsVistaOrUpper()
      /* do nothing */
   ELSEIF Os_IsWin9X() // hb_osIsWin9x()
      bRetVal := QueryRegistry( WIN_HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\VxD\VREDIR", "DiscardCacheOnOpen", 1, lSetIt )
   ELSE
      cKeySrv := "System\CurrentControlSet\Services\LanmanServer\Parameters"
      cKeyWks := "System\CurrentControlSet\Services\LanmanWorkStation\Parameters"

      IF lSetIt
         lSetIt := ! Os_IsWinNT() .OR. os_IsUserAnAdmin() //wapi_IsUserAnAdmin()
      ENDIF

      /* Server settings */
      bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "CachedOpenLimit", 0, lSetIt )
      bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "EnableOpLocks", 0, lSetIt ) /* Q124916 */
      bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "EnableOpLockForceClose", 1, lSetIt )
      bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "SharingViolationDelay", 0, lSetIt )
      bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "SharingViolationRetries", 0, lSetIt )

      IF Os_IsWinVISTA() // win_osIsVistaOrUpper()
         /* If SMB2 is enabled turning off oplocks does not work, so SMB2 is required to be turned off on Server. */
         bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "SMB2", 0, lSetIt )
      ENDIF

      /* Workstation settings */
      bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "UseOpportunisticLocking", 0, lSetIt )
      bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "EnableOpLocks", 0, lSetIt )
      bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "EnableOpLockForceClose", 1, lSetIt )
      bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "UtilizeNtCaching", 0, lSetIt )
      bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "UseLockReadUnlock", 0, lSetIt )

      IF Os_IsWinVISTA() //win_osIsVistaOrUpper()
         bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "FileInfoCacheLifetime", 0, lSetIt )
         bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "FileNotFoundCacheLifetime", 0, lSetIt )
         bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "DirectoryCacheLifetime", 0, lSetIt )
      ENDIF

      IF Os_IsWinNT() //hb_osIsWin2K()
         bRetVal := bRetVal .AND. QueryRegistry( WIN_HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\MRXSmb\Parameters", "OpLocksDisabled", 1, lSetIt )
      ENDIF
   ENDIF

   RETURN bRetVal

FUNCTION WIN_OSNETVREDIROK( /* @ */ nResult )
   LOCAL aFiles

   nResult := 0

   IF Os_IsWin9X() // hb_osIsWin9x()
      aFiles := Directory( GetEnv( "WINDIR", "C:\WINDOWS" ) + "\SYSTEM\VREDIR.VXD" )  /* Check for faulty files. */
      IF ! Empty( aFiles )
         IF aFiles[ 1 ][ F_SIZE ] == 156749 .AND. aFiles[ 1 ][ F_TIME ] == "11:11:10"
            nResult := 1111
         ELSEIF aFiles[ 1 ][ F_SIZE ] == 140343 .AND. aFiles[ 1 ][ F_TIME ] == "09:50:00"
            nResult := 950
         ENDIF
      ENDIF
   ENDIF

   RETURN Empty( nResult )
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar de usuário

alaminojunior
Colaborador

Colaborador
 
Mensagens: 1689
Data de registro: 16 Dez 2005 20:26
Cidade/Estado: Ubatuba - SP
Curtiu: 27 vezes
Mens.Curtidas: 11 vezes

Re: Função WIN_OSNETREGOK()

Mensagempor TerraSoftware » 25 Out 2010 10:25

Caro colega Alaminojunior.
Minha compilacao nao encontrou a funcao os_IsUserAnAdmin().
Onde posso encontrar?
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
Avatar de usuário

TerraSoftware
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 353
Data de registro: 28 Jul 2004 13:14
Cidade/Estado: Cianorte-PR
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Função WIN_OSNETREGOK()

Mensagempor alaminojunior » 25 Out 2010 11:09

Pode ser a versão do xHarbour. Algumas funções dentro desta rotina, foram incorporadas na versão 1.2.1 em diante.

[OT] A propósito, ví que você utiliza o BCC 6.3. Eu baixei aquele "zip enxugado" disponibilizado aqui no fórum, e não vieram alguns arquivos da pasta INCLUDE, e com isso não consigo compilar os prg´s. De onde o colega baixou o BCC 6.3 ?
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar de usuário

alaminojunior
Colaborador

Colaborador
 
Mensagens: 1689
Data de registro: 16 Dez 2005 20:26
Cidade/Estado: Ubatuba - SP
Curtiu: 27 vezes
Mens.Curtidas: 11 vezes

Re: Função WIN_OSNETREGOK()

Mensagempor TerraSoftware » 25 Out 2010 14:43

Caro colega alaminojunior.
Uso o xharbour 1.0.0, provavelmente que o problema seja este, mas nao estou com tempo de migrar agora.
Sobre o bcc, eu tambem baixei o zip enxuto e nao tive problemas com falta de includes. Talvez o seu problema esteja em nao ter observados que os arquivos .h estao expalhados em varias subpastas. Dá uma olhadinha ai.
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
Avatar de usuário

TerraSoftware
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 353
Data de registro: 28 Jul 2004 13:14
Cidade/Estado: Cianorte-PR
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Função WIN_OSNETREGOK()

Mensagempor alaminojunior » 25 Out 2010 15:09

Enquanto não faz o update do xHarbour, você pode fazer as alterações manualmente. O inconveniente é ter que fazer pc por pc em cada cliente.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar de usuário

alaminojunior
Colaborador

Colaborador
 
Mensagens: 1689
Data de registro: 16 Dez 2005 20:26
Cidade/Estado: Ubatuba - SP
Curtiu: 27 vezes
Mens.Curtidas: 11 vezes

Re: Função WIN_OSNETREGOK()

Mensagempor sygecom » 26 Out 2010 15:57

Buenas Alamino,
Assim prontinho vou me acostumar mal em...rsrsrs Vlw pela tradução. abraços.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7020
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 133 vezes

Re: Função WIN_OSNETREGOK()

Mensagempor alaminojunior » 26 Out 2010 16:47

sygecom escreveu:Assim prontinho vou me acostumar mal em...rsrsrs Vlw pela tradução. abraços.

Mas bah...capaz !
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar de usuário

alaminojunior
Colaborador

Colaborador
 
Mensagens: 1689
Data de registro: 16 Dez 2005 20:26
Cidade/Estado: Ubatuba - SP
Curtiu: 27 vezes
Mens.Curtidas: 11 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro