@Bitnugger: du weißt wenigstens wa du willst/brauchst. Deine Anforderungen/Wünsche kommen mir allerdings etwas zu hoch vor. Ich jedenfalls würde mir es (derzeit) nicht zu trauen. Und wenn es dir wirklich so wichtig ist, warum hat du es noch nicht verwirklicht?
Von den AutoIt-Kenntnissen schätze ich dich, trotz deiner (zumindet lt. Statistik) niedrigen Beitragzahl, der oberen Liga dieses Forums zugehörig, also wag dich und überrache uns alle!
Beiträge von autoBert
-
-
Dann muß der Source ja neu kompliliert werden.
-
-
Und noch eine einfache Lösung:
AutoIt
Alles anzeigen#include <GUIConstantsEx.au3> #include <Array.au3> Global $aWichtelnamen = ['Andreas', 'Barbara', 'Cornelia', 'Doris', 'Ernst', 'Fred', 'Gustav', 'Hilde'] Global $iCount = UBound($aWichtelnamen), $aidWichtellabel[$iCount][2] Opt('GUIOnEventMode', 1) Global $hGui = GUICreate('Wichtelgenerator', 420, 70 + $iCount * 30) GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui') For $i = 0 To $iCount - 1 $aidWichtellabel[$i][0] = GUICtrlCreateLabel($aWichtelnamen[$i], 20, 20 + $i * 30, 160, 25) GUICtrlSetFont(-1, 16, 400, 0, 'Times New Roman') GUICtrlSetBkColor(-1, 0xAAAAFF) GUICtrlCreateLabel('->', 190, 20 + $i * 30, 160, 25) GUICtrlSetFont(-1, 16, 800, 0, 'Courier New') $aidWichtellabel[$i][1] = GUICtrlCreateLabel('', 235, 20 + $i * 30, 160, 25) GUICtrlSetFont(-1, 16, 400, 0, 'Times New Roman') GUICtrlSetBkColor(-1, 0xFFDDAA) Next GUICtrlCreateButton('Wichteln', 150, 30 + $iCount * 30, 120, 25) GUICtrlSetOnEvent(-1, '_Wichteln') GUISetState(@SW_SHOW, $hGui) WinWaitClose($hGui) Exit Func _Wichteln() Local $aTmp = $aWichtelnamen, $bOK For $i = 0 To $iCount - 1 GUICtrlSetData($aidWichtellabel[$i][1], '') Next Do _ArrayShuffle($aTmp) ;mischen $bOK=True For $i=0 To UBound($aTmp) -1 If $aTmp[$i]=$aWichtelnamen[$i] Then ;shit jemand wichtelt sich selbst $bOK=False ExitLoop EndIf Next Until $bOK For $i=0 To UBound($aTmp) -1 GUICtrlSetData($aidWichtellabel[$i][1], $aTmp[$i]) Next EndFunc ;==>_Wichteln Func _Switch(ByRef $a, ByRef $b) Local $c = $a $a = $b $b = $c EndFunc ;==>_Switch Func _CloseGui() GUIDelete($hGui) EndFunc ;==>_CloseGuiist Oscars Skript mit einer anderen Wichtelroutine. Die Duplikate ($aTmp) werden solange gemischt, bis sich niemand selbst gezogen hat.
-
Bei deiner Lernwilligkeit schlage ich vor in Mit Gegenleistung ein Thema zu erstellen.
-
Andy: ich wollte damit meinen Vorgänger nicht heruntersetzen. Ich weiß ja, daß er zum damaligen Zeitpunkt um Welten besser als ich war (und heute sicher auch noch ist). Es war war nur als Anmerkung gedacht, wie wichtig es sein kann ein Programm zu optimieren. Er hat es zu einem Zeitpunkt geschrieben, als es sein Chef an den Kunden verkauft hat. Ich konnte mir später (jetzt als Angestellter des ehemaligen Kunden) die Zeit nehmen, die Datenstruktur und den Index der DB darauf zu optimieren und alle anderen Programme die betroffen waren anzupassen.
-
-
Schau mal ob CSV-Editor V0.8 (Stand 23.04.2010) von @funkey deine CSV-Dateien einlesen kann. Wenn ja kannst du ja die enstprechenden Routinen übernehmen.
-
Schöner Code ist wenn er:
1) Funktioniert
2) Auch nach 2 Monaten noch verstanden wird
3) Im Rahmen der Aufgabenstellung schnell genug ist. Ob etwas 60 oder 100ms dauert macht keinen Sinn. Wenn es eine Schleife ist, die 500.000 durchlaufen wird, bekommt die Differenz Gewicht.
4) Wer nicht nur zum Spass programiert muss auch wirtschaftlich denken. Programme müssen/sollen bezahlbar bleiben?du hast gut Dokumentation vergessen.
zu 3. ein Beispiel aus meinem Berufsleben: verschenkte Zeit verleidet dem Anwender die Benutzung des Programms. Ein Programm (meines Vorgängers), von dem die Optimierung der Produktion unter Berücksichtung aller noch offen Aufträge bis zu einem gewissen Zeitpunkt erreicht werden sollte, lief unglaubliche 7 Stunden. Nach der 1. Optimierung 3 Stunden, am Schluß < 1 Stunde.
-
Schau dir mal _SQLite_GetTable2d samt Beispiel an. Da ein Array zurück gegeben wird kann man es sehr einfach in der LV darstellen. Entweder mit _GUICtrlListView_AddArray oder halt in typischer Schleifenform mit GuiCtrlSetData um mal 2 Möglichkeiten zu benennen.
-
Laß mal dieses kleine Testskript laufen:
AutoIt
Alles anzeigen#include <WindowsConstants.au3> #include <GUIConstantsEx.au3> Example() Func Example() ; Create a GUI Local $hGUI = GUICreate("Example", 100, 100, Default, Default,$WS_POPUPWINDOW) ; Display the GUI. GUISetState(@SW_SHOW, $hGUI) $aSize=WinGetPos($hGUI) MsgBox(0,'Größe (-Ränder): ', 'Breite: ' & $aSize[2]-2&@CRLF&'Höhe: ' & $aSize[3]-2) GUIDelete($hGUI) EndFunc ;==>Example
Damit kannst du auch 1x1 GUI's erstellen. -
-
-
Hier mal ein Skript aus der Konserve (Grundprinzip siehe: letzes Beispiel von https://www.autoitscript.com/wiki/Managing_…essageLoop_Mode)
AutoIt
Alles anzeigen#include <GUIConstantsEx.au3> #include<WindowsConstants.au3> Global $hGui1, $hGui2 = -99, $idMsgBox, $idZurueck, $idbtnExit2 ;_CreateGui2() ;entweder hier oder erst wenn benötigt ($idbtmToGui2 Klick) #Region GUI1 ##################################################################################### $hGui1 = GUICreate('GUI 1', 400, 280, 140, 150, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX),$WS_EX_TOPMOST) ;erzeugt eine GUI , das zurückgebebene Handle wird in der Variablen $hGui1 gespeichert ;die GUI hat BOXen für Mininmieren, Maximieren und ist in der Größe frei änderbar $idbtnToGui2 = GUICtrlCreateButton('&Aufruf GUI 2', 20, 20, 100, 21) GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP) ;verankert den Button "Aufruf Gui 2" links und oben und fixiert die Größe ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand $idbtnICQ = GUICtrlCreateButton('&ICQ', 20, 50, 100, 21) GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP) ;verankert den Button "ICQ" links und oben und fixiert die Größe ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand $idbtnExit1 = GUICtrlCreateButton('be&enden', 280, 225, 100, 21) GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM) ;verankert den Button "beenden" links und oben und fixiert die Größe ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand GUISetState(@SW_SHOW, $hGui1) #EndRegion ########################################################################################### While 1 $nMsg = GUIGetMsg(1) ;extended Modus wichtig!! Switch $nMsg[1] ;für welches Fenster ist die Message Case $hGui1 ;ab hier ist Gui 1 dran Switch $nMsg[0] ;welche Message wurde ausgelöst Case $idbtnToGui2 GUISetState(@SW_DISABLE, $hGui1) ;Gui 1 gegen Benutzereingaben sperren If $hGui2 = -99 Then _CreateGui2() ;nur wenn noch nicht erzeugt GUISetState(@SW_SHOW, $hGui2) ;Gui 2 anzeigen Case $idbtnICQ MsgBox(0, "", "Jetzt würde ICQ gestartet", 0, $hGui1) ;Run("C:\Program Files\ICQ7.0\ICQ.exe") Case $idbtnExit1, $GUI_EVENT_CLOSE _end() EndSwitch Case $hGui2 ;ab hier ist Gui 2 dran Switch $nMsg[0] ;welche Message wurde ausgelöst Case $idMsgBox MsgBox(0, 'Test', 'Test', 0, $hGui2) Case $idZurueck, $GUI_EVENT_CLOSE GUISetState(@SW_ENABLE, $hGui1) ;Gui 1 wieder entsperren GUISetState(@SW_HIDE, $hGui2) ;Gui 2 verstecken Case $idbtnExit2 _end() EndSwitch EndSwitch WEnd Func _CreateGui2() $hGui2 = GUICreate('GUI 2', 400, 280, 200, 50, -1, -1, $hGui1) ;wichtig ist der letzte Parameter ;erzeugt eine GUI als Child von Gui1, das zurückgebebene Handle wird in der Variablen $hGui2 gespeichert $idMsgBox = GUICtrlCreateButton('&MsgBox', 20, 20, 100, 21) $idZurueck = GUICtrlCreateButton('&Zurück zu GUI 1', 20, 50, 100, 21) $idbtnExit2 = GUICtrlCreateButton('be&enden', 280, 250, 100, 21) GUISetState(@SW_HIDE, $hGui2) ;Gui 2 vorerst verstecken EndFunc ;==>_CreateGui2 Func _end() GUIDelete($hGui2) GUIDelete($hGui1) Exit EndFunc ;==>_endzum positionieren der MsgBox fällt mir nur ein nachträgliches WinMove ein.
mfg (auto)Bert
-
Du kannst sogar jedem Node (Ast) ein extra Icon zuornden:
AutoIt
Alles anzeigen#include <APIShellExConstants.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> #include <GUIConstantsEx.au3> #include <GuiTreeView.au3> #include <GuiListView.au3> #include <File.au3> #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 Global Const $tagSHFILEINFO = 'ptr hIcon; int iIcon; DWORD dwAttributes; CHAR szDisplayName[255]; CHAR szTypeName[80];' Global $FOLDER_ICON_INDEX= _GUIImageList_GetFileIconIndex(@SystemDir, True, 1) ;Global $UP_ICON_INDEX = _GUIImageList_GetFileIconIndex($sIconDir & 'up.ico', True, 1) Global $sAutoItPath = StringReplace(StringReplace(@AutoItExe,'_x64',''),'autoit3.exe','') Global $idTV, $idRoot, $hIcon Global $aDirs, $aFiles ; Create GUI Global $hGui = GUICreate("ListView Add Item", 500, 700) GUISetFont(14) $idTV = GUICtrlCreateTreeView(2, 2, 494, 694) _GUICtrlTreeView_SetNormalImageList($idTV, _GUIImageList_GetSystemImageList(True)) GUISetState(@SW_SHOW) If @error Then $sAutoItPath='' if MsgBox(16,'Ordner nicht gefunden','Möchten Sie selbst danach suchen?',$MB_YESNO,$hGui)=6 Then $sAutoItPath=FileSelectFolder('AutoIt Ordner manuell suchen','c:\') EndIf if $sAutoItPath='' Then Exit EndIf ;ConsoleWrite($sAutoItPath&@CRLF) $idRoot=_GUICtrlTreeView_Add($idTV,0,$sAutoItPath,$FOLDER_ICON_INDEX) $aDirs=_FileListToArray($sAutoItPath, '*', 2) If Not @error Then For $i = 1 To $aDirs[0] ; Add items _GUICtrlTreeView_AddChild($idTV,$idRoot,$aDirs[$i],$FOLDER_ICON_INDEX,$FOLDER_ICON_INDEX) Next EndIf $aFiles = _FileListToArray($sAutoItPath, '*', 1) If Not @error Then For $i = 1 To $aFiles[0] ; Add items $hIcon=_GUIImageList_GetFileIconIndex($aFiles[$i], True) _GUICtrlTreeView_AddChild($idTV,$idRoot,$aFiles[$i],$hIcon,$hIcon) Next EndIf _GUICtrlTreeView_Expand($idTV) ; Loop until the user exits. Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete() ; Author: progandy (www.autoit.de) Func _GUIImageList_GetSystemImageList($bLargeIcons = False) Local $dwFlags, $hIml, $FileInfo = DllStructCreate($tagSHFILEINFO) $dwFlags = BitOR($SHGFI_USEFILEATTRIBUTES, $SHGFI_SYSICONINDEX) If Not ($bLargeIcons) Then $dwFlags = BitOR($dwFlags, $SHGFI_SMALLICON) EndIf ;~ '// Load the image list - use an arbitrary file extension for the ;~ '// call to SHGetFileInfo (we don't want to touch the disk, so use ;~ '// FILE_ATTRIBUTE_NORMAL && SHGFI_USEFILEATTRIBUTES). $hIml = _WinAPI_SHGetFileInfo(".txt", $FILE_ATTRIBUTE_NORMAL, _ DllStructGetPtr($FileInfo), DllStructGetSize($FileInfo), $dwFlags) Return $hIml EndFunc ;==>_GUIImageList_GetSystemImageList ; Author: progandy (www.autoit.de) Func _WinAPI_SHGetFileInfo($pszPath, $dwFileAttributes, $psfi, $cbFileInfo, $uFlags) Local $return = DllCall("shell32.dll", "dword_ptr", "SHGetFileInfo", "str", $pszPath, "DWORD", $dwFileAttributes, "ptr", $psfi, "UINT", $cbFileInfo, "UINT", $uFlags) If @error Then Return SetError(@error, 0, 0) Return $return[0] EndFunc ;==>_WinAPI_SHGetFileInfo ; Author: progandy (www.autoit.de) Func _GUIImageList_GetFileIconIndex($sFileSpec, $bLargeIcons = False, $bForceLoadFromDisk = False) Local $dwFlags, $FileInfo = DllStructCreate($tagSHFILEINFO) $dwFlags = $SHGFI_SYSICONINDEX If $bLargeIcons Then $dwFlags = BitOR($dwFlags, $SHGFI_LARGEICON) Else $dwFlags = BitOR($dwFlags, $SHGFI_SMALLICON) EndIf ;~ ' We choose whether to access the disk or not. If you don't ;~ ' hit the disk, you may get the wrong icon if the icon is ;~ ' not cached. But the speed is very good! If Not $bForceLoadFromDisk Then $dwFlags = BitOR($dwFlags, $SHGFI_USEFILEATTRIBUTES) ;~ ' sFileSpec can be any file. You can specify a ;~ ' file that does not exist and still get the ;~ ' icon, for example sFileSpec = "C:\PANTS.DOC" Local $lR = _WinAPI_SHGetFileInfo( _ $sFileSpec, $FILE_ATTRIBUTE_NORMAL, DllStructGetPtr($FileInfo), DllStructGetSize($FileInfo), _ $dwFlags _ ) If ($lR = 0) Then Return SetError(1, 0, -1) Else Return DllStructGetData($FileInfo, "iIcon") EndIf EndFunc ;==>_GUIImageList_GetFileIconIndex -
und wo ist dein Skript?
-
Bin am zweinfeln ob das mit Regex funktionieren kann, da die Datenzeilen unterschiedliche Strukturen haben. Die Lösung mit StringSplit ist auch nur eine Annäherung:
Code
Alles anzeigen#include <Array.au3> $sText="Teilweise bedeckt. Höchsttemperatur 11C. Wind aus NNO mit 15 bis 25 km/h."&@CRLF $sText&="Bedeckt. Tiefsttemperatur 5C. Wind aus NNW mit 10 bis 15 km/h."&@CRLF $sText&="Morgens Schauer. Höchsttemperatur 12C. Wind aus N mit 10 bis 15 km/h. Regenrisiko 30 %."&@CRLF $sText&="Zunächst Schauer. Tiefsttemperatur 6C. Wind aus NNO und wechselhaft. Regenrisiko 40 %."&@CRLF $sText&="Teilweise bedeckt. Höchsttemperatur 13C. Wind aus NNO und wechselhaft."&@CRLF $sText&="Meistens klar. Tiefsttemperatur 3C. Wind aus NNO und wechselhaft."&@CRLF $sText&="Meistens bewölkt. Höchsttemperatur 12C. Wind aus NNO mit 10 bis 15 km/h."&@CRLF $sText&="Teilweise bedeckt. Tiefsttemperatur 3C. Wind aus NNO und wechselhaft." $aWetter=StringSplit($sText,@CRLF,$STR_ENTIRESPLIT) _ArrayDisplay($aWetter) _ArrayColInsert($aWetter,1) _ArrayColInsert($aWetter,1) _ArrayColInsert($aWetter,1) For $i=1 to $aWetter[0][0] $aSplit=StringSplit($aWetter[$i][0],'. ',$STR_ENTIRESPLIT) For $j = 1 To $aSplit[0] $aWetter[$i][$j-1]=$aSplit[$j] Next Next _ArrayDisplay($aWetter) -
Ich denke, mein Pop-Show ist nicht mehr wirklich geeignet, weil die meisten EMail-Provider auf SSL-Verschlüsselung umgestellt haben.
Aber die von dir benutzte _DecodeEncodedWord.au3 von @progandy ist doch immer noch nützlich für seine Zwecke, oder?
-
-
Es gibt viele Lösungsmöglichkeiten, sehr einfach wäre:
- gewünschten Text der Webseite markieren und auf eine Dropbox ziehen AutoIt: RicheditAsDropBox
Alles anzeigen;https://autoit.de/index.php/Thread/22579-Dropbox-f%C3%BCr-Links-aus-Browsern/?postID=185846#post185846 #include <GuiRichEdit.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Local $hGui, $iMsg $hGui = GUICreate("Dropbox", 150, 150, -1, -1, BitOR($WS_SIZEBOX, $WS_BORDER), BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)) GUICtrlSetState(-1, $GUI_ONTOP) $hRichEdit = _GUICtrlRichEdit_Create($hGui, "", 0, 0, 150, 150, -1) GUISetState() GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") _GUICtrlRichEdit_SetEventMask($hRichEdit, $ENM_SELCHANGE) While True $iMsg = GUIGetMsg() Select Case $iMsg = $GUI_EVENT_CLOSE _GUICtrlRichEdit_Destroy($hRichEdit) GUIDelete() Exit EndSelect WEnd Func WM_NOTIFY($hWnd, $iMsg, $iWparam, $iLparam) #forceref $hWnd, $iMsg, $iWparam Local $hWndFrom, $iCode, $tNMHDR, $tEnLink, $cpMin, $cpMax, $tMsgFilter $tNMHDR = DllStructCreate($tagNMHDR, $iLparam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hRichEdit Select Case $iCode = $EN_SELCHANGE _Check() EndSelect EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Func _Check() $sText = _GUICtrlRichEdit_GetText($hRichEdit) MsgBox(64,'Text',$sText) EndFunc ;==>Checklink - das Beispiel zu _ClipBoard_ChangeChain AutoIt: _ClipBoard_ChangeChain
Alles anzeigen#include <Clipboard.au3> #include <GUIConstantsEx.au3> #include <SendMessage.au3> #include <WindowsConstants.au3> Global $g_idMemo, $g_hNext = 0 Example() Func Example() Local $hGUI ; Create GUI $hGUI = GUICreate("Clipboard", 600, 400) $g_idMemo = GUICtrlCreateEdit("", 2, 2, 596, 396, $WS_VSCROLL) GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New") GUISetState(@SW_SHOW) ; Initialize clipboard viewer $g_hNext = _ClipBoard_SetViewer($hGUI) GUIRegisterMsg($WM_CHANGECBCHAIN, "WM_CHANGECBCHAIN") GUIRegisterMsg($WM_DRAWCLIPBOARD, "WM_DRAWCLIPBOARD") ; Loop until the user exits. Do Until GUIGetMsg() = $GUI_EVENT_CLOSE ; Shut down clipboard viewer _ClipBoard_ChangeChain($hGUI, $g_hNext) EndFunc ;==>Example ; Write message to memo Func MemoWrite($sMessage = "") GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1) EndFunc ;==>MemoWrite ; Handle $WM_CHANGECBCHAIN messages Func WM_CHANGECBCHAIN($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg ; Show that message was received MemoWrite("***** $WM_CHANGECBCHAIN *****") ; If the next window is closing, repair the chain If $wParam = $g_hNext Then $g_hNext = $lParam ; Otherwise pass the message to the next viewer ElseIf $g_hNext <> 0 Then _SendMessage($g_hNext, $WM_CHANGECBCHAIN, $wParam, $lParam, 0, "hwnd", "hwnd") EndIf EndFunc ;==>WM_CHANGECBCHAIN ; Handle $WM_DRAWCLIPBOARD messages Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg ; Display any text on clipboard MemoWrite(_ClipBoard_GetData()) ; Pass the message to the next viewer If $g_hNext <> 0 Then _SendMessage($g_hNext, $WM_DRAWCLIPBOARD, $wParam, $lParam) EndFunc ;==>WM_DRAWCLIPBOARD
beides mußt du natürlich nach deinen Bedürfnissen erweitern/abändern.
Hallo Christoph,
das hört sich doch schon nicht so schlecht an, und sehr User freundlich.
Jetzt muss ich aber doch doof fragen das ist ein Code der dann im Autoit laufen würde?
ich habe noch nicht so richtig verstanden was das für ein Programm ist und wo ich das bekomme.
Was kostet das Programm?
Die IE.au3 ist eine Standard Datei die man in eigene Skripte inkludieren kann. Die IE.au3 ermöglich das automatisieren des Internetexplorers. Kosten = 0 für das include, Arbeitsaufwand je nach Kenntnissen und Ansprüchen 5 Min. bis unendlich. Schau dir einfach einmal die Beispiele zu _IECreate bzw. _IECreateEmbedded an.
mfg (auto)Bert
- gewünschten Text der Webseite markieren und auf eine Dropbox ziehen