Clique abaixo para nos ajudar
Login

Esqueci minha senha

Estamos no Facebook
Buscar
 
 

Resultados por:
 


Rechercher Busca avançada

Quem está conectado
12 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 12 Visitantes :: 1 Motor de busca

Nenhum

[ Ver toda a lista ]


O recorde de usuários online foi de 468 em 1/3/2012, 10:43
Últimos assuntos
» Ajuda a direcionar
8/12/2016, 01:17 por miiiih

» Alterar uma palavra num arquivo de texto
5/12/2016, 12:02 por Teseu

» Buscar endereço por CEP
3/12/2016, 19:59 por pedrossian

» USAR WEBSERVICE NO VFP9
2/12/2016, 09:50 por AJC

» BANIMENTO DE USUARIO
17/11/2016, 08:31 por FAF

» Impressora Ticket
15/11/2016, 09:20 por clima238

» Gráfico
9/11/2016, 10:43 por hidroluz

» TRANSPOR TABELA
9/11/2016, 10:34 por hidroluz

» MUDANÇA DO .DBF PARA POTSGREE
9/11/2016, 09:12 por AJC

» Website com videoaulas sobre linguagens de programação
8/11/2016, 09:56 por JLDR

» Parceria para desenvolvimento de template em Wordpress
7/11/2016, 19:15 por mindix

» Data fica invertida na planilha que é gerada via programa.
27/10/2016, 11:00 por Linghston

» Maximizar report direto do menu
21/10/2016, 20:48 por Rosangela Pires

» Fechar form com tempo
21/10/2016, 10:15 por Rosangela Pires

» URGENTE: Ajuda com impressora ELGIN-L42
14/10/2016, 09:53 por megasoft

» Opções para gerar NF-e
10/10/2016, 09:07 por mavsinfo

» Google Maps
8/10/2016, 15:08 por Rosangela Pires

» Mysql
5/10/2016, 11:22 por Marcos Guedes

» Acessando Banco em MYSQL de um projeto WORDPRESS
3/10/2016, 10:58 por Marcos Guedes

» OPTION SELECT MOSTRAR CAMPOS QUASE PRONTO
26/9/2016, 21:09 por BobKuspe

Alterar uma palavra num arquivo de texto

5/12/2016, 12:02 por Teseu

Olá prezados colegas de programação!

Este é eu primeiro post no fórum e gostaria de poder …

Comentários: 0

Buscar endereço por CEP

3/12/2016, 19:59 por pedrossian

Caros amigos, meu código para buscar endereço pelo CEP não funciona mais.
Alguém pode me …

Comentários: 0

USAR WEBSERVICE NO VFP9

2/12/2016, 09:50 por AJC

Pessoal, preciso de um material ou livro que me traga instruções como
usar a consumação de …

Comentários: 0

BANIMENTO DE USUARIO

13/11/2016, 16:21 por FAF

A usuária ROSANGELA PIRES ao tentar acessar o Forum obtem sempre a mensagem de BANIMENTO.
A mesma …

Comentários: 3

Impressora Ticket

15/11/2016, 09:20 por clima238

Bom dia,
Por favor alguém me explique porque o código abaixo imprime no ecrã em vez do printer: …

Comentários: 0

Estatísticas
Temos 6964 usuários registrados
O último usuário registrado atende pelo nome de Ricardo Cassolatto

Os nossos membros postaram um total de 17119 mensagens em 2577 assuntos

Numero de Série Físico do HD

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Resolvido Numero de Série Físico do HD

Mensagem por m@r<3|o em 28/9/2010, 15:22

Pessoal esse codigo me tras um numero ex 539583

"Pensava eu que fosse um numero fixo do HD"

só que formatei minha maquina e esse numero mudou pra ex 1204753

Código:
loScript = Createobject( "Scripting.FileSystemObject" )
THISFORM.label14.caption = STR(LOSCRIPT.GetDrive([C]).SerialNumber)

esse codigo para que exatamente serve nao era para manter o mesmo numero
após formatacao esse codigo nao é chamado de qual numero de Serie do HD ?

m@r<3|o
Participante Assíduo
Participante Assíduo


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por lardecristo em 29/9/2010, 10:30

O "serial number" disponibilizado é o fornecido pelo "format" ao HD, e no geral é aleatório, por isso que quando você formatou, o mesmo foi modificado, o que você precisa é tentar uma rotina que traga o número de série físico do HD se o mesmo disponibilizar.

Abraços,

lardecristo
Participa Bastante
Participa Bastante


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por m@r<3|o em 4/12/2010, 12:23

up ?

m@r<3|o
Participante Assíduo
Participante Assíduo


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por Marcos Guedes em 1/1/2011, 15:29

