Ich wollte das ein Programm nach einem bestimmt Text/Wort auf einer Internet-Seite oder in der CMD Sucht.
Das war's
Frag Cortana, die weis angeblich alles.
Ich wollte das ein Programm nach einem bestimmt Text/Wort auf einer Internet-Seite oder in der CMD Sucht.
Das war's
Frag Cortana, die weis angeblich alles.
Der Übertragungstyp war in Filezilla auf ASCII gestellt.
wenn du mit FileZilla Zugriff hast klappt das auch mit der FTPEx.au3.
Auch die FTPEx kann eine Option sein.
Das ist kein Fehler, sondern die Art und Weise wie die Seite aufgebaut ist. Du kannst die WinHTTP-UDF oder die IE-UDF zur Lösung benutzen. Auch die FTPEx kann eine Option sein.
Man kann auch die Stringfunktionen dafür verwenden:
#include <Array.au3>
#include <String.au3>
$sString = 'class="adress">Rathausplatz 5<br/>90403 Nürnberg<br/><a href=" ' & @CRLF & _
'Kontakt</h3><p class="adress">Äußere Bayreuther Str. 121<br/>90409 Nürnberg<br/><a href="' & @CRLF & _
'</span></p><h3>Kontakt</h3><p class="adress">Wallensteinstraße 28<br/>90439 Nürnberg<br/><a href="' & @CRLF & _
'</span></p><h3>Kontakt</h3><p class="adress">Glogauer Str. 30 - 38<br/>90473 Nürnberg<br/><a href="'
$aAdress=_StringBetween($sString,'"adress">','<br/><a href="')
;ergibt jede adresszeile also z.B.: Rathausplatz 5<br/>90403 Nürnberg
_ArrayColInsert($aAdress,1) ;Spalte einfügen
_ArrayColInsert($aAdress,1) ;Spalte einfügen
For $i=0 To UBound($aAdress)-1
$aSplit=StringSplit($aAdress[$i][0],'<br/>',$STR_ENTIRESPLIT)
;ergibt Array mit 3 Feldern
;0 = Anzahl der Einträge
;1 = Straße HausNr
;2 = PLZ Ort
if @error Then ContinueLoop
If $aSplit[0]<1 Then ContinueLoop
$aAdress[$i][0]=$aSplit[1]
;Straße HausNr in 2D Array speichern
If $aSplit[0]<2 Then ContinueLoop
$aAdress[$i][1]=StringLeft($aSplit[2],5)
;PLZ in 2D Array speichern
$aAdress[$i][2]=StringMid($aSplit[2],7)
;Ort in 2D Array speichern
Next
_ArrayDisplay($aAdress)
Alles anzeigen
ironischerweise verwendet _StringBetween intern auch StringRegExp man muß sich aber nicht selbst mit Patterns herumschlagen.
autoBert, ich habe "blind" Deinen Quelltext gestartet und sofort einen Bluescreen geerntet.
seltsamer Zufall, das Skript enhält keinen kritsichen Code.
Vergleiche doch die SN der HDD von den beiden Patitionen.
DriveGetSerial liefert die Windows-Volume ID und nicht die physikalische Sereiennummer.
Das Skript macht was du sagst, es geht nach dem Drücken des OK-Buttons in den case Zweig 0 (lag ja kein Fehler vor).
Reichen die Infos, die mit AutoIt ermittelbar sind nicht? Hier ein Ausschnitt:
#include <Array.au3>
Global $aDrives[26][10]
_CreateDriveItems()
Func _CreateDriveItems($bDelete = False)
Local $aLdrives, $iFound, $hIcon
$aLdrives = DriveGetDrive('ALL')
_ArrayDelete($aLdrives, 0)
;_ArrayDisplay($aLdrives)
For $i = 25 To 0 Step -1
If $bDelete And $aDrives[$i][0] <> '' Then
;_GUICtrlTreeView_Delete($idTVLocal, $aDrives[$i][0])
$aDrives[$i][0] = ''
EndIf
$iFound = _ArraySearch($aLdrives, Chr($i + 65) & ':')
If @error Then
If $aDrives[$i][0] <> '' Then
;_GUICtrlTreeView_Delete($idTVLocal, $aDrives[$i][0])
$aDrives[$i][0] = ''
EndIf
Else
If $aDrives[$i][0] = '' Then
$aDrives[$i][0] = Chr($i + 65)
$aDrives[$i][1] = DriveGetType($aLdrives[$iFound] & '\')
$aDrives[$i][2] = DriveGetType($aLdrives[$iFound] & '\', 2)
$aDrives[$i][3] = DriveGetType($aLdrives[$iFound] & '\', 3)
$aDrives[$i][4] = DriveStatus($aLdrives[$iFound] & '\')
$aDrives[$i][5] = DriveGetSerial($aLdrives[$iFound] & '\')
$aDrives[$i][6] = DriveGetLabel($aLdrives[$iFound] & '\')
$aDrives[$i][7] = DriveGetFileSystem($aLdrives[$iFound] & '\')
$aDrives[$i][8] = DriveSpaceFree($aLdrives[$iFound] & '\')
$aDrives[$i][9] = DriveSpaceTotal($aLdrives[$iFound] & '\')
#cs
Switch $aDrives[$i][1]
Case 'Unknown'
$hIcon = $UNKNOWN_ICON_INDEX
Case 'RAMDisk'
$hIcon = $Ram_ICON_INDEX
Case 'CDRom'
$hIcon = $CDRom_ICON_INDEX
Case 'Fixed'
$hIcon = $HDD_ICON_INDEX
Case 'Removavle'
$hIcon = $Removable_ICON_INDEX
Case 'Network'
$hIcon = $Network_ICON_INDEX
EndSwitch
If $bDelete Then
$aDrives[$i][0] = _GUICtrlTreeView_AddChildFirst($idTVLocal, $hLocal, Chr($i + 65) & ':\', $hIcon, $hIcon)
Else
$aDrives[$i][0] = _GUICtrlTreeView_AddChild($idTVLocal, $hLocal, Chr($i + 65) & ':\', $hIcon, $hIcon)
EndIf
_GUICtrlTreeView_SetItemParam($idTVLocal, $aDrives[$i][0], $aDrives[$i][0])
_AddFolderLocal($aLdrives[$iFound] & '\', $aDrives[$i][0])
_GUICtrlTreeView_Expand($idTVLocal, $aDrives[$i][0], False)
#ce
EndIf
EndIf
Next
_ArrayInsert($aDrives,0)
$aDrives[0][1] = 'Drive Type'
$aDrives[0][2] = 'SSD Status'
$aDrives[0][3] = 'Bus Type'
$aDrives[0][4] = 'Drive Status'
$aDrives[0][5] = 'Windows Volume ID'
$aDrives[0][6] = 'Label'
$aDrives[0][7] = 'File System Type'
$aDrives[0][8] = 'Free Space'
$aDrives[0][9] = 'Space Total'
_ArrayDisplay($aDrives)
EndFunc ;==>_CreateDriveItems
Alles anzeigen
oder "C:\Program Files\AutoIt3\Examples\COM\Scriptomatic.au3" sollte doch noch mehr Infos liefern können.
Das wird in deinem Script doch gar nicht benötigt.
Stimmt, zuerst hatte ich _WinAPI_GetUserDefaultLCID benutzt um die locale zu bestimmen, später auf das Makro @OSLang umgestellt.
Hier hat der Fehlerteufel zugeschlagen.
Ich denke mal, so ist es richtig...
stimmt natürlich auch, danke @Bitnugger.
Das von dir verlinkte Beispiel funktioniert bei mir wunderbar. Du mußt nur diesen Hinweis beachten:
also gültige Werte für $g_sRemoteFile/$sServer/$sUsername/$sPass angeben. Der verwendete Server ist ein öffentlicher bei dem nur Downloads möglich sind.
Die Variable $iPercent ist in der Funktion _UpdateProgress als Parameter definiert. _UpdateProgress wird von _FTP_ProgressUpload mit Parameter aufgerufen.
Deine Funktion wird bei der folgenden Prüfung beendet
dann gilt meine Funktion ab in die Tonne und damit (Ursprungsversion) leben:
Mit dieser Fungtion eigentlich gar nicht, oder siehst du einen Parameter der dies zulässt?
kannst Du mir eventuell ein lauffähiges Beispiel schreiben?
dieses Beispiel ist lauffähig:
#RequireAdmin
#include <Array.au3>
Global $aLang[5][2] ;Größe anpassen
;in diesem Array werden in Spalte 0 die User abhängige Landeslocale
; und in Spalte 1 das zu suchende Wort gespeichert
;es müssen nur die Ausnahmen gespeichert werden in denen NICHT das vorbelgete Wort vorkommt!!
;MsgBox(64,'Locale',@OSLang) ;Eintrag in Spalte 0
$sText='(Sysprep)'
$iFound=_ArraySearch($aLang,@OSLang)
If $iFound<>-1 Then $sText=$aLang[$iFound][1]
$Hwnd = WinGetHandle('[CLASS:#32770]',$sText)
;MsgBox(64, 'Sysprep', 'Hwnd: ' & $Hwnd)
$aPos=WinGetPos($Hwnd)
WinMove($Hwnd,'',@DesktopWidth-$aPos[2]-5,@DesktopHeight-$aPos[3]-35)
Alles anzeigen
vorausgesetzt"(Sysprep)" kommt als Text vor. Ich habe leider nur dieses 1 System und kann daher nicht alle möglichen Sprachen überpüfen. Du mußt also alle Ausnahmen ["(Sysprep)" kommt nicht im Text vor} im Array definieren.
Mit dieser Fungtion eigentlich gar nicht, oder siehst du einen Parameter der dies zulässt?
Du kannst natürlich mit WinSetTitle bzw. ControlSetText das Fenster anpassen. Besser wäre aber die Funktion abändern und unter neuem Namen direkt ins Skript aufnehmen:
; #FUNCTION# ====================================================================================================================
; Author ........: limette, Prog@ndy
; Modified.......: jchd
; Änderungsvorschlag autoBert
; ===============================================================================================================================
Func _MyFTP_ProgressUpload($hFTPSession, $sLocalFile, $sRemoteFile, $MyTitle = '', $MyText = '', $hFunctionToCall = 0)
If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
Local $hFile = FileOpen($sLocalFile, $FO_BINARY)
If @error Then Return SetError(-1, _WinAPI_GetLastError(), 0)
Local $ai_FtpOpenfile = DllCall($__g_hWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $hFTPSession, 'wstr', $sRemoteFile, 'dword', $GENERIC_WRITE, 'dword', $FTP_TRANSFER_TYPE_BINARY, 'dword_ptr', 0)
If @error Or $ai_FtpOpenfile[0] = 0 Then Return SetError(-3, _WinAPI_GetLastError(), 0)
If $MyTitle = '' Then $MyTitle = "FTP Upload"
If $MyText = '' Then $MyText = "Uploading " & $sLocalFile
If Not IsFunc($hFunctionToCall) Then ProgressOn($MyTitle, $MyText)
Local $iLen = FileGetSize($sLocalFile)
Local Const $iChunkSize = 256 * 1024
Local $iLast = Mod($iLen, $iChunkSize)
Local $iParts = Ceiling($iLen / $iChunkSize)
Local $tBuffer = DllStructCreate("byte[" & $iChunkSize & "]")
Local $aDone, $ai_FtpWrite, $iOut, $iRet, $iLasterror
Local $x = $iChunkSize
Local $iDone = 0
For $i = 1 To $iParts
If $i = $iParts And $iLast > 0 Then
$x = $iLast
EndIf
DllStructSetData($tBuffer, 1, FileRead($hFile, $x))
$ai_FtpWrite = DllCall($__g_hWinInet_FTP, 'bool', 'InternetWriteFile', 'handle', $ai_FtpOpenfile[0], 'struct*', $tBuffer, 'dword', $x, 'dword*', $iOut)
If @error Or $ai_FtpWrite[0] = 0 Then
$iLasterror = _WinAPI_GetLastError()
$aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
; No need to test @error.
FileClose($hFile)
If Not IsFunc($hFunctionToCall) Then ProgressOff()
Return SetError(-4, $iLasterror, 0)
EndIf
$iDone += $x
If Not IsFunc($hFunctionToCall) Then
ProgressSet(($iDone / $iLen) * 100)
Else
$iRet = $hFunctionToCall(($iDone / $iLen) * 100)
If $iRet <= 0 Then
$iLasterror = @error
$aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
; No need to test @error.
DllCall($__g_hWinInet_FTP, 'bool', 'FtpDeleteFileW', 'handle', $hFTPSession, 'wstr', $sRemoteFile)
; No need to test @error.
FileClose($hFile)
If Not IsFunc($hFunctionToCall) Then ProgressOff()
Return SetError(-6, $iLasterror, $iRet)
EndIf
EndIf
Sleep(10)
Next
FileClose($hFile)
If Not IsFunc($hFunctionToCall) Then ProgressOff()
$aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
; No need to test @error.
If @error Or $aDone[0] = 0 Then Return SetError(-5, _WinAPI_GetLastError(), 0)
Return 1
EndFunc ;==>_MyFTP_ProgressUpload
Alles anzeigen
du mußt natürlich noch dein Skript anpassen:
- halbjährlich rund 113,40 € ==> macht im Jahr 226,80 €
- vierteljährlich rund 57,80 € ==> macht im Jahr 231,20 €
- monatlich rund 19,45 € ==> macht im Jahr 233,40 €Und DAS ergibt doch wesentlich mehr Sinn!
Das dies Sinn macht ist mir klar, aber die Formel hat er auf Grundlagenmaterial entwickelt welches uns nicht vorliegt.
Und die Fragestellung geht am Problem (der offensichtlich falschen Berechnung) vorbei, denn es wird nirgends gerundet.
autobert, wo stehen hier 1000% zinsen?
Sorry. ich hatte Tippfehler, muß natürlich >10000% heisen. Denn wenn etwas was im Monat mehr als das 10 fache des Jahresbeitrags kostet hat effektiv einen Zuschlag größer 11000 %. Auch hieran zu erkennen:
Netto Jährlich: 220.19
Netto Halbjährlich: 0 (427.5533980)
Netto Vierteljährlich: 838.8190476
Netto Monatlich: 2492.716981
daß entweder die verwendete Formel falsch bzw. falsch umgesetzt ist oder deine Gesellschaft bald ohne Kundschaft dasteht. Oder ist dir jemals ein Kunde begegnet, der lieber freiwillig jeden Monat 2.400 € zahlt (und das dann noch 11* für das Jahr), anstatt einmal 220 €? Ich würde hier sofort das Gespräch abbbrechen und bei im Internet nach einer günstigeren Monatsrate suchen!
gibts hier auch coder oder nur spezialisten die nach rechtschreibfehlern suchen?
rechtschreibfehler <> Rechenfehler bzw. Fehler beim aufstellen der Formel. Da das ganze ja gewerblich ist schlage ich vor: Du postest in Programmieranfragen mit Gegenleistung und stellst die Links zur Dokumentation der Berechnungsformel zur Verfügung. Bei Programmierern gehe ich, im Gegensatz zu Versicherungsvertretern, stark davon aus das diese Zinsrechnung und Dreisatz beherschen. Dabei sollten letztere doch mittlerweile auch einen gewissen Abschluss verfügen.
Die _IE* Funktionen laufen auch auf Win 10 noch:
94_VollBild.jpg
lies mal https://www.autoitscript.com/forum/topic/17…-autoit-v3314x/
um das etwas genauer zu erklären, der jahresbeitrag brutto sind zb 220.19 € - die netto (/1.19)- der kunde hat sich entschieden monatlich zu zahlen. dazu kommt der zinswert für die zahlungsweise (/1.06). am ende wird es * 12 monate gerechnet und der fällige jahresbeitrag ist berechnet.
na dann hast du wohl einen Fehler im Skript, denn für monatliche Zahlweise einen Aufschlag von ~1000 % zu nehmen ist mehr als unverschämt:
aus 1200 Brutto wird 13584.90566 monatlich netto.
das script aber rechnet statt mit den 220.19 € mit 220 euro. das macht leider die provisionsberechnung sehr ungenau und somit unbrauchbar.
in deinem Skript ist keine Funktion zum abrunden enthalten.
Ich kann jedenfalls kein int, round oder stringfunktion finden, die für das abrunden verantwortlich sein sollte.
Du kannst doch eine Kombination aus CLASS:#32770 und Text verwenden. Du benötigst einen Textausschnitt, der bei allen von dir zu betreuenden Computer vorkommt. Ich gehe davon aus dies ist "(Sysprep)". Daraus ergibt sich folgende Lösung:
sollte dies bei dir nicht gegegeben sein, mußt du in einem Array das jeweilige Suchwort zusammen mit der Ländersprache abspeichern und dementsprechend das Skript anpassen.
mfg (auto)Bert
war nicht der einzige Crosspost: im "bösen" Forum hat er für 10 € einen Auftrag dafür vergeben. Dieser wurde noch am gleichen Tag erledigt.