Sign in to follow this  
Followers 0
andybiochem

Barcode Generator Code 128 B C

39 posts in this topic

#1 ·  Posted (edited)

Hi!

I knocked together this generator for Code 128 Barcodes.

It works from first principles (character 1/0 patterns) and has a (not very brilliant) optimization algorithm.

Feel free to use / improve.

(btw, most barcode readers can read directly off an LCD monitor :) )

;Code 128 Barcode Generator - Andy M 2008

#include <array.au3>
#include <file.au3>

Opt("GUIOnEventMode", 1)


;*************************************************************************************
; Declare Vars
;*************************************************************************************

Global $array[104]
Global $CodeArray
Global $data
Global $L[1]


;*************************************************************************************
; Assign Code 128 Pattern array
;*************************************************************************************
; Items are "[Value]¬[Bcode]¬[Ccode]¬[1/0 Pattern]"

$array[1] = "0¬ ¬00¬11011001100"
$array[2] = "1¬!¬01¬11001101100"
$array[3] = '2¬"¬02¬11001100110'
$array[4] = "3¬#¬03¬10010011000"
$array[5] = "4¬$¬04¬10010001100"
$array[6] = "5¬%¬05¬10001001100"
$array[7] = "6¬&¬06¬10011001000"
$array[8] = "7¬'¬07¬10011000100"
$array[9] = "8¬(¬08¬10001100100"
$array[10] = "9¬)¬09¬11001001000"
$array[11] = "10¬*¬10¬11001000100"
$array[12] = "11¬+¬11¬11000100100"
$array[13] = "12¬,¬12¬10110011100"
$array[14] = "13¬-¬13¬10011011100"
$array[15] = "14¬.¬14¬10011001110"
$array[16] = "15¬/¬15¬10111001100"
$array[17] = "16¬0¬16¬10011101100"
$array[18] = "17¬1¬17¬10011100110"
$array[19] = "18¬2¬18¬11001110010"
$array[20] = "19¬3¬19¬11001011100"
$array[21] = "20¬4¬20¬11001001110"
$array[22] = "21¬5¬21¬11011100100"
$array[23] = "22¬6¬22¬11001110100"
$array[24] = "23¬7¬23¬11101101110"
$array[25] = "24¬8¬24¬11101001100"
$array[26] = "25¬9¬25¬11100101100"
$array[27] = "26¬:¬26¬11100100110"
$array[28] = "27¬;¬27¬11101100100"
$array[29] = "28¬<¬28¬11100110100"
$array[30] = "29¬=¬29¬11100110010"
$array[31] = "30¬>¬30¬11011011000"
$array[32] = "31¬?¬31¬11011000110"
$array[33] = "32¬@¬32¬11000110110"
$array[34] = "33¬A¬33¬10100011000"
$array[35] = "34¬B¬34¬10001011000"
$array[36] = "35¬C¬35¬10001000110"
$array[37] = "36¬D¬36¬10110001000"
$array[38] = "37¬E¬37¬10001101000"
$array[39] = "38¬F¬38¬10001100010"
$array[40] = "39¬G¬39¬11010001000"
$array[41] = "40¬H¬40¬11000101000"
$array[42] = "41¬I¬41¬11000100010"
$array[43] = "42¬J¬42¬10110111000"
$array[44] = "43¬K¬43¬10110001110"
$array[45] = "44¬L¬44¬10001101110"
$array[46] = "45¬M¬45¬10111011000"
$array[47] = "46¬N¬46¬10111000110"
$array[48] = "47¬O¬47¬10001110110"
$array[49] = "48¬P¬48¬11101110110"
$array[50] = "49¬Q¬49¬11010001110"
$array[51] = "50¬R¬50¬11000101110"
$array[52] = "51¬S¬51¬11011101000"
$array[53] = "52¬T¬52¬11011100010"
$array[54] = "53¬U¬53¬11011101110"
$array[55] = "54¬V¬54¬11101011000"
$array[56] = "55¬W¬55¬11101000110"
$array[57] = "56¬X¬56¬11100010110"
$array[58] = "57¬Y¬57¬11101101000"
$array[59] = "58¬Z¬58¬11101100010"
$array[60] = "59¬[¬59¬11100011010"
$array[61] = "60¬\¬60¬11101111010"
$array[62] = "61¬]¬61¬11001000010"
$array[63] = "62¬^¬62¬11110001010"
$array[64] = "63¬_¬63¬10100110000"
$array[65] = "64¬`¬64¬10100001100"
$array[66] = "65¬a¬65¬10010110000"
$array[67] = "66¬b¬66¬10010000110"
$array[68] = "67¬c¬67¬10000101100"
$array[69] = "68¬d¬68¬10000100110"
$array[70] = "69¬e¬69¬10110010000"
$array[71] = "70¬f¬70¬10110000100"
$array[72] = "71¬g¬71¬10011010000"
$array[73] = "72¬h¬72¬10011000010"
$array[74] = "73¬i¬73¬10000110100"
$array[75] = "74¬j¬74¬10000110010"
$array[76] = "75¬k¬75¬11000010010"
$array[77] = "76¬l¬76¬11001010000"
$array[78] = "77¬m¬77¬11110111010"
$array[79] = "78¬n¬78¬11000010100"
$array[80] = "79¬o¬79¬10001111010"
$array[81] = "80¬p¬80¬10100111100"
$array[82] = "81¬q¬81¬10010111100"
$array[83] = "82¬r¬82¬10010011110"
$array[84] = "83¬s¬83¬10111100100"
$array[85] = "84¬t¬84¬10011110100"
$array[86] = "85¬u¬85¬10011110010"
$array[87] = "86¬v¬86¬11110100100"
$array[88] = "87¬w¬87¬11110010100"
$array[89] = "88¬x¬88¬11110010010"
$array[90] = "89¬y¬89¬11011011110"
$array[91] = "90¬z¬90¬11011110110"
$array[92] = "91¬{¬91¬11110110110"
$array[93] = "92¬|¬92¬10101111000"
$array[94] = "93¬}¬93¬10100011110"
$array[95] = "94¬~¬94¬10001011110"
$array[96] = "95¬del¬95¬10111101000"
$array[97] = "96¬Fnc3¬96¬10111100010"
$array[98] = "97¬Fnc2¬97¬11110101000"
$array[99] = "98¬Shift¬98¬11110100010"
$array[100] = "99¬Code C¬99¬10111011110"
$array[101] = "100¬Fnc 4¬Code B¬10111101110"
$array[102] = "101¬Code A¬Code A¬11101011110"
$array[103] = "102¬Fnc 1¬Fnc 1¬11110101110"