Você procurou em nosso em códigos úteis?

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por _batmanvfp_ em 22/1/2011, 12:51

Código:
DiskSerial()
FUNCTION DiskSerial
 
LPARAMETER cDisk
DECLARE SHORT GetVolumeInformation IN Win32API ;
        STRING wroot, ;
        STRING wnombuf, ;
        LONG wnomsize, ;
        STRING wnumero, ;
        STRING wmx, ;
        STRING wflag, ;
        STRING wsysbuf, ;
        INTEGER wsyssize

LOCAL wroot, wnombuf, wnumero, wmx
LOCAL wflag, wsysbuf, wnomsize, wsyssize
LOCAL n1,n2,n3,n4, w1,w2,w3,w4
wroot = IIF(EMPTY(cDisk), SYS(5), cDisk + ':') + ""
wnombuf = SPACE(255)
wnumero = SPACE(10)
wmx = SPACE(255)
wflag = SPACE(255)
wsysbuf = SPACE(255)
wnomsize = 255
wsyssize = 255
GetVolumeInformation (wroot, @wnombuf, @wnomsize, @wnumero, ;
  @wmx, @wflag, @wsysbuf, @wsyssize)
n4 = ASC(SUBSTR(wnumero,1,1))
n3 = ASC(SUBSTR(wnumero,2,1))
n2 = ASC(SUBSTR(wnumero,3,1))
n1 = ASC(SUBSTR(wnumero,4,1))
 
w1 = TRANSFORM(n1,'@0')
w2 = TRANSFORM(n2,'@0')
w3 = TRANSFORM(n3,'@0')
w4 = TRANSFORM(n4,'@0')
?RIGHT(w1,2) + RIGHT(w2,2) + "-" + RIGHT(w3,2) + RIGHT(w4,2)

Alguem pode confirmar para mim se realmente essa é a correta
e que mesmo formantando a maquina o numero nao muda OK ?

_batmanvfp_
Participa Bastante
Participa Bastante


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por alceu11 em 22/1/2011, 14:20

Voce ke se diz Mestres dos Mestres
que nao usa nenhum classe nos seus sistemas desenvolvidos em VFP
Que nao usa banco de dados Nativo em VFP,,,,,so tabelas livres,,,,,,,,
que trabalha ainda com replace na gravacao de dados, nos seus sistema!!

Voce tem so uma saida,
formate A sua maquina, e teste a rotina de novo


alceu11
Usuário 5 Estrelas
Usuário 5 Estrelas


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por _batmanvfp_ em 22/1/2011, 14:39

Alceu menos .......... realmente sou muito mestre no que preciso, não deixo a desejar.

prefiro aprender classes em C# ou VB.NET . tiro o melhor proveito do fox, não tenho duvidas.

e só quem tem experiencia de licenças saberá realmente a resposta para minha pergunta ,.....

peguei o codigo no foxite acredito que de lá esteja correto, hablas ?

Não posto respostas nas duvidas relacionadas a classes

pare de enxer o saco dos membros

já já esse seu jeitão vai EXPULSAR TUDO MUNDO DO FORUM

_batmanvfp_
Participa Bastante
Participa Bastante


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por alceu11 em 22/1/2011, 16:07

Eu nao preciso usar dos nike de usuarios sendo a mesma pessoa
para fazer a mesma pergunta

Voce abriu o topico nike Xma-Instinct, em 28/9/2010
e hoje 22/1/2011 com nike _batmanvfp,faz a pergunta sobre , o mesmo assunto, com dois nike!!
Pergunta:
Este seu compartamento esta adequado:? Voce pergunta para si mesmo?


Sua afirmacao hoje as 1539:

peguei o codigo no foxite acredito que de lá esteja correto, hablas ?
Pergunta
Com um codigo do Forum Foxit, voce quer saber se codigo esta correto ?
Resposta a sua pergunta
O correto nao escrever ao autor do Codigo, e perguntar sobre sua duvida,

e ainda vc escreve as 13:51hs de hoje
a sua pergunta como _Batman

Alguem pode confirmar para mim se realmente essa é a correta
e que mesmo formantando a maquina o numero nao muda OK ?

Comentarios finais.,
Vc mesmo confirmou, as minhas afirmacoes hoje das 14:20 hs,, sobre o Mestre!!,
Dando um exemplo bem classico, de estudar a classe, atraves, de um outra linguagem de Programacao. para depois tirar proveito do fox...!!







alceu11
Usuário 5 Estrelas
Usuário 5 Estrelas


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por Marcos Guedes em 22/1/2011, 22:13

Pessoal... vamos parar essa discussão que foge do assunto por aqui, senão teremos outro desentendimento como já ocorreu no site.

