Vielleicht gibts ja bald eine site:
Edit:
Mußte ich jetzt einfach loswerden um meinen 200. Post zu haben ![]()
Vielleicht gibts ja bald eine site:
Edit:
Mußte ich jetzt einfach loswerden um meinen 200. Post zu haben ![]()
Hi,
nachdem ich lange genug und mit eurer Unterstützung gegrübelt habe, konnte ich das Problem nun lösen.
Das Ergebnis habe ich gleich in eine UDF verpackt. Vielleicht kann es ja noch jemand brauchen.
Hier ein Muster zum Probieren:
#cs
Mit Alt+C wechselt ihr zwischen
Link Benutzkarte gesperrt / Link Kalender frei
und
Link Benutzkarte frei / Link Kalender gesperrt
und zurück
#ce
#include <IE.au3>
#Include <Misc.au3>
Global $changed = 0, $mode = 0
; direkte Links
$x = "http://clustrmaps.com/counter/maps.php?url=http://autoit.aufwaerts.de" ; Benutzerkarte
; http://autoit.aufwaerts.de/calendar.php?sid=
; da "sid" bei jedem Aufruf wechselt, für solche Links:
$y = "http://autoit.aufwaerts.de/calendar.php?" ; Kalender
HotKeySet("!c","change")
[/autoit] [autoit][/autoit] [autoit]$oMSIE = _IECreate ("http://autoit.aufwaerts.de/portal.php")
_SkipForbiddenLink($x)
Func _SkipForbiddenLink($ForbiddenLink,$Part=0)
Local $Link
AutoItSetOption("WinTitleMatchMode", 2)
If $changed = 1 Then $changed = 0 ; nur für Test zum Umschalten
While 1
$Link = StatusbarGetText("Internet Explorer")
If $Link <> "" Then
If $Part = 0 Then ; kpl. Link angegeben
If $Link = $ForbiddenLink And _
( _IsPressed("01") Or _IsPressed("02")) Then MouseMove(@DesktopWidth/2, @DesktopHeight/2, 0)
Else ; Teil des Links angegeben
If StringInStr($Link, $ForbiddenLink) And _
( _IsPressed("01") Or _IsPressed("02")) Then MouseMove(@DesktopWidth/2, @DesktopHeight/2, 0)
EndIf
EndIf
Sleep(100)
; If Not WinExists("Internet Explorer") Then Exit ; Original in der Funktion
If Not WinExists("Internet Explorer") Or $changed = 1 Then Exit ; nur für Test zum Umschalten
WEnd
EndFunc
Func change()
$changed = 1
If $mode = 0 Then
$mode = 1
_SkipForbiddenLink($y, 1)
Else
$mode = 0
_SkipForbiddenLink($x)
EndIf
EndFunc
Die Funktion im Anhang.
Edit:
Hab eine Änderung eingefügt. Erst wenn auf den Link geklickt wird springt die Maus zur Mitte.
Ich werd jetzt mal folgendes versuchen:
- wenn Maus über Link ($Link = StatusbarGetText("Internet Explorer") , Vergleich mit Link-Liste)
- dann Maus bewegen zu Pos x,y (z.B. Bildschirmmitte)
Ich geb Bescheid ob es klappt.
Edit:
Heureka, ich habs!
Da die Links sich täglich ändern, checke ich jetzt nur deren Basis ab. Das geht super. Sowie die Maus auf einen 'bösen' Link zeigt springt sie zur Mitte.
Hier das Script:
#NoTrayIcon
#include <IE.au3>
#cs
Seitenaufruf
Login
#ce
AutoItSetOption("WinTitleMatchMode", 2)
While 1
$Link = StatusbarGetText("Internet Explorer")
If $Link <> "" Then
If _
StringInStr($Link, "http://redirect.1und1.de/") Or _
StringInStr($Link, "http://maxdome.1und1.de/movies/?") Or _
StringInStr($Link, "http://maxdome.1und1.de/comedy/?") Or _
StringInStr($Link, "http://maxdome.1und1.de/serie/?") Or _
StringInStr($Link, "http://xxx.nightclub.de/") Or _
StringInStr($Link, "http://maxdome.1und1.de/abos/") Or _
StringInStr($Link, "http://www.nightclub.de/") _
Then
MouseMove(@DesktopWidth/2, @DesktopHeight/2, 0)
EndIf
EndIf
Sleep(100)
If Not WinExists("Internet Explorer") Then Exit
WEnd
Würde gern "gelöst" aktivieren -- aber kein Schalter da. ![]()
Werde es morgen mal auf nem 2k testen und (so es dann funzt
) den Thread als gelöst markieren -- ähh wo mach ich das denn? Seh hier keinen Schalter.
Oder geht das mit <Weitere Optionen><Öffnen/Schließen> ?
Edit:
Hab es versucht mit den verschiedensten Größen. Ergebnis ist immer das gleiche: Win2k mag die Combobox einfach nicht. Was solls, ich lass mich doch von Windoof nicht ärgern -- hab jetzt einfach 'ne Liste genommen.
Also, hab das grad getestet mit der Änderung in "hosts". Keine Änderung, kann die Seiten munter aufrufen.
LOL - ich hatte im zweiten Teil meines Scripts tatsächlich noch meine Daten drin, hatte ich gar nicht gesehen. Danke
PW ist natürlich inzwischen geändert.
Edit:
Hab nun auch den Tipp mit der Umleitung ausprobiert. Funktioniert leider nicht, da die Linkadresse selbst eine Weiterleitung ist und nicht mit der URL der Zielseite übereinstimmt. Diese wird jedoch mit $obj.document.url ausgelesen.
Hab kein Plan.... :weinen:
Edit2:
Hab jetzt mal die Zielseiten-URL gesammelt (einige ändern sich allerdings bei jedem Aufruf, z.B. Shop) und damit die Umleitungsfunktion probiert. Das geht auch - aber nur einmal, dann wird die Schleife verlassen. Weiß nicht warum. Hab den Codeteil mal angehängt:
While 1
$Win_hWnd = WinGetHandle("")
$Ctrl_List = WinGetClassList($Win_hWnd)
If Not @error And StringInStr($Ctrl_List,"Internet Explorer_Server" & @LF) Then
$n = 1
While 1
$IE_hWnd = ControlGetHandle($Win_hWnd,"","Internet Explorer_Server" & $n)
If @error Then ExitLoop
If ControlCommand($Win_hWnd,"","Internet Explorer_Server" & $n,"IsVisible","") Then
$obj = _ObjGetFromHWND($IE_hWnd)
If IsObj($obj) Then
If _
$obj.document.url = "http://www.1und1.de/?__rd=.." Or _
$obj.document.url = "http://portal.1und1.de/de/themen/?__rd=.." Or _
$obj.document.url = "https://login.1und1.de/xml/config/;jsessionid=.." Or _
$obj.document.url = "http://portal.1und1.de/de/shopping/?__rd=.." Or _
$obj.document.url = "https://maxdomeservice.1und1.de/account/?mxdsid=.." Or _
$obj.document.url = "http://maxdome.1und1.de/blockbuster/?sid=.." Or _
$obj.document.url = "http://www.nightclub.de/check.php" _
Then ; nur ein paar URL's
$obj.navigate("http://www.toggo.de")
Sleep(1000)
EndIf
EndIf
EndIf
$n += 1
WEnd
EndIf
Sleep(500)
If Not WinExists("Internet Explorer") Then ExitLoop ; hab ich eingefügt, damit das Script von allein beendet wird
WEnd
Exit
Hi,
ich habe inzwischen mehrfach festgestellt, dass die Combobox unter Windows 2000 nicht voll funktioniert. Sie läßt sich nicht ausklappen. Führe ich dieselbe Anwendung unter XP aus funktioniert es tadellos.
Hat jemand 'ne Idee? Hab schon mit einigen Styles probiert aber ohne Erfolg.
@Analyzer
In dem Script sind keine Benutzerdaten, ist die Seite für die Eingabe der Benutzerdaten.
muh_kuh
Wenn ich eingeloggt bin, ist das eine https-site. Glaub nicht, dass die noch funktioniert, wenn ich da was umleite.
Trotzdem Danke.
Hi,
ich habe jetzt einen Maxdome-Account (mit 3DSL 1&1). Damit meine Kinder dort auch was gucken können habe ich ein Script für die Einwahl (Benutzereingabe, Passwort) erstellt.
#NoTrayIcon
#include <IE.au3>
$oIE = _IECreate ("https://maxdomeservice.1und1.de/login/start/index.php?mxdsid=&__rd=hjRQwTpsrii46868GHTj,uTRWzuui46")
Send("{TAB 2}")
Send("USER")
Send("{TAB}")
Send("PASSWORT")
Send("{ENTER}")
WinWaitActive("Sicherheitshinweis")
Send("!j")
Das funzt auch prima. Allerdings besteht die Gefahr, dass ein kostenpflichtiger Link gedrückt wird.
Besteht die Möglichkeit, zu verhindern, dass diese Links ausgeführt werden? Wenn der Mauszeiger über einem Link schwebt, erscheint dieser ja in der Statuszeile des Fensters. Das könnte ich mit der 'verbotenen Liste' vergleichen.
Aber wie verhindere ich einen Mausklick? Mit Blockinput( ) kann ich nicht arbeiten - dann ließe sich die Maus ja nicht mehr von dem Link fortbewegen.
Ich hab mir das ungefähr so vorgestellt:
#NoTrayIcon
#include <IE.au3>
$oIE = _IECreate ("https://maxdomeservice.1und1.de/login/start/index.php?mxdsid=&__rd=hjRQwTpsrii46868GHTj,uTRWzuui46")
Send("{TAB 2}")
Send("USER")
Send("{TAB}")
Send("PASSWORT")
Send("{ENTER}")
WinWaitActive("Sicherheitshinweis")
Send("!j")
Dim $arVerboteneLinks[15]
$arVerboteneLinks[0]="http://redirect.1und1.de/ac1704c1cwHqjIHYtwWjgmKsDYIbAkBa/?origin.site=MD.VOD.DE&origin.id=&target.site=PORTAL&target.page=de%2Fshopping%2f"
$arVerboteneLinks[1]="http://redirect.1und1.de/ac1704c1cwHqjIHYtwWjgmKsDYIbAkBa/?origin.site=MD.VOD.DE&origin.id=&target.site=CC.UCM.DE"
$arVerboteneLinks[2]="http://redirect.1und1.de/ac1704c1cwHqjIHYtwWjgmKsDYIbAkBa/?origin.site=MD.VOD.DE&origin.id=&target.site=PORTAL&target.page=de%2Fthemen%2f"
$arVerboteneLinks[3]="http://redirect.1und1.de/ac1704c1cwHqjIHYtwWjgmKsDYIbAkBa/?origin.site=MD.VOD.DE&origin.id=&target.site=MX.EUE.DE"
$arVerboteneLinks[4]="http://maxdome.1und1.de/movies/?sid="
$arVerboteneLinks[5]="http://maxdome.1und1.de/comedy/?sid="
$arVerboteneLinks[6]="http://maxdome.1und1.de/serie/?sid="
$arVerboteneLinks[7]="http://xxx.nightclub.de/index.php?__rd=ac1704c1cwHqjIHYtwWjgmKsDYIbAkBa"
$arVerboteneLinks[8]="http://maxdome.1und1.de/abos/comedy_paket/?sid="
$arVerboteneLinks[9]="http://maxdome.1und1.de/abos/serien_paket/?sid="
$arVerboteneLinks[10]="http://maxdome.1und1.de/abos/movie_paket/?sid="
$arVerboteneLinks[11]="http://maxdome.1und1.de/abos/premium_paket/?sid="
$arVerboteneLinks[12]="http://maxdome.1und1.de/abos/sp_lost/?sid="
$arVerboteneLinks[13]="http://maxdome.1und1.de/abos/sp_dh/?sid="
$arVerboteneLinks[14]="http://www.nightclub.de/check.php"
AutoItSetOption("WinTitleMatchMode", 2)
While 1
Sleep(100)
$Link = StatusbarGetText("Internet Explorer")
If $Link <> "" Then
For $i = 0 To 14
If $Link = $arVerboteneLinks[$i] Then
; SPERRE MAUSKLICK - aber wie ?
ExitLoop
EndIf
Next
EndIf
WEnd
WinWaitClose("Internet Explorer")
Exit
Da hat sich doch nix geändert.
Hier ein Screenshot:
[Blockierte Grafik: http://img143.imageshack.us/img143/4531/windowinfosa2.jpg]
Ein klares JEIN ![]()
Habe u.a. diese Variante gefunden:
[autoit]Func _FilePrintCom($iFile)
If Not FileExists($iFile) Then Return SetError(1,0,0)
$objShellApp = ObjCreate("Shell.Application")
$objShellApp.ShellExecute($iFile,0,0,"PRINT",0)
EndFunc
In der Beta gibt es für reinen Textdruck:
[autoit]#Include <File.au3>
_FilePrint($s_File, $i_Show = @SW_HIDE)
Im englischen Forum findest du noch andere Bsp.:
http://www.autoitscript.com/forum/index.php?showtopic=29162&hl=
http://www.autoitscript.com/forum/index.php?showtopic=28358&hl=
MsgBox(0,"Installiertes Service-Pack",@OSServicePack)
[/autoit]
Schau mal in der Hilfe, Makroreferenz. Da findest du noch mehr zum Thema Systeminfo.
Ich hab dir mal ein Beispiel für 2-Fenster Verwaltung gemacht.
#include <GUIConstants.au3>
Dim $beide
$MainGUI = GUICreate("MainGUI", 524, 208, -1, -1)
$Label1 = GUICtrlCreateLabel("Wert 1", 35, 42, 36, 17)
$Input1 = GUICtrlCreateInput("75", 75, 39, 53, 21)
$Label2 = GUICtrlCreateLabel("X", 146, 42, 11, 17)
$Label3 = GUICtrlCreateLabel("Wert 2", 173, 42, 36, 17)
$Input2 = GUICtrlCreateInput("28", 211, 39, 89, 21)
$Label4 = GUICtrlCreateLabel("=", 316, 42, 10, 17)
$Button1 = GUICtrlCreateButton("Ergebnis in neuer GUI", 342, 39, -1, -1, 0)
$Group1 = GUICtrlCreateGroup("GUI -Darstellung", 340, 76, 137, 85)
$rBeide = GUICtrlCreateRadio("überlagern", 350, 102, 83, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$rAllein = GUICtrlCreateRadio("ersetzen", 350, 129, 82, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$SubGUI = GUICreate("SubGUI", 413, 180, 303, 219)
$LabelSub1 = GUICtrlCreateLabel("Ergebnis von MainGUI:", 28, 43, 114, 17)
$InputSub1 = GUICtrlCreateInput("", 156, 40, 73, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
$bBack = GUICtrlCreateButton("Zurück", 276, 109, 89, 21, 0)
GUISetState(@SW_SHOW, $MainGUI)
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
GUICtrlSetData($InputSub1,(GUICtrlRead($Input1)*GUICtrlRead($Input2)))
$beide = GUICtrlRead($rBeide)
If $beide = 1 Then
GUISetState(@SW_SHOW, $SubGUI)
Else
GUISetState(@SW_HIDE, $MainGUI)
GUISetState(@SW_SHOW, $SubGUI)
EndIf
Case $bBack
GUISetState(@SW_HIDE, $SubGUI)
GUISetState(@SW_SHOW, $MainGUI)
EndSwitch
WEnd
Benutze die Beta.
Also ich hab bisher erst eine Werbeform gesehen,die mich nicht stört (hier zu sehen). Die Links erscheinen auch nur auf der Threadseite und nicht in der Forenübersicht.
Was ich absolut nicht ausstehen kann, sind Popups. Da geht mir glatt das Messer in der Tasche auf. Vor allem, da diese meist aggressiv gestaltet sind und häufig von Tag zu Tag ihre Linkadresse ändern, sodass man sie nicht dauerhaft blocken kann.
Ich hab inzwischen eine schwarze Liste eingerichtet - Websites mit Popupwerbung trage ich dort ein. Diese sind dann für meinen PC tabu.
Mit der Beta hat das nix zu tun.
Also ich hab Koda bisher bei jeder Installation von SciTE4AutoIt automatisch mitinstalliert bekommen. Nur um die neueste Version von Koda einzubinden mußte ich von Hand eingreifen.
Von mir verwendete Installationsdatei: "SciTE4AutoIt3-21.08.06.exe"
Wenn du SciTE4AutoIt benutzt, hast du Koda standardmäßig mit dabei.
Aufruf über <Extras><Koda(Formdesigner)> oder per Hotkey "ALT+m".
Du solltest dir aber die neueste Version installieren. Hier zu finden.
Hmm, so ganz kann ich dir nicht folgen.
Erst bildest du alle möglichen 3-fach Kombinationen aus Ziffern und Zeichen.
Was soll in der If-Abfrage passieren? Da alle Kombinationen im Pool sind, hast du immer Übereinstimmung.
Und Autoit-Code wär nicht schlecht.
Deinen Code kann ich nur sehr vage deuten, weiß nur dass es kein VB, Cobol oder Turbopascal ist.
Bei mir klappts - Google wird mit Suchbegriff aufgerufen.
*Kopfkratz*
Hab's jetzt mit deinem Code probiert und Fehler gefunden:
Du hattest das Eingabefeld nicht ausgelesen.
Hier die funktionierende Variante:
#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]GUICreate("Search",220,70)
$label=GUICtrlCreateLabel("Suchbegriff:",25,15,100)
$input_field=GUICtrlCreateInput("",5,30,100)
$amazon=GUICtrlCreateButton("Amazon.de",115,5,100,20,-1,-1)
$ebay=GUICtrlCreateButton("Ebay.de",115,25,100,20,-1,-1)
$google=GUICtrlCreateButton("Google.de",115,45,100,20,-1,-1)
GUISetState()
While 1
$msg=GUIGetMsg()
Select
Case $msg=$GUI_EVENT_CLOSE
ExitLoop
Case $msg=$amazon
Run("C:\Programme\Mozilla Firefox\firefox.exe http://www.amazon.de/exec/obidos/ex…field-keywords="&GUICtrlRead($input_field)&"&mode=blended&tag=firefox-de-21&sourceid=Mozilla-search")
ExitLoop
Case $msg=$google
Run("C:\Programme\Mozilla Firefox\firefox.exe http://www.google.de/search?q="&GUICtrlRead($input_field))
ExitLoop
EndSelect
WEnd
Da für solche Mäuse ja auch eigene Treiber installiert werden müssen um die zusätzlichen Tasten benutzen zu können, glaub ich nicht, dass mit Standardfunktionen eine Abfrage möglich ist.
Du mußt also irgendwie die Rückgabewerte dieser Treiber anzapfen. Hab ich aber keinen Plan von, wie das geht. ![]()
Hi,
eigentlich müßte der Thread wohl zu den Scripten. Da es aber nur z. Teil von mir stammt paßt das nicht so richtig. Vielleicht läßt es sich ja auch als Beispiel in die FAQ einbinden.
Mod's, ich vertraue euch. Ihr werdet es gegebenenfalls schon an den richtigen Ort verschieben.
Zum Thema:
Das rekursive Auslesen von Dateien / Ordnern wurde ja schon mehrmals angesprochen. Jos van der Zande hat dafür die prima Funktion _GetFileList( ) erschaffen.
Ich hab diese Funktion etwas ergänzt um bei Bedarf mittels Flag aus _GetFileList ein "_GetDirList" zu machen.
Ich hab das ganze zur Anschauung in eine GUI gepackt.
Bitte die Beta verwenden.
#include <GUIConstants.au3>
#Include <GuiList.au3>
#include <file.au3>
#Include <Misc.au3>
#Include <GuiStatusBar.au3>
Dim $Extension = "", $Pfad = "", $Daten[1], $arDisp[1], $currPosIndex, $file, $fileShort, $anzahl, $progress_step, $progress_val = 0
Dim $ListPfad = @MyDocumentsDir & "\", $ListFile = "Rekursiv_List.txt", $ListFileShort = "Rekursiv_Short.txt"
Dim $ListFileShortPrint = "Rekursiv_Short_P.txt", $a_PartsText[2] = ["", ""], $a_PartsRightEdge[2] = [40, -1], $PfadExec
Opt("GUIOnEventMode", 1)
$Form1 = GUICreate("Ordner- / Dateisuche (rekursiv)", 600, 458, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "AForm1Close")
GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "SpecialEvents")
$List1 = GUICtrlCreateList("", 24, 106, 550, 354, $WS_VSCROLL)
GUICtrlSetOnEvent(-1, "ListClick")
$Label1 = GUICtrlCreateLabel("Pfad:", 28, 16, 29, 17)
$iPath = GUICtrlCreateInput("", 59, 13, 280, 21, $ES_READONLY)
$Checkbox1 = GUICtrlCreateCheckbox("nur Ordner", 24, 47, 78, 17)
GUICtrlSetOnEvent(-1, "ACheckbox1Click")
$Checkbox2 = GUICtrlCreateCheckbox("ganzen Pfad zeigen", 24, 79, 130, 17)
GUICtrlSetOnEvent(-1, "ACheckbox2Click")
GUICtrlSetState(-1, $GUI_HIDE)
$Checkbox3 = GUICtrlCreateCheckbox("kompletten Pfad drucken", 435, 79, 160, 17)
GUICtrlSetState(-1, $GUI_HIDE)
$lExtension = GUICtrlCreateLabel("Erweiterung", 185, 41, 90, 17)
$lExtension1 = GUICtrlCreateLabel("z.B. 'exe' oder ' * '", 185, 58, 900,17)
$iExtension = GUICtrlCreateInput("", 282, 45, 57, 21, $ES_CENTER)
$bPath = GUICtrlCreateButton("Pfad wählen", 349, 13, 70, 21, 0)
GUICtrlSetOnEvent(-1, "bPathClick")
$lTipTime = GUICtrlCreateLabel("Zeit für ToolTipp:", 185, 80)
$iTipTime = GUICtrlCreateInput ("4", 282, 77, 57, 21, $ES_CENTER)
$updown = GUICtrlCreateUpdown($iTipTime)
$bAuslesen = GUICtrlCreateButton("Auslesen", 349, 45, 70, 21, 0)
GUICtrlSetOnEvent(-1, "bAuslesenClick")
$bPrint = GUICtrlCreateButton("Drucken", 349, 77, 70, 21, 0)
GUICtrlSetOnEvent(-1, "bPrintClick")
$bClear = GUICtrlCreateButton("Löschen", 505, 45, 70, 21, 0)
GUICtrlSetOnEvent(-1, "bClearClick")
$bEnde = GUICtrlCreateButton("Ende", 505, 13, 70, 21, 0)
GUICtrlSetOnEvent(-1, "bEndeClick")
$StatusBar1 = _GUICtrlStatusBarCreate($Form1, $a_PartsRightEdge, $a_PartsText)
$progressbar1 = _GUICtrlStatusBarCreateProgress($StatusBar1, 1)
GUICtrlSetColor(-1,32250)
GUICtrlSetState(-1, $GUI_HIDE)
$Busy = GUICreate("",160,110,-1,-1,$WS_POPUP)
GUISetBkColor(0x708090)
$label_busy = GUICtrlCreateLabel("Einen Moment bitte." & @LF & @LF & "Die notwendigen Daten" _
& @LF & "werden ermittelt..", 20, 15, 120, 100, $SS_CENTER)
GUICtrlSetFont(-1, 10, Default,2)
GUICtrlSetColor(-1, 0xF0E68C)
$RightMenu = GUICreate("RightMenu", 135, 71, -1, -1, $WS_POPUP)
$bShellEx = GUICtrlCreateButton("Datei Ausführen", 2, 2, 130, 20, 0)
GUICtrlSetOnEvent(-1, "bShellExClick")
$bClipboard = GUICtrlCreateButton("Copy To Clipboard", 2, 24, 130, 20, 0)
GUICtrlSetOnEvent(-1, "bClipboardClick")
$bEscR_Menu = GUICtrlCreateButton("Abbrechen", 2, 48, 130, 20, 0)
GUICtrlSetOnEvent(-1, "bEscR_MenuClick")
GUISetState(@SW_SHOW, $Form1)
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(100)
WEnd
Func SpecialEvents()
If @GUI_CTRLID = $GUI_EVENT_SECONDARYDOWN Then
$ctrlfocus = ControlGetFocus($Form1,"Ordner- / Dateisuche (rekursiv)")
If $ctrlfocus = "ListBox1" And GUICtrlRead($Checkbox2) = 1 And _
_GUICtrlListGetText($List1, _GUICtrlListGetCaretIndex($List1)) <> "" _
Then
$PfadExec = _GUICtrlListGetText($List1, _GUICtrlListGetCaretIndex($List1))
If $Extension = "n" Then
GUICtrlSetState($bShellEx, $GUI_DISABLE)
GUISetState(@SW_SHOW, $RightMenu)
Else
GUICtrlSetState($bShellEx, $GUI_ENABLE)
GUISetState(@SW_SHOW, $RightMenu)
EndIf
EndIf
EndIf
EndFunc
Func ACheckbox1Click()
If GUICtrlRead($Checkbox1) = 1 Then
GUICtrlSetState($lExtension,$GUI_HIDE)
GUICtrlSetState($lExtension1,$GUI_HIDE)
GUICtrlSetState($iExtension,$GUI_HIDE)
Else
GUICtrlSetState($lExtension,$GUI_SHOW)
GUICtrlSetState($lExtension1,$GUI_SHOW)
GUICtrlSetState($iExtension,$GUI_SHOW)
EndIf
EndFunc
Func ACheckbox2Click()
_GUICtrlStatusBarSetText($StatusBar1, "", 0)
_GUICtrlStatusBarSetText($StatusBar1, "", 1)
_GUICtrlStatusBarSetBKColor($StatusBar1, 0xD3D3D3)
If GUICtrlRead($Checkbox2) = 1 Then
_DisplayListLong()
Else
_DisplayListShort()
EndIf
EndFunc
Func AForm1Close()
Exit
EndFunc
Func bClearClick()
GUICtrlSetData($iPath,"")
GUICtrlSetData($iExtension,"")
GUICtrlSetData($List1,"")
GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
GUICtrlSetState($Checkbox2, $GUI_UNCHECKED)
GUICtrlSetState($Checkbox3, $GUI_UNCHECKED)
GUICtrlSetState($lExtension,$GUI_SHOW)
GUICtrlSetState($lExtension1,$GUI_SHOW)
GUICtrlSetState($iExtension,$GUI_SHOW)
GUICtrlSetState($Checkbox2, $GUI_HIDE)
GUICtrlSetState($Checkbox3, $GUI_HIDE)
_GUICtrlStatusBarSetText($StatusBar1, "", 0)
_GUICtrlStatusBarSetText($StatusBar1, "", 1)
_GUICtrlStatusBarSetBKColor($StatusBar1, 0xD3D3D3)
$Pfad = ""
$PfadExec = ""
EndFunc
Func bAuslesenClick()
Dim $tmp = "", $asc
If $Pfad = "" Then
MsgBox(0, "ACHTUNG!", "Es wurde kein Pfad ausgewählt!")
bPathClick()
Return 0
EndIf
If GUICtrlRead($Checkbox1) = 1 Then
$Extension = "n"
Else
$Extension = GUICtrlRead($iExtension)
If Not StringInStr($Extension, "*") Then
$len = StringLen($Extension)
For $i = 1 To $len
$asc = Asc(StringLower(StringMid($Extension,$i,1)))
If ($asc > 47 And $asc < 58) Or ($asc > 96 And $asc < 123) Then $tmp = $tmp & StringMid($Extension,$i,1)
Next
$Extension = $tmp
If StringLen($Extension) > 3 Then
$tmp = MsgBox(4,"ACHTUNG!", "Die Erweiterung ist länger als 3 Zeichen."& @LF & @LF & " " & _
$Extension & @LF & @LF & " Wollen Sie korrigieren?" )
If $tmp = 6 Then
GUICtrlSetState($iExtension, $GUI_FOCUS)
Return 0
EndIf
ElseIf StringLen($Extension) = 0 Then
MsgBox(0,"ACHTUNG!", "Die Erweiterung wurde nicht festgelegt!")
GUICtrlSetState($iExtension, $GUI_FOCUS)
Return 0
EndIf
EndIf
EndIf
GUISetState(@SW_SHOW, $Busy)
_WriteAllFiles()
GUISetState(@SW_HIDE, $Busy)
_DisplayListShort()
GUICtrlSetState($Checkbox2, $GUI_SHOW)
GUICtrlSetState($Checkbox3, $GUI_SHOW)
EndFunc
Func ListClick()
$currPosIndex = _GUICtrlListGetCaretIndex($List1)
$info = _GUICtrlListGetText($List1, $currPosIndex)
$tmp = StringSplit($info, "\")
If $tmp[0] > 3 Then
$inf1 = ""
$inf2 = ""
$split = Floor($tmp[0] / 2)+1
For $i = 1 To $split
$inf1 = $inf1 & $tmp[$i] & "\"
Next
For $i = $split+1 To $tmp[0]
$inf2 = $inf2 & $tmp[$i] & "\"
Next
$info = $inf1 & @LF & $inf2
EndIf
If StringRight($info, 1) = "\" Then $info = StringTrimRight($info, 1)
_GUICtrlStatusBarSetBKColor($StatusBar1, 0x90EE90)
GUICtrlSetFont($StatusBar1, 10, Default,2)
_GUICtrlStatusBarSetText($StatusBar1, $currPosIndex+1, 0)
_GUICtrlStatusBarSetText($StatusBar1, $info, 1)
ToolTip("(" & $currPosIndex+1 & ".) " & $info)
Sleep(GUICtrlRead($iTipTime)*1000)
ToolTip("")
EndFunc
Func bEndeClick()
Exit
EndFunc
Func bPathClick()
$Pfad = FileSelectFolder("Bitten den Pfad auswählen","",6)
If StringRight($Pfad, 1) <> "\" Then $Pfad = $Pfad & "\"
GUICtrlSetData($iPath,$Pfad)
If GUICtrlRead($iPath) = "\" Then
GUICtrlSetData($iPath,"")
$Pfad = ""
EndIf
EndFunc
Func bPrintClick()
If GUICtrlRead($Checkbox3) = 1 Then
_FilePrintCom($ListPfad & $ListFile) ; Ausgabe auf Standard-Drucker
Else
_FilePrintCom($ListPfad & $ListFileShortPrint)
EndIf
EndFunc
Func bClipboardClick()
ClipPut($PfadExec)
GUISetState(@SW_HIDE, $RightMenu)
EndFunc
Func bEscR_MenuClick()
GUISetState(@SW_HIDE, $RightMenu)
EndFunc
Func bShellExClick()
GUISetState(@SW_HIDE, $RightMenu)
ShellExecute($PfadExec)
EndFunc
Func _WriteAllFiles()
If FileExists($ListPfad & "\" & $ListFile) Then _
FileMove($ListPfad & "\" & $ListFile, $ListPfad & "\" & "Rekursiv_List.bak", 1)
If FileExists($ListPfad & "\" & $ListFileShort) Then _
FileMove($ListPfad & "\" & $ListFileShort, $ListPfad & "\" & "Rekursiv_List_Short.bak", 1)
If FileExists($ListPfad & "\" & $ListFileShortPrint) Then _
FileMove($ListPfad & "\" & $ListFileShortPrint, $ListPfad & "\" & "Rekursiv_Short_P.bak", 1)
If $Extension = "n" Then
$Daten = _GetFileList($Pfad,$Extension,1) ; alle Ordner
Else
If Not StringInStr($Extension, "*") Then
$Daten = _GetFileList($Pfad,"*." & $Extension) ; Dateien mit gewählter Erweiterung
Else
$Daten = _GetFileList($Pfad,"*.*") ; alle Dateien
EndIf
EndIf
If Not IsArray($Daten) Or $Daten[0] = 0 Then
GUICtrlSetData($List1, "Keine Dateien/Ordner gemäß Suchmuster vorhanden.")
Return 0
EndIf
$file = FileOpen($ListPfad & $ListFile, 1)
$fileShort = FileOpen($ListPfad & $ListFileShort, 1)
$fileShortPrint = FileOpen($ListPfad & $ListFileShortPrint, 1)
For $i = 1 To $Daten[0]
FileWriteLine($file, $Daten[$i])
$var = StringSplit($Daten[$i], "\")
FileWriteLine($fileShort, $var[0] & "|" & $var[$var[0]]) ; Anz. Elemente & letztes Element
FileWriteLine($fileShortPrint, $var[$var[0]])
Next
FileClose($file)
FileClose($fileShort)
FileClose($fileShortPrint)
EndFunc
Func _DisplayListLong()
GUICtrlSetData($List1, "")
_FileReadToArray($ListPfad & $ListFile, $arDisp)
$anzahl = $arDisp[0]-1
$v = 15 ; Verzögerungszeit für Progressbar (1,5 sec gesamt)
$progress_step = (100 / $anzahl)
If $anzahl < 100 Then $v = 1000 / $anzahl
GUICtrlSetState($progressbar1, $GUI_SHOW)
For $i = 1 To $arDisp[0]-1
GUICtrlSetData($List1, $arDisp[$i])
$tmp = Floor($progress_val)
$progress_val = $progress_val + $progress_step
If Floor($progress_val) > $tmp Then
GUICtrlSetData ($progressbar1,Floor($progress_val))
Sleep($v) ; dadurch kein Springen der Progressbar
EndIf
Next
_GUICtrlListSetTopIndex($List1, 0)
GUICtrlSetData ($progressbar1, 100)
Sleep(1200)
GUICtrlSetData ($progressbar1, 0)
GUICtrlSetState($progressbar1, $GUI_HIDE)
EndFunc
Func _DisplayListShort()
GUICtrlSetData($List1, "")
_FileReadToArray($ListPfad & $ListFileShort, $arDisp)
$anzahl = $arDisp[0]-1
$v = 15 ; Verzögerungszeit für Progressbar (1,5 sec gesamt)
$progress_step = (100 / $anzahl)
If $anzahl < 100 Then $v = 1000 / $anzahl
GUICtrlSetState($progressbar1, $GUI_SHOW)
For $i = 1 To $arDisp[0]-1
$var = StringSplit($arDisp[$i], "|")
$point = ""
If $var[1] > 1 Then
For $j = 1 To $var[1]-1
$point = $point & ". "
Next
EndIf
GUICtrlSetData($List1, $point & $var[2])
$tmp = Floor($progress_val)
$progress_val = $progress_val + $progress_step
If Floor($progress_val) > $tmp Then
GUICtrlSetData ($progressbar1,Floor($progress_val))
Sleep($v) ; dadurch kein Springen der Progressbar
EndIf
Next
_GUICtrlListSetTopIndex($List1, 0)
GUICtrlSetData ($progressbar1, 100)
Sleep(1200)
GUICtrlSetData ($progressbar1, 0)
GUICtrlSetState($progressbar1, $GUI_HIDE)
EndFunc
; Function: _FilePrintCom()
; Author: jos van der Zande
Func _FilePrintCom($iFile)
If Not FileExists($iFile) Then Return SetError(1,0,0)
$objShellApp = ObjCreate("Shell.Application")
$objShellApp.ShellExecute($iFile,0,0,"PRINT",0)
EndFunc
; Function: _GetFileList()
; Author: jos van der Zande
; Einbindung des $DIR_ONLY-Flag von BugFix
Func _GetFileList($T_DIR,$T_MASK,$DIR_ONLY=0)
Dim $N_DIRNAMES[200000] ; max number of directories that can be scanned
Local $N_DIRCOUNT = 0
Local $N_FILE
Local $N_SEARCH
Local $N_TFILE
Local $N_OFILE
Local $T_FILENAMES
Local $T_FILECOUNT
Local $T_DIRCOUNT = 1
; check Filemask \ for empty File-Array by GetDirOnly
If $T_MASK = "n" Then $T_MASK = "*.no"
; remove the end \ If specified
If StringRight($T_DIR,1) = "\" Then $T_DIR = StringTrimRight($T_DIR,1)
$N_DIRNAMES[$T_DIRCOUNT] = $T_DIR
; Exit if base dir doesn't exists
If Not FileExists($T_DIR) Then Return 0
; keep on looping until all directories are scanned
While $T_DIRCOUNT > $N_DIRCOUNT
$N_DIRCOUNT = $N_DIRCOUNT + 1
; find all subdirs in this directory and save them in a array
$N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\*.*")
While 1
$N_FILE = FileFindNextFile($N_SEARCH)
If @error Then ExitLoop
; skip these references
If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
$N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
; if Directory than add to the list of directories to be processed
If StringInStr(FileGetAttrib( $N_TFILE ),"D") > 0 Then
$T_DIRCOUNT = $T_DIRCOUNT + 1
$N_DIRNAMES[$T_DIRCOUNT] = $N_TFILE
EndIf
Wend
FileClose($N_SEARCH) ; find all Files that mtach the MASK
$N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\" & $T_MASK )
If $N_SEARCH = -1 Then ContinueLoop
While 1
$N_FILE = FileFindNextFile($N_SEARCH)
If @error Then ExitLoop
; skip these references
If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
$N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
; if Directory than add to the list of directories to be processed
If StringInStr(FileGetAttrib( $N_TFILE ),"D") = 0 Then
$T_FILENAMES = $T_FILENAMES & $N_TFILE & @CR
$T_FILECOUNT = $T_FILECOUNT + 1
;MsgBox(0,'filecount ' & $T_FILECOUNT ,$N_TFILE)
EndIf
Wend
FileClose($N_SEARCH)
Wend
If $DIR_ONLY = 0 Then
$T_FILENAMES = StringTrimRight($T_FILENAMES,1)
$N_OFILE = StringSplit($T_FILENAMES,@CR)
Return( $N_OFILE )
Else
ReDim $N_DIRNAMES[$N_DIRCOUNT+1]
$N_DIRNAMES[0] = $N_DIRCOUNT
Return $N_DIRNAMES
EndIf
EndFunc ;==>_GetFileList
Edit 5:
Hab die vorigen Edits mal gefixed und alles zusammengefaßt.
Hab doch noch etwas dran gebastelt. Jetzt hat es folgende Features:
- Auslesen bestimmter Dateitypen
- Auslesen aller Dateien
- Auslesen nur Ordner
- Standardanzeige: letztes Pfadelement (...Text.txt; ...Ordner)
- Switchen auf komplette Pfadanzeige (und zurück)
- ToolTip zeigt ausgewähltes Listenelement (bei Bedarf 2-zeilig)
- Zeit für ToolTip frei wählbar
- Kontextmenü für Listenelemente (Datei Ausführen; Pfad kopieren), wenn Datei und Langform
- Ausdruck Liste (Kurzform oder Langform)
- Statusbar zur Darstellung Progressbar und Co-Anzeige ToolTip
ZitatEr darf seinen Namen ja veröffentlichen...
Du aber nicht ohne seine Erlaubnis
Da hab ich doch 'ne bessere Idee: z.B.
"Der Verfasser dieses Links ...."
Denn dort gibt er seinen Namen mehrfach im Klartext an.
Comment peethebee: Danke für die Idee, ist angepasst.