Kurze Erklärung des Phänomens: Klick mich!
Die Antwort von Andy ist auch sehr gut, d.h. wenn du x Stellen Genauigkeit haben willst solltest du nach deiner Berechnung manuell mit Round(n, x) auf genau diese Anzahl Nachkommastellen runden.
Beiträge von James
-
-
Die EXE mehrfach starten, es wird je gestarteter GUI ein Zähler hochgezählt.
Jede dieser GUI´s lädt die DLL. Diese wird im Speicher natürlich nur einmal erstellt ! Das ist der Sinn einer Dynamic Link Library
Sicher? Ich hatte mich schon die ganze Zeit gefragt, wie eure Idee überhaupt funktionieren kann, aber wahrscheinlich liegt es einfach nur an dem "shareable," das MG in #24 erwähnt hat.
Microsoft sagt dazu nämlich folgendes:Every process that loads the DLL maps it into its virtual address space.
After the process loads the DLL into its virtual address, it can call the exported DLL functions.
Und damit mein Post nicht völlig umsonst war hier noch eine Möglichkeit, die noch nicht (direkt) erwähnt wurde: Pipeline DLL - die einfachste Art der Prozess-Kommunikation -
Auch von mir alles Gute zum Geburtstag.
-
Alles Gute zum Geburtstag.
-
Ton erzeugen und direkt abspielen funktioniert mit Beep(), eine WAV-Datei zu erstellen wird schwieriger, aber vielleicht findest du dafür ja eine UDF. Einer der PUs hat dazu denke ich eine Funktion hier im Forum gepostet, ich weiß aber nicht mehr wer.
-
Du kannst das Skript auch direkt als Skript ausführen, d.h. ohne es vorher kompilieren zu müssen.
Hier findest du eine Funktion zum Ausführen von Skripten; einfach den Dateipfad als Parameter übergeben und es sollte funktionieren. Dazu muss nicht mal AutoIt auf dem PC installiert sein. Falls du Version 3.3.10.0 oder eine noch aktuellere Version von AutoIt benutzt musst du dieses Feature erst aktivieren, das sollte mit einem #pragma compile(AutoItExecuteAllowed, true) am Anfang des Skriptes funktionieren.
-
Ja hast du. Prinzipiell wäre das gar kein Problem, du könntest z.B. 3 Funktionen schreiben und diese dann an die UDF übergeben, sodass diese die Funktionen dann beim Klicken auf "Start," "Pause" und "Stopp" selbstständig aufruft. Also ungefähr so:
[autoit]_GUI_Small_SPS("Titel", "Text", start, pause, stopp)
[/autoit][autoit][/autoit][autoit]Func start()
[/autoit]
MsgBox(0, "Test", "Start")
EndFunc
Func pause()
MsgBox(0, "Test", "Pause")
EndFunc
Func stopp()
MsgBox(0, "Test", "Stopp")
EndFuncEdit: Ups, habe übersehen, dass alpines das schon so beschrieben hat. Aber vor allem wenn nur eine dieser GUIs gleichzeitig verwaltet werden soll sollte das kein Problem sein.
-
Falls du deinen Server später noch erweitern willst (z.B. um die Unterstützung von mehreren gleichzeitigen Clients) würde ich statt der zwei getrennten Schleifen einen anderen Aufbau empfehlen. Alles weitere hat Kanashius ja schon erwähnt.
-
Willkommen im Forum.
-
[autoit]
#region
[/autoit]
#endregion
MfG -
Wenn du das so machen willst dann könntest du dir eine InputBox aus einer GUI basteln, dann kannst du auch während sie geöffnet ist noch Befehle ausführen.
PS:
james du sagst: "Es gibt da schon einige Möglichkeiten" aber glaubst du auch Ctrl + Alt + Del -> Taskmanager -> Prozess beenden und diesen ganzen Spielchen kannst du "entkommen"? Mich würde das interessieren und wenn du magst darfst du mir mal ein Stichwort nennen Ich kann mir net vorstellen dass das möglich ist
Ich bin mir ziemlich sicher dass das möglich ist, du kannst eigentlich in fast allen Prozessen beliebig rumpfuschen (in diesem Fall dann z.B. das Beenden von Prozessen mit dem Namen "xyz.exe" unterbinden). Ich denke aber das fällt in den Regeln in den Bereich Malware, von daher sollten wir das nicht weiter vertiefen.
-
Zu 1. (falls du den Bereich neben der Uhr meinst):
[autoit]#NoTrayIcon
[/autoit]Ich frage mich wirklich wieso das nicht der Standard ist; nutzt dieses unprofessionell wirkende Feature überhaupt irgendjemand?
Zu 2.: Es gibt da schon einige Möglichkeiten, aber davon wäre abzuraten und je nach dem was dein Programm genau macht sollte das auch gar nicht nötig sein. Du würdest dadurch ja sozusagen dem Benutzer die Kontrolle über sein eigenes System entziehen, und das ist nicht gerade sehr beliebt.
-
Wie wäre es mit sowas? Rückgabewert ist ein Array mit der Anzahl der Benutzer im ersten Element.
[autoit]Func ComputerGetUserName($sComputer="localhost")
[/autoit]
Local $oWMI, $oItems, $oItem, $sOutput = ""
$oWMI = ObjGet("winmgmts:" & $sComputer & "")
If (Not IsObj($oWMI)) Then Return SetError(1, 0, "")
$oItems = $oWMI.ExecQuery("SELECT UserName FROM Win32_ComputerSystem", "WQL", 0x30)
If (Not IsObj($oItems)) Then Return SetError(2, 0, "")
For $oItem In $oItems
$sOutput &= $oItem.UserName & Chr(7)
Next
Return StringSplit(StringTrimRight($sOutput, 1), Chr(7))
EndFunc -
Da würde ich eher Named Pipes, Sockets oder versteckte Controls in den GUIs verwenden. Aber da diese Frage schon des öfteren gestellt wurde findest du garantiert auch hier im Forum genügend Beispiele.
-
Hi,
also grundsätzlich halte ich solche Projekte immer für eine gute Idee, allerdings fallen mir zu Video Tutorials auf die Schnelle mehr Nachteile als Vorteile ein:
- Qualität: Viele Videos auf YouTube sind ein sehr gutes Beispiel für nicht vorhandene Qualität, und obwohl es ohne Frage garantiert auch gute Videos gibt gehen die wahrscheinlich in der Masse unter. Da du in deinem Post YouTube aber nicht direkt ansprichst gehe ich einfach mal davon aus, dass dieses Problem nicht entstehen wird, da zum Beispiel eine Playlist im Forum gepostet wird. Es ist aber, wie du selbst schon sagst, enorm schwierig den gewünschten Qualitätsstandard zu erreichen; meiner Meinung noch schwerer als bei Tutorials in Textform. Außerdem ist es bei professionellen Videos doch sowieso oft so, dass einem Skript gefolgt wird, die Textform also sowieso geschrieben werden muss, oder irre ich mich da?
- Veränderbarkeit: Wenn das Video einmal fertig ist und hochgeladen wurde kann man es eigentlich nicht mehr wirklich ändern sondern muss bei Neuerungen/Verbesserungen ein neues Video erstellen und hochladen. Text (in digitaler Form) hat dieses Problem natürlich nicht.
Vorteil: Man kann alles was erklärt wird sofort optimal visualisieren und somit das Thema leichter verständlich machen. Ich gehe jetzt einfach mal davon aus, dass du nicht vor hattest einfach nur SciTE zu filmen... -
Das stimmt soweit.
Ohne ^ und $ würde es bedeuten, dass irgendwo im String diese Zeichen vorkommen; es aber auch noch jeden möglichen anderen Mist im String geben kann. D.h. 1 als Ergebnis würde bedeuten, dass der String zwar A-Z, a-z, 0-9, _ und/oder - enthält, aber eben nicht ausschließlich.
-
Regex eignet sich perfekt dafür, und 2 Seiten sind dann doch schon sehr stark übertrieben. Beispiel:
[autoit]StringRegExp($sString, "^[\w-]+$", 0)
[/autoit] -
Datei mit dem Ergebnis?
out.html. Da AutoIt abstürzt kann die Datei natürlich nicht gelöscht werden.
-
Also unter Version 3.3.9.5 stürzt das Beispiel beim ersten Aufruf von StringAPL ab (Exit code: -1073741819). In der Funktion selbst scheint der Fehler bei _IECreate zu liegen. Die Datei mit dem Ergebnis wird aber trotzdem korrekt erstellt.
-
Du kannst kein Array von einer scriptsprache in eine andere einfach so übergeben.
Wenn das Array auf der Seite genau so ausgegeben wird wie beschrieben dann lässt es sich mit den String Funktionen durchaus in ein Array in AutoIt umwandeln.