Soll das heißen du hast noch gar keinen Ansatz bzw. ein Script oder ein Handbuch zur möglicherweise vorhandenen API?
Am beten wäre es dann wohl, wenn du erst einmal erklären würdest, was ein "3cxPhone" denn ist und dann vielleicht auch noch wie man es ansprechen/benutzen kann. Denn ich für meinen teil werde mir sicher nicht das 100 Seiten Handbuch durchlesen um dann festzustellen, dass du das aber gerne so und so machen würdest... ![]()
Beiträge von BinDannMalWeg
-
-
Auch wenn das Problem jetzt schon gelöst ist, wollte ich euch nur mal darauf aufmerksam machen, dass sich das Script nochmal um 75% kürzen lässt:
Spoiler anzeigen
[autoit]#RequireAdmin
[/autoit] [autoit][/autoit] [autoit]
Global $aBat[4][2] = [["C:\SERVER\DE 2471\arma 2 operation arrowhead\", "DE 2471.bat"],["C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #2 Chernarus Server\", "dayz_server.bat"], _
["C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #3 Lingor Island Server\", "dayz_lingor_server.bat"],["C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #4 1.7.2.6.1\", "dayz_server.bat"]]
Global $Server[4] = [4, 2, 3, 1]While 1
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To 3
Do
Sleep(1000 * 60)
Until @MIN = 00
_Restart($Server[$i])
If @error = 1 Then ConsoleWrite('Server ' & $Server[$i] & ' ist abgeschaltet' & @LF)
Next
WEndFunc _Restart($iServer)
[/autoit]
Local $aPorts[5] = ["2302", "2308", "2309", "2322"], $iSleep = 60000
If Not WinExists("ArmA 2 OA Console version 1.62 : port " & $aPorts[$iServer - 1]) Then SetError(1, 1)
WinClose("ArmA 2 OA Console version 1.62 : port " & $aPorts[$iServer - 1])
Sleep($iSleep)
ShellExecute($aBat[$iServer - 1][1], "", $aBat[$iServer - 1][0])
If @error Then SetError(2, 2)
EndFunc ;==>_Restart
-
Meins funktioniert bei mir ja auch autoBert...
Aber ich denke das Programm das die Datei verarbeitet wird da irgendwie Mist bauen... 
-
An dieser Stelle möchte ich nur mal kurz auf das hier aufmerksam machen.
Sorry das musste einfach erstmal sein, da es wieder einmal einfach nur passt...
Nun zum eigentlichen Teil meiner Hilfestellung: Ich würde dir empfehlen, das selbst in die Hand zu nehmen. Denn zum Einen verstehst DU dann was genau das 'Programm' tut und wie es funktioniert und zum Anderen kannst du dann auch selbst Änderungen/Verbesserungen/Erweiterungen vornehmen... Außerdem ist Autoit wirklich sehr anfängerfreundlich und zu fast jedem Problem, das DU haben könntest wirst du hier in einem der Threads eine passende Antwort finden und wenn dem mal nicht so ist: fragen kostet ja nichts...
-
Nein. Für so etwas gibt es InetRead()
Aber an deinen Fragestellungen solltest du echt arbeiten... -
Irgendwie klappt das nicht, ich gebe dir MD5-Hash's ein und das Programm beendet den Prozess einfach nicht..
Möglicher Weise wird der Programmpfad durch die "_ProcessGetPath()" Funktion nicht richtig erkannt. Was für Programme versuchst du denn zu sperren? Genügt nicht ein vergleich des Prozessnamens? Bist du dir sicher, dass du korrekte MD5-Hashes der Programm Dateien verwendet hast?
-
Mach ich des schon?
Nein...
Hier ein Beispiel:Spoiler anzeigen
[autoit]#include <Crypt.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <File.au3>
Local $File, $Filter = '%'
_FileReadToArray(@ScriptDir & '\md5.txt', $File)
For $i = 1 To $File[0]
$Filter &= $File[$i] & '%'
NextWhile Sleep(500)
[/autoit] [autoit][/autoit] [autoit]
$List = ProcessList()
If IsArray($List) Then
For $i = 1 To $List[0][0]
$Path = _ProcessGetPath($List[$i][1])
If FileExists($Path) And $Path <> '?' Then
ConsoleWrite($Path & @LF)
$MD5 = _Crypt_HashFile($Path, $CALG_MD5)
If StringRegExp($Filter, '%' & $MD5 & '%') Then ProcessClose($List[$i][1])
EndIf
Next
EndIf
WEndFunc _ProcessGetPath($PID) ; http://www.autoit.de/index.php?page=Thread&threadID=4669
[/autoit]
$Path = DllStructCreate("char[1000]")
$dll = DllOpen("Kernel32.dll")
$handle = DllCall($dll, "int", "OpenProcess", "dword", 0x0400 + 0x0010, "int", 0, "dword", $PID)
$ret = DllCall("Psapi.dll", "long", "GetModuleFileNameEx", "long", $handle[0], "int", 0, "ptr", DllStructGetPtr($Path), "long", DllStructGetSize($Path))
$ret = DllCall($dll, "int", "CloseHandle", "hwnd", $handle[0])
DllClose($dll)
Return DllStructGetData($Path, 1)
EndFuncDu musst nur noch die "md5.txt" mit den MD5-Hash's der zu sperrenden Programme befüllen...

-
WAS willst du machen?
Was ist denn bitte ein "HD5"? Bist du dir sicher das du nicht MD5 meinst? Dazu kommt noch, dass du weder diese dubiose 'md5hash.dll' noch die Funktion 'md5hash()' die du im Script verwendest gepostet hast... Außerdem lässt sich (zumindest für mich) kein Sinn oder Verwendungszweck für dein Script erkennen.
Falls du vor hast eine Art "Prozess-Blocker" zu schreiben, dann macht das ganze Rumhantieren mit MD5 aber auch keinen Sinn, da du dann auch gleich den Prozessnamen vergleichen könntest.... Also bitte versuche nochmal dein Vorhaben und dein Problem in einem ordentlichen Post zu beschreiben. Okay? 
-
Kein Ding...

Spoiler anzeigen
[autoit]#include <File.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3> ; Kann nach Test mit _ArrayDisplay gelöscht werden..._SetState(0, @ScriptDir & '\t.txt') ; Nichts auskommentiert
[/autoit] [autoit][/autoit] [autoit]
_SetState(1, @ScriptDir & '\t.txt') ; 1 auskommentiert
_SetState(2, @ScriptDir & '\t.txt') ; 2 auskommentiert
_SetState(3, @ScriptDir & '\t.txt') ; Beide auskommentiertFunc _SetState($State, $Path)
[/autoit]
Local $File = StringSplit(StringReplace(StringReplace(FileRead($Path), '!a', 'Wa'), '!e', 'Me'), @LF)
If Not $State = 0 Then
If $State = 1 Or $State = 3 Then
$File[1] = '!' & StringTrimLeft($File[1], 1)
$File[2] = '!' & StringTrimLeft($File[2], 1)
EndIf
If $State = 2 Or $State = 3 Then
$File[3] = '!' & StringTrimLeft($File[3], 1)
$File[4] = '!' & StringTrimLeft($File[4], 1)
EndIf
EndIf
FileDelete($Path)
_ArrayDisplay($File, 'State: ' & $State) ; Kann nach Test gelöscht werden...
_FileWriteFromArray($Path, $File, 1, 4)
EndFunc ;==>_SetState -
Dann sieht deine 'Settings'-datei nicht so aus, wie du sie oben gepostet hast! Kannst du nicht das Original posten?
Edit: Dieses Script sollte nun genau das erledigen was du vor hast:Spoiler anzeigen
[autoit]#include <File.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3> ; Kann nach Test mit _ArrayDisplay gelöscht werden..._SetState(0, @ScriptDir & '\t.txt') ; Beide auskommentiert
[/autoit] [autoit][/autoit] [autoit]
_SetState(1, @ScriptDir & '\t.txt') ; 1 auskommentiert
_SetState(2, @ScriptDir & '\t.txt') ; 2 auskommentiertFunc _SetState($State, $Path)
[/autoit]
Local $File = StringSplit(StringReplace(StringReplace(FileRead($Path), '!a', 'Wa'), '!e', 'Me'), @LF)
If $State = 1 Or $State = 0 Then
$File[1] = '!' & StringTrimLeft($File[1], 1)
$File[2] = '!' & StringTrimLeft($File[2], 1)
EndIf
If $State = 2 Or $State = 0 Then
$File[3] = '!' & StringTrimLeft($File[3], 1)
$File[4] = '!' & StringTrimLeft($File[4], 1)
EndIf
FileDelete($Path)
_ArrayDisplay($File, 'State: ' & $State) ; Kann nach Test gelöscht werden...
_FileWriteFromArray($Path, $File, 1, 4)
EndFunc ;==>_SetState -
Zitat
@ Christoph: leider läuft dein Script nicht - fehlen mir da includes?
Nein da fehlen keine Includes, bei mir (Win7) läuft das 1a, mit einer Text-Datei die den Inhalt aus dem Startpost hat... Was bekommst denn für eine Fehlermeldung?

-
Ich denke das hier ist was er meint:
Spoiler anzeigen
[autoit]#include <File.au3>
[/autoit]
Local $File, $Path = @ScriptDir & '\test.txt'
_FileReadToArray($Path, $File)
If @error Then Exit
For $i = 1 To $File[0] Step +2
If StringLeft($File[$i], 1) = '!' Then
$File[$i] = 'W' & StringTrimLeft($File[$i], 1)
$File[$i + 1] = 'M' & StringTrimLeft($File[$i + 1], 1)
Else
$File[$i] = '!' & StringTrimLeft($File[$i], 1)
$File[$i + 1] = '!' & StringTrimLeft($File[$i + 1], 1)
EndIf
Next
FileDelete($Path)
_FileWriteFromArray($Path, $File, 1) -
Ich würde mal vermuten das es nicht geht, weil der Hotkey mit dem du deine Funktion aufrufst noch gedrückt ist, wenn du die Tastenkombination sendest... Vielleicht könnte man ja eine Verzögerung einbauen, die wartet bis die Taste losgelassen wird?!

-
Also entweder ich habe ein wichtiges Detail überlesen, oder ihr habt einfach nicht daran gedacht, dass man sowas ja auch gleich so lösen kann:
[autoit]ShellExecute("Z:\test\Convert2PDF.vbs","Z:\test\5.doc")
[/autoit] -
Zitat[autoit]
For $i = 1 To Execute(GUICtrlRead($inpQuantity))
[/autoit]
NextMensch Make-Grafik...
Das könnte man ja fast schon als Beispiel, für sicherheitskritische Programmier-Fehler verwenden... 
-
Solch eine Autovervollständigung im Control ist ohne weiteres nicht einfach umsetzbar! Theoretisch könnte man mit einem RichEdit als Input Ersatz arbeiten. Wenn das nichts ist wäre es auch möglich mithilfe von GDI+ den Vorschlag "in" das Inputfeld zu zeichnen... Ansonsten könnte man die Vorschläge vielleicht auch in einer ComboBox/ListBox anzeigen...

-
Spoiler anzeigen
Zitatich habe vor einen MP3 zu Beep Converter zu programmieren.
Ist das möglich?
Wenn ja wie?Ich will eine Rakete bauen!
Geht das?
Wenn ja wie?Schau dir am besten mal die Bass-UDF an, den die ist das momentane Maximum, wenn es um Audio und Autoit geht... Allerdings denke ich, dass du nich einfach die 'Töne' aus MP3-Dateien auslesen können wirst, da in dieser ja verschiedene Spuren parallel zu hören sind.

-
An dieser Stelle würde ich nur mal gerne nach dem Verwendungszweck für dieses Script fragen...
Denn warum braucht man ein Script, dass eine fertige Reg-Datei ausführt, welche nebenbei bemerkt eine 'Hintertür' mit Systemrechten in den Computer einpflanzt? Für den eigenen Gebrauch ist das zwar praktisch, aber es erschließt sich mir keine (nicht verbotene) Situation, in der das von Nutzen wäre... Aber egal, die Lösung wurde ja schon mehr als einmal gepostet.Spoiler anzeigen
PS: Schaut da jemand Sempervideo?

-
In einer INI-Section darf ein Schlüssel nur einmal vorkommen!
Schreib doch beide Zahlen mit einem Trennzeichen in einen Schlüssel und benutzt nach dem Auslesen StringSplit... 
-
Das ist ja genau das was wir dir schon die ganze Zeit erklären möchten...
[autoit]
Du gehst jetzt einfach hin und deklarierst das Array mit 3 statt mit 2 'Dimensionen'.;Also nicht mehr so:
[/autoit]
Dim $Array[11][11]
;Sondern so:
Dim $Array[11][11][3]
; Und dann speicherst du den Wert aus der Map eben in:
$Array[x][y][0] = 'Map'
;und zum Beispiel das Handle des Feld-Buttons in:
$Array[x][y][1] = GUICtrlCreateButton()
; und für andere Sachen die zu eben diesem Feld gehören hast du hier natürlich auch noch Platz...