WinGetKey

  • Hallo,

    ich arbeite an einem neuen scriptchen, dass den windows key auslesen soll.
    alle vorarbeiten habe ich abgeschlossen, jedoch habe ich noch das ein oder andere prob.

    Prob 1:
    ich habe über das ganze GUI ein bild gelegt. darüber die inputboxen und buttons, die auch alle sichtbar sind, jedoch funktionieren die buttons nicht (da das bild anscheinend darüber liegt). wie kann ich es machen, dass ich die buttons doch nutzen kann?

    Prob 2:
    da ich prob 1 nicht lösen konnte, habe ich das script ein wenig modifiziert, dass ich 3 verschiedene versionen aufrufen kann (flag 0, 1 und 2).
    möglichkeit 0 soll die finale version sein, wo die buttons aber zZ nicht funktionieren, die tastenkombo geht jedoch)
    möglichkeit 1 wird ohne bild gestartet, buttons und tastenkombo funktionieren.
    möglichkeit 2 zeit das bild an, versteckt aber die buttons und zeigt dafür ein menü an. tastenkombo geht, aber das menü leider nicht. ich kann auch zZ keinen fehler mehr finden ... kann mal wer drüber gucken?

    Prob 3:
    der key liegt natürlich verschlüssel in der reg vor ... ich habe ein programm ausfindig machen können, was wie mein tool, den key ausliest, entschlüsselt und anzeigt. jedoch ist es in c/c++ oder c# geschrieben ... leider fühle ich mich nicht in der lage, den code auf autoit umzuschreiben, da ich in den sprachen leider null peil habe. wüsste jmd wie man das an autoit, in mein script, anpassen kann?

    Spoiler anzeigen

    und hier ist das script

    Spoiler anzeigen
    [autoit]

    ;
    ; WinGetKey
    ;
    ; © sc4ry

    #include <guiconstants.au3>
    #include <string.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("TrayMenuMode",1)
    TraySetToolTip("sc4ry´s " & @ScriptName & @CRLF & @UserName & " \\ " & @ComputerName & @CRLF & @OSVersion & " " & @OSServicePack & " \\ " & @OSBuild & @CRLF & @IPAddress1)

    [/autoit] [autoit][/autoit] [autoit]

    $flag = 2
    Global $menu, $copyid, $copykey

    [/autoit] [autoit][/autoit] [autoit]

    $ID = RegRead("HKLM\Software\Microsoft\Windows NT\CurrentVersion", "ProductId")
    $Key = RegRead("HKLM\Software\Microsoft\Windows NT\CurrentVersion", "DigitalProductId")

    [/autoit] [autoit][/autoit] [autoit]

    If $flag = 0 Then GUICreate("WinGetKey", 300, 120, -1, -1, $WS_POPUP + $WS_DLGFRAME, $WS_EX_TOPMOST) ;normal(bild + buttons, kein menu)
    If $flag = 1 Then GUICreate("WinGetKey", 300, 120, -1, -1, $WS_POPUP + $WS_DLGFRAME, $WS_EX_TOPMOST) ;picless(ohne bild + menu, mit buttons)
    If $flag = 2 Then GUICreate("WinGetKey", 260, 140, -1, -1, $WS_POPUP + $WS_DLGFRAME, $WS_EX_TOPMOST) ;buttonless (mit bild + menu, ohne buttons)

    [/autoit] [autoit][/autoit] [autoit]

    If $flag <> 1 Then GUICtrlCreatePic("C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Microsoft\Wallpaper1.bmp", 0, 0, 370, 190)
    If $flag = 2 Then $menu = GUICtrlCreateMenu("copy...")
    If $flag = 2 Then $copyid = GUICtrlCreateMenuItem("ID (ALT+I)", $menu)
    If $flag = 2 Then $copykey = GUICtrlCreateMenuItem("Key (ALT+K)", $menu)
    $copyid = GUICtrlCreateButton("copy &ID", 245, 30, 50, 20)
    If $flag = 2 Then GUICtrlSetState($copyid, $gui_hide)
    $copykey = GUICtrlCreateButton("copy &Key", 245, 80, 50, 20)
    If $flag = 2 Then GUICtrlSetState($copykey, $gui_hide)
    GUICtrlCreateLabel("Product ID", 10, 10, 53, 15)
    GUICtrlCreateLabel("Product Key", 10, 60, 60, 15)
    $IID = GUICtrlCreateInput("", 10, 30, 230, 20, $ES_READONLY)
    GUICtrlSetData($IID, $ID)
    $IKey = GUICtrlCreateInput("", 10, 80, 230, 20, $ES_READONLY)
    GUICtrlSetData($IKey, $Key)

    GUISetState(@sw_show)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Select
    case $msg = $gui_event_close
    Exit
    case $msg = $copyid
    ClipPut("")
    ClipPut(guictrlread($IID))
    case $msg = $copykey
    ClipPut("")
    ClipPut(guictrlread($IKey))
    EndSelect
    WEnd

    [/autoit]
    • Offizieller Beitrag

    HI,

    Spoiler anzeigen
    [autoit]

    ; ----------------------------------------------------------------------------
    ;
    ; AutoIt Version: 3.1.1 beta
    ; Author: Thorsten Meger
    ;
    ; Script Function:
    ; Windows XP Information displayed in a GUI
    ; with Office-Key (only Office XP or 2003 supported)
    ;
    ; ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;GUI
    $GUI = GUICreate("Windows Information", 685, 450, 158, 127)

    [/autoit] [autoit][/autoit] [autoit]

    ;Labels
    $windowsInformation_L = GUICtrlCreateLabel("Windows Information", 8, 8, 659, 25)
    $status_L = GUICtrlCreateLabel("Information read out ...", 24, 80, 400, 17)
    $description_L = GUICtrlCreateLabel("Description", 16, 112, 103, 17)
    $windowsType_L = GUICtrlCreateLabel("WindowsType", 16, 152, 103, 17)
    $serialNumber_L = GUICtrlCreateLabel("SerialNumber", 16, 192, 103, 17)
    $ProductKey_L = GUICtrlCreateLabel("ProductKey", 16, 232, 103, 17)
    $InstallDate_L = GUICtrlCreateLabel("InstallDate", 16, 272, 103, 17)
    $LastBootUpTime_L = GUICtrlCreateLabel("LastBootUpTime", 16, 312, 103, 17)
    $RegisteredOwner_L = GUICtrlCreateLabel("RegisteredOwner", 16, 352, 103, 17)
    $officeKey_L = GUICtrlCreateLabel("OfficeKey", 16, 392, 103, 17)

    [/autoit] [autoit][/autoit] [autoit]

    ;Input
    $description_I = GUICtrlCreateInput("Description", 130, 112, 389, 21)
    $windowsType_I = GUICtrlCreateInput("WindowsType", 130, 152, 389, 21)
    $serialNumber_I = GUICtrlCreateInput("SerialNumber", 130, 192, 389, 21)
    $ProductKey_I = GUICtrlCreateInput("ProductKey", 130, 232, 389, 21)
    $InstallDate_I = GUICtrlCreateInput("InstallDate", 130, 272, 389, 21)
    $LastBootUpTime_I = GUICtrlCreateInput("LastBootUpTime", 130, 312, 389, 21)
    $RegisteredOwner_I = GUICtrlCreateInput("RegisteredOwner", 130, 352, 389, 21)
    $officeKey_I = GUICtrlCreateInput("OfficeKey", 130, 392, 389, 21)

    [/autoit] [autoit][/autoit] [autoit]

    ;Groups
    $informationPanel_G = GUICtrlCreateGroup("Information Panel", 8, 48, 585, 393)
    $status_G = GUICtrlCreateGroup("Status", 14, 64, 553, 41)
    $buttins_G = GUICtrlCreateGroup("Buttons", 608, 48, 65, 393)
    $office_G = GUICtrlCreateGroup("Microsoft Office", 14, 375, 553, 48)

    [/autoit] [autoit][/autoit] [autoit]

    ;Buttons
    $exit_B = GUICtrlCreateButton("Exit", 616, 72, 49, 25, 0)
    $Description_B = GUICtrlCreateButton("clipboard", 616, 112, 49, 25, 0)
    $WindowsType_B = GUICtrlCreateButton("clipboard", 616, 152, 49, 25, 0)
    $SerialNumber_B = GUICtrlCreateButton("clipboard", 616, 192, 49, 25, 0)
    $ProductKey_B = GUICtrlCreateButton("clipboard", 616, 232, 49, 25, 0)
    $InstallDate_B = GUICtrlCreateButton("clipboard", 616, 272, 49, 25, 0)
    $LastBootUpTime_B = GUICtrlCreateButton("clipboard", 616, 312, 49, 25, 0)
    $registeredOwner_B = GUICtrlCreateButton("clipboard", 616, 352, 49, 25, 0)
    $OfficeKey_B = GUICtrlCreateButton("clipboard", 616, 392, 49, 25, 0)

    [/autoit] [autoit][/autoit] [autoit]

    ; SetFont
    $font = "Comic Sans MS"
    GUICtrlSetFont($windowsInformation_L, 16, 400, 4, $font)

    [/autoit] [autoit][/autoit] [autoit]

    ;ProgressBar
    $progressbar = GUICtrlCreateProgress(140, 75, 400, 25)

    [/autoit] [autoit][/autoit] [autoit]

    ;Global variables
    Global $product = "" ; Office product Version (XP or 2003)
    Global $counter = 3 ; Counter for progressBar
    Global $wait = 150 ; Wait for progessBar

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    If $counter = 3 Then
    Sleep(500)
    GUICtrlSetData($status_L, "Initialize... " & $counter)
    progress()
    $counter -= 1
    ElseIf $counter = 2 Then
    GUICtrlSetData($status_L, "Initialize... " & $counter)
    progress()
    $counter -= 1
    ElseIf $counter = 1 Then
    GUICtrlSetData($status_L, "Initialize... " & $counter)
    progress()
    $counter -= 1
    ElseIf $counter = 0 Then
    GUICtrlSetData($status_L, "Ready ...")
    progress()
    $counter -= 1
    ElseIf $counter = -1 Then
    Dim $Bin = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "DigitalProductID")
    Dim $key4RegisteredOwner = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
    $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    $colSettings = $objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")

    For $objOperatingSystem In $colSettings
    Next
    GUICtrlSetData($description_I, StringMid($objOperatingSystem.Description, 1))
    GUICtrlSetData($windowsType_I, '(' & @OSVersion & ') ' & StringMid($objOperatingSystem.Caption, 19))
    GUICtrlSetData($serialNumber_I, StringMid($objOperatingSystem.SerialNumber, 1))
    GUICtrlSetData($ProductKey_I, DecodeProductKey($Bin))
    GUICtrlSetData($InstallDate_I, WMIDateStringToDate($objOperatingSystem.InstallDate))
    GUICtrlSetData($LastBootUpTime_I, WMIDateStringToDate($objOperatingSystem.LastBootUpTime))
    GUICtrlSetData($RegisteredOwner_I, RegRead($key4RegisteredOwner, "RegisteredOwner"))
    GUICtrlSetData($officeKey_I, getOfficeKey())
    GUICtrlSetData($officeKey_L, "Office " & $product)
    $counter -= 1
    ElseIf $counter < - 1 Then
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $exit_B
    GUICtrlSetData($status_L, "So long, Mega")
    Sleep(1500)
    ExitLoop
    Case $msg = $Description_B
    ClipPut(StringMid($objOperatingSystem.Description, 1))
    GUICtrlSetData($status_L, "Description copied to clipboard")
    Case $msg = $WindowsType_B
    ClipPut('(' & @OSVersion & ') ' & StringMid($objOperatingSystem.Caption, 19))
    GUICtrlSetData($status_L, "WindowsType copied to clipboard")
    Case $msg = $SerialNumber_B
    ClipPut(StringMid($objOperatingSystem.SerialNumber, 1))
    GUICtrlSetData($status_L, "SerialNumber copied to clipboard")
    Case $msg = $ProductKey_B
    ClipPut(DecodeProductKey($Bin))
    GUICtrlSetData($status_L, "ProductKey copied to clipboard")
    Case $msg = $InstallDate_B
    ClipPut(WMIDateStringToDate($objOperatingSystem.InstallDate))
    GUICtrlSetData($status_L, "InstallDate copied to clipboard")
    Case $msg = $LastBootUpTime_B
    ClipPut(WMIDateStringToDate($objOperatingSystem.LastBootUpTime))
    GUICtrlSetData($status_L, "LastBootUpTime copied to clipboard")
    Case $msg = $registeredOwner_B
    ClipPut(RegRead($key4RegisteredOwner, "RegisteredOwner"))
    GUICtrlSetData($status_L, "RegisteredOwner copied to clipboard")
    Case $msg = $OfficeKey_B
    ClipPut(getOfficeKey())
    GUICtrlSetData($status_L, "OfficeKey copied to clipboard")
    Case Else
    ;;;;;;;
    EndSelect
    EndIf
    WEnd
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    ; ----------------------------------------------------------------------------
    ;
    ; AutoIt Version: 3.1.1 beta
    ; Author: Unknown & Thorsten Meger <[email='Thorsten.Meger@gmx.de'][/email]>
    ;
    ; Script Function: Decode REG_BINARY
    ; ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func DecodeProductKey($BinaryDPID)
    Local $bKey[15]
    Local $sKey[29]
    Local $Digits[24]
    Local $Value = 0
    Local $hi = 0
    Local $n = 0
    Local $i = 0
    Local $dlen = 29
    Local $slen = 15
    Local $Result

    $Digits = StringSplit("BCDFGHJKMPQRTVWXY2346789", "")
    $BinaryDPID = StringMid($BinaryDPID, 105, 30)
    For $i = 1 To 29 Step 2
    $bKey[Int($i / 2) ] = Dec(StringMid($BinaryDPID, $i, 2))
    Next
    For $i = $dlen - 1 To 0 Step - 1
    If Mod(($i + 1), 6) = 0 Then
    $sKey[$i] = "-"
    Else
    $hi = 0
    For $n = $slen - 1 To 0 Step - 1
    $Value = BitOR(BitShift($hi, -8), $bKey[$n])
    $bKey[$n] = Int($Value / 24)
    $hi = Mod($Value, 24)
    Next
    $sKey[$i] = $Digits[$hi + 1]
    EndIf
    Next
    For $i = 0 To 28
    $Result = $Result & $sKey[$i]
    Next
    Return $Result
    EndFunc ;==>DecodeProductKey

    [/autoit] [autoit][/autoit] [autoit]

    ; ----------------------------------------------------------------------------
    ;
    ; AutoIt Version: 3.1.1 beta
    ; Author: Unknown & Thorsten Meger <[email='Thorsten.Meger@gmx.de'][/email]>
    ;
    ; Script Function: WMIDateStringToDate (changed Date format)
    ; ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func WMIDateStringToDate($dtmDate)
    Return (StringMid($dtmDate, 7, 2) & "/" & _
    StringMid($dtmDate, 5, 2) & "/" & StringLeft($dtmDate, 4) _
    & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))
    EndFunc ;==>WMIDateStringToDate

    [/autoit] [autoit][/autoit] [autoit]

    ; ----------------------------------------------------------------------------
    ;
    ; AutoIt Version: 3.1.1 beta
    ; Author: Thorsten Meger <[email='Thorsten.Meger@gmx.de'][/email]>
    ;
    ; Script Function: Display a "fake" progressbar at the beginning
    ; ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func progress()
    If $counter = 3 Then
    For $i = 0 To 20 Step 1
    GUICtrlSetData($progressbar, $i)
    Sleep($wait / 20)
    Next
    ElseIf $counter = 2 Then
    For $i = 20 To 50 Step 1
    GUICtrlSetData($progressbar, $i)
    Sleep($wait / 30)
    Next
    ElseIf $counter = 1 Then
    For $i = 50 To 80 Step 1
    GUICtrlSetData($progressbar, $i)
    Sleep($wait / 30)
    Next
    ElseIf $counter = 0 Then
    For $i = 80 To 100 Step 1
    GUICtrlSetData($progressbar, $i)
    Sleep($wait / 20)
    Next
    GUICtrlSetState($progressbar, $GUI_HIDE)
    EndIf
    EndFunc ;==>progress

    [/autoit] [autoit][/autoit] [autoit]

    ; ----------------------------------------------------------------------------
    ;
    ; AutoIt Version: 3.1.1 beta
    ; Author: Thorsten Meger <[email='Thorsten.Meger@gmx.de'][/email]>
    ;
    ; Script Function:Get & decode OfficeKey
    ; ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func getOfficeKey()
    Local $List[1]
    Local $i = 1
    $var = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Common\InstallRoot", "Path")
    If $var <> "" Then
    $product = "2003"
    Dim $officeKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Registration"
    Else
    $var = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\10.0\Common\InstallRoot", "Path")
    If @error <> 0 Then
    GUICtrlSetData($status_L, "Info: Unable to find installationPath, maybe no Office installed!")
    Return "No Office XP or 2003 found"
    EndIf
    If $var <> "" Then
    $product = "XP"
    Dim $officeKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\10.0\Registration"
    EndIf
    EndIf
    Dim $var = RegEnumKey($officeKey, $i)
    If @error <> 0 Then
    GUICtrlSetData($status_L, "Info: Unable to find REG_BINARY 'DigitalProductID', maybe no Office installed!")
    Return "No Office XP or 2003 found"
    Else
    $List[$i - 1] = RegRead($officeKey & "\" & $var, "DigitalProductID")
    If $List[$i - 1] = "" Then
    GUICtrlSetData($status_L, "Info: Unable to find REG_BINARY 'DigitalProductID', maybe no Office installed!")
    Else
    $key = $List[$i - 1]
    Return DecodeProductKey($key)
    EndIf
    EndIf
    EndFunc ;==>getOfficeKey

    [/autoit]

    So long,

    Mega