;*************************************************************************************
; GUI
;*************************************************************************************

GUICreate("Code 128 (B/C) Barcode Generator - AndyBiochem 2008", 613, 286)
GUISetOnEvent($GUI_EVENT_CLOSE, "Close")

$Input = GUICtrlCreateInput("", 8, 8, 321, 25)
GUICtrlSetFont(-1,12)

GUICtrlCreateButton("Generate Barcode", 344, 8, 257, 25)
GUICtrlSetOnEvent(-1,"MakeBarcode")

GUICtrlCreateLabel("", 8, 48, 596, 225)
GUICtrlSetBkColor(-1, 0xFFFFFF)







GUISetState(@SW_SHOW)
;#####################################################################################
; LOOP
;#####################################################################################
While 1

Sleep(100)

WEnd
;#####################################################################################
; END LOOP
;#####################################################################################



Func MakeBarcode()
;*************************************************************************************
; Delete previous barcode
;*************************************************************************************

for $i = 1 to (UBound($L) - 1)
    GUICtrlDelete($L[$i])
Next



;*************************************************************************************
; Generate Pattern
;*************************************************************************************

$Barcode = IdentifyCodeSwitches(GUICtrlRead($Input))



;*************************************************************************************
; Draw new Barcode
;*************************************************************************************

Dim $L[StringLen($Barcode) + 1]

$i = 1

While $i <= StringLen($barcode)
    
    $col = StringMid($barcode,$i,1)
    
    if $col = 1 Then
        $L[$i] = GUICtrlCreateLabel("",50 + ($i * 2),100,2,100)
        GUICtrlSetBkColor(-1,0x000000)
        
    Else
        $L[$i] = GUICtrlCreateLabel("",50 + ($i * 2),100,2,100)
        GUICtrlSetBkColor(-1,0xFFFFFF)
        
    EndIf
    $i += 1
WEnd
    
EndFunc



Func IdentifyCodeSwitches($code)
;*************************************************************************************
; Identify where code switches should be
;*************************************************************************************

$i = 1
$CodeType = "B"                     ;always start with code type B
$len = StringLen($Code)

While $i <= $len

    Select
        Case $CodeType = "B"
            if StringRegExp(StringMid($Code,$i,6),"([0-9][0-9]){3}") = 1 Then
                $Code = StringMid($Code,1,$i - 1) & "¬C¬" & StringMid($Code,$i)
                $CodeType = "C"
                $i += 6 + 3
                
            Else
                $CodeType = "B"
                $i += 1
            EndIf
        Case $CodeType = "C"
            if StringRegExp(StringMid($Code,$i,2),"([0-9][0-9])") <> 1 Then
                $Code = StringMid($Code,1,$i - 1) & "¬B¬" & StringMid($Code,$i)
                $CodeType = "B"
                $i += 2 + 3
                
            Else
                $CodeType = "C"
                $i += 2
            EndIf
    EndSelect

    $len = StringLen($Code)

WEnd



;*************************************************************************************
; Add start code B, if not already started C
;*************************************************************************************

if StringMid($Code,1,3) <> "¬C¬" then $Code = "¬B¬" & $Code
    


;*************************************************************************************
; Split to array, re-assemble code switches
;*************************************************************************************

$CodeArray = StringSplit($code,"")

for $i = 1 to (UBound($CodeArray) - 3)

    Select
        case $CodeArray[$i] & $CodeArray[$i+1] & $CodeArray[$i+2] = "¬B¬"
            $CodeArray[$i] = "[B]"
            $CodeArray[$i+1] = ""
            $CodeArray[$i+2] = ""
            
        case $CodeArray[$i] & $CodeArray[$i+1] & $CodeArray[$i+2] = "¬C¬"
            $CodeArray[$i] = "[C]"
            $CodeArray[$i+1] = ""
            $CodeArray[$i+2] = ""
    EndSelect

Next



;*************************************************************************************
; Remove empty items
;*************************************************************************************

for $i = (UBound($CodeArray) - 1) to 1 step -1
    if $CodeArray[$i] = "" then _ArrayDelete($CodeArray,$i)
Next



;*************************************************************************************
; Concatenate C number pairs
;*************************************************************************************

$i = 1

While $i <= (UBound($CodeArray) - 1)
    
    if $CodeArray[$i] = "[C]" Then
        $i += 1
        do
            if $CodeArray[$i] = "" then 
                $i += 1
                
            Else
                $CodeArray[$i] &= $CodeArray[$i + 1]
                $CodeArray[$i + 1] = ""
                $i += 1
                
            EndIf
        Until $i = (UBound($CodeArray) - 1) Or $CodeArray[$i] = "[B]" or $CodeArray[$i + 1] = "[B]"
    EndIf

    $i += 1

WEnd



;*************************************************************************************
; Remove empty items
;*************************************************************************************

for $i = (UBound($CodeArray) - 1) to 1 step -1
    if $CodeArray[$i] = "" then _ArrayDelete($CodeArray,$i)
Next



;*************************************************************************************
; Replace Items with 128 Code Patterns, and mount checksum
;*************************************************************************************

_ArrayDelete($CodeArray,0)      ;important

If $CodeArray[0] = "[B]" Then
    $CodeArray[0] = "11010010000"
    $SUM = 104
    $CodeType = "[B]"
Else
    $CodeArray[0] = "11010011100"
    $SUM = 105
    $CodeType = "[C]"
EndIf


for $i = 1 to (UBound($CodeArray) - 1)

    if $CodeArray[$i] = "[B]" Then
        $CodeArray[$i] = "10111101110"
        $SUM += $i * 100
        $CodeType = "[B]"
        ContinueLoop
    EndIf
    
    
    if $CodeArray[$i] = "[C]" Then
        $CodeArray[$i] = "10111011110"
        $SUM += $i * 99
        $CodeType = "[C]"
        ContinueLoop
    EndIf
    
    
    for $j = 1 to (UBound($array) - 1)
        
        $data = StringSplit($array[$j],"¬")
        
        Select
            case $CodeType = "[B]"
                
                if $CodeArray[$i] == $data[2] Then
                    $CodeArray[$i] = $data[4]
                    $SUM += $i * $data[1]
                    
                EndIf
                
            case $CodeType = "[C]"
                
                if $CodeArray[$i] == $data[3] Then
                    $CodeArray[$i] = $data[4]
                    $SUM += $i * $data[1]
                    
                EndIf
        EndSelect
    Next



Next



;*************************************************************************************
; Calculate & find checksum item
;*************************************************************************************

$ChecksumItem = Mod($SUM,103)

