Den Code von OnAutoitExit() hast du nicht dabei, aber ich gehe davon aus, dass dort die Variable $g_hStub_KeyProc noch benötigst, die du aber vorher schon abnullst. Vllt hilft das schon, diese Zeile wegzulassen oder nach OnAutoitExit() auszuführen.
Beiträge von funkey
-
-
Oder das da: https://www.autoitscript.com/forum/topic/20…bject_internal/
Hängt alles davon ab, was man erreichen will.
-
Da gibt es mehrere Ansätze: Diesen habe ich als erstes gefunden: https://www.autoitscript.com/forum/topic/20…dows-messaging/
-
Da wirst du ein RichEdit brauchen
C
Alles anzeigen#include <ColorConstants.au3> #include <GUIConstantsEx.au3> #include <GuiRichEdit.au3> Func UpdateEditField( $idEditField, $sString, $bError ) Local $sValue = GUICtrlRead( $idEditField ) If $bError = True Then ;~ Beep( 500, 500 ) _GUICtrlRichEdit_SetCharColor( $idEditField, _WinAPI_SwitchColor($COLOR_RED )) _GUICtrlRichEdit_AppendText( $idEditField, @CRLF & $sString ) _GUICtrlRichEdit_SetCharColor( $idEditField, _WinAPI_SwitchColor($COLOR_BLACK )) Else _GUICtrlRichEdit_AppendText( $idEditField, @CRLF & $sString ) EndIf EndFunc Global $hGui = GUICreate("Test", 400, 400) Global $nBtn = GUICtrlCreateButton("Add Text", 10, 10, 100, 30) Global $hRichEdit = _GUICtrlRichEdit_Create($hGui, "Text", 10, 90, 380, 300) GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE _GUICtrlRichEdit_Destroy($hRichEdit) ExitLoop Case $nBtn UpdateEditField( $hRichEdit, Chr(Random(65, 90, 1)), Random(0, 1, 1 )) EndSwitch WEnd -
So wie das aussieht ist die ID fest in die Funktion _ModbusTCP_ReadValues verbaut. Man bräuchte nur die Funktion leicht anzupassen, um die ID zu übergeben.
-
Habs nur schnell zusammenkopiert. Nun ist's ausgebessert
-
Ich würde das so irgendwie machen:
CodeGlobal $remIP = "192.168.0.3" Global $remPort = 80 TCPStartup() Global $ConnectedSocket = TCPConnect($remIP, $remPort) TCPSend($ConnectedSocket,"GET /?Rly3=1 " & @CRLF & @CRLF) Global $recv = TCPRecv($ConnectedSocket, 4096) TCPCloseSocket($ConnectedSocket) TCPShutdown()Ungetestet
-
Hallo funkey,
auch das wäre ein interessanter Ansatz, vielen lieben Dank dafür. Damit sieht es aber bis jetzt so aus, als könne man in Autoit den StdIn-Stream nur
anhand von Umwegen entgegen nehmen und in eine Variable speichern. Vielleicht hilft mir ja das Barcodescanner-Script von Oscar weiter...Mein Beispiel ist sicher der einfachste Weg um das Problem zu lösen.
Ein anderer Weg, wäre ein Low-Level Tastatur-Hook, der aber wahrscheinlich in leicht abgewandelter Form als Keylogger verwendet werden könnte. Somit kannst du in diese Richtung von uns keine Hilfe erwarten, sorry.
-
Und wenn du das Input-Feld außerhalb der Gui 'anzeigst'?
C
Alles anzeigen#include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <WinAPISysWin.au3> Opt("GUIOnEventMode", 1) Global $hGui = GUICreate("test") GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents") GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents") GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents") Global $nLbl = GUICtrlCreateLabel("Bitte einen Text eingeben. Das Ergebnis ist nicht sichtbar", 10, 100, Default, Default, 0, 0) Global $nEdit = GUICtrlCreateInput("", 10, -100, 300, 20) GUICtrlCreateButton("Show", 10, 200, 100, 25) GUICtrlSetOnEvent(-1, "_ShowInput") GUICtrlCreateButton("Hide", 120, 200, 100, 25) GUICtrlSetOnEvent(-1, "_HideInput") GUISetState(@SW_SHOW) While 1 Sleep(100) WEnd Func _ShowInput() GUICtrlSetPos($nEdit, 10, 100) GUICtrlSetState($nLbl, $GUI_HIDE) EndFunc Func _HideInput() GUICtrlSetState($nLbl, $GUI_SHOW) GUICtrlSetPos($nEdit, 10, -100) _WinAPI_SetFocus(GUICtrlGetHandle($nEdit)) EndFunc Func SpecialEvents() Select Case @GUI_CtrlId = $GUI_EVENT_CLOSE GUIDelete() Exit EndSelect EndFunc ;==>SpecialEvents -
Dann zeig mal deine Modbus-Funktionen wie BugFix schon sagte. Die ID im Protokoll zu ändern sollte kein Problem sein.
-
Die ID hat nichts mit der IP zu tun. Die ID ist im Protokoll verankert. Allerdings wenn beide Geräte eine unterschiedliche IP haben, dann würde ich die ID bei beiden Geräten auf dem Standard-Wert von ! belassen und dann müsste auch das Skript funktionieren. Unterschiedliche IDs braucht man z.B. wenn man ein Modbus-TCP Gateway hat, welches sekundärseitig mehrere Geräte über Modbus-RTU ansprechen soll.
-
Hallo an alle! Schöne Weihnachten!!!