Quanto ao seu código, Marcelo, pensei o mesmo que o Alceu, por isso não respondi... Se realmente é uma grande necessidade saber se o código funciona, EU testaria a função, guardaria o retorno, formataria minha máquina, instalaria tudo novamente, executaria a função, compararia com o retorno, e tiraria minhas dúvidas.

Se não temos uma resposta concreta e "confiável" e precisamos da resposta, as vezes precisamos fazer loucuras deste tipo.

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por _batmanvfp_ em 22/1/2011, 23:18

ok esta resolvido o topico pode ser fechado

_batmanvfp_
Participa Bastante
Participa Bastante


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por Marcos Guedes em 23/1/2011, 10:17

Aguardando resposta de Xma-Instinct.

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por m@r<3|o em 23/1/2011, 10:38

o topico pode ser fechadook esta resolvido o topico pode ser fechado

m@r<3|o
Participante Assíduo
Participante Assíduo


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por hugo em 28/2/2011, 09:25

[Você precisa estar registrado e conectado para ver este link.] escreveu:
Código:
DiskSerial()
FUNCTION DiskSerial
 
LPARAMETER cDisk
DECLARE SHORT GetVolumeInformation IN Win32API ;
        STRING wroot, ;
        STRING wnombuf, ;
        LONG wnomsize, ;
        STRING wnumero, ;
        STRING wmx, ;
        STRING wflag, ;
        STRING wsysbuf, ;
        INTEGER wsyssize

LOCAL wroot, wnombuf, wnumero, wmx
LOCAL wflag, wsysbuf, wnomsize, wsyssize
LOCAL n1,n2,n3,n4, w1,w2,w3,w4
wroot = IIF(EMPTY(cDisk), SYS(5), cDisk + ':') + ""
wnombuf = SPACE(255)
wnumero = SPACE(10)
wmx = SPACE(255)
wflag = SPACE(255)
wsysbuf = SPACE(255)
wnomsize = 255
wsyssize = 255
GetVolumeInformation (wroot, @wnombuf, @wnomsize, @wnumero, ;
  @wmx, @wflag, @wsysbuf, @wsyssize)
n4 = ASC(SUBSTR(wnumero,1,1))
n3 = ASC(SUBSTR(wnumero,2,1))
n2 = ASC(SUBSTR(wnumero,3,1))
n1 = ASC(SUBSTR(wnumero,4,1))
 
w1 = TRANSFORM(n1,'@0')
w2 = TRANSFORM(n2,'@0')
w3 = TRANSFORM(n3,'@0')
w4 = TRANSFORM(n4,'@0')
?RIGHT(w1,2) + RIGHT(w2,2) + "-" + RIGHT(w3,2) + RIGHT(w4,2)

Alguem pode confirmar para mim se realmente essa é a correta
e que mesmo formantando a maquina o numero nao muda OK ?

e ai parceirao, valeu muito teu codigo, eu estou precisando demasiadamente dele

vou testar, fazer uma formatacao e assim que eu tiver retorno te falo

por enquanto muito obrigado!

e se eu demorar fique a vontade pra me cobrar!

valeu!

(estimativa de retorno em 1 semana no maximo )

_________________
"A tristeza é a falta de alegria, mais sem ela eu não poderia entender a alegria do fato de que a felicidade existe!"
Helio Leites - [Você precisa estar registrado e conectado para ver este link.]

hugo
Usuário 5 Estrelas
Usuário 5 Estrelas


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por hugo em 28/2/2011, 09:41

Uso o Cristal disk info para ver o nr de serie fisico do hd.
O codigo acima nao me da o nr de serie fisico, me da do volume!
O volume pode ser alterado na mao, logo nao eh seguro!

Detalhe, se o .prg estiver rodando em C: pega o volume certo, contudo, se o .prg estiver no D: por exemplo nao funciona.

Rodei o .prg no D: e ele me retornou o nr 2020-2020, e nao eh nem o serial do hd nem do volume!

ser formatar o hd o numero de volume muda sim! volume do disco, nao nr serie do hd!

valeu


consideracoes, eu queria pegar o nr de serie do disco fisicamente falando!



Última edição por hugo em 28/2/2011, 11:58, editado 1 vez(es)

_________________
"A tristeza é a falta de alegria, mais sem ela eu não poderia entender a alegria do fato de que a felicidade existe!"
Helio Leites - [Você precisa estar registrado e conectado para ver este link.]

hugo
Usuário 5 Estrelas
Usuário 5 Estrelas


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por hugo em 28/2/2011, 10:10

achei isto galera

Código:

**---------------------------------------------------------------**
** Program: Getvol.prg                                          **
** Purpose: Demonstrates how to declare and use the Win32        **
**          GetVolumeInformation API.                          **
**---------------------------------------------------------------**
PUBLIC lpRootPathName, ;
        lpVolumeNameBuffer, ;
        nVolumeNameSize, ;
        lpVolumeSerialNumber, ;
        lpMaximumComponentLength, ;
        lpFileSystemFlags, ;
        lpFileSystemNameBuffer, ;
        nFileSystemNameSize

lpRootPathName          = "E:\"      && Drive and directory path
lpVolumeNameBuffer      = SPACE(256) && lpVolumeName return buffer
nVolumeNameSize          = 256        && Size of/lpVolumeNameBuffer
lpVolumeSerialNumber    = 0          && lpVolumeSerialNumber buffer
lpMaximumComponentLength = 256
lpFileSystemFlags        = 0
lpFileSystemNameBuffer  = SPACE(256)
nFileSystemNameSize      = 256

DECLARE INTEGER GetVolumeInformation IN Win32API AS GetVolInfo ;
        STRING  @lpRootPathName, ;
        STRING  @lpVolumeNameBuffer, ;
        INTEGER nVolumeNameSize, ;
        INTEGER @lpVolumeSerialNumber, ;
        INTEGER @lpMaximumComponentLength, ;
        INTEGER @lpFileSystemFlags, ;
        STRING  @lpFileSystemNameBuffer, ;
        INTEGER nFileSystemNameSize

RetVal=GetVolInfo(@lpRootPathName, @lpVolumeNameBuffer, ;
                  nVolumeNameSize, @lpVolumeSerialNumber, ;
                  @lpMaximumComponentLength, @lpFileSystemFlags, ;
                  @lpFileSystemNameBuffer, nFileSystemNameSize)

**---------------------------------------------------------------**
** Return code values for file system flags. Return codes are    **
** shown in parentheses.                                        **
**---------------------------------------------------------------**
** FS_CASE_SENSITIVE    If this flag is set, the file system    **
**                      supports case-sensitive file names      **
**                      (0001h).                                **
**                                                              **
** FS_CASE_IS_PRESERVED  If this flag is set, the file system    **
**                      preserves the case of file names when  **
**                      it places a name on disk (0002h).      **
**                                                              **
** FS_UNICODE_ON_DISK    If this flag is set, the file system    **
**                      supports Unicode in file names as they  **
**                      appear on disk (0004h).                **
**                                                              **
** FS_PERSISTENT_ACLS    If this flag is set, the file system    **
**                      preserves and enforces ACLs. For        **
**                      example, NTFS preserves and enforces    **
**                      ACLs, but HPFS and FAT do not (0008h)  **
**                                                              **
** FS_FILE_COMPRESSION  The file system supports file-based    **
**                      compression (0010h)                    **
**                                                              **
** FS_VOL_IS_COMPRESSED  The specified volume is a compressed    **
**                      volume; for example, a DoubleSpace      **
**                      volume (8000h)                          **
**---------------------------------------------------------------**
** The following information is pertinent to several of the      **
** listed flags:                                                **
**---------------------------------------------------------------**
** The FS_VOL_IS_COMPRESSED flag is the only indicator of volume-**
** based compression. The file system name is not altered to    **
** indicate compression. This flag comes back set on a Double-  **
** Space volume, for example. With volume-based compression, an  **
** entire volume is either compressed or not compressed.        **
**                                                              **
** The FS_FILE_COMPRESSION flag indicates whether a file system  **
** supports file-based compression. With file-based compression, **
** individual files can be compressed or not compressed.        **
**                                                              **
** The FS_FILE_COMPRESSION and FS_VOL_IS_COMPRESSED flags are    **
** mutually exclusive; both bits cannot come back set.          **
**---------------------------------------------------------------**
** Note that the return value can be a combination of the        **
** individual return values. For example, a return value of 6    **
** indicates that case is preserved (FS_CASE_IS_PRESERVED) and  **
** the file system supports UNICODE in file names                **
** (FS_UNICODE_ON_DISK).                                        **
**---------------------------------------------------------------**

DEFINE WINDOW ShowInfo FROM 0,0 TO 10,70 ;
                      FLOAT CLOSE ;
                      TITLE "Drive Information for " + ;
                      ALLTRIM(lpRootPathName) ;
                      FONT "Courier",10

ACTIVATE WINDOW ShowInfo
MOVE WINDOW ShowInfo CENTER

**--------------------------------------------------------------**
** Because several of the return values are padded with a null  **
** terminator, you will need to strip off the null terminator  **
** in order to get the correct value, which is what is done    **
** using the LEFT, ALLTRIM, and LEN functions.                  **
**--------------------------------------------------------------**
@ 0,1 SAY "Drive & path name            : " + ;
  ALLTRIM(lpRootPathName)