$data = StringSplit($array[$ChecksumItem + 1],"¬")

_ArrayAdd($CodeArray,$data[4])



;*************************************************************************************
; Add stop item
;*************************************************************************************

_ArrayAdd($CodeArray,"1100011101011")



;*************************************************************************************
; Flatten array
;*************************************************************************************

$CodeArrayString = _ArrayToString($CodeArray,"")


Return $CodeArrayString

EndFunc



func close()
;*************************************************************************************
; Bye bye
;*************************************************************************************
    Exit
EndFunc

Let me know what you think!

Edited by andybiochem

- Table UDF - create simple data tables - Line Graph UDF GDI+ - quickly create simple line graphs with x and y axes (uses GDI+ with double buffer) - Line Graph UDF - quickly create simple line graphs with x and y axes (uses AI native graphic control) - Barcode Generator Code 128 B C - Create the 1/0 code for barcodes. - WebCam as BarCode Reader - use your webcam to read barcodes - Stereograms!!! - make your own stereograms in AutoIT - Ziggurat Gaussian Distribution RNG - generate random numbers based on normal/gaussian distribution - Box-Muller Gaussian Distribution RNG - generate random numbers based on normal/gaussian distribution - Elastic Radio Buttons - faux-gravity effects in AutoIT (from javascript)- Morse Code Generator - Generate morse code by tapping your spacebar!

Share this post


Link to post
Share on other sites



I like your script. It`s very nice. :)


When the words fail... music speaks

Share this post


Link to post
Share on other sites

I Like It!! Don't have use for it but nice coding... Are you going to add print capabilities?

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

I Like It!! Don't have use for it but nice coding... Are you going to add print capabilities?

I like the script too.

In case it's of any help here is a very simple example script to print the barcode after it has been generated.

I added a function to andybiochem's script and added an include. To use it you need to get my print UDF and dll from my signature.

;Code 128 Barcode Generator - Andy M 2008 (andybiochem)

#include <array.au3>
#include <file.au3>

#include 'printMGv2.au3';<---------added my martin

Opt("GUIOnEventMode", 1)


;*************************************************************************************
; Declare Vars
;*************************************************************************************

Global $array[104]
Global $CodeArray
Global $data
Global $L[1]


;*************************************************************************************
; Assign Code 128 Pattern array
;*************************************************************************************
; Items are "[Value]¬[Bcode]¬[Ccode]¬[1/0 Pattern]"

$array[1] = "0¬ ¬00¬11011001100"
$array[2] = "1¬!¬01¬11001101100"
$array[3] = '2¬"¬02¬11001100110'
$array[4] = "3¬#¬03¬10010011000"
$array[5] = "4¬$¬04¬10010001100"
$array[6] = "5¬%¬05¬10001001100"
$array[7] = "6¬&¬06¬10011001000"
$array[8] = "7¬'¬07¬10011000100"
$array[9] = "8¬(¬08¬10001100100"
$array[10] = "9¬)¬09¬11001001000"
$array[11] = "10¬*¬10¬11001000100"
$array[12] = "11¬+¬11¬11000100100"
$array[13] = "12¬,¬12¬10110011100"
$array[14] = "13¬-¬13¬10011011100"
$array[15] = "14¬.¬14¬10011001110"
$array[16] = "15¬/¬15¬10111001100"
$array[17] = "16¬0¬16¬10011101100"
$array[18] = "17¬1¬17¬10011100110"
$array[19] = "18¬2¬18¬11001110010"
$array[20] = "19¬3¬19¬11001011100"
$array[21] = "20¬4¬20¬11001001110"
$array[22] = "21¬5¬21¬11011100100"
$array[23] = "22¬6¬22¬11001110100"
$array[24] = "23¬7¬23¬11101101110"
$array[25] = "24¬8¬24¬11101001100"
$array[26] = "25¬9¬25¬11100101100"
$array[27] = "26¬:¬26¬11100100110"
$array[28] = "27¬;¬27¬11101100100"
$array[29] = "28¬<¬28¬11100110100"
$array[30] = "29¬=¬29¬11100110010"
$array[31] = "30¬>¬30¬11011011000"
$array[32] = "31¬?¬31¬11011000110"
$array[33] = "32¬@¬32¬11000110110"
$array[34] = "33¬A¬33¬10100011000"
$array[35] = "34¬B¬34¬10001011000"
$array[36] = "35¬C¬35¬10001000110"
$array[37] = "36¬D¬36¬10110001000"
$array[38] = "37¬E¬37¬10001101000"
$array[39] = "38¬F¬38¬10001100010"
$array[40] = "39¬G¬39¬11010001000"
$array[41] = "40¬H¬40¬11000101000"
$array[42] = "41¬I¬41¬11000100010"
$array[43] = "42¬J¬42¬10110111000"
$array[44] = "43¬K¬43¬10110001110"
$array[45] = "44¬L¬44¬10001101110"
$array[46] = "45¬M¬45¬10111011000"
$array[47] = "46¬N¬46¬10111000110"
$array[48] = "47¬O¬47¬10001110110"
$array[49] = "48¬P¬48¬11101110110"
$array[50] = "49¬Q¬49¬11010001110"
$array[51] = "50¬R¬50¬11000101110"
$array[52] = "51¬S¬51¬11011101000"
$array[53] = "52¬T¬52¬11011100010"
$array[54] = "53¬U¬53¬11011101110"
$array[55] = "54¬V¬54¬11101011000"
$array[56] = "55¬W¬55¬11101000110"
$array[57] = "56¬X¬56¬11100010110"
$array[58] = "57¬Y¬57¬11101101000"
$array[59] = "58¬Z¬58¬11101100010"
$array[60] = "59¬[¬59¬11100011010"
$array[61] = "60¬\¬60¬11101111010"
$array[62] = "61¬]¬61¬11001000010"
$array[63] = "62¬^¬62¬11110001010"
$array[64] = "63¬_¬63¬10100110000"
$array[65] = "64¬`¬64¬10100001100"
$array[66] = "65¬a¬65¬10010110000"
$array[67] = "66¬b¬66¬10010000110"
$array[68] = "67¬c¬67¬10000101100"
$array[69] = "68¬d¬68¬10000100110"
$array[70] = "69¬e¬69¬10110010000"
$array[71] = "70¬f¬70¬10110000100"
$array[72] = "71¬g¬71¬10011010000"
$array[73] = "72¬h¬72¬10011000010"
$array[74] = "73¬i¬73¬10000110100"
$array[75] = "74¬j¬74¬10000110010"
$array[76] = "75¬k¬75¬11000010010"
$array[77] = "76¬l¬76¬11001010000"
$array[78] = "77¬m¬77¬11110111010"
$array[79] = "78¬n¬78¬11000010100"
$array[80] = "79¬o¬79¬10001111010"
$array[81] = "80¬p¬80¬10100111100"
$array[82] = "81¬q¬81¬10010111100"
$array[83] = "82¬r¬82¬10010011110"
$array[84] = "83¬s¬83¬10111100100"
$array[85] = "84¬t¬84¬10011110100"
$array[86] = "85¬u¬85¬10011110010"
$array[87] = "86¬v¬86¬11110100100"
$array[88] = "87¬w¬87¬11110010100"
$array[89] = "88¬x¬88¬11110010010"
$array[90] = "89¬y¬89¬11011011110"
$array[91] = "90¬z¬90¬11011110110"
$array[92] = "91¬{¬91¬11110110110"
$array[93] = "92¬|¬92¬10101111000"
$array[94] = "93¬}¬93¬10100011110"
$array[95] = "94¬~¬94¬10001011110"
$array[96] = "95¬del¬95¬10111101000"
$array[97] = "96¬Fnc3¬96¬10111100010"
$array[98] = "97¬Fnc2¬97¬11110101000"
$array[99] = "98¬Shift¬98¬11110100010"
$array[100] = "99¬Code C¬99¬10111011110"
$array[101] = "100¬Fnc 4¬Code B¬10111101110"
$array[102] = "101¬Code A¬Code A¬11101011110"
$array[103] = "102¬Fnc 1¬Fnc 1¬11110101110"



