fast richtig. nur dass StringBetween nen Array zurückgibt.
Beiträge von SEuBo
-
-
Vielleicht solltest du dir auch nochmal die Hilfe zu GUIGetMsg() und nochmal ganz genau die Stelle im Script angucken
-
Danke, das hat mir sehr geholfen.
Habe übrigens deinen schnipsel mal durchlaufen lassen:
autoit.de/wcf/attachment/8092/Bei mir klappts. hab es einmal von der zwischenablage, und einmal direkt aus einer datei eingelesen.
-
Hier mal ein beispiel.
Hoffe es hiflt:Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
$gui1 = GUICreate('GUI 1', 500, 300, 100, 100)
$button1 = GUICtrlCreateButton('Aufruf GUI 2', 20, 20, 100, 21)
$button4 = GUICtrlCreateButton('Aufruf GUI 3', 20, 70, 100, 21)$gui2 = GUICreate('GUI 2', 500, 300, 500, 500)
[/autoit] [autoit][/autoit] [autoit]
$button2 = GUICtrlCreateButton('Zurück zu GUI 1', 20, 20, 100, 21)$gui3 = GUICreate('GUI 3', 500, 300, 540, 20)
[/autoit] [autoit][/autoit] [autoit]
$button3 = GUICtrlCreateButton('Zurück zu GUI 1', 20, 20, 100, 21)GUISetState(@SW_SHOW, $gui1)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit]
$msg = GUIGetMsg(1) ; Advanced GUIGetMsg()-Mode (s. Hilfe)
Switch $msg[0] ; Ereignis
Case $button1 ; aufruf gui 2
GUISetState(@SW_SHOW, $gui2) ; 2tes GUI anzeigen
GUISetState(@SW_HIDE, $gui1) ; 1tes verstecken
Case $button4 ; aufruf gui 3
GUISetState(@SW_SHOW, $gui3) ; 3tes GUI...
GUISetState(@SW_HIDE, $gui1) ; ....
Case $button2, $button3 ; zurück zu GUI 1 (button 2 ist auf GUI 2, und button 3 auf GUI 3)
ContinueCase ; Einfach zum nächsten Punkt springen, da ja eh nur das fenster, von dem der Aufruf kam, versteckt wird.
Case $GUI_EVENT_CLOSE
If $msg[1] = $gui1 Then Exit ; Wenn das hauptfenster geschlossen wurde, das ganze programm beenden
GUISetState(@SW_SHOW, $gui1) ; ansonsten wieder das Hauptfenster zeigen.
GUISetState(@SW_HIDE, $msg[1]) ; und das andere verstecken
EndSwitch
WEnd -
Bei mir werden die Funktionen wild durcheinander gemischt, wäre schöner wenn sie in der Reihenfolge blieben wie sie in der orginall au3 waren.
Naja "mischen" ist nicht ganz richtig - die Funktionen werden alphabetisch sortiert. Wenn du das nicht möchtest, musst du in der DescribeIt.au3 in Zeile 827
[autoit]_ArraySort($aFuncs)
[/autoit]auskommentieren. Ich werde eine Checkbox dafür einbauen
Auch werden Errormeldugen aus den Orginalheadern rausgeschmissen und includes entfernt.
Die Exportfunktion ist noch nicht ausgereift. momentan werden nur header und funktion abwechselnd in eine .au3 geschrieben. Das kommt alles noch bis v1.0. Das ist der Grund für die fehlenden Includes.
Wegen den @error abfragen: Das script erwartet 21 (oder waren's 17?!) leerzeichen am Zeilenanfang. Irgendwo musst ich es ja standartisieren, denn immerhin beruht auch die Speichern/Laden funktion, welche ja nichts anderes ist als export/import, auch auf diesem "System".
Wenn ich mal zuviel langeweile hab, bau ich eine Funktion ein, die versucht "verformte" Header einzulesen.Wenn du nochmal deine Spoiler anguckst, siehst du, dass die letzen beiden Zeilen irgendwie verrutscht sind.
P.s. User.properties.Platz #37 hab ich schon belegt ;). https://autoit.de/index.php?page=Thread&postID=138953
Deswegen wird auch die User.properties per RegExp auseinandergenommen. eigentlich soll genau das vermieden werden. Ich schau nachher nochmal über den installer.
Könntest du vllt den (Orginal-)ausschnitt mit #37 posten? das würde mir helfen, den RegExp zu verbessern
-
Bitteschön, so sollte es laufen.
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <Excel.au3>
HotKeySet("{ESC}", "_Exit")$sSource = __InetGetSource("http://www.offtek.de/laptopmemory.php?maincat=1&stid=1")
[/autoit] [autoit][/autoit] [autoit]
$aManufact = StringRegExp($sSource, "(?<=href=')(\QModelType.php?stid=1&manu=\E([\w/-]+))", 3)
If @error Then Exit
;~ _ArrayDisplay($aManufact)
Global $aExcel[1][9] = [["Speichermodul", "Modulgröße", "Produkt-Kode", "Herst.-Kode", "Spezifikationen", "Marke", "Lagerstatus", "Garantie", "Preis"]]
For $m = 0 To UBound($aManufact) - 1 Step 2
ConsoleWrite("+>===================================================================" & @CRLF)
TrayTip($aManufact[$m + 1], "Wir sind beim nächsten Hersteller!", 10)
$sSource = __InetGetSource("http://www.offtek.de/" & $aManufact[$m])
$aTyp = StringRegExp($sSource, "(?<=modeltype=).+?(?='>)", 3)
If @error Then ContinueLoop
;~ _ArrayDisplay($aTyp)
For $t = 0 To UBound($aTyp) - 1
TrayTip($aManufact[$m + 1], "Modeltype: " & $aTyp[$t], 3)
If Not StringInStr($aTyp[$t], "&model=") Then
$sSource = __InetGetSource("http://www.offtek.de/ModelSelect.php?stid=1&manu=" & $aManufact[$m] & "&modeltype=" & $aTyp[$t])
$aModel = StringRegExp($sSource, "model=([^']+)", 3)
If @error Then ContinueLoop
For $mo = 0 To UBound($aModel) - 1
$sSource = __InetGetSource("http://www.offtek.de/ModelData.php?stid=1&manu=" & $aManufact[$m] & "&modeltype=" & $aTyp[$t] & "&model=" & $aModel[$mo])
$aTitle = StringRegExp($sSource, 'class="titlebar">Speichermodule f.r (.+)</td>', 3)
$aData = StringRegExp($sSource, "(?>middle'>([^<]+)).+?(?>middle'>([^<]+)).+?(?>middle'>([^<]+)).+?(?>a href='[^>]+>(.+?)</a>)(?>.+?returnValue"">([^<]+))(?>.+?returnValue""> ?([^<]+))(?>.+?returnValue"">([^<]+))(?>.+?(\d+,\d+) ?&euro)", 4)
For $x = 0 To UBound($aData) - 1
_AddModul($aTitle[0], $aData[$x])
Next
;~ _ArrayDisplay($aExcel)
ConsoleWrite("http://www.offtek.de/ModelData.php?stid=1&manu=" & $aManufact[$m] & "&modeltype=" & $aTyp[$t] & "&model=" & $aModel[$mo] & @CRLF)
Next
Else
$sSource = __InetGetSource("http://www.offtek.de/ModelSelect.php?stid=1&manu=" & $aManufact[$m] & "&modeltype=0&model=" & $aTyp[$t])
$aTitle = StringRegExp($sSource, 'class="titlebar">Speichermodule f.r (.+)</td>', 3)
$aData = StringRegExp($sSource, "(?>middle'>([^<]+)).+?(?>middle'>([^<]+)).+?(?>middle'>([^<]+)).+?(?>a href='[^>]+>(.+?)</a>)(?>.+?returnValue"">([^<]+))(?>.+?returnValue""> ?([^<]+))(?>.+?returnValue"">([^<]+))(?>.+?(\d+,\d+) ?&euro)", 4)
For $x = 0 To UBound($aData) - 1
_AddModul($aTitle[0], $aData[$x])
Next
ConsoleWrite("http://www.offtek.de/ModelSelect.php?stid=1&manu=" & $aManufact[$m] & "&modeltype=0&model=" & $aTyp[$t] & @CRLF)
EndIf
ConsoleWrite(@CRLF)
Next
ConsoleWrite("+>===================================================================" & @CRLF)
ConsoleWrite(@CRLF & @CRLF)
Next_ArrayDisplay($aExcel)
[/autoit] [autoit][/autoit] [autoit]
$oExcelObj = _ExcelBookNew()
_ExcelWriteSheetFromArray($oExcelObj, $aExcel)
_ExcelBookClose($oExcelObj)Func __InetGetSource($s_URL)
[/autoit] [autoit][/autoit] [autoit]
Local $sString = InetRead($s_URL)
Local $nError = @error, $nExtended = @extended
Return SetError($nError, $nExtended, BinaryToString($sString))
EndFunc ;==>__InetGetSourceFunc _AddModul($sName, $aArray)
[/autoit] [autoit][/autoit] [autoit]
$iUbound = UBound($aExcel)
ReDim $aExcel[$iUbound + 1][9]
$aExcel[$iUbound][0] = $sName
For $i = 1 To UBound($aArray) - 1
$aExcel[$iUbound][$i] = $aArray[$i]
Next
EndFunc ;==>_AddModulFunc _Exit()
[/autoit]
Exit
EndFunc ;==>_Exit -
liegt die datei zufälligerweise auf bplaced.net?
-
Danke für die Tips! Alle 3 sind jetzt umgesetzt. Im Post 1 gibt nun die berichtigte Version.
-
Hallo UEZ,
Wenn das About Fenster offen ist, hat das Haupfenster auch keinen redraw mehr. ist das gewollt?
Ansonsten - coole sache! -
Neue Version!
Es ist jetzt ein Installer eingebaut (Danke an PrideRage für seine Vorlage ), der das ganze in SciTE integriert.
Ansonsten kamen noch diverse kleinere Sachen, die aber nicht erwähnenswert sind und lediglich die Handhabung vereinfachen.Siehe Post 1.
-
-
Hallo:
In diesem .rar hier findet ihr ein png Bild und das Script.
http://www.box.net/shared/2z98a50mhiIm GUI soll dieses PNG angezeigt werden - klappt auch.
Wenn man jetzt allerdings das GUI aus dem Desktop rausschiebt,
und dann wieder reinzieht, wird die ganze Grafik irgendwie "kantig."
Vorher:
autoit.de/wcf/attachment/8078/
Nachher:
autoit.de/wcf/attachment/8079/Als ob GDI die Kantenglättung ausschaltet.
Kann mir einer sagen warum das so ist?
Hier nochmal das Script, falls jemand das .rar nicht runterladen möchte:
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>$hGUI = GUICreate("DescribeIt Installer", 470, 260, -1, -1)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\describeit.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)$idDestination = GUICtrlCreateGroup("Destination path", 16, 96, 433, 49)
[/autoit] [autoit][/autoit] [autoit]
$idPath = GUICtrlCreateInput("", 24, 112, 321, 21)
$id_browse = GUICtrlCreateButton("Browse...", 352, 112, 89, 25, $WS_GROUP)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$idText = GUICtrlCreateLabel( _
"Setup will now install DescribeIt on your computer. Please your installation directory below." & @CRLF & _
"If the selected directory does not exist, it will be created.", 16, 152, 427, 50)
$idInstall = GUICtrlCreateButton("Start Installation", 304, 216, 145, 33, $WS_GROUP)
$idExit = GUICtrlCreateButton("Exit Installation", 16, 216, 137, 33, $WS_GROUP)GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW)While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
; Clean up resources
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
ExitEndSwitch
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
WEnd; Draw PNG image
[/autoit]
Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 10,-40)
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
Return $GUI_RUNDEFMSG
EndFunc ;==>MY_WM_PAINT<- Vista 32 Bit.
-
Probier mal das hier:
Spoiler anzeigen
[autoit]#include <SendMessage.au3>
[/autoit]
_JSend("Fenstertitel",0x73) ; F4
Func _JSend($sTitle,$vKey)
$hWnd = WinGetHandle($sTitle)
If @error Then Return SetError(@error,0,0)
$cHwnd = ControlGetHandle($hWnd,"","Edit1")
_SendMessage($cHwnd, $WM_SETFOCUS)
_SendMessage($cHwnd,$WM_CHAR,$vKey)
_SendMessage($cHwnd,$WM_KILLFOCUS)
EndFunc -
Hilft dir das hier?
http://www.hackerboard.de/code-kitchen/3…er-dateien.html
Vor allem Post #2 ist interessant -
Das Gesamtscript ist ja nichtmal lauffähig
Wie wärs wenn du das erstmal so weit "reparierst", dass man das auch starten kann. -
wenn es hilft:
Ich hatte hier mal ein Beispiel mit "eigenem" Tab-System gebaut:Spoiler anzeigen
[autoit]#include <IE.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>_IEErrorHandlerRegister()
[/autoit] [autoit][/autoit] [autoit]Dim $aGUIArray[1][4]
[/autoit] [autoit][/autoit] [autoit]
Global $iSel = 0, $hDummy = GUICreate("")$hGUI = GUICreate("Browser Beispiel", 800, 600)
[/autoit] [autoit][/autoit] [autoit]
$hURL = GUICtrlCreateInput("about:blank", 200, 540, 400)
$hNTab = GUICtrlCreateButton("Tab +", 20, 540, -1, -1)
$hRTab = GUICtrlCreateButton("Tab -", 60, 540, -1, -1)
$hABack = GUICtrlCreateButton(" <- ", 140, 540, -1, -1)
$hANext = GUICtrlCreateButton(" -> ", 165, 540, -1, -1)$aGUIArray[0][0] = GUICtrlCreateButton("about:blank", 20, 570, -1, -1, 0x8000)
[/autoit] [autoit][/autoit] [autoit]
$aGUIArray[0][1] = GUICreate("Child GUI", 700, 510, 50, 20, 0x80000000, $WS_EX_MDICHILD, $hGUI)
$aGUIArray[0][3] = __IECreateEmbedded($aGUIArray[0][2])GUISetBkColor(0x000000, $hGUI)
[/autoit] [autoit][/autoit] [autoit]
GUISetBkColor(0xFF0000, $aGUIArray[0][1])
GUISetState(@SW_SHOWNOACTIVATE, $aGUIArray[0][1])
GUISetState(@SW_SHOW, $hGUI)While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $hNTab
_Browser_TabAdd($aGUIArray)
_Browser_SyncURLBar()
Case $hURL
$oIE = _Browser_ReturnActiveObj()
_IENavigate($oIE, GUICtrlRead($hURL))
_Browser_SyncURLBar()
Case $hRTab
_Browser_TabRemove()
Case $hABack
$oIE = _Browser_ReturnActiveObj()
_IEAction($oIE,"back")
Case $hANext
$oIE = _Browser_ReturnActiveObj()
_IEAction($oIE,"forward")
EndSwitchFor $i = 0 To UBound($aGUIArray) - 1
[/autoit] [autoit][/autoit] [autoit]
If $nMsg = $aGUIArray[$i][0] Then
If $i = $iSel Then ContinueLoop 2
_Browser_AnimateChild($iSel, 0)
_Browser_AnimateChild($i, 1)
$iSel = $i
ExitLoop
EndIf
NextIf ControlGetHandle("", "", ControlGetFocus("")) <> GUICtrlGetHandle($hURL) Then
[/autoit] [autoit][/autoit] [autoit]
_Browser_SyncURLBar()
EndIf
WEndFunc __IECreateEmbedded(ByRef $_oIE)
[/autoit] [autoit][/autoit] [autoit]
$_oIE = _IECreateEmbedded()
$sObjCtrl = GUICtrlCreateObj($_oIE, 0, 0, 700, 510)
_IENavigate($_oIE, "about:blank")
Return $sObjCtrl
EndFunc ;==>__IECreateEmbeddedFunc _Browser_TabAdd(ByRef $aArray)
[/autoit] [autoit][/autoit] [autoit]
_Browser_AnimateChild($iSel, 0)
$iUbound = UBound($aArray)
$hSwitch = GUISwitch($hGUI)
ReDim $aArray[$iUbound + 1][4]
$aCPos = ControlGetPos($hGUI, "", $aArray[$iUbound - 1][0])
$aArray[$iUbound][0] = GUICtrlCreateButton("Tab " & $iUbound + 1, $aCPos[0] + $aCPos[2] + 5, 570, -1, -1, 0x8000)
$aArray[$iUbound][1] = GUICreate("Child GUI", 700, 510, 50, 20, 0x80000000, $WS_EX_MDICHILD, $hGUI)
$aArray[$iUbound][3] = __IECreateEmbedded($aArray[$iUbound][2])
_Browser_AnimateChild($iUbound, 1)
$iSel = $iUbound
GUISwitch($hSwitch)
EndFunc ;==>_Browser_TabAddFunc _Browser_TabRemove()
[/autoit] [autoit][/autoit] [autoit]
If UBound($aGUIArray) <= 1 Then Return
_Browser_AnimateChild($iSel, 0)
GUICtrlDelete($aGUIArray[$iSel][3])
GUIDelete($aGUIArray[$iSel][1])
GUICtrlDelete($aGUIArray[$iSel][0])
For $i = $iSel To UBound($aGUIArray) - 2
$aGUIArray[$i][0] = $aGUIArray[$i + 1][0]
$aGUIArray[$i][1] = $aGUIArray[$i + 1][1]
$aGUIArray[$i][2] = $aGUIArray[$i + 1][2]
$aGUIArray[$i][3] = $aGUIArray[$i + 1][3]
Next
ReDim $aGUIArray[UBound($aGUIArray) - 1][4]
If $iSel > 0 Then
$iSel -= 1
EndIf
ConsoleWrite($iSel & @CRLF)
_Browser_TabRepairSize()
_Browser_AnimateChild($iSel, 1)
EndFunc ;==>_Browser_TabRemoveFunc _Browser_ReturnActiveObj()
[/autoit] [autoit][/autoit] [autoit]
Return $aGUIArray[$iSel][2]
EndFunc ;==>_Browser_ReturnActiveObjFunc _Browser_AnimateChild($iIndex, $iFlag)
[/autoit] [autoit][/autoit] [autoit]
Switch $iFlag
Case 0
For $i = 255 To 0 Step -10
WinSetTrans($aGUIArray[$iIndex][1], "", $i)
Next
WinSetState($aGUIArray[$iIndex][1], "", @SW_HIDE)
Case 1
WinSetTrans($aGUIArray[$iIndex][1], "", 0)
WinSetState($aGUIArray[$iIndex][1], "", @SW_SHOWNOACTIVATE)
For $i = 0 To 255 Step 10
WinSetTrans($aGUIArray[$iIndex][1], "", $i)
Next
WinActivate($hGUI)
EndSwitch
EndFunc ;==>_Browser_AnimateChildFunc _Browser_SyncURLBar()
[/autoit] [autoit][/autoit] [autoit]
$oIE = _Browser_ReturnActiveObj()
$sUrl = _IEPropertyGet($oIE, "locationurl")
$sName = _IEPropertyGet($oIE, "locationname")
If $sUrl <> GUICtrlRead($hURL) Or ($sName <> GUICtrlRead($aGUIArray[$iSel][0]) AND StringLeft($sName, 15) & "..." <> GUICtrlRead($aGUIArray[$iSel][0])) Then
GUICtrlSetData($hURL, $sUrl)
$sText = $sName
If StringLen($sText) > 15 Then $sText = StringLeft($sText, 15) & "..."
GUICtrlSetData($aGUIArray[$iSel][0], $sText)
_Browser_TabRepairSize()
WinSetTitle($hGUI, "", $sName)
EndIf
EndFunc ;==>_Browser_SyncURLBarFunc _Browser_TabRepairSize()
[/autoit]
$hSwitch = GUISwitch($hDummy)
For $i = 0 To UBound($aGUIArray) - 1
$aCPos = ControlGetPos($hGUI, "", $aGUIArray[$i][0])
$hLableDummy = GUICtrlCreateButton(GUICtrlRead($aGUIArray[$i][0]), 0, 0, -1, -1)
$aCLPos = ControlGetPos($hDummy, "", $hLableDummy)
$aCPos[2] = $aCLPos[2]
ControlMove($hGUI, "", $aGUIArray[$i][0], $aCPos[0], $aCPos[1], $aCPos[2])
If $i = 0 Then ControlMove($hGUI, "", $aGUIArray[$i][0], 20, 570, $aCPos[2])
For $j = $i + 1 To UBound($aGUIArray) - 1
$aCTPos = ControlGetPos($hGUI, "", $aGUIArray[$j][0])
ControlMove($hGUI, "", $aGUIArray[$j][0], ($aCPos[0] + $aCPos[2] + 5), $aCTPos[1])
Next
Next
GUISwitch($hSwitch)
EndFunc ;==>_Browser_TabRepairSize -
Garnicht.
Steht auch so in der HotKeySet Hilfe. Du kannst noch mit _IsPressed arbeiten.
HotKey auf alt+H legen, und mit _IsPressed() B abfragen -
My fault boys.
[autoit]#include <ButtonConstants.au3>
[/autoit]sorry, war n flüchtigkeitsfehler in Post 7
/Edit: Wow so ne "richtige" Fehlermeldung machts doch gleich viel einfacher als "Das klappt irgendwie nicht", oder?
//Edit2: Mal ganz abgesehen davon, dass ein einfacher blick in die AutoIt Hilfe (F1 in Scite - da steht alles, alles, alles drin was man wissen muss) vollkommen gereicht hätte. -
Wir reden von dieser Liste? http://www.offtek.de/searchresult.php?search=a (a-z)
Machbar ist das alles. StringRegExp ist dein bester Freund. Ich hätte auch schon eine Idee zum auslesen der Daten, aber nicht, wie man das ganze dann in eine Excel Tabelle bekommt. Also zumindest in welchem Format.
Wäre cool, wenn du mal die Kategorien A und B in eine entsprechende Beispieltabelle tuen könntest. Dabei reichen jeweils der erste Speicher des ersten Herstellers.
Also
http://www.offtek.de/ModelData.php?stid=7&manu=Abit&modeltype=A%20Series&model=AA8+%28Intel+Alderwood-ICH6R%29
http://www.offtek.de/item_detail.php?type=digital&id=493967&maincat=1&subcat=51Ich muss halt nur wissen wie es später aussehen soll
Danke
-
Neue Version. Mehrere kleine Bugfixes, und ein kritischer Fehler behoben. Siehe Post 1