@ 1,1 SAY "Volume name                  : " + ;
  LEFT(ALLTRIM(lpVolumeNameBuffer),LEN(ALLTRIM(lpVolumeNameBuffer))-1)

@ 2,1 SAY "Max #/chars in vol name      : " + ;
  ALLTRIM(STR(nVolumeNameSize))

@ 3,1 SAY "Volume Serial #              : " + ;
  ALLTRIM(STR(lpVolumeSerialNumber))

@ 4,1 SAY "Max #/chars in dir/file names: " + ;
  ALLTRIM(STR(lpMaximumComponentLength))

@ 5,1 SAY "File System Flags            : " + ;
  ALLTRIM(STR(lpFileSystemFlags))

@ 6,1 SAY "File System type            : " + ;
  LEFT(ALLTRIM(lpFileSystemNameBuffer), ;
  LEN(ALLTRIM(lpFileSystemNameBuffer))-1)

@ 7,1 SAY "File Sys Name Size          : " + ;
  ALLTRIM(STR(nFileSystemNameSize))


so que este numero eh o do volume, e o mesmo pode ser alterado, logo nao acho que seria grande coisa

valeu

_________________
"A tristeza é a falta de alegria, mais sem ela eu não poderia entender a alegria do fato de que a felicidade existe!"
Helio Leites - [Você precisa estar registrado e conectado para ver este link.]

hugo
Usuário 5 Estrelas
Usuário 5 Estrelas


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por hugo em 28/2/2011, 10:46

ai vai a solucao real, mais eh delphi, talvez alguem consiga gerar o .exe em delphi e poderiamos chamar o programa do visual foxpro

Código:

Função para pegar o serial físico do hd, e não o serial do volume do hd, pois o serial do volume do hd sempre que o hd é formatado ele muda e também fazendo uma copia do hd pelo ghost esse número do volume também é copiado. Então para um controle do programa o ideal é pegar
o serial físico do hd.

{ procedure utilizada pela função que pega o serial do hd }

procedure ChangeByteOrder( var Data; Size : Integer );
var
  ptr : PChar;
  i : Integer;
  c : Char;
begin
  ptr := @Data;
  for i := 0 to (Size shr 1)-1 do
  begin
    c := ptr^;
    ptr^ := (ptr+1)^;
    (ptr+1)^ := c;
    Inc(ptr,2);
  end;
end;

{ função que pega o serial number FÍSICO do HD e retorna string }