;*************************************************************************************
; GUI
;*************************************************************************************

GUICreate("Code 128 (B/C) Barcode Generator - AndyBiochem 2008", 613, 286)
GUISetOnEvent($GUI_EVENT_CLOSE, "Close")

$Input = GUICtrlCreateInput("", 8, 8, 321, 25)
GUICtrlSetFont(-1,12)

GUICtrlCreateButton("Generate Barcode", 344, 8, 257, 25)
GUICtrlSetOnEvent(-1,"MakeBarcode")

GUICtrlCreateLabel("", 8, 48, 596, 225)
GUICtrlSetBkColor(-1, 0xFFFFFF)







GUISetState(@SW_SHOW)
;#####################################################################################
; LOOP
;#####################################################################################
While 1

Sleep(100)

WEnd
;#####################################################################################
; END LOOP
;#####################################################################################


Func MakeBarcode()
;*************************************************************************************
; Delete previous barcode
;*************************************************************************************

for $i = 1 to (UBound($L) - 1)
    GUICtrlDelete($L[$i])
Next



;*************************************************************************************
; Generate Pattern
;*************************************************************************************

$Barcode = IdentifyCodeSwitches(GUICtrlRead($Input))



;*************************************************************************************
; Draw new Barcode
;*************************************************************************************

Dim $L[StringLen($Barcode) + 1]

$i = 1

While $i <= StringLen($barcode)
    
    $col = StringMid($barcode,$i,1)
    
    if $col = 1 Then
        $L[$i] = GUICtrlCreateLabel("",50 + ($i * 2),100,2,100)
        GUICtrlSetBkColor(-1,0x000000)
        
    Else
        $L[$i] = GUICtrlCreateLabel("",50 + ($i * 2),100,2,100)
        GUICtrlSetBkColor(-1,0xFFFFFF)
        
    EndIf
    $i += 1
WEnd
 
printBarCode(GUICtrlRead($Input), $Barcode) 
    
EndFunc



Func IdentifyCodeSwitches($code)
;*************************************************************************************
; Identify where code switches should be
;*************************************************************************************

$i = 1
$CodeType = "B"                  ;always start with code type B
$len = StringLen($Code)

While $i <= $len

    Select
        Case $CodeType = "B"
            if StringRegExp(StringMid($Code,$i,6),"([0-9][0-9]){3}") = 1 Then
                $Code = StringMid($Code,1,$i - 1) & "¬C¬" & StringMid($Code,$i)
                $CodeType = "C"
                $i += 6 + 3
                
            Else
                $CodeType = "B"
                $i += 1
            EndIf
        Case $CodeType = "C"
            if StringRegExp(StringMid($Code,$i,2),"([0-9][0-9])") <> 1 Then
                $Code = StringMid($Code,1,$i - 1) & "¬B¬" & StringMid($Code,$i)
                $CodeType = "B"
                $i += 2 + 3
                
            Else
                $CodeType = "C"
                $i += 2
            EndIf
    EndSelect

    $len = StringLen($Code)

WEnd



;*************************************************************************************
; Add start code B, if not already started C
;*************************************************************************************

if StringMid($Code,1,3) <> "¬C¬" then $Code = "¬B¬" & $Code
    


;*************************************************************************************
; Split to array, re-assemble code switches
;*************************************************************************************

$CodeArray = StringSplit($code,"")

for $i = 1 to (UBound($CodeArray) - 3)

    Select
        case $CodeArray[$i] & $CodeArray[$i+1] & $CodeArray[$i+2] = "¬B¬"
            $CodeArray[$i] = "[B]"
            $CodeArray[$i+1] = ""
            $CodeArray[$i+2] = ""
            
        case $CodeArray[$i] & $CodeArray[$i+1] & $CodeArray[$i+2] = "¬C¬"
            $CodeArray[$i] = "[C]"
            $CodeArray[$i+1] = ""
            $CodeArray[$i+2] = ""
    EndSelect

Next



;*************************************************************************************
; Remove empty items
;*************************************************************************************

for $i = (UBound($CodeArray) - 1) to 1 step -1
    if $CodeArray[$i] = "" then _ArrayDelete($CodeArray,$i)
Next



;*************************************************************************************
; Concatenate C number pairs
;*************************************************************************************

$i = 1

While $i <= (UBound($CodeArray) - 1)
    
    if $CodeArray[$i] = "[C]" Then
        $i += 1
        do
            if $CodeArray[$i] = "" then
                $i += 1
                
            Else
                $CodeArray[$i] &= $CodeArray[$i + 1]
                $CodeArray[$i + 1] = ""
                $i += 1
                
            EndIf
        Until $i = (UBound($CodeArray) - 1) Or $CodeArray[$i] = "[B]" or $CodeArray[$i + 1] = "[B]"
    EndIf

    $i += 1

WEnd



;*************************************************************************************
; Remove empty items
;*************************************************************************************

for $i = (UBound($CodeArray) - 1) to 1 step -1
    if $CodeArray[$i] = "" then _ArrayDelete($CodeArray,$i)
Next



;*************************************************************************************
; Replace Items with 128 Code Patterns, and mount checksum
;*************************************************************************************

