取CPU系列号

 CPU系列号:  
  FUNCTION   GetCPUID   :   TCPUID;   assembler;   register;  
  asm  
      PUSH         EBX                   {Save   affected   register}  
      PUSH         EDI  
      MOV           EDI,EAX           {@Resukt}  
      MOV           EAX,1  
      DW             $A20F               {CPUID   Command}  
      STOSD             {CPUID[1]}  
      MOV           EAX,EBX  
      STOSD                               {CPUID[2]}  
      MOV           EAX,ECX  
      STOSD                               {CPUID[3]}  
      MOV           EAX,EDX  
      STOSD                               {CPUID[4]}  
      POP           EDI             {Restore   registers}  
      POP           EBX  
  END;  
   
  function   GetCPUIDStr:String;  
  var  
      CPUID:TCPUID;  
  begin  
      CPUID:=GetCPUID;  
      Result:=IntToHex(CPUID[1],8)+IntToHex(CPUID[2],8)+IntToHex(CPUID[3],8)+IntToHex(CPUID[4],8);  
  end  
   
  调用:  
  Edit1.text:=GetCPUIDStr;  

Posted in 软件开发 at January 22, 2007. by 傻猫 .    Views: 2979    No Comments

取硬盘系列号

取硬盘系列号:  
  function   GetIdeSerialNumber:   pchar;     //获取硬盘的出厂系列号;  
      const   IDENTIFY_BUFFER_SIZE   =   512;  
  type  
        TIDERegs   =   packed   record  
            bFeaturesReg:   BYTE;  
            bSectorCountReg:   BYTE;  
            bSectorNumberReg:   BYTE;  
            bCylLowReg:   BYTE;  
            bCylHighReg:   BYTE;  
            bDriveHeadReg:   BYTE;  
            bCommandReg:   BYTE;  
            bReserved:   BYTE;  
      end;  
      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;  
      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:   DWORD;  
          wMultSectorStuff:   Word;  
          ulTotalAddressableSectors:   DWORD;  
          wSingleWordDMA:   Word;  
          wMultiWordDMA:   Word;  
          bReserved:   array[0..127]   of   BYTE;  
      end;  
      PIdSector   =   ^TIdSector;  
      TDriverStatus   =   packed   record  
          bDriverError:   Byte;  
          bIDEStatus:   Byte;  
          bReserved:   array[0..1]   of   Byte;  
          dwReserved:   array[0..1]   of   DWORD;  
      end;  
      TSendCmdOutParams   =   packed   record  
          cBufferSize:   DWORD;  
          DriverStatus:   TDriverStatus;  
          bBuffer:   array[0..0]   of   BYTE;  
      end;  
  var  
      hDevice:   Thandle;  
      cbBytesReturned:   DWORD;  
      SCIP:   TSendCmdInParams;  
      aIdOutCmd:   array[0..(SizeOf(TSendCmdOutParams)   +   IDENTIFY_BUFFER_SIZE-1)-1]   of   Byte;  
      IdOutCmd:   TSendCmdOutParams   absolute   aIdOutCmd;  
  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;  
  begin  
  Result   :=   '';  
  if   SysUtils.Win32Platform   =   VER_PLATFORM_WIN32_NT   then   begin   //   Windows   NT,   Windows   2000  
  hDevice   :=   CreateFile('\\.\PhysicalDrive0',   GENERIC_READ   or   GENERIC_WRITE,  
  FILE_SHARE_READ   or   FILE_SHARE_WRITE,   nil,   OPEN_EXISTING,   0,   0);  
  end   else   //   Version   Windows   95   OSR2,   Windows   98  
  hDevice   :=   CreateFile('\\.\SMARTVSD',   0,   0,   nil,   CREATE_NEW,   0,   0);  
  if   hDevice   =   INVALID_HANDLE_VALUE   then   Exit;  
  try  
  FillChar(SCIP,   SizeOf(TSendCmdInParams)   -   1,   #0);  
  FillChar(aIdOutCmd,   SizeOf(aIdOutCmd),   #0);  
  cbBytesReturned   :=   0;  
  with   SCIP   do   begin  
  cBufferSize   :=   IDENTIFY_BUFFER_SIZE;  
  with   irDriveRegs   do   begin  
  bSectorCountReg   :=   1;  
  bSectorNumberReg   :=   1;  
  bDriveHeadReg   :=   $A0;  
  bCommandReg   :=   $EC;  
  end;  
  end;  
  if   not   DeviceIoControl(hDevice,   $0007C088,   @SCIP,   SizeOf(TSendCmdInParams)   -   1,  
  @aIdOutCmd,   SizeOf(aIdOutCmd),   cbBytesReturned,   nil)   then   Exit;  
  finally  
  CloseHandle(hDevice);  
  end;  
  with   PIdSector(@IdOutCmd.bBuffer)^   do   begin  
  ChangeByteOrder(sSerialNumber,   SizeOf(sSerialNumber));  
  (Pchar(@sSerialNumber)   +   SizeOf(sSerialNumber))^:=   #0;  
  Result   :=   Pchar(@sSerialNumber);  
  end;  
  end;  
   
  调用:  
  Edit1.Text:=strpas(GetIdeSerialNumber)  

Posted in 软件开发 at January 22, 2007. by 傻猫 .    Views: 6126    4 Comments

delphi如何调用.NET webservice

假设您已经在.net上建立了自己的webservice,目前只是想在delphi上实现对net上自己的webservice 接口的调用

1)  在你的工程中 new  -> other 选择 webservices 这页

2)  选择其中的 wsdl importer 项

3)  在其中的wsdl source中填入你已经知道的wdsl地址,这里我填入我的地址是
http://192.168.0.123/hello/tijiaosj.asmx?wsdl

4) next后 就自动生成了一个unit

5)  这个unit中包含了你提供的url地址中的所有可用接口
其中 GetXXXXXSoap 这个函数返回了这些接口的class
在业务代码中只要写 GetXXXXXSoap.XXXfunction就可以了

6)  另外提当函数要操作中文的时候,记得修改GetXXXXXSoap,添加这条语句
RIO.HTTPWebNode.UseUTF8InHeader := True; //解决中文乱码问题
呵呵,很简单,对吧

最后,稍微改了一下Delphi生成的接口单元

改动的地方为:

7). 添加接口的执行选项默认为 ioDocument
如果是JAVA 接口, 将执行选项改为 ioLiteral  即可.

修改后的代码如下:
InvRegistry.RegisterInvokeOptions(TypeInfo(XcdsExPortType), ioDocument);

Posted in 软件开发 at January 11, 2007. by 傻猫 .    Views: 5377    1 Comment