Beiträge von Bitnugger

    Und diese funzt nicht:


    Global $sURL = 'https://www.edv-dompteur.de/image/mini/Lichteffekte_500t.jpg'


    Hast Du eventuell Probleme mit Deiner Internetverbindung?

    Wenn das der Fall sein sollte, dann hilft die Funktion _InternetSetOptionsW... bewirkt aber auch keine Wunder!


    Bei mir funktioniert es jedenfalls (auch ohne _InternetSetOptionsW) mit beiden Links!


    Ich präferiere eigentlich die zweitere Möglichkeit, weil die Subclassing-API bei mir immer mal wieder Probleme verursacht hat.

    Das Thema hatten wir doch vor kurzem... Oscar hatte da auch ein Problem damit... im blauen Forum gibt es dazu auch einen Thread.


    Ich arbeite derzeit auch an einem großen Projekt, bei dem ich mehrere Listviews (farbig) und Header (mehrzeilig) mit Subclassing bearbeite und hatte auch arge Probleme damit (Script stürzt ab oder friert ein).


    Der Grund war bei mir folgende Zeilen:

    Return _WinAPI_DefSubclassProc($hWnd, $iMsg, $iWParam, $iLParam)

    Return _WinAPI_CallWindowProc($pOldWndProc, $hWnd, $iMsg, $iWParam, $iLParam)


    Die habe ich durch diese ersetzt und mein Problem war damit gelöst:

    Return DllCall("comctl32.dll", "lresult", "DefSubclassProc", "hwnd", $hWnd, "uint", $iMsg, "wparam", $iWParam, "lparam", $iLParam)[0]

    Return DllCall("user32.dll", "lresult", "CallWindowProc", "ptr", $pOldWndProc, "hwnd", $hWnd, "uint", $iMsg, "wparam", $iWParam, "lparam", $iLParam)[0]


    Nun stehe ich jedoch vor dem Problem, dass beim Ersetzen der WndProc scheinbar AutoIts internes Nachrichtenhandling nicht mehr greift.

    Ja, bin sehr erstaunt, dass es mit WndProc nicht (mehr) geht...


    Regular Expressions ist eine Sprache, ...

    Ne, ne, ne und ne... Deutsch, Englisch, AutoIt, Python und HTML sind Sprachen, aber Regular Expressions ist definitiv keine!

    Ein regulärer Ausdruck (englisch regular expression, Abkürzung RegExp oder Regex) ist in der theoretischen Informatik eine Zeichenkette, die der Beschreibung von Mengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient.


    Wer die Sprache nicht lernt, sondern nur fertige Ausdrücke kopiert, wird nie weiter kommen, genau wie "dumme" Maschinen, die auch immer nur das können, was ihnen jemand "beigebracht" hat.

    Das sehe ich anders. Wenn ich öfters weite Strecken überwinden muss, aber nicht die Lust, Zeit oder Möglichkeit habe, zu erlernen mir selbst ein Auto zu bauen, dann leihe/lease/kaufe ich mir eins. Das bringt mich auch ans Ziel!


    Das Sinnvollste wäre es wohl, die Erklärungen in der Hilfe hier zu diskutieren und entspr. Fragen von Laien ausführlicher zu erklären, incl. Beispielen.

    Nein, das finde ich gar nicht sinnvoll. Dieser Thread ist dafür da, um Reguläre Ausdrücke zu sammeln, nicht aber um ihn mit endlosen Diskussionen/Fragen zu füllen. Dafür gibt es hier sicher andere Threads oder Seiten im Internet, die einen zu diesem Thema erleuchten können.

    "schade", ich dachte (hatte gehofft) dass der Zugriff einfacher möglich ist...

    Hey, also noch einfacher als mit openfiles.exe geht es bald gar nicht!


    Hier mal kurz erklärt, wie das mit openfiles.exe funktioniert:

    Wichtig: openfiles.exe muss immer in einer Eingabeaufforderung mit erhöhten Rechten (als "Administrator") gestartet werden!

    Wenn lokale Dateien angezeigt/berücksichtigt werden sollen, musst openfiles.exe einmalig mit den Parametern /Local ON aufrufen und der PC dann neu gestartet werden.

    openfiles.exe /Local ON


    openfiles.exe kann nun einfach ohne Parameter aufrufen werden, wenn ein einfache Auflistung der geöffneten Pfade/Dateien reicht...

    das sieht dann so aus:

    ...oder aber (z.B.) mit den Parametern /Query /FO LIST /V, um einer erweiterte Ausgabe zu bekommen...

    das sieht dann so aus:


    Ich möchte für eine genau bestimmte Datei ermitteln, durch welchen Prozess diese "in use" ist.

    Du meinst... durch welche Prozesse - denn das können durchaus auch mehrere sein!


    Ich schreibe die Tage mal ein kleines Script dafür...

    Aber was genau bewirkt dies?

    Wird länger gewartet, wenn keine Rückmeldung kommt?

    Ja, es wird länger gewartet, wenn keine Rückmeldung kommt.

    Global $CONNECT_TIMEOUT = 0xFFFFFF, $RECEIVE_TIMEOUT = 0xFFFFFF

    Hier habe ich für CONNECT TIMEOUT und RECEIVE TIMEOUT die größtmöglichen Werte gesetzt. Für dich ist sicher $RECEIVE_TIMEOUT der wichtigere Wert.

    Du kannst die Werte ja mal schrittweise verringern - z.B.: 0x0FFFFF, 0x00FFFF, 0x000FFF.


    Hat diese Funktion Nachteile?

    In deinem Fall nein, aber ansonsten wäre es wohl extrem nervig, wenn man bei allen Verbindungen ewig lange auf eine Rückmeldung warten müsste und es am Ende dann doch nicht funktioniert.


    Die Änderungen gelten nur für das ausgeführte Script (oder das angegebene Internet-Handle) und auch nur solange dieses läuft.

    Als ich heute von der Arbeit kam, konnte ich autoit.de gar nicht erreichen, dann ging es eine Zeit lang... und nun ist die Shoutbox weg.


    Ist das jetzt nur bei mir der Fall?

    $IsCon = DllCall($hDLL, 'long', 'IsInternetConnected')

    Zitat

    https://docs.microsoft.com/en-…ected/isinternetconnected


    Bemerkungen

    Diese API verwendet NCSI und den Network Location Manager (NLM), um eine "beste Einschätzung" hinsichtlich der Internetkonnektivität des aktuellen Benutzers zu ermitteln. Selbst wenn S_OK zurückgegeben wird, kann nicht garantiert werden, dass der Benutzer eine bestimmte Internetadresse erreichen kann.


    Hast du eine Fritz!Box?

    Wenn ja, dann hätte ich ein Script für dich, dass direkt die Fritz!Box (ohne Passwort) abfragen kann, ob sie mit dem Internet verbunden ist. Dazu benötigst du aber Python 3, weil die eigentliche Abfrage mit einem Python-Script erledigt wird.

    Evtl. hilft es, die Timeouts (CONNECT TIMEOUT und/oder RECEIVE TIMEOUT) zu ändern...


    Kannst ja mal dieses Script testen, ob es damit geht.

    Teste mal das hier...

    Hurra! Ich bin einen Schritt weiter.

    Diese Anweisung läuft:


    _Excel_RangeDelete($oExcelU.ActiveSheet,"A2:A3")

    Na super! :thumbup:

    Hier hast du nun auch einen korrekten Range angegeben... denn "1" ist kein korrekter Range... weil ein Range aus Start:Ende besteht, wobei Start und Ende auch identisch sein können.


    Zwei erhebliche Wissenslücken habe ich bei den Console-Anweisungen. Wo finde ich Stdout?

    https://de.wikipedia.org/wiki/Standard-Datenströme


    Stdout kannst du mit der Funktion StdoutRead auslesen, doch das ist momentan nicht relevant für dich. Das brauchst du nur, wenn du die Ausgaben aus dem STDOUT-Stream eines zuvor ausgeführten untergeordneten Prozesses lesen willst - wenn du z.B. mit AutoIt einen Consolen-Befehl mit Run() ausführst und dessen Ausgabe haben willst. Mehr zu diesem Thema findest du in der AutoIt-Hilfe unter folgenden Funktionen: Run, RunAs, StdoutRead, StderrRead, StdinWrite, StdioClose.


    Da greift evtl. die zweite Lücke. ich habe den Umstieg auf SciTE bisher nicht geschafft.

    Hier will ich direkt mal klar stellen, dass die Ausgabenkonsole von SciTE/NP++ eine spezielle Console (Scintilla-Control) ist, für die du im Normalfall kein Stdout bzw. StdoutRead brauchst.

    Schau dir in der AutoIt-Hilfe folgende Funktionen an: ConsoleWrite, ConsoleRead, ConsoleWriteError


    Du hast den Umstieg noch nicht geschafft? Wieso hast du mit NP++ angefangen, obwohl SciTE der empfohlenen Editor für AutoIt ist? Nein, sage es nicht... weil jeder sich so gut quält, wie er kann. 8o


    Wenn du AutoIt installierst, wird bereits ein abgespeckte Version von SciTE mit installiert. Um alle verfügbaren SciTE-Features nutzen zu können (wärmstens empfohlen!), musst du aber SciTE4AutoIt3 installieren.

    Hier der Link zum Download: https://www.autoitscript.com/s…-script-editor/downloads/


    Im Anhang findest du noch das test2.zip, das ist deine test1.zip... nur etwas aufgepeppt und mit einigen Kommentaren versehen. Schau es dir an!


    So, jetzt hast du erst mal genug zu lesen... ;)

    Dateien

    • test2.zip

      (8,92 kB, 3 Mal heruntergeladen, zuletzt: )

    Wo findet man Beschreibungen von Anweisungen mit Punkterweiterungen wie z.B. "$oWorkbook.ActiveSheet"

    Generell: https://msdn.microsoft.com/

    Speziell zu Excel Workbook: https://msdn.microsoft.com/de-…les/workbook-object-excel


    Wie gebe ich Variable bei denExcel-Anweisungen an, vielleicht z.B. für eine zu löschende Zeile


    _Excel_RangeDelete($oWorkbook.ActiveSheet, $Zeile)

    Du kannst bei der Funktion _Excel_RangeDelete den Range so setzen, dass eben nur die gewünschte Zeile gelöscht wird.


    Bsp.: Nur Zeile 7 löschen

    Code
    1. Local $vRange = '7:7' ; Der Bereich kann ein Bereichsobjekt sein, ein A1-Bereich (z.B. "A1:B2", "1:2" (Zeile 1 bis 2), "D:G" (Spalten D bis G) usw.).
    2. _Excel_RangeDelete($oWorkbook.ActiveSheet, $vRange) ; Löscht eine oder mehrere Zellen, Zeilen oder Spalten aus dem angegebenen Arbeitsblatt

    Das Testscript ExcelDelete2.au3 habe ich derBeschreibung der Function _Excel_RangeDelete, -Beispie2- per cut and paste entnommen


    (https://www.autoitscript.com/a…ns/_Excel_RangeDelete.htm)

    und in I:\ABC\_0-b\AutoIt\Scripts\ExcelDelete gespeichert.

    Nicht per Cut & Paste, sondern per Copy & Paste!


    Das habe ich auch mal genau so gemacht... den Text aus der Zwischenablage in SciTE eingefügt und unter m:\Excel\_Excel_RangeDelete[2].au3 gespeichert. Die Excel-Testdatei habe ich hier m:\Excel\Extras\_Excel1.xls gespeichert. Wenn ich nun das Script in SciTE mit F5 ausführe, läuft alles wie es soll.


    In welches Programm/Editor hast du denn den Text mit Paste eingefügt, um ihn zu speichern?


    Hier die Zeile 8 vor und nach der Änderung:

    Die Zeilen unter vorher und nachher sind identisch!


    Als Test-Exceltabelle müßte man eine beliebige Exceldatei nehmen können.

    Das ist Quatsch... denn beliebig wäre demnach auch eine leere Exceldatei... und darin könntest du keine Zeilen löschen. Zudem wurde in diesem Beispiel eben genau diese Datei ausgewählt, um zu zeigen, wie man mehrere Zeilen in einem bestimmten Arbeitsblatt in einem Rutsch löscht.