_ArrayDelete($CodeArray,0)   ;important

If $CodeArray[0] = "[B]" Then
    $CodeArray[0] = "11010010000"
    $SUM = 104
    $CodeType = "[B]"
Else
    $CodeArray[0] = "11010011100"
    $SUM = 105
    $CodeType = "[C]"
EndIf


for $i = 1 to (UBound($CodeArray) - 1)

    if $CodeArray[$i] = "[B]" Then
        $CodeArray[$i] = "10111101110"
        $SUM += $i * 100
        $CodeType = "[B]"
        ContinueLoop
    EndIf
    
    
    if $CodeArray[$i] = "[C]" Then
        $CodeArray[$i] = "10111011110"
        $SUM += $i * 99
        $CodeType = "[C]"
        ContinueLoop
    EndIf
    
    
    for $j = 1 to (UBound($array) - 1)
        
        $data = StringSplit($array[$j],"¬")
        
        Select
            case $CodeType = "[B]"
                
                if $CodeArray[$i] == $data[2] Then
                    $CodeArray[$i] = $data[4]
                    $SUM += $i * $data[1]
                    
                EndIf
                
            case $CodeType = "[C]"
                
                if $CodeArray[$i] == $data[3] Then
                    $CodeArray[$i] = $data[4]
                    $SUM += $i * $data[1]
                    
                EndIf
        EndSelect
    Next



Next



;*************************************************************************************
; Calculate & find checksum item
;*************************************************************************************

$ChecksumItem = Mod($SUM,103)

$data = StringSplit($array[$ChecksumItem + 1],"¬")

_ArrayAdd($CodeArray,$data[4])



;*************************************************************************************
; Add stop item
;*************************************************************************************

_ArrayAdd($CodeArray,"1100011101011")



;*************************************************************************************
; Flatten array
;*************************************************************************************

$CodeArrayString = _ArrayToString($CodeArray,"")


Return $CodeArrayString

EndFunc



func close()
;*************************************************************************************
; Bye bye
;*************************************************************************************
    Exit
EndFunc


Func PrintBarCode($bctext,$bcode);<-------------added by martin
    Local $hp, $mmssgg
    Local $barSpacing = 5;0.5 mm - i don't know what is normal
    Local $barHt = 200;20mm
    Local $xstart = 100, $ystart = 300;offsets to start of print
    
    $hp = _PrintDllStart($mmssgg);this must always be called first
    If $hp = 0 Then
        MsgBox(262144,"ERROR","Error from dllstart = " & $mmssgg & @CRLF)
        Return
    EndIf

    _PrintGetPrinter($hp);choose the printer if you don't want the default printer

    $newselect = _PrintSetPrinter($hp);see also _PrintSelectPrinter
;MsgBox(0, 'reseult from set printer = ', _PrintGetPrinter($hp));choose the printer if you don't want the default printer


    _PrintPageOrientation($hp, 1);portrait
    _PrintStartPrint($hp)

    _PrintSetLineWid($hp,$barSpacing)
    _PrintSetLineCol($hp, 0);set line col to black
    
    $i = 1
    While $i <= StringLen($bcode)

        If StringMid($bcode, $i, 1) = '1' Then
            _PrintLine($hp, $xstart + $i * $barSpacing, $ystart, $xstart + $i * $barSpacing, $ystart + $barHt)
        EndIf
        $i += 1
    WEnd

;quickest way I could think of to neaten up the ragged line ends
    _PrintSetLineCol($hp, 0xffffff);set line col to white
    _PrintLine($hp, $xstart , $ystart, $xstart + $i * $barSpacing, $ystart)
    _PrintLine($hp, $xstart , $ystart + $barHt, $xstart + $i * $barSpacing, $ystart + $barHt)

    _PrintSetFont($hp, 'Arial', 18, 0, 'bold')
    _PrintText($hp,$bctext,$xstart,$ystart + $barHt + _PrintGetTextHeight($hp,"{")  + 5)


    _PrintEndPrint($hp)
    _PrintNewPage($hp);not really needed since only one page used
    _printDllClose($hp)
EndFunc
Edited by martin

Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script.

Share this post


Link to post
Share on other sites

@Martin...I tried to create a barcode for the number "123456" and it was created on the screen but when I tried to print it...all I saw was a black box with the number "123456" underneath it...What am I doing wrong here?

Share this post


Link to post
Share on other sites

#7 ·  Posted (edited)

@Martin...I tried to create a barcode for the number "123456" and it was created on the screen but when I tried to print it...all I saw was a black box with the number "123456" underneath it...What am I doing wrong here?

When you say you see a black box do you mean on the screen or on the printout? I suppose you would get a black box if the width of the vertical lines was too great. Could that be the problem?

Can you post any code or were you using the example I posted?

EDIT. Error found in my post by GRS and now corrected.

Edited by martin

Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script.

Share this post


Link to post
Share on other sites

@Martin...I tried to create a barcode for the number "123456" and it was created on the screen but when I tried to print it...all I saw was a black box with the number "123456" underneath it...What am I doing wrong here?

I reproduced the same results. I made a small change to the PrintBarCode function as follows and it works great now.

CODE
Func PrintBarCode($bctext,$bcode);<-------------added by martin

Local $hp, $mmssgg

Local $barSpacing = 5;0.5 mm - i don't know what is normal

Local $barHt = 200;20mm

Local $xstart = 100, $ystart = 300;offsets to start of print

$hp = _PrintDllStart($mmssgg);this must always be called first

If $hp = 0 Then

MsgBox(262144,"ERROR","Error from dllstart = " & $mmssgg & @CRLF)

Return

EndIf

_PrintGetPrinter($hp);choose the printer if you don't want the default printer

$newselect = _PrintSetPrinter($hp);see also _PrintSelectPrinter

;MsgBox(0, 'reseult from set printer = ', _PrintGetPrinter($hp));choose the printer if you don't want the default printer

_PrintPageOrientation($hp, 1);portrait

_PrintStartPrint($hp)

_PrintSetLineWid($hp,$barSpacing)

_PrintSetLineCol($hp, 0);set line col to black

$i = 1

While $i <= StringLen($bcode)

If StringMid($bcode, $i, 1) = "1" Then

_PrintLine($hp, $xstart + $i * $barSpacing, $ystart, $xstart + $i * $barSpacing, $ystart + $barHt)

EndIf

$i += 1

WEnd

;quickest way I could think of to neaten up the ragged line ends

_PrintSetLineCol($hp, 0xffffff);set line col to white

_PrintLine($hp, $xstart , $ystart, $xstart + $i * $barSpacing, $ystart)

