Hallo,
was passiert denn wenn Du es mit RunWait machst?
[autoit]RunWait('"' & @ComSpec & '" /c ' & @ScriptDir & '\fsum.exe -js *.r* > test.sfv', @ScriptDir, @SW_HIDE)
[/autoit]Hallo,
was passiert denn wenn Du es mit RunWait machst?
[autoit]RunWait('"' & @ComSpec & '" /c ' & @ScriptDir & '\fsum.exe -js *.r* > test.sfv', @ScriptDir, @SW_HIDE)
[/autoit]Dann kann man den Thread also auf gelöst setzen?! :]
Vllt. hilft ja die Lösung noch jemandem!
Hallo,
probiers mal so:
[autoit]For $GUIDNr = 1 To 10
$input = IniRead($IniNameNeu, "LayerName", "GUID" & $GUIDNr, "Schlüssel nicht gefunden")
$input = StringStripWS($input,3) ; Leerzeichen am Anfang und Ende entfernen
Switch $input
Case ""
MsgBox(4096, " GUID" & $GUIDNr, "Der Wert darf nicht leer sein")
Case "Schlüssel nicht gefunden"
MsgBox(4096, " GUID" & $GUIDNr, "Wert nicht gefunden")
Case Else
Run(@ComSpec & ' /c svscmd.exe "'& $input &'" Activate',$SVSPath , @SW_HIDE)
EndSwitch
Next
Wenn der 4. Paramter Leer ist darf er natürlich auch nicht angegeben werden!
[autoit]
If $CmdLine[0] = 4 Then
_PackRar($CmdLine[2], $CmdLine[3], $CmdLine[4])
ElseIf $CmdLine[0] = 3 Then
_PackRar($CmdLine[2], $CmdLine[3])
Else
Exit
EndIf
Hallo,
es geht auch einfacher, schau dir mal den Exit-Befehl an. Dem kann man einen Returncode mitgeben der dann in Batch-Dateien mit %ERRORLEVEL% abgefragt werden kann.
Hallo,
der Funktion aufruf ist ok, nur die Definition ist falsch!
[autoit]
Func _Function($CmdLine2, $CmdLine3, $CmdLine4 = 1)
:
:
:
EndFunc
Hallo,
@error = 4, kommt immer wenn es probleme gibt auf den Mail-Server zuzugreifen, ist vllt. der Port 25 durch eine Firewall geblockt (s.o.) ?
Es sind aber noch 2 Fehler in deiner Funktion:
[list=1]
[*]$s_FromAddress muss eine gültige Email-Adresse sein, in deinem Fall die die Du für dein Script erstellt hast.
[*]$as_Body muss ein Array sein, sonst wird kein Text in die Email geschrieben!
Dim $as_Body[1]
$as_Body[0] = GUICtrlRead($emailmsg)
[/list=1]
Sorry für die verspätete Anwort!
Hallo,
RunAsSet funktioniert nur mit den Funktionen Run und RunWait. Ich glaube nicht das RunAsSet auch mit _RunDos funktioniert.
Schau dir mal Probleme beim Zugriff auf Netzfreigabe an!
Hallo,
meinst Du sowas?
If @AutoItVersion < "3.2.9.5" Then
MsgBox(0,"Hinweis", "Es wird mindestens AutoIt Verson 3.2.9.5 benötigt!")
Exit
EndIf
; Konstantendefinition
Global Const $OPEN_EXISTING = 0x00000003
Global Const $IOCTL_STORAGE_EJECT_MEDIA = 0x002D4808
Global Const $IOCTL_STORAGE_MEDIA_REMOVAL = 0x002D4804
Global Const $FILE_FLAG_DELETE_ON_CLOSE = 0x04000000
Global Const $GENERIC_WRITE = 0x40000000
Global Const $GENERIC_READ = 0x80000000
Global Const $INVALID_HANDLE_VALUE = 0xFFFFFFFF
Global Const $tagOSVERSIONINFO = _
"long dwOSVersionInfoSize;" & _
"long dwMajorVersion;" & _
"long dwMinorVersion;" & _
"long dwBuildNumber;" & _
"long dwPlatformId;" & _
"char szCSDVersion[128]"
Global Const $tagOVERLAPPED = _
"long ternal;" & _
"long ternalHigh;" & _
"long offset;" & _
"long offsetHigh;" & _
"long hEvent"
$var = DriveGetDrive("CDROM")
[/autoit] [autoit][/autoit] [autoit]If Not @error Then
For $i = 1 To $var[0]
LockDrive($var[$i])
Next
ConsoleWrite("CDROM-Laufwerk(e) sind gesperrt!" & @CRLF)
Sleep(5000)
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To $var[0]
LockDrive($var[$i], False)
Next
ConsoleWrite("CDROM-Laufwerk(e) sind freigegeben!" & @CRLF)
Endif
;===============================================================================
; Name: LockDrive
; Description: Auswurfknopf am CDROM-Laufwerk sperren
; Parameter(s): $szDrive = Laufwerksbuchstabe des CDROM-Laufwerks (z.B. "D:")
; (optional) $bLock = True (default) -> sperren
; False -> freigeben
; Requirement(s): keine
; Return Value(s): keine
; Author(s): bernd670
; Hinweis: Das Laufwerk wird erst wieder freigegeben wenn das Freigeben
; genau so oft aufgerufen wird wie das Sperren.
;===============================================================================
Func LockDrive($szDrive, $bLock = True)
Local $lpOutBuffer
Local $lpInBuffer = DllStructCreate("long Data")
Local $lpBytesReturned = DllStructCreate("long Data")
Local $lpOverlapped = DllStructCreate($tagOVERLAPPED)
DllStructSetData($lpInBuffer, "Data", $bLock)
$hLwStatus = _KNL32_CreateFile("\\.\" & $szDrive, BitOR($GENERIC_READ, $GENERIC_WRITE), 0, 0, $OPEN_EXISTING, 0, 0)
[/autoit] [autoit][/autoit] [autoit]If $hLwStatus <> $INVALID_HANDLE_VALUE Then
$iResult = _KNL32_DeviceIoControl( _
$hLwStatus, _
$IOCTL_STORAGE_MEDIA_REMOVAL, _
DllStructGetPtr($lpInBuffer), _
DllStructGetSize($lpInBuffer), _
$lpOutBuffer, _
0, _
DllStructGetPtr($lpBytesReturned), _
DllStructGetPtr($lpOverlapped) _
)
$iResult = _KNL32_CloseHandle($hLwStatus)
EndIf
EndFunc ;==>LockDrive
; http://msdn2.microsoft.com/en-us/library/aa363858.aspx
Func _KNL32_CreateFile ($lpFileName, $dwDesiredAccess, $dwShareMode, $lpSecurityAttributes, $dwCreationDisposition, $dwFlagsAndAttributes, $hTemplateFile)
Local $aResult = DllCall("kernel32.dll", "long", "CreateFile", _
"str", $lpFileName, _
"uint", $dwDesiredAccess, _
"uint", $dwShareMode, _
"ptr", $lpSecurityAttributes, _
"uint", $dwCreationDisposition, _
"uint", $dwFlagsAndAttributes, _
"hwnd", $dwFlagsAndAttributes _
)
Return $aResult[0]
EndFunc
; http://msdn2.microsoft.com/en-us/library/aa363216.aspx
Func _KNL32_DeviceIoControl ($hDevice, $dwIoControlCode, $lpInBuffer, $nInBufferSize, $lpOutBuffer, $nOutBufferSize, $lpBytesReturned, $lpOverlapped)
Local $aResult = DllCall("kernel32.dll", "long", "DeviceIoControl", _
"hwnd", $hDevice, _
"uint", $dwIoControlCode, _
"ptr", $lpInBuffer, _
"uint", $nInBufferSize, _
"ptr", $lpOutBuffer, _
"uint", $nOutBufferSize, _
"uint*", $lpBytesReturned, _
"ptr", $lpOverlapped _
)
Return $aResult[0]
EndFunc
; http://msdn2.microsoft.com/en-us/library/ms724211.aspx
Func _KNL32_CloseHandle ($hObject)
Local $aResult = DllCall("kernel32.dll", "long", "CloseHandle", "hwnd", $hObject)
Return $aResult[0]
EndFunc
Hallo,
wahrscheinlich läuft der Dienst mit dem Systemkonto, probier doch mal ob Du die Priorität ändern kannst wenn der Dienst mit einem Adminkonto läuft.
Hallo,
die normale Webseiten der FritzBox ist in Frames unterteilt, deshalb muss man auf den richtigen Frame zugreifen:
#include <IE.au3>
Opt("WinTitleMatchMode", 2)
$internet_adresse = "http://fritz.box"
$oIE = _IECreate ($internet_adresse, 0, 1, 1, 0)
If @error >0 Then Exit
[/autoit] [autoit][/autoit] [autoit]WinSetState("Microsoft Internet Explorer", "", @SW_MAXIMIZE) ;maximieren
[/autoit] [autoit][/autoit] [autoit]_IELoadWait($oIE, 2000)
[/autoit] [autoit][/autoit] [autoit]$oFrame = _IEFrameGetObjByName($oIE, "frame_content")
$oForm = _IEFormGetObjByName($oFrame, "uiViewForm")
; Passwort einsetzen
$Password = _IEFormElementGetObjByName($oForm, "pass")
_IEFormElementSetValue($Password, "xxxxxxxx")
; Anmelden-Button drücken
$LoginBtn = _IEFormElementGetObjByName($oForm, "btnLogin")
_IEAction($LoginBtn, "click")
_IELoadWait($oIE, 2000)
[/autoit] [autoit][/autoit] [autoit]; Zur Anrufliste wechseln
_IELinkClickByText ($oFrame, "Anrufliste")
_IELoadWait($oIE, 2000)
[/autoit] [autoit][/autoit] [autoit]; Sichern-Button drücken
$SaveBtn = _IEGetObjById($oFrame, "buttonExport")
_IEAction($SaveBtn, "click")
oder man muss auf die Seiten zugreifen die ohne Frames arbeiten:
#include <IE.au3>
Opt("WinTitleMatchMode", 2)
$internet_adresse = "http://fritz.box/cgi-bin/webcm?getpage=../html/index_inhalt.html"
$oIE = _IECreate ($internet_adresse, 0, 1, 1, 0)
If @error >0 Then Exit
[/autoit] [autoit][/autoit] [autoit]WinSetState("Microsoft Internet Explorer", "", @SW_MAXIMIZE) ;maximieren
[/autoit] [autoit][/autoit] [autoit]_IELoadWait($oIE, 2000)
[/autoit] [autoit][/autoit] [autoit]$oForm = _IEFormGetObjByName($oIE, "uiViewForm")
[/autoit] [autoit][/autoit] [autoit]; Passwort einsetzen
$Password = _IEFormElementGetObjByName($oForm, "pass")
_IEFormElementSetValue($Password, "xxxxxxxxxx")
; Anmelden-Button drücken
$LoginBtn = _IEFormElementGetObjByName($oForm, "btnLogin")
_IEAction($LoginBtn, "click")
_IELoadWait($oIE, 2000)
[/autoit] [autoit][/autoit] [autoit]; Zur Anrufliste wechseln
_IELinkClickByText ($oIE, "Anrufliste")
_IELoadWait($oIE, 2000)
[/autoit] [autoit][/autoit] [autoit]; Sichern-Button drücken
$SaveBtn = _IEGetObjById($oIE, "buttonExport")
_IEAction($SaveBtn, "click")
Der restliche Code sollte ja jetzt kein Problem mehr sein!
Hallo,
da Hex kein 0x vor das Ergebnis schreibt darf auch $var kein 0x enthalten.
[autoit]$var = "ffffff"
$var1 = PixelGetColor(1015, 697)
If (Hex($var1) = $var) Then
MouseMove(1015, 697)
$h = 100
EndIf
Edit:
Ausserdem wird @error von PixelGetColor nicht beeinflusst und es muss $var1 mit Hex umgewandelt werden und nicht $var!
Hallo,
es kommt immer darauf für welches System das Ergebnis sein soll, wenn ich z.B. eine Konfigurationsdatei für Linux erstelle darf als Zeilenumbruch nur @LF benutzt werden, bei MAC OS bis Version 9 ist das Zeilenumbruchzeichen @CR und für Microsoft-Betriebsysteme ist es @CRLF.
Entsprechende Links auf Wikipedia:
Zeilenumbruch
Zeilenvorschub
Wagenrücklauf
Hallo,
das Problem tritt mit der aktuellen Beta nicht mehr auf!
Hallo,
der Fehler ist eigentlich ganz einfach zu erklären, RunAsSet funktionier mit ShellExecute nicht.
Eine mögliche Lösung ist den Run-Befehl mit @ComSpec zu verwenden:
[autoit]Run(@ComSpec & "/C \\meinServer\Freigabe\Verzeichnis\nocheinVerzeichnis\UserInstall\setup.exe -a -s -f1\\meinServer\Freigabe\Verzeichnis\nocheinVerzeichnisrver\UserInstall\Programm.iss -f2C:\Programm.log", "\\meinServer\Freigabe\Verzeichnis\nocheinVerzeichnis\UserInstall")
[/autoit]Wenn das nicht funktioniert kann man noch das komplette Script mit RunAsSet neu starten, dann laufen alle Befehle mit Adminrechten.
Wie z.B. hier!
Hallo,
das mit den Labels könntest Du so lösen:
[autoit]$InstallSection = IniRead("install.ini", "Status", "Secton", "0")
[/autoit][autoit][/autoit][autoit]; Installation von vorne beginnen
If $InstallSection < 1 Then
IniWrite("install.ini", "Status", "Secton", "1")
Endif
; 2. Abschnitt beginnt hier
If $InstallSection < 2 Then
IniWrite("install.ini", "Status", "Secton", "2")
EndIf
; 3. Abschnitt beginnt hier
If $InstallSection < 3 Then
IniWrite("install.ini", "Status", "Secton", "3")
EndIf
; 4. Abschnitt beginnt hier
If $InstallSection < 4 Then
IniWrite("install.ini", "Status", "Secton", "4")
EndIf
; Installation abgeschlossen, beim nächsten mal von vorne beginnen
IniWrite("install.ini", "Status", "Secton", "0")
Bei AdlibEnable gilt immer nur der letzte Aufruf, d.h. sobald AdlibEnable erneut aufrufen wird, wird die vorherige Funktion nicht mehr aufgerufen.
Die Funktion die AdlibEnable zugewiesen ist kann auch ganz normal aufgerufen werden, sie wird von AdlibEnable nicht gesperrt.
Hallo,
der entscheidende unterschied zwischen den 2 Programmen ist das Du im ersten Programm alle txt-Dateien mit FileOpen öffnest und mit FileWriteLine immer nur in die schon geöffnete Datei schreibst. Im zweiten Programm gibst Du den Dateinamen direkt bei FileWriteLine an, dass hat zur folge das jedes mal die Datei geöffnet, geschrieben und geschlossen werden muss was natürlich ganz schön auf die Performance geht.
Das hat man damals gemacht um die Zeit mit 12 Bits zu speichern, dadurch hatte man 4 Bits für andere Aufgaben zur Verfügung! Speicher war zu der Zeit noch richtig teuer!
Hallo,
das liegt wahrscheinlich am Filesystem auf dem USB-Stick, der ist bestimmt mit Fat32 formatiert. Bei den Fat-Filesystemen hat die Dateizeit eine Genauigkeit von 2 Sekunden, bei NTFS sind es 100 Nanosekunden. Kannst ja mal probieren den Stick mit NTFS zu formatieren und schauen ob sich das Problem damit lösen lässt.
Hallo,
so sollte es auf jeden Fall gehen:
[autoit]; Funktioniert nicht:
$file = 'D:\netadapter.cfg'
$cmd = 'netsh interface ip show config >' & $file
ConsoleWrite('$cmd = ' & $cmd & @CR) ; Befehl ist OK
Run(@ComSpec & " /C " & $cmd, @SystemDir, @SW_HIDE)