-
Es gibt auch DLL's, die z.B. über eine Registrierungsfunktion verfügen, wo man also eine Seriennummer übergeben muss (könnte ich mir auch bei dieser DLL vorstellen). Damit das funktioniert, muss immer die DLL zuerst geöffnet werden, und dann mit dem Handle weitergearbeitet werden. Das ist also immer die sicherere Variante.
-
https://www.ravensburger.de/shop/tiptoi/bu…2904/index.html
Damit kann jeder in die englische Sprache einsteigen

-
DBX und DBF sind ja glaube ich fast kompatibel. Du könntest mal meine DBF-UDF probieren, aber leider sind alle meine Links in AutoIt.de nicht mehr da
. Vielleicht finde ich die UDF noch irgendwo in meinem Chaos.Weiß jemand, ob man die Links in den Beiträgen bzw. alle Uploads wieder herstellen kann?
Gruß funkey
-
Ich kann das leider nicht testen, aber so hätte ich das versucht:
AutoIt
Alles anzeigenGlobal Const $tagDHCPDS_SERVER = "DWORD Version;ptr ServerName;DWORD ServerAddress;DWORD Flags;DWORD State;ptr DsLocation;DWORD DsLocType;" Global Const $tagDHCPDS_SERVERS = "DWORD Flags;DWORD NumElements;ptr Servers;" Func _DhcpEnumServers() Local $aRet = DllCall("Dhcpsapi.dll", "DWORD", "DhcpEnumServers", "DWORD", 0, "ptr", 0, "ptr*", 0, "ptr", 0, "ptr", 0) If $aRet[0] <> 0 Then Return SetError(1, $aRet[0]) EndIf Local $iNum = DllStructCreate("DWORD NumElements", $aRet[3] + 4) Local $tagDHCP_Temp = $tagDHCPDS_SERVERS For $i = 1 To $iNum $tagDHCP_Temp &= $tagDHCPDS_SERVER Next Local $tDHCP_Servers = DllStructCreate($tagDHCP_Temp, $aRet[3]) Local $aData[$iNum][4] For $i = 0 To $iNum - 1 $aData[$i][0] = DllStructCreate("wchar[256]", DllStructGetData($tDHCP_Servers, 4 + $i * 7)) $aData[$i][0] = DllStructGetData($aData[$i][0], 1) $aData[$i][1] = DllStructGetData($tDHCP_Servers, 5 + $i * 7) $aData[$i][1] = _inet_ntoa($aData[$i][1]) $aData[$i][2] = DllStructGetData($tDHCP_Servers, 6 + $i * 7) $aData[$i][3] = DllStructCreate("wchar[256]", DllStructGetData($tDHCP_Servers, 8 + $i * 7)) $aData[$i][3] = DllStructGetData($aData[$i][3], 1) Next ;DllCall("Dhcpsapi.dll", "none", "DhcpRpcFreeMemory", "ptr", $aRet[3]) Return $aData EndFunc ;==>_DhcpEnumServers Func _inet_ntoa($pIn_Addr) ;only IPv4 (deprecated) --> use _inet_ntop() instead Local $aRet = DllCall("ws2_32.dll", "str", "inet_ntoa", "ptr", $pIn_Addr) Return $aRet[0] EndFunc ;==>_inet_ntoa #include <Array.au3> Global $aDHCPServerInfo = _DhcpEnumServers() If @error Then MsgBox(16, "Error", "Error: " & @extended) Else _ArrayDisplay($aDHCPServerInfo, "Arraydisplay", "", 0, Default, "ServerName|ServerAddress|Flags|DsLocation") EndIf -
Etwas davon ist hier schon vorhanden: http://www.autoitscript.com/forum/topic/74…ntinfo-wrapper/
Vielleicht hilft dir das schon.
-
Da kann nicht mal ein Obfuscator mithalten, aber ich werde versuchen mich da morgen durchzuwühlen.
Edit: Der Fehler muss aber von 'LogAitDave_V3.0.exe' kommen und das ist keine AutoIt Datei und auch der Quellcode davon ist nicht dabei!?
-
LibNodave kenn ich

Aber das Include-File und die Funktionen die du aufrufst habe ich noch nie gesehen. Ohne diese Datei(en) wird dir keiner hier helfen können. -
Hab mal die UDF überarbeitet. Die Funktionen brauchten noch die 'cdecl' Aufrufkonvention. Wahrscheinlich hatte ich damals zum testen eine andere DLL oder so. Das Beispiel sollte nun funktionieren.
BTW: Ich kann keine rar-files mehr anhängen, sondern nur noch zip. Ist kein Problem, wollte es nur anmerken.