Falls du SQLite benutzten solltest:
SELECT name FROM sqlite_master WHERE type='table' ORDER BY nameUnd das andere sind ja Befehle um die CMD-Ausgabe von Oracle zu vormatieren...Also mal ne andere Frage, arbeistest du mit SQLite von AutoIt, oder mit einer Oracle-Datenbank, oder ähnlichem?Falls die anderen befehle in AutoIt umgesetzt werden sollen: Einfach das SQL-Result passend formatieren, wie dus haben möchtest. Du bekommst ja ein Array zurück.
Beiträge von Kanashius
-
-
-
Ich würde auf die weißen Ecken eine schwarze Markierung anbringen, ähnlich wie bei den QR-Codes. Dann das Bild in Grauwerte umwandeln und den grauwert in absolute schwarz/weiß werte umwandeln. Mit solchen Methoden ist die Erkennungsrate am besten:Image.png
Dadurch würde, selbst wenn das keine Absoluten schwarz-werte sind, sondern grauwerte, wie hier, ein absoluter schwarz wert herauskommen.
Ein solches Schwarzweißbild entsteht durch das generieren der Grauwerte G=(R+B+G)/3 und dann schauen. Wenn G>x, dann weiß, sonst schwarz. x wird dabei so gewählt dass es mit der Helligkeit passt. (Falls du testen möchtest: Gimp herunterladen (kostenlos) Bild laden und dann Filter->Schwellwert, so hab ich das Bild hier auch erzeugt. Schwellwert: https://de.wikipedia.org/wiki/Schwellenwertverfahren).
Danach ist das suchen nach diesem Rechteckmuster relativ einfach.
Ich würd für solche Operationen allerdings Java verwenden, insbesondere, weil ich dort schon ein Gimp-ähnliches Grafiktool begonnen habe, wobei ich nur mit int-Arrays arbeite, also auf den ARGB-werten direkt.
Das umwandeln in ein Grauwertbild dauert dort weniger als 5ms bei nem 1920x1080px Bild
Falls du möchtest kann ich dir dabei dann auch gerne helfen und einiges an Code gebenMfG Kanashius.
-
@chip Behauptest du... wahrscheinlich hast du denen das Programm untergejubelt ;D
Was Windows angeht muss ich sagen, dass ichs auch nervig finde, dass immer mehr kontrolle vom nutzer genommen wird. Oft muss man ewig suchen oder in der registry rumsuchen um änderungen zu machen, die früher schneller gingen... Alles wird versteckt, dabei sollten sich die nutzer langsam besser mit Technik auskennen als noch vor 10 Jahren Mittlerweile wird sie ja fast überall genutzt.
Fällt mir aber auch bei anderen Geräten auf.
Am schlimmsten finde ich, dass immer mehr auf Mobiles/Touch design gegangen wird, selbst bei geräten, die das nur begrenzt/garnicht nutzen.
Und die Krone ist meiner Meinung nach das Design von Websites. Da sieht man mittlerweile immer öfter diese Riesigen Seiten mit extrem großen Bildern, wo man 5Minuten scrollen muss um die ersten Infos zu sehen...
Die sind ja über die ganze Seite verteilt, dass man regelrecht danach suchen muss. Gerade mit langsamem Internet sind diese Seiten ein graus und ich finds einfach nur unübersichtlich. Bilder sind ja schön, aber nicht wenn ich deshalb ne ewigkeit nach dem suchen muss, was ich wissen will. -
Garnicht, da das nicht der Rückgabe von StringRegExpReplace entspricht.
Normal will man nicht wissen, was ersetzt wurde, da genau das ja schon angegeben wurde und auch ersetzt wurde. Du musst also erst stringregexp machen und dann das stringregexpreplace drüberlaufen lassen. -
Wenn du viele möglichkeiten haben möchtest schau dir mal die BASS-UDF an
Damit ist fast alles möglich, was du mit Audio machen kannst. ist aber auch dementsprechend kompliziert, auch wenn Beispiele dabei sind.
Ansonsten irgendein Commandline tool googlen -
Nein. Der Fensterhandle ist dort bekannt, wo du die Variable deklarierst, außer du schreibst Global davor. Aber natürlich weiß Windows, dass das Fenster existiert und hat den Handle ebenfalls gespeichert,...
-
Hab keine Ahnung von Powershell, habs noch nie bentuzt und grad nur kurz gegoogelt:
if($input.Text -eq "Hallo")1. powershell get textbox text
2. powershell equals
Bei beidem führt der erste Link zum Ergebnis.Also am besten bei solch einfachen Dingen schauen, was du haben willst und dann direkt danach suchen
Als Programmierer ist google dein bester Freund -
-
einfach in ein leeres script packen mit #include <ScreenCapture.au3> davor. Dann ausführen und das Bild ist in dem Ordner.
-
Der findet das Bild nicht. Poste mal das Bild, ich vermute transparenz, oder dass man von qt kein bild bekommt... meine das schonmal gesehen zu haben.
Das mit dem qt teste mal mit: _ScreenCapture_Capture("file.png"), wenn der dialog sichtbar ist.
Beide Bilder dann hier zeigen -
Hiermit kannst du herausfinden, welche Monitore gerade angeschlossen sind. Weiß aber nicht, ob das auch mit Switch funktioniert:
AutoIt
Alles anzeigen#include <WinAPIGdi.au3> #include <WinAPISys.au3> #include <Array.au3> _ArrayDisplay(_getMaxMonitorInfo()) ;Returns 2D-Array with all Monitors: Name, isPrimary, SizeX,SizeY,WorkareaX,WorkareaY,StartSizeX,StartSizeY,StartWorkareaX,StartWorkareaY Func _getMaxMonitorInfo($max=10) local $arDevices[$max][10],$count=0 for $i=0 to 10 step 1 Local $aData = _WinAPI_GetMonitorInfo($i) If IsArray($aData) Then $arDevices[$count][0]=$aData[3] $arDevices[$count][1]=$aData[2] $arDevices[$count][2]=DllStructGetData($aData[0], 3)-DllStructGetData($aData[0], 1) $arDevices[$count][3]=DllStructGetData($aData[0], 4)-DllStructGetData($aData[0], 2) $arDevices[$count][4]=DllStructGetData($aData[1], 3)-DllStructGetData($aData[1], 1) $arDevices[$count][5]=DllStructGetData($aData[1], 4)-DllStructGetData($aData[1], 2) $arDevices[$count][6]=DllStructGetData($aData[0], 1) $arDevices[$count][7]=DllStructGetData($aData[0], 2) $arDevices[$count][8]=DllStructGetData($aData[1], 1) $arDevices[$count][9]=DllStructGetData($aData[1], 2) $count+=1 EndIf next ReDim $arDevices[$count][10] return $arDevices EndFunc
Audio wechseln hab ich auch mal probiert... von Windows her ist da leider nichts möglich, also muss man das Fenster öffnen und dort klicken... wobei sich das Fenster auch weigert versteckt geöffnet zu werden -> es ist kurz sichtbar. Das ganze klappt auch irgendwie nur bei jedem 2ten aufruf... keine ahnung, wieso... Hab deshalb nen paar überprüfungen drin. (Wenn das Sound Fenster schon offen ist, ist es danach weg...AutoIt
Alles anzeigen#include <array.au3> #include <GuiListView.au3> $arSoundDevices=_getSoundDevices() _ArrayDisplay($arSoundDevices) _changeDefaultSoundDevice($arSoundDevices[0][0],$arSoundDevices[0][1]) ;Gibt 1 zurück bei Erfolg, sonst 0 Func _changeDefaultSoundDevice($deviceName,$deviceDescription="",$deep=0) If $deep=5 Then return 0 $winHandle=_openSound() $existed=@extended $LVHandle=ControlGetHandle($winHandle,"","[CLASS:SysListView32; INSTANCE:1]") $bool=1 If _GUICtrlListView_GetItemCount($LVHandle)=0 Then WinClose($winHandle) $bool=_changeDefaultSoundDevice($deviceName,$deviceDescription,$deep+1) $existed=@extended Else for $i=0 to _GUICtrlListView_GetItemCount($LVHandle)-1 step 1 If _GUICtrlListView_GetItemText($LVHandle,$i,0)=$deviceName Then if $deviceDescription="" or _GUICtrlListView_GetItemText($LVHandle,$i,1)=$deviceDescription Then _GUICtrlListView_SetItemSelected($LVHandle,$i,true) ControlClick($winHandle,"","[CLASS:Button; INSTANCE:2]") endif EndIf next EndIf If NOT $existed Then WinClose($winHandle) SetExtended($existed) return $bool EndFunc Func _getSoundDevices($deep=0) $winHandle=_openSound() $existed=@extended $LVHandle=ControlGetHandle($winHandle,"","[CLASS:SysListView32; INSTANCE:1]") local $arSoundDevices[_GUICtrlListView_GetItemCount($LVHandle)][3] If _GUICtrlListView_GetItemCount($LVHandle)=0 Then WinClose($winHandle) $arSoundDevices=_getSoundDevices($deep+1) $existed=@extended Else for $i=0 to _GUICtrlListView_GetItemCount($LVHandle)-1 step 1 $arSoundDevices[$i][0]=_GUICtrlListView_GetItemText($LVHandle,$i,0) $arSoundDevices[$i][1]=_GUICtrlListView_GetItemText($LVHandle,$i,1) $arSoundDevices[$i][2]=_GUICtrlListView_GetItemText($LVHandle,$i,2) next EndIf If NOT $existed Then WinClose($winHandle) SetExtended($existed) return $arSoundDevices EndFunc Func _openSound() SetExtended(false) $arHandles=_getHandles("Sound") for $i=0 to UBound($arHandles)-1 step 1 $handle=ControlGetHandle($arHandles[$i],"","[CLASS:SysTabControl32; INSTANCE:1]") If not @error Then SetExtended(true) WinClose($arHandles[$i]) endif next $pid=ShellExecute("mmsys.cpl","","","",@SW_HIDE) $timer=TimerInit() do $arWins=_getWinHandlesByProcess($pid,"Sound") If TimerDiff($timer)>2000 Then ExitLoop Until UBound($arWins)>0 If UBound($arWins)>1 Then SetError(1) return -1 Endif return $arWins[0] EndFunc Func _getHandles($title) local $arWin=WinList() local $arWins[UBound($arWin)],$count=0 for $i=1 to UBound($arWin)-1 step 1 If StringInStr($arWin[$i][0],$title) Then $arWins[$count]=$arWin[$i][1] $count+=1 EndIf next ReDim $arWins[$count] return $arWins EndFunc Func _getWinHandlesByProcess($pid,$title=-1) local $proc=ProcessList("rundll32.exe") if UBound($proc)>1 Then $proc=$proc[1][1] local $arWin=WinList() local $arProcWins[UBound($arWin)],$count=0 for $i=1 to UBound($arWin)-1 step 1 If $pid=WinGetProcess($arWin[$i][1]) or $proc=WinGetProcess($arWin[$i][1]) AND ($title=-1 or StringInStr($arWin[$i][0],$title)) Then $arProcWins[$count]=$arWin[$i][1] $count+=1 EndIf next ReDim $arProcWins[$count] return $arProcWins EndFunc
MfG Kanashius
-
Wieso mit Fenster installieren, wenn es einen Silent-mode gibt?
Wie kann ich 7-Zip im Silent Mode installieren?
Für den EXE-Installer: Mit dem Parameter „/S“ können Sie 7-Zip ohne jegliche Nachfragen („silent“) installieren. Mit dem Parameter „/D=dir“ kann dabei der Zielordner angegeben werden. Bei diesen Optionen wird zwischen Groß- und Kleinschreibung unterschieden.
Für den MSI-Installer: Benutzen Sie die Parameter /q INSTALLDIR="C:\Program Files\7-Zip"
Also:
AutoItRun('installer.exe /S /D="C:\Program Files\7-Zip"') ;oder bei msi-installer: Run('installer.exe /q INSTALLDIR="C:\Program Files\7-Zip"')
EDIT:
Grad gesehen, dass du unbedingt die unsichere Variante machen willst:Das sendet den klick, bis er nicht mehr fehlschlägt (also der nein-button existiert).
MfG Kanashius
-
Ansonsten kannst du dir auch einfach diese UDF von mir ansehen: Listview edit subitems UDF
Ist eventuell etwas einfacher zu nutzen -
Hmmm... So wie ich das Verstanden hab wäre die Verwendung von Comboboxen recht sinnvoll. Dort trifft man ja aus mehreren Werten eine Auswahl...
Ich hab da mal zum erstellen von SQL-Befehlen was gebaut, vielleicht ist das in etwa deine Struktur/was du brauchen könntest:AutoIt
Alles anzeigen#include <GuiScrollBars.au3> #include <WindowsConstants.au3> #include <GuiConstantsEx.au3> #include <GUIConstantsEx.au3> #include <WinAPI.au3> #include <GuiComboBoxEx.au3> Global Const $SIF_DISABLENOSCROLL = 0x8 Global $iWidth = 800, $iHeight = 600, $iScrollControlHeight = 25, $iEntryColWidth = 150, $iEntryOperWidth = 40,$iScrollControllHeightSpace=5,$iScrollControllWidthSpace=5 Global $iLastItemWidth,$iLastItemHeigt,$iLastHorizontalScrolled,$iLastVerticalScrolled Global $arCols = [["Name", "col"], ["Name2", "col2"]],$arOper=["+","-","*","/"],$arScrollControls[0],$sNoSelection="- -" $hMainGui = GUICreate("Export", $iWidth, $iHeight,-1,-1,BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU,$WS_MAXIMIZEBOX,$WS_SIZEBOX)) $hAddRow = GUICtrlCreateButton("Add Col", 5, $iHeight - 30, 60, 25) $hReady = GUICtrlCreateButton("Ready", $iWidth-65, $iHeight - 30, 60, 25) $hScrollGui=GUICreate("",$iWidth-15,$iHeight-40,5,5,$WS_CHILD,$WS_EX_CLIENTEDGE,$hMainGui) GUISetState(@SW_SHOW,$hScrollGui) GUIRegisterMsg($WM_SIZE, "WM_SIZE") GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL") GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL") GUISetState(@SW_SHOW,$hMainGui) _GUIScrollBars_Init($hScrollGui) _GUIScrollBars_ShowScrollBar($hScrollGui,$SB_BOTH,true) While 1 $msg = GUIGetMsg(1) if $msg[1]=$hMainGui then Switch $msg[0] case -3 exit case $hAddRow _addScrollControl() case $hReady _getResult() EndSwitch else for $i=0 to UBound($arScrollControls)-1 step 1 local $tmp=$arScrollControls[$i] for $j=0 to UBound($tmp)-1 step 1 if $msg[0]=$tmp[$j] then if $j=0 then ;exit _removeControl($i) elseif $j=1 then ;top _switchControl($i,$i-1) elseif $j=2 then ;down _switchControl($i,$i+1) ;3 nicht notwendig (spaltenname) elseif $j>3 then if Mod($j,2)=0 then ;combo if GUICtrlRead($tmp[$j])=$sNoSelection then _removeAllControlsBehind($i,$j) else if NOT $j<UBound($tmp) then ;ist letztes Item _addOper($i) endif endif else ;oper if GUICtrlRead($tmp[$j])=$sNoSelection then _removeAllControlsBehind($i,$j) else if NOT $j<UBound($tmp) then ;ist letztes Item _addCombo($i) endif endif endif endif ExitLoop 2 endif next next endif WEnd Func _getResult() local $sResult="" for $i=0 to UBound($arScrollControls)-1 step 1 local $tmp=$arScrollControls[$i] local $string="Spaltenname: "&GUICtrlRead($tmp[3])&" Aufbau: " for $j=4 to UBound($tmp)-1 step 1 if Mod($j,2)=0 then ;combo $index=_GUICtrlComboBoxEx_GetCurSel(GUICtrlGetHandle($tmp[$j])) if $index>0 then $string&=$arCols[$index-1][1]&" " endif else ;operant if GUICtrlRead($tmp[$j])<>$sNoSelection then $string&=GUICtrlRead($tmp[$j])&" " endif endif next $sResult&=$string&@crlf next MsgBox(48,"",$sResult) EndFunc Func _addCombo($index) local $iTopSpace=5+$iScrollControllHeightSpace+($index*($iScrollControlHeight+$iScrollControllHeightSpace)) local $tmp=$arScrollControls[$index] ReDim $tmp[UBound($tmp)+1] local $elements=UBound($tmp)-1 local $spaces=$iScrollControllWidthSpace*($elements-3) local $combos=$iEntryColWidth*Int(($elements-4)/2+0.5) local $opers=$iEntryOperWidth*(Int(($elements-4)/2)) $tmp[UBound($tmp)-1]=GUICtrlCreateCombo($sNoSelection,80+$iEntryColWidth+$spaces+$combos+$opers+$iLastHorizontalScrolled,$iTopSpace+$iLastVerticalScrolled,$iEntryColWidth,$iScrollControlHeight) GUICtrlSetFont(-1,$iScrollControlHeight-15) GUICtrlSetData(-1,_getColString()) $arScrollControls[$index]=$tmp _setHoriScroll() EndFunc Func _addOper($index) local $iTopSpace=5+$iScrollControllHeightSpace+($index*($iScrollControlHeight+$iScrollControllHeightSpace)) local $tmp=$arScrollControls[$index] ReDim $tmp[UBound($tmp)+1] local $elements=UBound($tmp)-1 local $spaces=$iScrollControllWidthSpace*($elements-3) local $combos=$iEntryColWidth*Int(($elements-4)/2+0.5) local $opers=$iEntryOperWidth*(Int(($elements-4)/2)) $tmp[UBound($tmp)-1]=GUICtrlCreateCombo($sNoSelection,80+$iEntryColWidth+$spaces+$combos+$opers+$iLastHorizontalScrolled,$iTopSpace+$iLastVerticalScrolled,$iEntryOperWidth,$iScrollControlHeight) GUICtrlSetFont(-1,$iScrollControlHeight-15) GUICtrlSetData(-1,_getOperString()) $arScrollControls[$index]=$tmp _setHoriScroll() EndFunc Func _removeAllControlsBehind($index,$j) local $tmp=$arScrollControls[$index] for $i=$j+1 to UBound($tmp)-1 step 1 GUICtrlDelete($tmp[$i]) next ReDim $tmp[$j+1] $arScrollControls[$index]=$tmp EndFunc Func _addScrollControl() GUISwitch($hScrollGui) if UBound($arScrollControls)>0 then local $arControlsLast=$arScrollControls[UBound($arScrollControls)-1] GUICtrlSetState($arControlsLast[2],$GUI_ENABLE) endif ReDim $arScrollControls[UBound($arScrollControls)+1] local $arControls[5],$iActEntry=UBound($arScrollControls)-1,$iTopSpace=5+$iScrollControllHeightSpace+($iActEntry*($iScrollControlHeight+$iScrollControllHeightSpace)) $arControls[0]=GUICtrlCreateButton("X",5+$iLastHorizontalScrolled,$iTopSpace+$iLastVerticalScrolled,20,$iScrollControlHeight) $arControls[1]=GUICtrlCreateButton(ChrW(8679),30+$iLastHorizontalScrolled,$iTopSpace+$iLastVerticalScrolled,20,$iScrollControlHeight) if UBound($arScrollControls)=1 then GUICtrlSetState(-1,$GUI_DISABLE) GUICtrlSetFont(-1,20) $arControls[2]=GUICtrlCreateButton(ChrW(8681),55+$iLastHorizontalScrolled,$iTopSpace+$iLastVerticalScrolled,20,$iScrollControlHeight) GUICtrlSetFont(-1,20) GUICtrlSetState(-1,$GUI_DISABLE) $arControls[3]=GUICtrlCreateInput("",80+$iLastHorizontalScrolled,$iTopSpace+$iLastVerticalScrolled,$iEntryColWidth,$iScrollControlHeight) GUICtrlSendMsg(-1, 0x1501, 0, "Spaltenname") GUICtrlSetFont(-1,$iScrollControlHeight-15) $arControls[4]=GUICtrlCreateCombo($sNoSelection,80+$iEntryColWidth+$iScrollControllWidthSpace+$iLastHorizontalScrolled,$iTopSpace+$iLastVerticalScrolled,$iEntryColWidth,$iScrollControlHeight) GUICtrlSetData(-1,_getColString()) GUICtrlSetFont(-1,$iScrollControlHeight-15) $arScrollControls[$iActEntry]=$arControls _setVertScroll() _setHoriScroll() EndFunc Func _switchControl($i,$j) local $tmpI=$arScrollControls[$i] local $tmpJ=$arScrollControls[$j] $arScrollControls[$i]=$tmpJ $arScrollControls[$j]=$tmpI $iTopSpaceJ=5+$iScrollControllHeightSpace+($i*($iScrollControlHeight+$iScrollControllHeightSpace)) for $k=0 to UBound($tmpJ)-1 step 1 ControlMove($hScrollGui,"",$tmpJ[$k],ControlGetPos($hScrollGui,"",$tmpJ[$k])[0]-7+$iLastHorizontalScrolled,$iTopSpaceJ+$iLastVerticalScrolled) next $iTopSpaceI=5+$iScrollControllHeightSpace+($j*($iScrollControlHeight+$iScrollControllHeightSpace)) for $k=0 to UBound($tmpI)-1 step 1 ControlMove($hScrollGui,"",$tmpI[$k],ControlGetPos($hScrollGui,"",$tmpI[$k])[0]-7+$iLastHorizontalScrolled,$iTopSpaceI+$iLastVerticalScrolled) next if $i=0 then GUICtrlSetState($tmpI[1],$GUI_ENABLE) GUICtrlSetState($tmpJ[1],$GUI_DISABLE) endif if $j=0 then GUICtrlSetState($tmpJ[1],$GUI_ENABLE) GUICtrlSetState($tmpI[1],$GUI_DISABLE) endif if $i=UBound($arScrollControls)-1 then GUICtrlSetState($tmpI[2],$GUI_ENABLE) GUICtrlSetState($tmpJ[2],$GUI_DISABLE) endif if $j=UBound($arScrollControls)-1 then GUICtrlSetState($tmpJ[2],$GUI_ENABLE) GUICtrlSetState($tmpI[2],$GUI_DISABLE) endif _WinAPI_RedrawWindow($hScrollGui) EndFunc Func _removeControl($i) local $tmp=$arScrollControls[$i] for $j=0 to UBound($tmp)-1 step 1 GUICtrlDelete($tmp[$j]) next for $j=$i+1 to UBound($arScrollControls)-1 step 1 $arScrollControls[$j-1]=$arScrollControls[$j] local $tmp=$arScrollControls[$j-1] $iTopSpace=5+$iScrollControllHeightSpace+(($j-1)*($iScrollControlHeight+$iScrollControllHeightSpace)) for $k=0 to UBound($tmp)-1 step 1 ControlMove($hScrollGui,"",$tmp[$k],ControlGetPos($hScrollGui,"",$tmp[$k])[0]-7+$iLastHorizontalScrolled,$iTopSpace+$iLastVerticalScrolled) next next ReDim $arScrollControls[UBound($arScrollControls)-1] _setVertScroll() _WinAPI_RedrawWindow($hScrollGui) EndFunc Func _setVertScroll() local $elements=UBound($arScrollControls) local $clientHeight=WinGetPos($hScrollGui)[3] local $itemHeight=($iScrollControlHeight+$iScrollControllHeightSpace) $iLastItemHeigt=$itemHeight Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO) DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE,$SIF_DISABLENOSCROLL)) DllStructSetData($tSCROLLINFO, "nMin", 0) DllStructSetData($tSCROLLINFO, "nMax", $elements) DllStructSetData($tSCROLLINFO, "nPage", int($clientHeight/$itemHeight)) _GUIScrollBars_SetScrollInfo(HWnd($hScrollGui), $SB_VERT, $tSCROLLINFO) EndFunc Func _setHoriScroll() local $elements=0 for $i=0 to UBound($arScrollControls)-1 step 1 if $elements<UBound($arScrollControls[$i]) then $elements=UBound($arScrollControls[$i]) endif next local $clientWidth=WinGetPos($hScrollGui)[2] local $spaces=$iScrollControllWidthSpace*($elements-3) local $combos=$iEntryColWidth*Int(($elements-4)/2+0.5) local $opers=$iEntryOperWidth*(Int(($elements-4)/2)) local $itemWidth=(80+$iEntryColWidth+$spaces+$combos+$opers)/$elements $iLastItemWidth=$itemWidth Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO) DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE,$SIF_DISABLENOSCROLL)) DllStructSetData($tSCROLLINFO, "nMin", 0) DllStructSetData($tSCROLLINFO, "nMax", $elements) DllStructSetData($tSCROLLINFO, "nPage", int($clientWidth/$itemWidth)) _GUIScrollBars_SetScrollInfo(HWnd($hScrollGui), $SB_HORZ, $tSCROLLINFO) EndFunc Func _getColString() local $string="" for $i=0 to UBound($arCols)-1 step 1 $string&=$arCols[$i][0] if $i<>UBound($arCols)-1 then $string&="|" endif next return $string EndFunc Func _getOperString() local $string="" for $i=0 to UBound($arOper)-1 step 1 $string&=$arOper[$i] if $i<>UBound($arOper)-1 then $string&="|" endif next return $string EndFunc Func WM_SIZE($hWnd, $Msg, $wParam, $lParam) _setVertScroll() _setHoriScroll() Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZE Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam) Local $iScrollCode = BitAND($wParam, 0x0000FFFF) local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ) $iMin = DllStructGetData($tSCROLLINFO, "nMin") $iMax = DllStructGetData($tSCROLLINFO, "nMax") $iPage = DllStructGetData($tSCROLLINFO, "nPage") $iPosX = DllStructGetData($tSCROLLINFO, "nPos") $iPos = $iPosX $iTrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos") #forceref $iMin, $iMax Switch $iScrollCode Case $SB_LINELEFT ; user clicked left arrow DllStructSetData($tSCROLLINFO, "nPos", $iPos - 1) Case $SB_LINERIGHT ; user clicked right arrow DllStructSetData($tSCROLLINFO, "nPos", $iPos + 1) Case $SB_PAGELEFT ; user clicked the scroll bar shaft left of the scroll box DllStructSetData($tSCROLLINFO, "nPos", $iPos - $iPage) Case $SB_PAGERIGHT ; user clicked the scroll bar shaft right of the scroll box DllStructSetData($tSCROLLINFO, "nPos", $iPos + $iPage) Case $SB_THUMBTRACK ; user dragged the scroll box DllStructSetData($tSCROLLINFO, "nPos", $iTrackPos) EndSwitch DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS) _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO) _GUIScrollBars_GetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO) $iPos = DllStructGetData($tSCROLLINFO, "nPos") If ($iPos <> $iPosX) Then _GUIScrollBars_ScrollWindow($hWnd, $iLastItemWidth * ($iPosX - $iPos), 0) $iLastHorizontalScrolled+=$iLastItemWidth * ($iPosX - $iPos) endif Return $GUI_RUNDEFMSG EndFunc ;==>WM_HSCROLL Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam) Local $iScrollCode = BitAND($wParam, 0x0000FFFF) Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT) $iMin = DllStructGetData($tSCROLLINFO, "nMin") $iMax = DllStructGetData($tSCROLLINFO, "nMax") $iPage = DllStructGetData($tSCROLLINFO, "nPage") $iPosY = DllStructGetData($tSCROLLINFO, "nPos") $iPos = $iPosY $iTrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos") Switch $iScrollCode Case $SB_TOP ; user clicked the HOME keyboard key DllStructSetData($tSCROLLINFO, "nPos", $iMin) Case $SB_BOTTOM ; user clicked the END keyboard key DllStructSetData($tSCROLLINFO, "nPos", $iMax) Case $SB_LINEUP ; user clicked the top arrow DllStructSetData($tSCROLLINFO, "nPos", $iPos - 1) Case $SB_LINEDOWN ; user clicked the bottom arrow DllStructSetData($tSCROLLINFO, "nPos", $iPos + 1) Case $SB_PAGEUP ; user clicked the scroll bar shaft above the scroll box DllStructSetData($tSCROLLINFO, "nPos", $iPos - $iPage) Case $SB_PAGEDOWN ; user clicked the scroll bar shaft below the scroll box DllStructSetData($tSCROLLINFO, "nPos", $iPos + $iPage) Case $SB_THUMBTRACK ; user dragged the scroll box DllStructSetData($tSCROLLINFO, "nPos", $iTrackPos) EndSwitch DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS) _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) $iPos = DllStructGetData($tSCROLLINFO, "nPos") If ($iPos <> $iPosY) Then _GUIScrollBars_ScrollWindow($hWnd, 0, $iLastItemHeigt * ($iPosY - $iPos)) $iLastVerticalScrolled+=$iLastItemHeigt * ($iPosY - $iPos) $iPosY = $iPos EndIf Return $GUI_RUNDEFMSG EndFunc ;==>WM_VSCROLL
Hierbei wird bei der Auswahl eines Operanden die nächste Combobox erstellt und das ganze beliebig oft.
Zusätzlich kann man beliebig viele Spalten erstellen.
Bei dir wäre das: Je Produkt wird die 1te Auswahl getroffen, dann die 2te,...
Sollte recht leicht anpassbar sein -
Ersetz $Pic1 = GUICtrlSetImage (-1, "PFAD\BILD1", "") mal durch GUICtrlSetImage ($Pic1, "PFAD\BILD1", "")
Du versuchst dem letzten erstellten Control, also der Group (Durch die -1 wird das zuletzt erstellte Control angesprochen) ein Bild zu setzen und überschreibst dein Control $Pic1 mit dem Ergebnis, also 0 oder 1, jenachdem, obs geklappt hat oder nicht. Also hier 0, da man einer Group kein Bild zuweisen kann. Der 3te Parameter ist optional, kann also weggelassen werden. -
Bevor dus in dein Script einfügst einfach alle " durch "" ersetzen. "" ist in AutoIt ein Escapetes ". Dann wird das Zeichen gesetzt. Ist immerhin kürzere Möglichkeit als Chr(). Das Prolem wirst du aber in jeder Programmiersprache haben. Ansonsten könntest du die Befehle in eine eigene Datei schreiben und daraus einlesen. Dann musst du immer nur die jeweilige Datei ändern. Würd auch neukompilieren ersparen.
-
Jo. str_replace heißt in AutoIT überigens StringReplace. Am besten einmal grob über die Hilfe schauen, damit du nen überblick bekommst, wie die Funktionsnamen aufgebaut sind, dann findest du denke ich recht schnell, was du suchst.
Und für suchen in Arrays,... wenn du es so ähnlich wie in PHP machen möchtest: Alternativen zum Array
Dort sind alternativen zum normalen Array, die ähnliche Funktionen haben, wie in PHP :). Zum Beispiel eine contains/exists Methode, uvm. -
Ich programmiere nen bisschen mehr in Java und muss sagen, für Androidprogrammierung hat mich Java nicht ganz so begeistert, aber was Desktopanwendungen angeht bin ich auf jedenfall Fan.
Ich sag mal dazu, dass ich neben AutoIt auch C und C++ gerne verwende.Was alpines meinte mit den Layouts kann ich nachvollziehen, ging mir am Anfang auch so, aber nach ner kurzen Gewöhnungsphase kann ich sagen, dass es mir sogar gefällt. Auch wenn ich immernoch gerne mit Pixeln arbeite.
Als IDE nutze ich IntelliJ. Ich hab Eclipse vorher genutzt, IntelliJ ist aber gerade bei Vorschlägen performanter 8zeigt sie schneller an) und die Vorschläge sind auch Intelligenter sortiert, jenachdem, was man vermutlich braucht, steht es oben, und es ist fast immer richtig. Die XML-Datei für die Fenstererstellung ignorier ich dabei immer einfach und bau mir das Fenster selbst ist dynamischer.
Und bei IntelliJ mag ich besondern, dass man Fehler/Warnungen,... anklicken kann, dann mit ner Tastenkombi direkt fixmöglichkeiten angeboten bekommt. Sehr nützlich, insbesondere bei Abstrakten Klassen u.ä.Ansonsten ist es eh geschmackssache. Also ausprobieren. Nen paar kleine Scripte ausm Internet suchen, testen und nachvollziehen, und dann entscheiden.
-
Mit v3.3.14.2 funktioniert das ohne Probleme
Er meint nur, dass man ner variable nicht einfach ein Array zuweisen kann. In älteren AutoIt Versionen ging das nicht.Für die 0 kannst du einfach vor dem StringRegExpReplace ein // If $data<0 Then $data="0"&$data // einfügen
-
Ein allgemeiner Hinweis:
Bitte schreib nicht alles groß. Ich weiß, jeder hat seinen eigenen Stil, aber alles Großzuschreiben macht es sehr unübersichtlich.
Normal benennt man Variablen so: $iDiesIstEineZahl, Das i steht dafür, dass eine Zahl gespeichert wird und danach wird der Anfang jedes Wortes Großgeschrieben, der Rest klein. Dadurch ist es deutlich besser zu lesen.
Für Funktionen gilt das gleiche!