Kann ich nicht bestätigen. Bei mir funktionieren beide, wenn Pfad und Datei existieren.
Überprüfe doch mal, ob der Pfad bei Dir auch existiert (FileExists).
Beiträge von Oscar
-
-
AspirinJunkie: das Ergebnis sieht aber sehr merkwürdig aus. Bei mir: 00000000-0000-0000-0807-060504030201
-
Die Idee mit den Screenshots ist schon nicht schlecht, aber statt dann ein OCR zu programmieren, würde ich lieber einmalig von allen Fehlermeldungen ein Screenshot machen, diese irgendwo speichern und wenn dann eine Fehlermeldung auftritt, wieder ein Screenshot machen und mit den vorher gespeicherten vergleichen.
-
Hmmm...das ist ja doch gleich. Warum liest der denn dann die Dateinamen nicht aus?
[autoit]
Entscheidend ist das hier:ControlListView('[CLASS:CabinetWClass]', '', '[CLASS:SysListView32; INSTANCE:1]', 'GetText', $aItems[$i])
[/autoit]
Da werden scheinbar bei Vista nicht die Itemnamen ausgelesen.
Keine Ahnung wieso das so ist... -
Zitat
Bei der Rückgabe als String und mehreren Suchbegriffen wird bisher (wenn ich das aus der Testsuite richtig herausgelesen habe) die Summe aller gefundenen Einzelbegriffe zurückgegeben.
Wäre es da nicht evtl. sinnvoller die Einzelsummen getrennt durch den übergebenen Delimiter zurückzugeben? Das würde dann auch der Rückgabe bei Array entsprechen.
Das finde ich nicht so gut.Ich finde das so besser: Entweder Gesamtsumme ($bReturn = False, als Einzelwert) oder als getrennte Summen ($bReturn = True, dann als Array).
Es wäre jetzt kein Problem mein Script nach Deinen Vorgaben zu ändern, aber ich finde das mit der Gesamtsumme praxistauglicher. Wenn ich die Anzahl der Suchbegriffe ermitteln will, bekomme ich dann gleich einen Wert mit dem ich weiterrechnen kann, ohne ihn erst aufsplitten zu müssen.
Den Rest Deiner Bedingungen erfüllt mein Script.

Hier:
Zitat$bPartial True = Suchbegriff auch als Teilstring / False = Suchbegriff alleinstehend
gibt es aber noch eine Diskrepanz zu den Bedingungen von Eukalyptus. Bei ihm ist das genau umgekehrt definiert. Wobei ich Deine Definition besser finde. $bPartial = True sagt für mich aus, dass auch Teile zugelassen sind.Edit:
Wäre als Funktionsname nicht "_StringInStrCount" passender (in Anlehnung an "StringInStr")? -
Mit WM_MOVE geht das besser:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hMainGui = GUICreate('Main', 600, 400, 100, 100, $WS_POPUP)
GUISetBkColor(0xFFFFAA)
GUICtrlCreateLabel(' Main', 0, 0, 600, 400, Default, $GUI_WS_EX_PARENTDRAG)
GUISetState()
$hChildGui = GUICreate('Child', 600, 400, 710, 100, $WS_POPUP)
GUICtrlCreateLabel(' Child', 0, 0, 600, 400, Default, $GUI_WS_EX_PARENTDRAG)
GUISetBkColor(0xAAFFFF)
GUISetState()
GUIRegisterMsg($WM_MOVE, 'WM_MOVE')Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = $GUI_EVENT_CLOSEFunc WM_MOVE($hWnd, $Msg, $wParam, $lParam)
[/autoit]
Local $xPos = BitAND($lParam, 0xFFFF), $yPos = BitShift($lParam, 16)
If $hWnd = WinGetHandle($hMainGui) Then
WinMove($hChildGui, '', $xPos + 610, $yPos)
Else
WinMove($hMainGui, '', $xPos - 610, $yPos)
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_MOVE -
Starte mal "Au3Info.exe", öffne den Explorer und markiere eine Datei. Danach kopierst Du die Daten von Au3Info und postest sie hier.
Irgendwas ist da bei Vista anders, als bei XP. -
Ich habe noch etwas merkwürdiges herausgefunden. Wenn ich Dein (UEZ) unverändertes Script nehme und starte, dann läuft es ja erstmal wie in Zeitlupe.
Lasse ich es weiter laufen und klicke ein anderes Fenster (bei mir ist nebenbei die AutoIt-Hilfe offen) auf der Titelleiste an und halte die linke Maustaste fest, dann werden die Explosionen plötzlich richtig schnell angezeigt.
Wenn ich die Maustaste dann wieder loslasse, sind die Explosionen wieder in Zeitlupe. -
Die schlechte Performance kann ich bestätigen. Mein System: WinXP, AMD X4 940, ATI HD3870
ZitatPS: wie kann ich die Anzahl der Downloads von Anhängen (s.o.) darstellen?
Den Anhang nicht in den Beitrag einfügen, sondern nur als Anhang stehen lassen. -
Bei mir funktioniert das auch mit Dateien.
Benutzt Du Vista? -
Die Idee ist nicht schlecht. Zum Beispiel bei einer Passworteingabe. Würde zum einen einen BruteForce-Angriff per Programm verhindern und zum anderen das mitschreiben eines Keyloggers.
"Nachteil" wäre, dass man das Passwort nur per Maus "eingeben" kann. -
@heenzketchup: Ich habe mal Deine Idee eingebaut. Allerdings in Form eines Play-Buttons. Ein Klick darauf bzw. die Taste "s" drücken und das Wort wird vorgelesen.
Die Aussprache ist bei einigen Wörtern allerdings...naja...merkwürdig...Anleitung zum installieren des deutschen Sprachpakets des MS.Readers gibt's in Post #1, ebenso die neue Version.