_PrintLine($hp, $xstart , $ystart + $barHt, $xstart + $i * $barSpacing, $ystart + $barHt)

_PrintSetFont($hp, 'Arial', 18, 0, 'bold')

_PrintText($hp,$bctext,$xstart,$ystart + $barHt + _PrintGetTextHeight($hp,"{") + 5)

_PrintEndPrint($hp)

_PrintNewPage($hp);not really needed since only one page used

_printDllClose($hp)

EndFunc

Share this post


Link to post
Share on other sites

I reproduced the same results. I made a small change to the PrintBarCode function as follows and it works great now.

Thanks GRS. I've corrected my post.


Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script.

Share this post


Link to post
Share on other sites

It would be nicer if the barcode didn't get longer, by the number of characters you have. It would just change the space, and stuff.

Share this post


Link to post
Share on other sites

#13 ·  Posted (edited)

@andybiochem - nice work :)

What I would really like though, is to be able to scan the barcodes on my cd's dvd's books etc using a normal flatbed scanner, and have a program pick up their bar codes and then retrieve details from somewhere on the web ... so as I don't have to manually catalog everything. Now that would be really nice ... maybe we could start something like FreeDB or link to it for just the CD's. :P

:P

Edited by TheSaint

AutoIt.4.Life Clubrooms - Life is like a Donut (secret key)

Make sure brain is in gear before opening mouth!
Remember, what is not said, can be just as important as what is said.

Spoiler

What is the Secret Key? Life is like a Donut

If I put effort into communication, I expect you to read properly & fully, or just not comment.
Ignoring those who try to divert conversation with irrelevancies.
If I'm intent on insulting you or being rude, I will be obvious, not ambiguous about it.
I'm only big and bad, to those who have an over-active imagination.

I may have the Artistic Liesense ;) to disagree with you. TheSaint's Toolbox (be advised many downloads are not working due to ISP screwup with my storage)

userbar.png

Share this post


Link to post
Share on other sites

#14 ·  Posted (edited)

It would be nicer if the barcode didn't get longer, by the number of characters you have. It would just change the space, and stuff.

Unfortunately that's how Code 128 works, the more characters you want to have in the barcode, the longer it gets - and it's the same for all barcodes as far as I know. However, the whole idea behind Code 128 is that it optimises numbers into pairs if they exist, so that the length of the barcode gets shorter.

example

say we wanted to encode "hello123456789", the barcode could be split up as follow:

[h][e][l][l][o][1][2][3][4][5][6][7][8][9]

...that's 14 items that need encoding into the barcode.

But by splitting into number pairs, you get:

[h][e][l][l][o][12][34][56][78][9]

...that is now only 10 items that need encoding, making the resulting barcode shorter - well, it's actually 12 because you have to 'wrap' the number pairs in identifiers:

[h][e][l][l][o][sTART C][12][34][56][78][END C][9]

The trick now is to write an algorithm that can make the best optimal use of number pairs - including the presence of identifiers (it's not always optimal to split numbers up into pairs). I know for sure that my script doesn't always produce the shortest barcode for a given string, but it does an ok job.

@martin & GRS: Thanks for the print functions, I was going to have a stab at this, but I'll see how yours (martin) works first. Ta!

What I would really like though, is to be able to scan the barcodes on my cd's dvd's books etc using a normal flatbed scanner, and have a program pick up their bar codes and then retrieve details from somewhere on the web ... so as I don't have to manually catalog everything. Now that would be really nice ... maybe we could start something like FreeDB or link to it for just the CD's.

:P why didn't I think of this!!!! :P GREAT idea, I'm sure I could write a script/UDF that could reverse the 1/0 code back to the original string, it'd just be a case of searching the array for the correct 1000110101-style item.....or would it?...hmmm - I'll have a play.

Not sure about getting info of the internets though, the barcodes on CDs/DVDs whatever don't actually contain any information about the item itself, so there'd have to be a reliable source of this info. Tried a few barcodes in google but only some of them worked:

http://www.google.co.uk/search?hl=en&q...earch&meta=

http://www.google.co.uk/search?hl=en&q...earch&meta=

EDIT:

Just found this website: :)

http://www.upcdatabase.com/

http://www.upcdatabase.com/item/5000157004017

http://www.upcdatabase.com/item/6003770000748

...but that doesn't have everything either. tut

Thanks for all the feedback!

Edited by andybiochem

- Table UDF - create simple data tables - Line Graph UDF GDI+ - quickly create simple line graphs with x and y axes (uses GDI+ with double buffer) - Line Graph UDF - quickly create simple line graphs with x and y axes (uses AI native graphic control) - Barcode Generator Code 128 B C - Create the 1/0 code for barcodes. - WebCam as BarCode Reader - use your webcam to read barcodes - Stereograms!!! - make your own stereograms in AutoIT - Ziggurat Gaussian Distribution RNG - generate random numbers based on normal/gaussian distribution - Box-Muller Gaussian Distribution RNG - generate random numbers based on normal/gaussian distribution - Elastic Radio Buttons - faux-gravity effects in AutoIT (from javascript)- Morse Code Generator - Generate morse code by tapping your spacebar!

Share this post


Link to post
Share on other sites

#15 ·  Posted (edited)

Is there a way to keep generated barcode certain size in width ?

For example i only have 100X400 pixels display area for the barcode with name label and number label at the top and button of it as well as print it somehow ?

Edited by dirty

Share this post


Link to post
Share on other sites

Is there a way to keep generated barcode certain size in width ?

For example i only have 100X400 pixels display area for the barcode with name label and number label at the top and button of it as well as print it somehow ?

Hopefully this will give you some guidance, I pulled it out of an app I wrote for my company so really can't share the whole thing but it is the relevant part for you. What I do is make a GUI of the right dimensions, for you 400, 100, and then make labels for the text and use Melba23's StringSize UDF to make sure I get the maximum size of text for product names etc. For the UPC itself, here is the code I wrote:

#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>

Local $FullUPCArray[12][8]

$BC = GUICreate("Bar Code Image", 260, 100, 1, 1, $WS_EX_TOPMOST)
GUISetBkColor(0xffffff, $BC)
$BCBox = GUICtrlCreateGraphic(10, 35, 195, 33)
GUICtrlSetGraphic($BCBox, $GUI_GR_PENSIZE, 2)
GUICtrlSetGraphic($BCBox, $GUI_GR_COLOR, 0)
_BarCode("050428156483")

GUISetState(@SW_SHOW, $BC)

sleep(1000)


Func _BarCode($UPCNumber)

