- Offizieller Beitrag
Hallo
Habe mich mal dran gesetzt und ein kleines Tool geschrieben, was das Übersetzen ein bisschen vereinfachen soll
und villeicht bei dem ein oder anderen mehr Interesse weckt.
Momentan hab ich das noch nicht auf anderen Rechnern ausprobiert (einfach zu spät um jemanden fragen zu können :P)
aber es könnte z.B. sein das es mit IE7 nicht funktioniert.
Wäre also super wenn ihr mir Rückmeldung geben könntet ob alles Funktioniert hat.
Wenn das Listview komplett geladen hat, könnt ihr einfach Doppelklick auf die Datei machen, die ihr Übersetzen/Reviewen/anschauen wollt.
Skript:
Spoiler anzeigen
#include <string.au3>
#include <GuiListView.au3>
#include <ie.au3>
#include <GUIConstants.au3>
Global $oIE, $aNum[1][3], $ExploreActive = False, $sOldSeRe, $iStart = 0,$iDumEnd = 0,$iDumSt = 0
Global $sUsername = RegRead("HKEY_CURRENT_USER\Software\SpiderTech\Translate", "sUser")
Global $sPassword = _StringEncrypt(0, RegRead("HKEY_CURRENT_USER\Software\SpiderTech\Translate", "sMainLoc"), 'SpidTechTransl$!', 2)
$oIE = _IECreateEmbedded()
[/autoit] [autoit][/autoit] [autoit]$guiExplore = GUICreate("AutoIt Hilfe - Explorer", 940, 790, -1, -1, $WS_MAXIMIZEBOX + $WS_SIZEBOX)
GUISetBkColor(0)
GUICtrlCreateObj($oIE, 8, 8, 940 - 16, 765 - 16)
GUICtrlSetResizing(-1, 1)
_IENavigate($oIE, 'http://johannes.autoit.de/translation/index.php')
$guiuserpw = GUICreate("AutoIt Hilfe übersetzen", 137, 135, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
GUISetBkColor(0)
$inpUser = GUICtrlCreateInput($sUsername, 8, 24, 121, 21)
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetBkColor(-1, 0x010101)
GUICtrlCreateLabel("Username:", 8, 8, 55, 15)
GUICtrlSetColor(-1, 0xFF0000)
$inpPw = GUICtrlCreateInput($sPassword, 8, 64, 121, 21, BitOR($ES_PASSWORD, $ES_AUTOHSCROLL))
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetBkColor(-1, 0x010101)
GUICtrlCreateLabel("Passwort:", 8, 48, 55, 15)
GUICtrlSetColor(-1, 0xFF0000)
$chkNote = GUICtrlCreateCheckbox("Login merken", 8, 86, 121, 15)
GUICtrlSetColor(-1, 0xFF0000)
If StringLen($sUsername) Or StringLen($sPassword) Then GUICtrlSetState(-1, $GUI_CHECKED)
$butLogin = GUICtrlCreateButton("Login", 8, 106, 121, -1, $BS_DEFPUSHBUTTON)
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetBkColor(-1, 0x0)
GUISetState(@SW_SHOW, $guiuserpw)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $butLogin
GUICtrlSetState($inpPw, $GUI_DISABLE)
GUICtrlSetState($inpUser, $GUI_DISABLE)
GUICtrlSetData($butLogin, "...Login...")
_IELoadWait($oIE)
$Username = GUICtrlRead($inpUser)
$Password = GUICtrlRead($inpPw)
_Login($Username, $Password)
If Not @error Then ExitLoop
GUICtrlSetData($butLogin, "Error")
MsgBox(48, "", "Sie haben ein falschen Benutzername/Userpasswort eingegeben")
GUICtrlSetState($inpPw, $GUI_ENABLE)
GUICtrlSetState($inpUser, $GUI_ENABLE)
GUICtrlSetData($inpPw, '')
GUICtrlSetData($butLogin, "Login")
EndSwitch
WEnd
TrayTip("Passwort korrekt", "Willkommen " & $Username, 3)
GUICtrlSetData($butLogin, "Lese Daten...")
If GUICtrlRead($chkNote) = $GUI_CHECKED Then
RegWrite("HKEY_CURRENT_USER\Software\SpiderTech\Translate", "sUser", "REG_SZ", GUICtrlRead($inpUser))
RegWrite("HKEY_CURRENT_USER\Software\SpiderTech\Translate", "sMainLoc", "REG_SZ", _StringEncrypt(1, GUICtrlRead($inpPw), 'SpidTechTransl$!', 2))
Else
RegDelete("HKEY_CURRENT_USER\Software\SpiderTech\Translate")
EndIf
_GetTRD()
$aStat = _GetStatus()
GUISetState(@SW_HIDE, $guiuserpw)
$guiMain = GUICreate("Eingeloggt als " & StringUpper(StringLeft($Username, 1)) & StringTrimLeft($Username, 1), 425, 360)
GUISetBkColor(0)
GUICtrlCreateLabel("Suche",217+16+8,8,170,15)
GUICtrlSetColor(-1,0xff0000)
$inpSearch = GUICtrlCreateInput("", 217 + 16 + 8, 28, 170, 20)
$comSearch = GUICtrlCreateCombo("Alle Anzeigen", 217 + 16 + 8, 56, 170)
GUICtrlSetData(-1, "Nur Übersetzte|Nur noch zu Reviewende|Nur noch zu Übersetzende")
$lstv = GUICtrlCreateListView("Name", 8, 8, 217, 300, BitOR($LVS_NOCOLUMNHEADER, $WS_VSCROLL, $LVS_SINGLESEL), $LVS_EX_FULLROWSELECT)
GUICtrlSendMsg(-1, 0x101E, 0, 200)
If IsArray($aStat) Then
GUICtrlCreateLabel("Status:", 8, 320, 217, 15)
GUICtrlSetBkColor(-1, -2)
GUICtrlSetColor(-1, 0xffffff)
GUICtrlCreateGraphic(8, 335, 407, 13)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00ff00, 0x00ff00)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 0, 0, $aStat[0][0], 13)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xffff00, 0xffff00)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, $aStat[0][0], 0, $aStat[1][0], 13)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff0000, 0xff0000)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, $aStat[0][0] + $aStat[1][0], 0, $aStat[2][0], 13)
GUICtrlCreateLabel($aStat[0][1], 8, 335)
GUICtrlSetBkColor(-1, -2)
GUICtrlCreateLabel($aStat[1][1], $aStat[0][0] + 8, 335)
GUICtrlSetBkColor(-1, -2)
GUICtrlCreateLabel($aStat[2][1], $aStat[0][0] + $aStat[1][0] + 8, 335)
GUICtrlSetBkColor(-1, -2)
Else
WinMove($guiMain, "", Default, Default, Default, 340)
EndIf
_SetListView("a")
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg(0x004E, "_DoubleClickOnListView")
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
If $ExploreActive Then
GUISetState(@SW_HIDE, $guiExplore)
GUISetState(@SW_SHOW, $guiMain)
$ExploreActive = False
Else
Exit
EndIf
Case $comSearch
Switch GUICtrlRead($comSearch)
Case "Nur Übersetzte"
_SetListView("d")
Case "Nur noch zu Reviewende"
_SetListView("r")
Case "Nur noch zu Übersetzende"
_SetListView("t")
Case Else
_SetListView("a")
EndSwitch
EndSwitch
$sSeRe = GUICtrlRead($inpSearch)
If $sSeRe <> $sOldSeRe Then _Search($sSeRe)
WEnd
Func _SetListView($sNum)
For $i = $iDumSt to $iDumEnd
GUICtrlDelete($i)
Next
$iDumSt = GUICtrlCreateDummy()
Local $iBKColor
If $sNum = "t" Or $sNum = "r" Or $sNum = "d" Then
If $sNum = "t" Then $iBKColor = 0xff0000
If $sNum = "r" Then $iBKColor = 0xffff00
If $sNum = "d" Then $iBKColor = 0x00ff00
For $i = 1 To $aNum[0][0]
If $aNum[$i][2] <> $sNum Then ContinueLoop
GUICtrlCreateListViewItem($aNum[$i][1], $lstv)
GUICtrlSetBkColor(-1, $iBKColor)
Next
Else
For $i = 1 To $aNum[0][0]
If $aNum[$i][2] = "t" Then $iBKColor = 0xff0000
If $aNum[$i][2] = "r" Then $iBKColor = 0xffff00
If $aNum[$i][2] = "d" Then $iBKColor = 0x00ff00
GUICtrlCreateListViewItem($aNum[$i][1], $lstv)
GUICtrlSetBkColor(-1, $iBKColor)
Next
EndIf
$iDumEnd = GUICtrlCreateDummy()
EndFunc ;==>_SetListView
Func _Search($sSeRe)
$sOldSeRe = $sSeRe
$iInd = _GUICtrlListView_FindInText($lstv, $sSeRe)
If $iInd = -1 Then Return
_GUICtrlListView_EnsureVisible($lstv, $iInd)
_GUICtrlListView_SetItemSelected($lstv, $iInd)
$cpos = _GUICtrlListView_GetItemPosition($lstv, $iInd)
$wpos = WinGetPos($guiMain)
MouseMove($wpos[0] + $cpos[0] + 8 + Random(0, 40, 1), $wpos[1] + $cpos[1] + 34, 1)
EndFunc ;==>_Search
Func _Login($sUsername, $sPassword)
Local $oPost, $oUsName, $oUsPw, $oLogBut, $aTranslate, $aReview
$oPost = _IEFormGetObjByName($oIE, 0)
$oUsName = _IEFormElementGetObjByName($oPost, 'username')
$oUsPw = _IEFormElementGetObjByName($oPost, 'userpass')
$oLogBut = _IEFormElementGetObjByName($oPost, 'login')
_IEFormElementSetValue($oUsName, $sUsername)
_IEFormElementSetValue($oUsPw, $sPassword)
_IEAction($oLogBut, "click")
_IELoadWait($oLogBut)
If StringInStr(_IEBodyReadText($oIE), 'Eingeloggt als ') Then Return 1
Return SetError(1, 0, 0)
EndFunc ;==>_Login
Func _GetStatus()
_IENavigate($oIE, 'http://johannes.autoit.de/translation/statusbar.php')
Local $body = StringReplace(_IEBodyReadHTML($oIE), "/SPAN", "/SPAN" & @CRLF), $aTmp, $aRet[3][2]
$aTmp = StringRegExp($body, '<SPAN title=".*">(.*)</SPAN', 3)
If UBound($aTmp) <> 3 Then Return SetError(1, 0, 0)
$aRet[0][0] = Floor(407 * $aTmp[0] / ($aTmp[0] + $aTmp[1] + $aTmp[2]))
$aRet[0][1] = $aTmp[0]
$aRet[1][0] = Floor(407 * $aTmp[1] / ($aTmp[0] + $aTmp[1] + $aTmp[2]))
$aRet[1][1] = $aTmp[1]
$aRet[2][0] = Floor(407 * $aTmp[2] / ($aTmp[0] + $aTmp[1] + $aTmp[2]))
$aRet[2][1] = $aTmp[2]
Return $aRet
EndFunc ;==>_GetStatus
Func _TRD()
Local $sRead = StringTrimRight(GUICtrlRead(GUICtrlRead($lstv)), 1), $iInd
If $sRead = '' Then Return SetError(MsgBox(48, "", "Bitte wählen Sie ein eintrag in dem Listview aus!"), 0, 0)
$iInd = _GetFromName($sRead)
If @error Then Return SetError(MsgBox(48, "", "Error, eintrag wurde in der Datenbank nicht gefunden.") + 1, 0, 0)
_IENavigate($oIE, "about:blank")
_IENavigate($oIE, 'http://johannes.autoit.de/translation/show.php?id=' & $aNum[$iInd][0], 0)
$ExploreActive = True
GUISetState(@SW_SHOW, $guiExplore)
GUISetState(@SW_HIDE, $guiMain)
Return
;~ RunWait('"' & @ComSpec & '" /c start http://johannes.autoit.de/translation/show.php?id='&$aNum[$iInd][0], '', @SW_HIDE)
EndFunc ;==>_TRD
Func _GetFromName($sName)
For $i = 1 To $aNum[0][0]
If $aNum[$i][1] = $sName Then Return $i
Next
Return SetError(1, 0, 0)
EndFunc ;==>_GetFromName
Func _GetTRD()
_IENavigate($oIE, 'http://johannes.autoit.de/translation/status.php')
Local $body = _IEBodyReadHTML($oIE), $aTmp, $aTranslate, $aReview
$tim = TimerInit()
$aTmp = StringRegExp($body, 'show.php.id=(.*)"><B>(.*)</B>', 3)
For $i = 0 To UBound($aTmp) - 1
If Mod($i, 2) Then
$aNum[UBound($aNum) - 1][1] = $aTmp[$i]
Else
ReDim $aNum[UBound($aNum) + 1][3]
$aNum[UBound($aNum) - 1][0] = $aTmp[$i]
$aNum[UBound($aNum) - 1][2] = "d"
EndIf
Next
$aNum[0][0] = UBound($aNum) - 1
$aTmp = ''
$aTranslate = StringRegExp($body, '<A href="translate.php.id=(.*)"', 3)
$aReview = StringRegExp($body, '<A href="review.php.id=(.*)"', 3)
For $i = 1 To $aNum[0][0]
For $x = 0 To UBound($aTranslate) - 1
If $aNum[$i][0] = $aTranslate[$x] Then $aNum[$i][2] = "t"
Next
Next
For $i = 1 To $aNum[0][0]
For $x = 0 To UBound($aReview) - 1
If $aNum[$i][0] = $aReview[$x] Then $aNum[$i][2] = "r"
Next
Next
EndFunc ;==>_GetTRD
Func _DoubleClickOnListView($hWndGUI, $MsgID, $wParam, $lParam);Die Eigentliche Funktion
Local $tagNMHDR, $event, $hwndFrom, $code
$tagNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
$event = DllStructGetData($tagNMHDR, 3); Checkt wie das EVENT aussieht
If $wParam = $lstv Then;Wenn der Klick auf das ListView ging..
If $event = $NM_DBLCLK Then;.. Wenn es ein DoppelKlick war
; Hier kommt hin was er machen soll:
_TRD()
EndIf
EndIf
$tagNMHDR = 0
$event = 0
$lParam = 0
EndFunc ;==>_DoubleClickOnListView
Wenn Interesse dadran besteht, bin ich bereit es auch auszuweiten..
Mfg Spider
P.S. Im Anhang exe und au3
Edit: Da ja anscheinend doch interesse besteht, hab ich das Skript mal erweitert. (Suche eingebaut, Automatisches Login, Embedded Ie Control und noch paar andere sachen)
Falls jemand noch ideen hat was rechts rein Soll (sieht noch etw schwarz aus^^) sagt mir bescheid