-
-
Du hast Deinen Thread hier in "Hilfe & Unterstützung" aufgemacht. Das verstehen wir so, dass Du selbst etwas programmieren möchtest.
Wenn das andere für Dich erledigen sollen, dann wäre die "Jobbörse" das richtige für Dich. -
Ich bin auch schon fertig!
Gibt's einen besonderen Test, den das Script bestehen muss?
Hab mein Script zwar schon einige Male getestet aber man weiß ja nie... -
Ich nehme mal an, dass Du bei Deinem Doppelklick den Explorer von Windows meinst.
Du öffnest also einen Ordner im Explorer, markierst eine oder mehrere Dateien und willst diese per Hotkey in ein vorher festgelegtes Verzeichnis kopieren. Habe ich das soweit richtig gedeutet?
Wenn ja, dann gibt es hier die Lösung:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
HotKeySet('!c', '_CopySelectedFiles') ; Hotkey: [ALT] & [code=c]
HotKeySet('!q', '_End') ; Hotkey: [ALT] & [q]
While True
Sleep(50)
WEndFunc _CopySelectedFiles()
[/autoit] [autoit][/autoit] [autoit]
Local $sSelItems, $aItems, $aFiles, $sPath, $sDestPath
If WinExists('[CLASS:CabinetWClass]') Then
$sSelItems = ControlListView('[CLASS:CabinetWClass]', '', '[CLASS:SysListView32; INSTANCE:1]', 'GetSelected', 1)
If $sSelItems <> '' Then
$sPath = ControlGetText('[CLASS:CabinetWClass]', '', 'Edit1')
If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
$aItems = StringSplit($sSelItems, '|')
Dim $aFiles[$aItems[0] + 1] = [$aItems[0]]
For $i = 1 To $aItems[0]
$aFiles[$i] = $sPath & ControlListView('[CLASS:CabinetWClass]', '', '[CLASS:SysListView32; INSTANCE:1]', 'GetText', $aItems[$i])
Next
$sDestPath = 'c:\copy\' ; <- hier das Zielverzeichnis eintragen
For $i = 1 To $aFiles[0]
FileCopy($aFiles[$i], $sDestPath, 8 + 0) ; <- wenn statt der 0 eine 1 steht, dann evtl. bestehende Datei überschreiben
Next
EndIf
EndIf
EndFuncFunc _End()
[/autoit]
Exit
EndFuncFunktioniert zumindest unter WindowsXP. Ob's auch unter Vista läuft, kann ich nicht sagen.
-
Danke für die Verbesserungsvorschläge!
Habe die mal eingebaut. Neue Version (siehe Post #1). -
Ich hatte mal angefangen mit einem embedded IE und einer Blacklist:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include<StaticConstants.au3>
#include<GuiStatusBar.au3>
#include<EditConstants.au3>
#include<GUIConstantsEx.au3>
#include<IE.au3>
#include<WindowsConstants.au3>
Global Const $WS_EX_COMPOSITED = 0x2000000$oIE = _IECreateEmbedded()
[/autoit] [autoit][/autoit] [autoit]$hGui = GUICreate('IE-Kontrolle', 1024, 768, -1, -1, BitOr($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_CLIPCHILDREN), $WS_EX_COMPOSITED)
[/autoit] [autoit][/autoit] [autoit]
GUISetBkColor(0xDDDDDD)GUICtrlCreateLabel('Adresse', 4, 27, 55, 20, $SS_RIGHT)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 9, 400, 0, 'Verdana')
GUICtrlSetColor(-1, 0x888888)
GUICtrlSetResizing(-1, $GUI_DOCKALL)$hURL = GUICtrlCreateInput('', 64, 25, 948, 20, $ES_WANTRETURN, $WS_EX_STATICEDGE)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 9, 400, 0, 'Arial')
GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKHEIGHT)GUICtrlCreateObj($oIE, 0, 48, 1024, 696)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)$hStatus = _GUICtrlStatusBar_Create($hGUI)
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlStatusBar_SetText($hStatus, 'Fertig.')
_IENavigate($oIE, 'about:blank')
GUISetState()
GUIRegisterMsg($WM_SIZE, 'WM_SIZE')
ControlFocus($hGui, '', $hURL)
Global $oldURL = 'about:blank'
Global $aBadURL[5] = ['www.google.de','www.ebay.de','','',''] ; hier alle zu sperrenden URLs eintragen (Blacklist)
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $hURL
$sURL = StringReplace(GUICtrlRead($hURL), 'http://', '')
_IENavigate($oIE, $sURL, 0)
EndSwitch
$sURL = _IEPropertyGet($oIE, "locationurl")
If StringLeft($sURL, 7) <> 'http://' Then $sURL = 'http://' & $sURL
If StringRight($sURL, 1) <> '/' Then $sURL &= '/'
$aURL = StringRegExp($sURL, '(http://){1}(.+?)/', 3)
If IsArray($aURL) Then
If $aURL[1] <> $oldURL Then
$oldURL = $aURL[1]
$bCheck = True
_GUICtrlStatusBar_SetText($hStatus, 'Bitte warten...')
If $aURL[1] <> 'about:blank' Then
TCPStartup()
$sIP = TCPNameToIP($aURL[1])
TCPShutdown()
Else
$sIP = ''
EndIf
If $sIP <> '' Then
TCPStartup()
For $i = 0 To UBound($aBadURL)-1
If $sIP = TCPNameToIP($aBadURL[$i]) Then
Beep(400, 200)
_GUICtrlStatusBar_SetText($hStatus, 'Diese Seite darfst Du nicht aufrufen!')
GUICtrlSetData($hURL, '')
_IENavigate($oIE, 'about:blank')
$bCheck = False
ControlFocus($hGui, '', $hURL)
Sleep(1000)
ExitLoop
EndIf
Next
TCPShutdown()
If $bCheck Then
If StringLeft($aURL[1], 7) <> 'http://' Then
$sURL = 'http://' & $aURL[1]
GUICtrlSetData($hURL, $aURL[1])
EndIf
_IENavigate($oIE, $aURL[1])
If @error Then
Beep(400, 200)
_GUICtrlStatusBar_SetText($hStatus, 'Beim laden der Seite ist ein Fehler aufgetreten!')
Else
_GUICtrlStatusBar_SetText($hStatus, 'Fertig.')
EndIf
EndIf
ElseIf $aURL[1] <> 'about:blank' Then
Beep(400, 200)
_GUICtrlStatusBar_SetText($hStatus, 'Diese Seite existiert nicht!')
Else
_GUICtrlStatusBar_SetText($hStatus, 'Fertig.')
EndIf
EndIf
EndIf
WEndFunc WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit]
_GUICtrlStatusBar_Resize($hStatus)
Return $GUI_RUNDEFMSG
EndFuncHabe das Projekt aber aufgegeben. Vielleicht kannst Du ja Teile davon gebrauchen.
Für die ganz Kleinen wäre wohl eine Whitelist auch besser geeignet. Blacklist macht viel Arbeit beim zusammentragen und pflegen der URLs. Inidatei wäre vermutlich auch besser, als das im obigen Script verwendete Array.Der Grund für die Aufgabe des Projekts war aber, das eine browserbasierte Filterung nicht so wirklich funktioniert. Man müsste das dann schon universell für alle Browser programmieren, weil es sonst schon reichen würde einen anderen Browser zu installieren. Besser wäre eine tiefer ansetzende Lösung auf TCP-Ebene. Würde im Prinzip auf einen Proxy rauslaufen. Weiß aber nicht, ob AutoIt dafür dann so die geeignete Programmiersprache ist?!

-
So, die Version 1.0 ist nun fertig.

-
DynDNS wäre auch meine Empfehlung.
Zur Umwandlung vom Domainnamen in die IP-Adresse gibt es aber bereits einen AutoIt-Befehl: TCPNameToIPBeispiel:
[autoit]
[/autoit]
TCPStartup()
MsgBox(0, 0, TCPNameToIP('www.autoit.de'))
TCPStartup()