$UPCBreak = StringSplit($UPCNumber, "")
For $z = 0 To 11
$FullUPCArray[$z][0] = number($UPCBreak[$z + 1])
Next

$hor = 20
$horInc = 2

;~ start
GUICtrlSetGraphic($BCBox, $GUI_GR_MOVE, $hor, 2)
GUICtrlSetGraphic($BCBox, $GUI_GR_LINE, $hor, 29)
$hor += $horInc * 2
GUICtrlSetGraphic($BCBox, $GUI_GR_MOVE, $hor, 2)
GUICtrlSetGraphic($BCBox, $GUI_GR_LINE, $hor, 29)
;~ end start
For $z = 0 To 11
If $FullUPCArray[$z][0] == 0 Then _Zero($z)
If $FullUPCArray[$z][0] == 1 Then _One($z)
If $FullUPCArray[$z][0] == 2 Then _Two($z)
If $FullUPCArray[$z][0] == 3 Then _Three($z)
If $FullUPCArray[$z][0] == 4 Then _Four($z)
If $FullUPCArray[$z][0] == 5 Then _Five($z)
If $FullUPCArray[$z][0] == 6 Then _Six($z)
If $FullUPCArray[$z][0] == 7 Then _Seven($z)
If $FullUPCArray[$z][0] == 8 Then _Eight($z)
If $FullUPCArray[$z][0] == 9 Then _Nine($z)

If $z <= 5 Then
$MagicColor = 1
$PermHor = 22 + (3 * $horInc) + ($z * (7 * $horInc)) ; start + first guard + digit position
Else
$MagicColor = 0
$PermHor = 22 + (3 * $horInc) + ($z * (7 * $horInc)) + (5 * $horInc) ; start + first guard + digit position + middle guard
EndIf

For $y = 1 To 7
If $FullUPCArray[$z][$y] == $MagicColor Then
$hor = $PermHor + ($y * $horInc)
GUICtrlSetGraphic($BCBox, $GUI_GR_MOVE, $hor, 2)
GUICtrlSetGraphic($BCBox, $GUI_GR_LINE, $hor, 15)
EndIf
Next

;~ middle
If $z == 5 Then
$hor += $horInc * 2
GUICtrlSetGraphic($BCBox, $GUI_GR_MOVE, $hor, 2)
GUICtrlSetGraphic($BCBox, $GUI_GR_LINE, $hor, 29)
$hor += $horInc * 2
GUICtrlSetGraphic($BCBox, $GUI_GR_MOVE, $hor, 2)
GUICtrlSetGraphic($BCBox, $GUI_GR_LINE, $hor, 29)
EndIf
;~ end middle

Next
;~ finish
GUICtrlSetGraphic($BCBox, $GUI_GR_MOVE, 208, 2)
GUICtrlSetGraphic($BCBox, $GUI_GR_LINE, 208, 29)
$hor += $horInc * 2
GUICtrlSetGraphic($BCBox, $GUI_GR_MOVE, 212, 2)
GUICtrlSetGraphic($BCBox, $GUI_GR_LINE, 212, 29)
;~ end finish

EndFunc   ;==>_BarCode

Func _Zero($z)
$FullUPCArray[$z][1] = 0
$FullUPCArray[$z][2] = 0
$FullUPCArray[$z][3] = 0
$FullUPCArray[$z][4] = 1
$FullUPCArray[$z][5] = 1
$FullUPCArray[$z][6] = 0
$FullUPCArray[$z][7] = 1
EndFunc   ;==>_Zero

Func _One($z)
$FullUPCArray[$z][1] = 0
$FullUPCArray[$z][2] = 0
$FullUPCArray[$z][3] = 1
$FullUPCArray[$z][4] = 1
$FullUPCArray[$z][5] = 0
$FullUPCArray[$z][6] = 0
$FullUPCArray[$z][7] = 1
EndFunc   ;==>_One

Func _Two($z)
$FullUPCArray[$z][1] = 0
$FullUPCArray[$z][2] = 0
$FullUPCArray[$z][3] = 1
$FullUPCArray[$z][4] = 0
$FullUPCArray[$z][5] = 0
$FullUPCArray[$z][6] = 1
$FullUPCArray[$z][7] = 1
EndFunc   ;==>_Two

Func _Three($z)
$FullUPCArray[$z][1] = 0
$FullUPCArray[$z][2] = 1
$FullUPCArray[$z][3] = 1
$FullUPCArray[$z][4] = 1
$FullUPCArray[$z][5] = 1
$FullUPCArray[$z][6] = 0
$FullUPCArray[$z][7] = 1
EndFunc   ;==>_Three

Func _Four($z)
$FullUPCArray[$z][1] = 0
$FullUPCArray[$z][2] = 1
$FullUPCArray[$z][3] = 0
$FullUPCArray[$z][4] = 0
$FullUPCArray[$z][5] = 0
$FullUPCArray[$z][6] = 1
$FullUPCArray[$z][7] = 1
EndFunc   ;==>_Four

Func _Five($z)
$FullUPCArray[$z][1] = 0
$FullUPCArray[$z][2] = 1
$FullUPCArray[$z][3] = 1
$FullUPCArray[$z][4] = 0
$FullUPCArray[$z][5] = 0
$FullUPCArray[$z][6] = 0
$FullUPCArray[$z][7] = 1
EndFunc   ;==>_Five

Func _Six($z)
$FullUPCArray[$z][1] = 0
$FullUPCArray[$z][2] = 1
$FullUPCArray[$z][3] = 0
$FullUPCArray[$z][4] = 1
$FullUPCArray[$z][5] = 1
$FullUPCArray[$z][6] = 1
$FullUPCArray[$z][7] = 1
EndFunc   ;==>_Six

Func _Seven($z)
$FullUPCArray[$z][1] = 0
$FullUPCArray[$z][2] = 1
$FullUPCArray[$z][3] = 1
$FullUPCArray[$z][4] = 1
$FullUPCArray[$z][5] = 0
$FullUPCArray[$z][6] = 1
$FullUPCArray[$z][7] = 1
EndFunc   ;==>_Seven

Func _Eight($z)
$FullUPCArray[$z][1] = 0
$FullUPCArray[$z][2] = 1
$FullUPCArray[$z][3] = 1
$FullUPCArray[$z][4] = 0
$FullUPCArray[$z][5] = 1
$FullUPCArray[$z][6] = 1
$FullUPCArray[$z][7] = 1
EndFunc   ;==>_Eight

Func _Nine($z)
$FullUPCArray[$z][1] = 0
$FullUPCArray[$z][2] = 0
$FullUPCArray[$z][3] = 0
$FullUPCArray[$z][4] = 1
$FullUPCArray[$z][5] = 0
$FullUPCArray[$z][6] = 1
$FullUPCArray[$z][7] = 1
EndFunc   ;==>_Nine

