Copy Protection

How I can protect my application against copying?

May be exist many ways. One of theme is using HD serial number.

1. Read volume serial number of hard disk(s) of your customer. ( Apply this procedure while installation, once only one and preferably manually.  Of course you can obtain this info by online accessing to system of your customer. )

2. Record this info ( after crypt ) anywhere you like in the customer system: in a .MEM file, a .dbf / dbt, in registry, even directly into your application as a literal constant.

3. Your application will begin to run by reading this recorded data and compare it with actual HD serial number of customer; if match continue working, else …

Here an example to get  HD serial number.

OrdWildSeek()

OrdWildSeek()

Searches a value in the controlling index using wild card characters.
Syntax : OrdWildSeek( <cWildCardString>,; 
                      [<lCurrentRec>] , ;
                      [<lBackwards>] ) --> lFound

Arguments :

<cWildCardString> :

This is a character string to search in the controlling index. It may include 
the wild card characters "?" and "*". The question mark matches a single 
character, while the asterisk matches one or more characters.

<lCurrentRec> :

This parameter defaults to .F. (false) causing OrdWildSeek() to begin the 
search with the first record included in the controlling index. When .T. 
(true) is passed, the function begins the search with the current record.

<lBackwards> :

If .T. (true) is passed, OrdWildSeek() searches <cWildCardString> towards 
the begin of file. The default value is .F. (false), i.e. the function 
searches towards the end of file. 

Return :

The function returns .T. (true) if a record matching <cWildCardString> is 
found in the controlling index, otherwise .F. (false) is returned.

Description :

OrdWildSeek() searches a character string that may include wild card 
characters in the controlling index. This allows for collecting subsets 
of records based on an approximate search string. Records matching the 
search string are found in the controlling index, and the record pointer 
is positioned on the found record.

When a matching record is found, the function Found() returns .T. (true) 
until the record pointer is moved again. In addition, both functions, 
BoF() and EoF() return .F. (false).

If the searched value is not found, OrdWildSeek() positions the record 
pointer on the "ghost record" (Lastrec()+1), and the function Found() 
returns .F. (false), while Eof() returns .T. (true). The SET SOFTSEEK 
setting is ignored by OrdWildSeek().

Info :

See also: DbSeek(), LOCATE, OrdFindRec(), OrdKeyGoto(), WildMatch()

Category: Database functions, Index functions, extensions

Example :

// The example uses two wildcard search strings to show
// possible search results of OrdWildSeek()

PROCEDURE Main
   LOCAL aCust := {}

   USE Customer
   INDEX ON Upper(LastName) TO Cust01

   DO WHILE OrdWildSeek( "*MAN?", .T. )
     AAdd( aCust, FIELD->Lastname )
   ENDDO

   AEval( aCust, {|c| QOut(c) } )
   // Found records:
   // Dormann
   // Feldman

   GO TOP
   aCust := {}
   DO WHILE OrdWildSeek( "*EL*", .T. )
      AAdd( aCust, FIELD->Lastname )
   ENDDO

   AEval( aCust, {|c| QOut(c) } )
   // Found records:
   // Feldman
   // Hellstrom
   // Keller
   // Reichel
   USE
RETURN

Note : Harbour has this function without documentation. This page borrowed 
from xHarbour and not tested. Please beware about Unicode.