Before you can do anything, you need to login to your LimeLM account (or sign up). Then download TurboActivate for Windows "Main package" on your API page.
After you've created a new product, go to the version page of the product you will be adding licensing to. You will need to do 2 things:
Download the TurboActivate.dat file for the product version.
Make a note of the Version GUID.
You'll be including the TurboActivate.dat file in the same folder as the TurboActivate.dll or libTurboActivate.dylib files. You'll use the Version GUID in your code as part of integrating TurboActivate within your app.
The first thing you need to do is fix a setting in the Visual Basic 6 IDE. Click the "Tools -> Options..." menu. Then click the "General" tab and set the "Error Trapping" to "Break on Unhandled Errors". Then press OK.
Included in TurboActivate package is a simple VB6 example project. You can find it in the "API\VB6" folder after you've downloaded and extracted the TurboActivate package. We recommend playing around with the example app first, before you start integrating TurboActivate into your application.
The following files are what you'll be including in your app:
Visual Basic 6 is a special kind of beast. Instead of using the regular "cdecl" TurboActivate.dlls available in either the "x86" or "x64" folders inside the "Main TurboActivate package", you'll have to use the TurboActivate.dll (and optionally TurboActivate.exe) from inside the "stdcall\x86" folder.
Visual Basic 6 is an ancient language that will seemingly never die. So, until VB6 dies (and you switch to the infinitely better VB.NET), you'll have to make note of, and workaround, the following bugs in Visual Basic 6:
You must always open your VB6 project file by double clicking your *.vbp file. You cannot open the project by clicking "File -> Open Project..." or by clicking the filename in the recent projects list in the "File". The reason you absolutely cannot do those things is that VB6 won't be able to load our native "TurboActivate.dll" if you do anything other than open your project by double clicking your project file.
Now we're going to walk you through each step you need to take in adding licensing, online activation, and timed-trials to your VB6 app. There are lots of ways you can add licensing to your app, but there are 2 popular styles:
Separate versions of your app. This style of licensing is where you build 2 versions of your product: a trial version and a full version.
Hybrid version of your app. This style of licensing is where your product is the trial version or the full version depending on whether the user is activated.
The first method (the separate versions method) is possible with TurboActivate, but we're not going to talk about it here because it's not very user friendly. Instead we'll talk about making your app a hybrid Full/Trial app. That is, your users will be able to use your app in "trial mode" until either the trial expires or they purchase a product key and use it to activate your app.
If you haven't already signed up for LimeLM then sign up now. All plans have a 30-day free trial. Or, if you're just putting your toes in the water, there's even a free plan that has no time limit and doesn't require a credit card.
After you've created your account, download TurboActivate and extract it anywhere. After you extract it you'll find 4 folders:
API: Contains all Windows source code examples. Inside this folder you'll find the "VB6" project folder which contains the end-result of this tutorial. You'll also find the "TurboActivate.bas" and "TurboActivate.cls" files which you'll be adding to your app's project.
x64 and x86 folders: Contains the 64-bit / 32-bit versions of TurboActivate, but in the cdecl call convention (not compatible with VB6).
stdcall: Contains the "stdcall" versions of TurboActivate. You'll be using the "TurboActivate.dll" and "TurboActivate.exe" files from the "stdcall/x86" folder.
Now you need to add TurboActivate to your app. Add "TurboActivate.bas" and "TurboActivate.cls" files from the "VB6" project you extracted from the TurboActivate main package. You do this by right clicking your project in Visual Basic and clicking "Add -> Add File..." and browsing for the "TurboActivate.bas" and "TurboActivate.cls" files:
Next we'll copy "TurboActivate.exe" and "TurboActivate.dll" from the stdcall/x86 folder we extracted. Put these files in both your project's folder and in the same folder as where your *.exe is output to.
If you haven't already created a new product in LimeLM, do it now. You can change any value later, so don't worry about making a mistake.
Go to your version page in LimeLM. Download the "TurboActivate.dat" file. Now copy this file to the same folder(s) you added TurboActivate.dll and TurboActivate.exe to in step 3.
Now, inside your app, you need to create a new TurboActivate object with the Version GUID found on the same page you downloaded the TurboActivate.dat from. In the example app we define the "
ta" variable in the "main form" class, and then create the TurboActivate object in the form's constructor:
Public ta As TurboActivate Private Sub Form_Load() ' create the new TurboFloat instance Set ta = New TurboActivate ' tell your app to handle errors in the section ' at the end of the sub On Error GoTo TAProcError 'TODO: goto the version page at LimeLM and paste this GUID here Call ta.Init("Paste GUID Here") ' ...
Replace the "Paste GUID Here" string with the Version GUID string your copied from your version page.
There are many ways you can use TurboActivate to add licensing to your application. For this example we're going to keep it simple.
Scroll up to your form constructor code and add a "Boolean" "
isGenuine" variable to save whether the customer is activated and genuine. And then it's simply a matter of making a call to
IsGenuine() to see if the user is activated and to re-verify the activation with the LimeLM servers every 90 days, with a 14 day grace period:
Public ta As TurboActivate ' store the isGenuine result Dim IsGenuine As Boolean Dim DaysBetweenChecks As Long Dim GracePeriodLength As Long Private Sub Form_Load() ' Don't use 0 for either of these values. ' We recommend 90, 14. But if you want to lower the values ' we don't recommend going below 7 days for each value. ' Anything lower and you're just punishing legit users. DaysBetweenChecks = 90 GracePeriodLength = 14 ' create the new TurboFloat instance Set ta = New TurboActivate ' tell your app to handle errors in the section ' at the end of the sub On Error GoTo TAProcError 'TODO: goto the version page at LimeLM and paste this GUID here Call ta.Init("Paste GUID Here") Dim gr As IsGenuineResult ' Check if we're activated, and every 90 days verify it with the activation servers ' In this example we won't show an error if the activation was done offline ' (see the 3rd parameter of the IsGenuine() function) ' https://wyday.com/limelm/help/offline-activation/ gr = ta.IsGenuineEx(DaysBetweenChecks, GracePeriodLength, True) IsGenuine = gr = IsGenuineResult.Genuine Or _ gr = IsGenuineResult.GenuineFeaturesChanged Or _ gr = IsGenuineResult.InternetError ' If IsGenuineEx() is telling us we're not activated ' but the IsActivated() function is telling us that the activation ' data on the computer is valid (i.e. the crypto-signed-fingerprint matches the computer) ' then that means that the customer has passed the grace period and they must re-verify ' with the servers to continue to use your app. 'Note: DO NOT allow the customer to just continue to use your app indefinitely with absolutely ' no reverification with the servers. If you want to do that then don't use IsGenuine() or ' IsGenuineEx() at all -- just use IsActivated(). If Not IsGenuine And ta.IsActivated Then ' We're treating the customer as is if they aren't activated, so they can't use your app. ' However, we show them a dialog where they can reverify with the servers immediately. Dim frmReverify As ReVerifyNow Set frmReverify = New ReVerifyNow If frmReverify.ShowDialog(ta, DaysBetweenChecks, GracePeriodLength) = vbOK Then IsGenuine = True ElseIf Not frmReverify.noLongerActivated Then ' the user clicked cancel and the user is still activated ' Just bail out of your app End Exit Sub End If End If ' Show a trial if we're not genuine ' See step 9, below. ShowTrial (Not IsGenuine) ProcExit: Exit Sub TAProcError: MsgBox "Failed to check if activated: " & Err.Description ' End your application immediately End End Sub
This is a complete example showing how to check if the customer is genuinely activated, and how to handle the error cases. While it's longer than "toy" licensing solutions, it's built for the real world.
The code does the following:
It creates the new TurboActivate instance with your Version GUID.
Checks if the customer is activated and re-verifies with the servers every 90 days (with a 14-day grace period).
IsGenuineEx(x, y, z) tells you the customer is not genuine then you can use
IsActivated() to determine if they're "not genuine" because they were never activated or if it's because the customer has gone more than
DaysBetweenChecks + GracePeriodLength days since re-verifying with the activation servers.
And if it's a case where the customer must re-verify with the activation servers, then show a form that lets them do that (also included in the example project).
If the user has never activated, or if they've since deactivated, then you'll need to prompt the user to enter their product key. You can do this a couple of ways, in this example we'll just use the TurboActivate Wizard to prompt the customer to enter their product key.
The first thing you need to do is a new Activate/Deactivate menu to your form. You can name it anything you want — in this example we call it
After you've created the menu item (in "Tools -> Menu Editor"), change the name to
mnuActDeact, then click "OK". Then on your form just click the menu item to generate the "stub" click event code for your Activate / Deactivate menu.
Now we need to handle when the user clicks the Activate/Deactivate menu that you created. Scroll down to the "mnuActDeact_Click" function that Visual Basic generated for you. You can add code to Deactivate if the user is activated, or launch TurboActivate.exe if the user isn't activated:
Private Sub mnuActDeact_Click() If IsGenuine Then ' tell your app to handle errors in the section ' at the end of the sub On Error GoTo TAProcError 'deactivate product without deleting the product key 'allows the user to easily reactivate ta.Deactivate IsGenuine = False Call ShowTrial(True) Else ' tell your app to handle errors in the section ' at the end of the sub On Error GoTo TAProcIsActError ' launch the TurboActivate Wizard ExecCmd ("""" + App.Path + "\" + "TurboActivate.exe""") If ta.IsActivated Then IsGenuine = True ReEnableAppFeatures Call ShowTrial(False) End If End If ProcExit: Exit Sub TAProcError: MsgBox "Failed to deactivate: " & Err.Description Resume ProcExit TAProcIsActError: MsgBox "Failed to check if activated: " & Err.Description Resume ProcExit End Sub
In other parts of this example you've seen references to a
ShowTrial() function. This is a function that you'll need to create to add trial functionality to your app. In this example we're going to use verified trials (because they are accurate, fast, and allows you to track conversion of customers).
The first step is to actually tell TurboActivate you'll be using verified trials. Create a
trialFlags at the top of your main form that will store this information:
Public ta As TurboActivate ' store the isGenuine result Dim IsGenuine As Boolean Dim trialFlags As Long Dim DaysBetweenChecks As Long Dim GracePeriodLength As Long Private Sub Form_Load() ' Set the trial flags you want to use. Here we've selected that the ' trial data should be stored system-wide (TA_SYSTEM) and that we should ' use un-resetable verified trials (TA_VERIFIED_TRIAL). trialFlags = TA_SYSTEM Or TA_VERIFIED_TRIAL ' Don't use 0 for either of these values. ' We recommend 90, 14. But if you want to lower the values ' we don't recommend going below 7 days for each value. ' Anything lower and you're just punishing legit users. DaysBetweenChecks = 90 GracePeriodLength = 14 ' ... End Sub
Now we have to make a few functions:
ShowTrial method you can show how many trial days remain for the user. You can open the VB6 example from TurboActivate.zip if you want to see a full example. Here we'll set the activate menu text to either "Activate" or "Deactivate" and will disable the app features if there are no more trial days remaining:
Private Sub ShowTrial(ByVal show As Boolean) lblTrialMessage.Visible = show btnExtendTrial.Visible = show If show Then mnuActDeact.Caption = "Activate..." Dim TrialDaysRemaining As Long TrialDaysRemaining = 0 ' ignore errors for the following 2 functions On Error Resume Next Call ta.UseTrial(trialFlags) ' get the number of remaining trial days TrialDaysRemaining = ta.TrialDaysRemaining(trialFlags) ' re-enable error handling On Error GoTo 0 ' if no more trial days then disable all app features If TrialDaysRemaining = 0 Then DisableAppFeatures Else lblTrialMessage.Caption = "Your trial expires in " & TrialDaysRemaining & " days." End If Else mnuActDeact.Caption = "Deactivate" End If End Sub
Now you can add the functions to your code to disable and enable your application features:
Private Sub DisableAppFeatures() 'TODO: disable all the features of the program End Sub Private Sub ReEnableAppFeatures() 'TODO: re-enable all the features of the program End Sub
In the example VB6 project the app "feature" we enable/disable is the text box. Obviously you need to tailor this to your specific application.
Now that we have the foundation set we can actually start calling these functions. Scroll back up to the form's constructor and add the call to the
Private Sub Form_Load() ' ... ' create the new TurboFloat instance Set ta = New TurboActivate ' tell your app to handle errors in the section ' at the end of the sub On Error GoTo TAProcError 'TODO: goto the version page at LimeLM and paste this GUID here Call ta.Init("Paste GUID Here") ' ... ShowTrial (Not IsGenuine) ProcExit: Exit Sub TAProcError: ' Handle exception End Sub