During the Sleep (which actually isn't required for XP at all, and only a slight Sleep needed for Vista+) I use ScreenCapture and make a JPG out of it, which of course can be printed any number of ways. I personally use a GUI dimension of 260,155 and name each JPG according to the UPC, then copy the images in to the Clipboard and paste them in to a Word template for 3*10 label sheets. Look a lot of work to accomplish off that, so this is only a starter for you! :D

Ian


My projects:

  • IP Scanner - Multi-threaded ping tool to scan your available networks for used and available IP addresses, shows ping times, resolves IPs in to host names, and allows individual IPs to be pinged.
  • INFSniff - Great technicians tool - a tool which scans DriverPacks archives for INF files and parses out the HWIDs to a database file, and rapidly scans the local machine's HWIDs, searches the database for matches, and installs them.
  • PPK3 (Persistent Process Killer V3) - Another for the techs - suppress running processes that you need to keep away, helpful when fighting spyware/viruses.
  • Sync Tool - Folder sync tool with lots of real time information and several checking methods.
  • USMT Front End - Front End for Microsoft's User State Migration Tool, including all files needed for USMT 3.01 and 4.01, 32 bit and 64 bit versions.
  • Audit Tool - Computer audit tool to gather vital hardware, Windows, and Office information for IT managers and field techs. Capabilities include creating a customized site agent.
  • CSV Viewer - Displays CSV files with automatic column sizing and font selection. Lines can also be copied to the clipboard for data extraction.
  • MyDirStat - Lists number and size of files on a drive or specified path, allows for deletion within the app.
  • 2048 Game - My version of 2048, fun tile game.
  • Juice Lab - Ecigarette liquid making calculator.
  • Data Protector - Secure notes to save sensitive information.
  • VHD Footer - Add a footer to a forensic hard drive image to allow it to be mounted or used as a virtual machine hard drive.
  • Find in File - Searches files containing a specified phrase.

Share this post


Link to post
Share on other sites

i was thinking of the exact approach. taking a screenshot of an area of a window containing all needed objects to go on a label and then pasting it to an image and then printing the image. Looks like you took it a step further to send it to WORD template, good job !.

With all that in mind i got stuck at 1st step. I dont know how to take screenshot with autoit of a defined area/window/control etc.

Can you give me a start up on that ?

Share this post


Link to post
Share on other sites

You need #include <ScreenCapture.au3> in the script. Right after you populate the GUI with all other info you need, throw this in:

If $winVer <> "Win_XP" Then Sleep(1000)
_ScreenCapture_CaptureWnd(@TempDir & "" & $UPC & ".jpg", $BC, 11, 56, 253, 149, False)
GUIDelete($BC)

In my example above, I name the file after the UPC, I find that convenient because before I even bother creating a new image, I do an If FileExists on @TempDir & "" & $UPC & ".jpg and if I already have it, so much the better. If I am using 3 different product labels on a sheet, why create each thing multiple times? :D

Ian


My projects:

  • IP Scanner - Multi-threaded ping tool to scan your available networks for used and available IP addresses, shows ping times, resolves IPs in to host names, and allows individual IPs to be pinged.
  • INFSniff - Great technicians tool - a tool which scans DriverPacks archives for INF files and parses out the HWIDs to a database file, and rapidly scans the local machine's HWIDs, searches the database for matches, and installs them.
  • PPK3 (Persistent Process Killer V3) - Another for the techs - suppress running processes that you need to keep away, helpful when fighting spyware/viruses.
  • Sync Tool - Folder sync tool with lots of real time information and several checking methods.
  • USMT Front End - Front End for Microsoft's User State Migration Tool, including all files needed for USMT 3.01 and 4.01, 32 bit and 64 bit versions.
  • Audit Tool - Computer audit tool to gather vital hardware, Windows, and Office information for IT managers and field techs. Capabilities include creating a customized site agent.
  • CSV Viewer - Displays CSV files with automatic column sizing and font selection. Lines can also be copied to the clipboard for data extraction.
  • MyDirStat - Lists number and size of files on a drive or specified path, allows for deletion within the app.
  • 2048 Game - My version of 2048, fun tile game.
  • Juice Lab - Ecigarette liquid making calculator.
  • Data Protector - Secure notes to save sensitive information.
  • VHD Footer - Add a footer to a forensic hard drive image to allow it to be mounted or used as a virtual machine hard drive.
  • Find in File - Searches files containing a specified phrase.

Share this post


Link to post
Share on other sites

what do u mean by upc and bc ?

am not sure what those 2 stand for.

Sorry am not that much into this thing, i had to think few seconds to figure out what you mean by $winVer

Share this post


Link to post
Share on other sites

what do u mean by upc and bc ?

am not sure what those 2 stand for.

Sorry am not that much into this thing, i had to think few seconds to figure out what you mean by $winVer

Maybe check the help file on _ScreenCapture_CaptureWnd. The first part is just the file name you want the capture to be called, the second part is what it is capturing and $BC is the name of the GUI I created.

Ian


My projects:

  • IP Scanner - Multi-threaded ping tool to scan your available networks for used and available IP addresses, shows ping times, resolves IPs in to host names, and allows individual IPs to be pinged.
  • INFSniff - Great technicians tool - a tool which scans DriverPacks archives for INF files and parses out the HWIDs to a database file, and rapidly scans the local machine's HWIDs, searches the database for matches, and installs them.
  • PPK3 (Persistent Process Killer V3) - Another for the techs - suppress running processes that you need to keep away, helpful when fighting spyware/viruses.
  • Sync Tool - Folder sync tool with lots of real time information and several checking methods.
  • USMT Front End - Front End for Microsoft's User State Migration Tool, including all files needed for USMT 3.01 and 4.01, 32 bit and 64 bit versions.
  • Audit Tool - Computer audit tool to gather vital hardware, Windows, and Office information for IT managers and field techs. Capabilities include creating a customized site agent.
  • CSV Viewer - Displays CSV files with automatic column sizing and font selection. Lines can also be copied to the clipboard for data extraction.
  • MyDirStat - Lists number and size of files on a drive or specified path, allows for deletion within the app.
  • 2048 Game - My version of 2048, fun tile game.
  • Juice Lab - Ecigarette liquid making calculator.
  • Data Protector - Secure notes to save sensitive information.
  • VHD Footer - Add a footer to a forensic hard drive image to allow it to be mounted or used as a virtual machine hard drive.
  • Find in File - Searches files containing a specified phrase.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0