function GetIdeDiskSerialNumber : String;
  type
    TSrbIoControl = packed record
      HeaderLength: ULONG;
      Signature: Array[0..7] of Char;
      Timeout: ULONG;
      ControlCode: ULONG;
      ReturnCode: ULONG;
      Length: ULONG;
  end;
  SRB_IO_CONTROL = TSrbIoControl;
  PSrbIoControl = ^TSrbIoControl;

    TIDERegs = packed record
      bFeaturesReg : Byte; // especificar "comandos" SMART
      bSectorCountReg : Byte; // registro de contador de setor
      bSectorNumberReg : Byte; // registro de número de setores
      bCylLowReg : Byte; // valor de cilindro (byte mais baixo)
      bCylHighReg : Byte; // valor de cilindro (byte mais alto)
      bDriveHeadReg : Byte; // registro de drive/cabeça
      bCommandReg : Byte; // comando IDE
      bReserved : Byte; // reservado- tem que ser zero
  end;
    IDEREGS = TIDERegs;
    PIDERegs = ^TIDERegs;

  TSendCmdInParams = packed record
      cBufferSize : DWORD;
      irDriveRegs : TIDERegs;
      bDriveNumber : Byte;
      bReserved : Array[0..2] of Byte;
      dwReserved : Array[0..3] of DWORD;
      bBuffer : Array[0..0] of Byte;
    end;
    SENDCMDINPARAMS = TSendCmdInParams;
    PSendCmdInParams = ^TSendCmdInParams;
 
    TIdSector = packed record
      wGenConfig : Word;
      wNumCyls : Word;
      wReserved : Word;
      wNumHeads : Word;
      wBytesPerTrack : Word;
      wBytesPerSector : Word;
      wSectorsPerTrack : Word;
      wVendorUnique : Array[0..2] of Word;
      sSerialNumber : Array[0..19] of Char;
      wBufferType : Word;
      wBufferSize : Word;
      wECCSize : Word;
      sFirmwareRev : Array[0..7] of Char;
      sModelNumber : Array[0..39] of Char;
      wMoreVendorUnique : Word;
      wDoubleWordIO : Word;
      wCapabilities : Word;
      wReserved1 : Word;
      wPIOTiming : Word;
      wDMATiming : Word;
      wBS : Word;
      wNumCurrentCyls : Word;
      wNumCurrentHeads : Word;
      wNumCurrentSectorsPerTrack : Word;
      ulCurrentSectorCapacity : ULONG;
      wMultSectorStuff : Word;
      ulTotalAddressableSectors : ULONG;
      wSingleWordDMA : Word;
      wMultiWordDMA : Word;
      bReserved : Array[0..127] of Byte;
    end;
    PIdSector = ^TIdSector;

  const
    IDE_ID_FUNCTION = $EC;
    IDENTIFY_BUFFER_SIZE = 512;
    DFP_RECEIVE_DRIVE_DATA = $0007c088;
    IOCTL_SCSI_MINIPORT = $0004d008;
    IOCTL_SCSI_MINIPORT_IDENTIFY = $001b0501;
    DataSize = sizeof(TSendCmdInParams)-1+IDENTIFY_BUFFER_SIZE;
    BufferSize = SizeOf(SRB_IO_CONTROL)+DataSize;
    W9xBufferSize = IDENTIFY_BUFFER_SIZE+16;
  var
    hDevice : THandle;
    cbBytesReturned : DWORD;
    pInData : PSendCmdInParams;
    pOutData : Pointer; // PSendCmdOutParams
    Buffer : Array[0..BufferSize-1] of Byte;
    srbControl : TSrbIoControl absolute Buffer;
 
  begin
    Result := '';
    FillChar(Buffer,BufferSize,#0);
 
    if Win32Platform=VER_PLATFORM_WIN32_NT then
    // Windows NT, Windows 2000, Windows XP
    begin
      // recuperar handle da porta SCSI
      hDevice := CreateFile('\\.\Scsi0:',
      // Nota: '\\.\C:' precisa de privilégios administrativos
      GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,  nil, OPEN_EXISTING, 0, 0);
      if hDevice=INVALID_HANDLE_VALUE then Exit;
      try
        srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL);
        System.Move('SCSIDISK',srbControl.Signature,8);
        srbControl.Timeout := 2;
        srbControl.Length := DataSize;
        srbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY;
        pInData := PSendCmdInParams(PChar(@Buffer)
        +SizeOf(SRB_IO_CONTROL));
        pOutData := pInData;
      with pInData^ do
      begin
        cBufferSize := IDENTIFY_BUFFER_SIZE;
        bDriveNumber := 0;
        with irDriveRegs do
        begin
          bFeaturesReg := 0;
          bSectorCountReg := 1;
          bSectorNumberReg := 1;
          bCylLowReg := 0;
          bCylHighReg := 0;
          bDriveHeadReg := $A0;
          bCommandReg := IDE_ID_FUNCTION;
        end;
      end;
      if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT, @Buffer, BufferSize, @Buffer, BufferSize, cbBytesReturned, nil ) then Exit;
    finally
      CloseHandle(hDevice);
    end;
  end
  else
  begin
      // Windows 95 OSR2, Windows 98, Windows ME
      hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );
      if hDevice=INVALID_HANDLE_VALUE then Exit;
      try
        pInData := PSendCmdInParams(@Buffer);
        pOutData := @pInData^.bBuffer;
        with pInData^ do
        begin
          cBufferSize := IDENTIFY_BUFFER_SIZE;
          bDriveNumber := 0;
          with irDriveRegs do
          begin
            bFeaturesReg := 0;
            bSectorCountReg := 1;
            bSectorNumberReg := 1;
            bCylLowReg := 0;
            bCylHighReg := 0;
            bDriveHeadReg := $A0;
            bCommandReg := IDE_ID_FUNCTION;
          end;
        end;
        if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA, pInData, SizeOf(TSendCmdInParams)-1, pOutData, W9xBufferSize, cbBytesReturned, nil ) then Exit;
        finally
          CloseHandle(hDevice);
        end;
    end;
    with PIdSector(PChar(pOutData)+16)^ do
    begin
        ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber));
        SetString(Result,sSerialNumber,SizeOf(sSerialNumber));
    end;
  end;

Para usar:

  Label1.Caption := GetIdeDiskSerialNumber;

Não sei porque mas a função retorna a string com 12 espaços antes do serial, então usei a função Trim(), para eliminar os espaços

  Label1.Caption := Trim(GetIdeDiskSerialNumber);

  Obs. No windows95, windows98 e windowsMe, deve-se instalar o arquivo "Smartvsd.vxd" na pasta "c:windows\system\iosubsys\" para poder funcionar.

Por  [Você precisa estar registrado e conectado para ver este link.]

fonte
[Você precisa estar registrado e conectado para ver este link.]

_________________
"A tristeza é a falta de alegria, mais sem ela eu não poderia entender a alegria do fato de que a felicidade existe!"
Helio Leites - [Você precisa estar registrado e conectado para ver este link.]

