Beiträge von Bitnugger
-
-
In der Parameter-Tabelle gibt es in der linken Spalte das Feld "$iEdgeType", aber es fehlt das Feld "$iFlags".
$iFlags hat es wohl irgendwie auf die rechte Seite der Tabelle geschafft... da wo die Werte und Beschreibungen stehen...
Und die Beschreibung ist auch nicht richtig...
Legt fest, welche Kanten gezeichnet werden. Kann eine Kombination der folgenden Werte sein:
Gibt den Rahmentyp an. Dieser Parameter kann eine Kombination der folgenden Werte sein:
-
Bei Nim benutze ich allerdings auch die aktuelle Version (v1.2.6).
Daran lag es!
scoop update nim ; Umgebungsvariable Path korrigieren: C:\Users\ghost\scoop\apps\nim\1.2.6\bin
Danach ging nichts mehr, weil der Compiler (gcc.exe) nicht mehr gefunden wurde. Habe die beiden Verzeichnisse dann manuell nach c:\Users\Ghost\scoop\apps\nim\current\dist\ kopiert.
mingw32\
mingw64\
-
Welche Nim-Version benutzt Du?
Nim Compiler Version 1.2.0 [Windows: amd64]
wnim-0.11.2
Nein, ich habe nichts an dem Code geändert...
-
-
Das Problem bei AutoIt ist bloß, dass dort die Control-ID abgespeichert ist und ich weiß nicht, wie AutoIt reagiert, wenn man dort andere Sachen speichert.
Das Problem hatten wir hier schon mal: Subclassing und AutoIts interne Nachrichtenverarbeitung
-
-
-
Für den Unicode-Aufruf läßt sich das umgehen durch das Präfix "\\?\"
Mit \\?\ bzw. \\\\?\\ funktioniert es auch nur (shell und os), wenn die max. erlaubte Anzahl der Zeichen nicht überschritten wird.
Als Workaround gefällt mir das Bsp. zu Test 2 am besten...
shell = require "shell"
os = require "os"
-- Syntax: shell.exec (strCommand, [strOperation], [boolNoShow], [bWaitOnReturn])
-- Syntax: os.execute([command])
local sRepChar = 'x'
--~ print(sRepChar:rep(10))
-- Test 1 - shell.exec
sCmd = '"C:\\Program Files (x86)\\AutoIt3\\SciTE\\..\\autoit3.exe" /AutoIt3ExecuteScript "f:\\AutoIt\\AutoIt3_Tools\\_ConvertFileToUTF8.au3" "M:\\Temp\\Test_0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123.au3"'
shell.exec(sCmd) -- sCmd darf max. 268 Zeichen lang sein.
--~ print("+ shell.exec("..sCmd:len()..") = ", shell.exec(sCmd), sCmd,'\n')
-- Test 2 - shell.exec
sCmd = '"f:\\AutoIt\\AutoIt3_Tools\\_ConvertFileToUTF8.au3" "M:\\Temp\\Test_'..sRepChar:rep(191)..'.au3"'
shell.exec(sCmd, 'run') -- sCmd darf max. 259 Zeichen lang sein.
--~ print("+ shell.exec("..sCmd:len()..") = ", shell.exec(sCmd, 'run'), sCmd,'\n')
-- Test 3 - os.execute
sCmd = 'cmd.exe /C ""C:\\Program Files (x86)\\AutoIt3\\SciTE\\..\\autoit3.exe" /AutoIt3ExecuteScript "f:\\AutoIt\\AutoIt3_Tools\\_ConvertFileToUTF8.au3" "M:\\Temp\\Test_'..sRepChar:rep(8003)..'.au3""'
os.execute(sCmd) -- sCmd darf max. 8160 Zeichen lang sein.
--~ print("+ os.execute("..sCmd:len()..") = ", os.execute(sCmd), sCmd,'\n')
-
-
Älterer Thread, aber ist das Problem gelöst?
Nein, ist es nicht.
Der Vorteil an shell.exec() ist, dass so kein DOS-Fenster aufpoppt, was bei os.execute() leider der Fall ist. Zur Not könnte ich also os.execute() verwendenden und das Problem wäre gelöst...
Dein Konvertier-Script könnte das zu konvertierende Original-Script in einen kurzen Pfad kopieren und dort konvertieren.
Sorry, aber das ist quatsch... so weit komme ich mit shell.exec() ja gar nicht...
PS: Habe meinen rechten Arm in Gips und kann nur mit links tippen... war drei Monate krank, wegen Knochenabsplitterung im Lendenwirbelbereich (Unfall), dann acht Tage arbeiten, und jetzt wieder für mindestens drei bis vier Monate krank (Unfall), weil mein Handgelenk Bekanntschaft mit dem Sägeblatt unserer Steinschneidemaschine gemacht hat... zum heulen...
-
So kommst du an die Chrome-PIDs, die mit einem speziellen Profil gestartet wurden:
AutoIt
Alles anzeigen;-- TIME_STAMP 2020-08-11 22:01:16 v 0.1 #include <WinAPIProc.au3> Local $sProcName = 'Chrome.exe', $aProcList = ProcessList($sProcName), $sProcCommandLine, $sProfilName = 'SpezialProfil.xyz' If UBound($aProcList) > 1 Then ConsoleWrite(StringFormat('> %-12s | %-32s | %6s | %s\n', 'Status', 'ProcName', 'PID', 'Args')) For $i = 1 To $aProcList[0][0] Step 1 $sProcCommandLine = _WinAPI_GetProcessCommandLine($aProcList[$i][1]) If StringInStr($sProcCommandLine, $sProfilName) Then ConsoleWrite(StringFormat('! %-12s | %-32s | %6i | %s\n', 'Terminated', $sProcName, $aProcList[$i][1], $sProcCommandLine)) ProcessClose($aProcList[$i][1]) Else ConsoleWrite(StringFormat('+ %-12s | %-32s | %6i | %s\n', 'Running', $sProcName, $aProcList[$i][1], $sProcCommandLine)) EndIf Next EndIf
-
-
Gibt es eine Möglichkeit, in einer Function die Zeile des Aufrufs zu verarbeiten ohne diese als Parameter zu übergeben? Also etwas wie @CallingScriptLineNumber?
Nein, gibt es nicht. Du kannst der Funktion aber einfach einen optionalen Parameter übergeben und ihn mit @ScriptLineNumber vorbelegen.
AutoIt_Test() _Test(1, 3) Func _Test($iScriptLineNumber = @ScriptLineNumber, $iError = @error) ConsoleWrite('$iScriptLineNumber = ' & $iScriptLineNumber & @CRLF) ConsoleWrite('$iError = ' & $iError & @CRLF) EndFunc
Und: gibt es einen Weg, die @ScriptLineNumber auch im kompilierten Programm beim Debuggen oder bei Fehlermeldungen anzuzeigen?
So evtl.:
AutoIt#AutoIt3Wrapper_Run_Au3Stripper=y ; Run Au3Stripper before compilation (Default=n) #Au3Stripper_Parameters=/rsln ; Replace @ScriptLineNumber with the actual line number in the merged source. This is for debug purposes with compiled scripts. ; All master lines will show 2 numbers in the format xxx/yyy where xxx is the original master script line number and yyy the ; merged script line number.
-
RegExp - Nicht-finden, wenn nach Suchbegriff noch was kommt
solltest du evtl. umbenennen:
RegExp - Nur matchen, wenn Suchstring mit Pattern endet
-
Bei mir funktioniert es so:
AutoIt
Alles anzeigen;-- TIME_STAMP 2020-07-19 14:50:46 v 0.1 Opt('MustDeclareVars', 1) Global $sLaufwerk = "S:", $sShare = "\\fritz.box\FRITZ.NAS" Global $aDriveMapErrors = ['Undefined / Other error. @extended set with Windows API return', 'Access to the remote share was denied', 'The device is already assigned', 'Invalid device name', 'Invalid remote share', 'Invalid password'] Global $sDriveMapGet = DriveMapGet($sLaufwerk) If $sDriveMapGet And $sDriveMapGet <> $sShare Then If StringLeft(@WorkingDir, 2) = $sLaufwerk Then FileChangeDir(@TempDir) ; Max 10x versuchen Laufwerk zu trennen. 1x reicht manchmal nicht For $i = 1 To 10 If DriveMapDel($sLaufwerk) Then ExitLoop Sleep(1000) Next ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $i --> " & $i & @LF) ; $i ist bei mir immer 1 If DriveMapGet($sLaufwerk) Then Exit MsgBox(16, @ScriptName, 'the disconnection for ' & $sLaufwerk & ' was unsuccessful!') EndIf If DriveMapGet($sLaufwerk) = '' Then DriveMapAdd($sLaufwerk, $sShare, 8 + 1);, "fritz.box.user", "password") If @error Then Exit MsgBox(16, @ScriptName, '@error = ' & @error & @CRLF & $aDriveMapErrors[@error -1] & @TAB & '@extended = ' & @extended) EndIf ShellExecute($sLaufwerk)
-
In Dein While/WEnd musst Du aber noch eine ExitLoop-Bedingung einbauen, sonst läuft Dein Skript ewig - oder länger
Genau das soll es ja auch... warten, bis ein Fenster mit dem Titel "Hinweis" den Fokus bekommt, dieses dann schließen und wieder auf das nächste Fenster mit dem Titel "Hinweis", das den Fokus bekommt, warten.
Hi Bitnugger ich weiß nicht ob das ressourcenschonender ist, aber statt so einem Code, den wohl niemand nutzen würde, wäre es vllt. besser allgemein die Nutzung von ControlClick oder ControlSend vorzuschlagen.
So ist es definitiv ressourcenschonender, weil nur das gemacht wird, was gemacht werden soll.
Kann mir nicht vorstellen, dass es Leute gibt, die nachvollziehen können, was der Code genau macht und ihn trotzdem nicht nutzen.
Besser allgemein die Nutzung von ControlClick oder ControlSend vorzuschlagen... indirekt habe ich das ja, indem ich anstelle von Send ControlClick verwendet habe.
Send ist niemals erste Wahl... wenn möglich besser ControlClick oder ControlSend verwenden!!!
Hier noch mal mein Code mit einer Verbesserung: REGEXPTITLE
Close_Hinweis.au3 starten und laufen lassen:
AutoIt: Close_Hinweis.au3While 1 ControlClick(WinWaitActive("[REGEXPTITLE:^Hinweis$]"), '', '[CLASS:Button; Instance:1]') WEnd
Open_Hinweis.au3 starten:
-
-
Immer wieder im Einsatz: INI-Dateien. Nim stellt dazu das Modul parsecfg bereit. Hier mal ein kleines Bsp.:
Sehr schön!
-