hugo
Usuário 5 Estrelas
Usuário 5 Estrelas


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por hugo em 28/2/2011, 10:48

achei o programa que muda o volume

[Você precisa estar registrado e conectado para ver este link.]

_________________
"A tristeza é a falta de alegria, mais sem ela eu não poderia entender a alegria do fato de que a felicidade existe!"
Helio Leites - [Você precisa estar registrado e conectado para ver este link.]

hugo
Usuário 5 Estrelas
Usuário 5 Estrelas


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por Marcos Guedes em 28/2/2011, 15:05

Hugo.... recaptulando...
Você encontrou a solução para o ler o número de série do HD?

Seria este em Delphi, mesmo?

Caso seja, acredito que posso criar uma DLL em Delphi para ser lida pelo VFP.

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por hugo em 5/3/2011, 05:30

sim

a solucao de leitra do serial do hd, codigo em delphi!

_________________
"A tristeza é a falta de alegria, mais sem ela eu não poderia entender a alegria do fato de que a felicidade existe!"
Helio Leites - [Você precisa estar registrado e conectado para ver este link.]

hugo
Usuário 5 Estrelas
Usuário 5 Estrelas


Voltar ao Topo Ir em baixo

Resolvido RESOLVIDO

Mensagem por _batmanvfp_ em 11/3/2011, 22:04

Eis essa é a Verdadeira Funcão , este topícu pode ser Fecrado
Obrigado aos que se propuzeram a ajudar


Código:
cSerialHD = SerialHD(Substr(Sys(5), 1, 1))
?cSerialHD
Function SerialHD
Parameters Unidade
If Empty(Unidade)
Unidade = 'C'
Endif
declara() && Declare ...
Local m.buflen, m.buf
m.buflen = 104
m.buf = Replicate(Chr(0), m.buflen)
m.str1 = "C"
m.vnb = Replicate(Chr(0),64)
m.vnbs = 64
m.vsn = 0
m.mcl = 0
m.fsf = 0
m.fsnb = Replicate(Chr(0),10)
m.fsnbs = 10
GetVolumeInformation(m.str1 + ":\", @m.vnb, m.vnbs,@m.vsn, @m.mcl, @m.fsf, @m.fsnb, m.fsnbs)
If m.vsn < 0
m.vsn = m.vsn + 168
Endif
m.vsn = Padl(Alltrim(Substr(Transform(m.vsn,"@0"), 3)), 8, "0")
m.drivenumber = Asc(m.str1) - Asc("C")
handle = CreateFile("\\.\" + Chr(Asc("c") + m.drivenumber) + ":",0xC0000000, 3, 0, 3, 0, 0)
m.sn = ""
m.mod = ""
m.rev = ""
If handle <> -1
m.sci =""
m.sci = m.sci + Chr(0) + Chr(2) + Chr(0) + Chr(0)
m.sci = m.sci + Chr(0)
m.sci = m.sci + Chr(1)
m.sci = m.sci + Chr(1)
m.sci = m.sci + Chr(0)
m.sci = m.sci + Chr(0)
m.sci = m.sci + Chr(0xA0)
m.sci = m.sci + Chr(0xEC)
m.sci = m.sci + Chr(0)
m.sci = m.sci + Chr(0)
m.sci = m.sci + Replicate(Chr(0), 499)
m.sco = Replicate(Chr(0), 2048)
m.ret_buffersize = 0
m.otv=DeviceIoControl( handle,;
0x7C088,;
@m.sci,;
LEN(sci),;
@m.sco,;
LEN(sco),;
@m.ret_buffersize,;
0;
)
CloseHandle(handle)
If m.otv <> 0
m.sn = Chrtran( Alltrim( conv21( Substr(m.sco, 37, 20) ) ),Chr(0), "")
m.rev = Chrtran( Alltrim( conv21( Substr(m.sco, 63, 8) ) ),Chr(0), "")
m.mod = Chrtran( Alltrim( conv21( Substr(m.sco, 71, 40) ) ),Chr(0), "")
Endif
Endif
If Empty(m.sn)
handle = CreateFile("\\.\" + Chr(Asc("c") + m.drivenumber) +":", 0x00000000, 3,0, 3, 0, 0)
If handle <> -1
m.sn = ""
m.mod = ""
m.rev = ""
m.sci = Replicate(Chr(0),1024)
m.sco = Replicate(Chr(0),1024)
m.ret_buffersize = 0
m.otv = DeviceIoControl( handle,;
0x2D1400,;
@m.sci,;
LEN(sci),;
@m.sco,;
LEN(sco),;
@m.ret_buffersize,;
0;
)
CloseHandle(handle)
If m.otv <> 0
m.pos0 = Asc(Substr(m.sco,13,1))
m.pos1 = Asc(Substr(m.sco,17,1))
If m.pos0 > 0
m.pos1 = m.pos0
Endif
m.pos2 = Asc(Substr(m.sco, 21, 1))
m.pos3 = Asc(Substr(m.sco, 25, 1))
m.mod = Substr(m.sco, m.pos1+1, m.pos2 - m.pos1)
m.pos4 = At(Chr(0), m.mod)
If m.pos4 > 0
m.mod = Alltrim(Chrtran(m.mod, Chr(0), ""))
Endif
If m.pos3 > m.pos2
m.rev = Substr(m.sco, m.pos2+1, m.pos3 - m.pos2)
Else
m.rev = Substr(m.sco, m.pos2+1)
Endif
m.pos4 = At(Chr(0), m.rev)
If m.pos4 > 0
m.rev = Alltrim(Left(m.rev, m.pos4 - 1))
Endif
If m.pos3 > 0
m.pos3 = m.pos3 + 1
m.sco1 = Substr(m.sco, m.pos3, 40)
m.sco1 = Alltrim(m.sco1)
m.sn = ""
m.pos3 = 1
For m.j = 1 To 20
m.ch1 = Chr(Evaluate("0x" +Alltrim(Substr(m.sco1, m.pos3, 2))))
m.pos3 = m.pos3 + 2
m.ch2 = Chr(Evaluate("0x" +Alltrim(Substr(m.sco1, m.pos3, 2))))
m.pos3 = m.pos3 + 2
m.sn = m.sn + m.ch2 + m.ch1
Endfor
m.sn = Alltrim(Chrtran(m.sn, Chr(0), ""))
Else
m.sn = ""
Endif
Endif
Endif
Endif
Serial = m.mod + m.rev + m.sn
Clear Dlls CloseHandle, CreateFile, DeviceIoControl, GetLogicalDriveStrings, GetDriveType, GetVolumeInformation
Return Serial
Function conv21
Lparameters m.str
If Len(m.str)%2 = 1
m.str = m.str + " "
Endif
Local m.i, m.str2
m.str2 = ""
For m.i=1 To Len(m.str)
m.str2 = m.str2 + Substr(m.str, m.i + Iif(m.i%2=0, -1, 1), 1)
Endfor
Return m.str2
Function declara
Declare Integer CloseHandle In kernel32 ;
INTEGER hObject
Declare Integer CreateFile In kernel32 ;
STRING lpFileName,;
INTEGER dwDesiredAccess,;
INTEGER dwShareMode,;
INTEGER lpSecurityAttributes,;
INTEGER dwCreationDisposition,;
INTEGER dwFlagsAndAttributes,;
INTEGER hTemplateFile
Declare Integer DeviceIoControl In kernel32 ;
INTEGER hDevice,;
INTEGER dwIoControlCode,;
STRING @lpInBuffer,;
LONG nInBufferSize,;
STRING @lpOutBuffer,;
LONG nOutBufferSize,;
INTEGER @lpBytesReturned,;
INTEGER lpOverlapped
Declare Integer GetLogicalDriveStrings In Win32API ;
INTEGER buflen,;
STRING @buf
Declare Integer GetDriveType In Win32API String cpath
Declare Integer GetVolumeInformation In Win32API ;
STRING lpRootPathName,;
STRING @lpVolumeNameBuffer,;
INTEGER nVolumeNameSize,;
LONG @lpVolumeSerialNumber,;
INTEGER @lpMaximumComponentLength,;
INTEGER @lpFileSystemFlags,;
STRING @lpFileSystemNameBuffer,;
INTEGER nFileSystemNameSize
Return

_batmanvfp_
Participa Bastante
Participa Bastante


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por hugo em 29/3/2011, 07:44

puts cara, conferido!

.M.E.U.S..P.A.R.A.B.E.N.S.

TESTEI E FUNCIONAOU 120%

maravilha! revirei a net de tudo quanto eh jeito e nao achava isto

nota 100000000 pra voce



[Você precisa estar registrado e conectado para ver este link.] escreveu:Eis essa é a Verdadeira Funcão , este topícu pode ser Fecrado
Obrigado aos que se propuzeram a ajudar

_________________
"A tristeza é a falta de alegria, mais sem ela eu não poderia entender a alegria do fato de que a felicidade existe!"
Helio Leites - [Você precisa estar registrado e conectado para ver este link.]

hugo
Usuário 5 Estrelas
Usuário 5 Estrelas


Voltar ao Topo Ir em baixo

Resolvido Re: Numero de Série Físico do HD

Mensagem por Conteúdo patrocinado Hoje à(s) 17:18


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum