Beiträge von Moombas
-
-
Hmm, war nur eine Idee. Mit DLL kenne ich mich leider nicht aus und kann dir dazu nichts sagen.
BTW: Oben spricht er COM4 an und in der MsgBox ist von COM3 die Rede. PAsst irgendwie nicht zusammen,
-
Du änderst ja im 1. Skript die Übertragungsparameter des COM-Ports. Passen die denn zu der Schnittstelle auf der Gegenseite (also deinem Scanner)?
Das ist häufig ein Problem bei solchen Verbindungen, das die Einstellungen nicht zusammen passen.
-
Das mit der Null hört sich nach einem "Standard Rückgabewert" einer Funktion bzw. in deinem Fall ja des DLL Callback an, wenn kein Wert übergeben wurde.
Kannst du das nicht abfragen und dann abfangen (wenn <> 0, sonst leer)?
-
Wäre es nicht einfacher alles was gescannt wird zu nehmen und einfach nur die vorderen 6 Zeichen zu nutzen?
Oder das Eingabefeld auf 6 Zeichen via GUICtrlSetLimit zu begrenzen?
-
funkey hat dir dazu doch oben ein Beispiel geschrieben.
-
Ich denke die Vermutung von BugFix passt und das zweite SetColor gehört ins else
-
Hi Holger, es gibt keine blöden Fragen.
Und mit der Zeit wirst du auch anderen helfen können, auch wenn du anfangs mehr nehmen wirst als zu geben, ist es eher eine persönliche Einstellung ob man dieses erlangte Wissen bei anderen dann auch weiter gibt, wenn andere hier dafür ggf. mal keine Zeit hatten zu antworten.
Ich habe auch erst vor wenigen Jahren AutoIt (jedoch beruflich) kennen gelernt (bis dato nur in Pascal und Assembler programmiert) und hoffe das ich (auch wenn ich nicht immer richtig liege) trotzdem anderen (Neulingen) mittlerweile helfen (je nach Thema) kann.
Ganz wichtig dabei: Auch dadurch kann man wieder viel lernen! Da kommt dann ggf. der ein oder andere User mit wesentlich mehr Background und Erfahrung um die Ecke und präsentiert eine einfachere Lösung (oder einen anderen Lösungsweg). Dann lernen beide (du und der Neuling) und profitieren davon und das ist auch gut so.
Programmieren lebt von der "Lösungssuche und Entwicklung", dadurch lernt man es meiner Meinung nach am Besten.
Also keine Scheu.
-
Bedank dich bei xrxca

Ich hätte das so wahrscheinlich selber nicht hin bekommen.
-
Ja klar XD
Du musst ja auch $hOwnHandle mit dem Handle deines Fensters versehen das auf den entsprechenden Monitor gepackt werden soll, das war nur ein Platzhalter.
Gleiches gilt für $Monitornumber dort trägst du die Monitornummer ein, wo das Fenster hin soll.
-
Aber rechtlich ist das extrahieren aus der Datei da nicht noch wesentlich fragwürdiger!?
Generell müsste er/sie sich die Erlaubnis holen, da wäre der Weg über den Kindergarten (und dieser ggf. an die betreffenden Eltern etc.) der rechtlich einzig richtige Weg.
-
Das müsste auch mit .doc (ohne x) gehen. Oder du fragst den Kindergarten einfach nach den Bildern...
-
Du bist ein Fuchs BugFix
-
Du kannst doch Fenster direkt auf Monitor X öffnen lassen ohne die Hauptanzeige zu ändern (und somit mit ggf. anderen Anzeigen in die Quere zu kommen).
Am Start des Programms das eigne Handle und die Monitornummer an folgende Funktion übergeben:
AutoIt
Alles anzeigenGlobal $__MonitorList[1][5] $__MonitorList[0][0] = 0 _CenterOnMonitor($hOwnHandle, $Monitornumber) ;================================================================================================== ; Function Name: _CenterOnMonitor($hWindow[, $Monitor = -1]]) ; Description:: Center a window on a specific monitor (or the monitor the mouse is on) ; Parameter(s): $Title The title of the window to Move/Maximize ; optional: $Text The text of the window to Move/Maximize ; optional: $Monitor The monitor to move to (1..NumMonitors) defaults to monitor mouse is on ; Note: Should probably have specified return/error codes but haven't put them in yet ; Author(s): xrxca (autoit@forums.xrx.ca) ;================================================================================================== Func _CenterOnMonitor($hWindow, $Monitor = -1) ;~ Local $hWindow = WinGetHandle($Title, $Text) If Not @error Then If $Monitor == -1 Then $Monitor = _GetMonitorFromPoint() ElseIf $__MonitorList[0][0] == 0 Then _GetMonitors() EndIf If ($Monitor > 0) And ($Monitor <= $__MonitorList[0][0]) Then ; Restore the window if necessary Local $WinState = WinGetState($hWindow) If BitAND($WinState, 16) Or BitAND($WinState, 32) Then WinSetState($hWindow, '', @SW_RESTORE) EndIf Local $WinSize = WinGetPos($hWindow) Local $x = Int(($__MonitorList[$Monitor][3] - $__MonitorList[$Monitor][1] - $WinSize[2]) / 2) + $__MonitorList[$Monitor][1] Local $y = Int(($__MonitorList[$Monitor][4] - $__MonitorList[$Monitor][2] - $WinSize[3]) / 2) + $__MonitorList[$Monitor][2] WinMove($hWindow, '', $x, $y) EndIf EndIf EndFunc ;==>_CenterOnMonitor ;================================================================================================== ; Function Name: _GetMonitors() ; Description:: Load monitor positions ; Parameter(s): n/a ; Return Value(s): 2D Array of Monitors ; [0][0] = Number of Monitors ; [i][0] = HMONITOR handle of this monitor. ; [i][1] = Left Position of Monitor ; [i][2] = Top Position of Monitor ; [i][3] = Right Position of Monitor ; [i][4] = Bottom Position of Monitor ; Note: [0][1..4] are set to Left,Top,Right,Bottom of entire screen ; hMonitor is returned in [i][0], but no longer used by these routines. ; Also sets $__MonitorList global variable (for other subs to use) ; Author(s): xrxca (autoit@forums.xrx.ca) ;================================================================================================== Func _GetMonitors() $__MonitorList[0][0] = 0 ; Added so that the global array is reset if this is called multiple times Local $handle = DllCallbackRegister("_MonitorEnumProc", "int", "hwnd;hwnd;ptr;lparam") DllCall("user32.dll", "int", "EnumDisplayMonitors", "hwnd", 0, "ptr", 0, "ptr", DllCallbackGetPtr($handle), "lparam", 0) DllCallbackFree($handle) Local $i = 0 For $i = 1 To $__MonitorList[0][0] If $__MonitorList[$i][1] < $__MonitorList[0][1] Then $__MonitorList[0][1] = $__MonitorList[$i][1] If $__MonitorList[$i][2] < $__MonitorList[0][2] Then $__MonitorList[0][2] = $__MonitorList[$i][2] If $__MonitorList[$i][3] > $__MonitorList[0][3] Then $__MonitorList[0][3] = $__MonitorList[$i][3] If $__MonitorList[$i][4] > $__MonitorList[0][4] Then $__MonitorList[0][4] = $__MonitorList[$i][4] Next Return $__MonitorList EndFunc ;==>_GetMonitors ;================================================================================================== ; Function Name: _GetMonitorFromPoint([$XorPoint = -654321[, $Y = 0]]) ; Description:: Get a monitor number from an x/y pos or the current mouse position ; Parameter(s): ; optional: $XorPoint X Position or Array with X/Y as items 0,1 (ie from MouseGetPos()) ; optional: $Y Y Position ; Note: Should probably have specified return/error codes but haven't put them in yet, ; and better checking should be done on passed variables. ; Used to use MonitorFromPoint DLL call, but it didn't seem to always work. ; Author(s): xrxca (autoit@forums.xrx.ca) ;================================================================================================== Func _GetMonitorFromPoint($XorPoint = 0, $y = 0) If @NumParams = 0 then local $MousePos = MouseGetPos() Local $myX = $MousePos[0] Local $myY = $MousePos[1] Elseif ( @NumParams = 1 ) and IsArray($XorPoint) Then $myX = $XorPoint[0] $myY = $XorPoint[1] Else $myX = $XorPoint $myY = $y EndIf If $__MonitorList[0][0] == 0 Then _GetMonitors() EndIf Local $i = 0 Local $Monitor = 0 For $i = 1 To $__MonitorList[0][0] If ($myX >= $__MonitorList[$i][1]) _ And ($myX < $__MonitorList[$i][3]) _ And ($myY >= $__MonitorList[$i][2]) _ And ($myY < $__MonitorList[$i][4]) Then $Monitor = $i Next Return $Monitor EndFunc ;==>_GetMonitorFromPoint ;================================================================================================== ; Function Name: _MonitorEnumProc($hMonitor, $hDC, $lRect, $lParam) ; Description:: Enum Callback Function for EnumDisplayMonitors in _GetMonitors ; Author(s): xrxca (autoit@forums.xrx.ca) ;================================================================================================== Func _MonitorEnumProc($hMonitor, $hDC, $lRect, $lParam) #forceref $hDC, $lParam Local $Rect = DllStructCreate("int left;int top;int right;int bottom", $lRect) $__MonitorList[0][0] += 1 ReDim $__MonitorList[$__MonitorList[0][0] + 1][5] $__MonitorList[$__MonitorList[0][0]][0] = $hMonitor $__MonitorList[$__MonitorList[0][0]][1] = DllStructGetData($Rect, "left") $__MonitorList[$__MonitorList[0][0]][2] = DllStructGetData($Rect, "top") $__MonitorList[$__MonitorList[0][0]][3] = DllStructGetData($Rect, "right") $__MonitorList[$__MonitorList[0][0]][4] = DllStructGetData($Rect, "bottom") Return 1 ; Return 1 to continue enumeration EndFunc ;==>_MonitorEnumProcDann wäre das Fenster Zentriert auf dem jeweiligen Monitor.
-
Das würde ja nur funktionieren, wenn jede Änderung irgendwo (zwischen)gespeichert wird (funktioniert meines Wissens bei Github auch nicht anders).
Ich glaube nicht das Scite so etwas aktuell hat, da müsstest du dann selber Tätig werden und alle Zwischenschritte manuell abspeichern und ggf. mit Versionen versehen.
Aber vielleicht werde ich hier auch noch von unseren Experten noch mal überrascht

-
Schau dir das mal an: https://www.autoitscript.com/autoit3/docs/f…hellExecute.htm
Du bekommst die PID zurück, mit der prüfst du in einer Schleife ob der Prozess noch läuft (https://www.autoitscript.com/autoit3/docs/f…ocessExists.htm) und wenn nicht -> Schleife Beenden (https://www.autoitscript.com/autoit3/docs/keywords/ExitLoop.htm) und den Link löschen.
Oder du wartest bis der Link erstellt wurde (https://www.autoitscript.com/autoit3/docs/f…/FileExists.htm) und löscht ihn dann...
Es gibt also viele Wege zum Erfolg.
-
Also bei Dec() bekomme ich beim Testen ab 0x80000000 immer "0" zurück, egal ob 0, 1 oder 2 als Parameter, egal ob als 32bit oder 64bit kompiliert.Deswegen hatte ich oben geschrieben:ZitatAber irgendwie wird da auch ab 0x80000000 gekappt.Edit: ok, man muss dort scheinbar unbedingt das 0x weg lassen, dann funktionierts.
-
Japp, das ist der negative Bereich:
0xFFFFFFF = -1 und geht bis 0x80000000 (-2147483648)
Und aus meiner Sicht kein Fehler, sondern eine Möglichkeit Zahlen im Bereich von -2147483648 bis 2147483647 darzustellen.
Evtl. gibt es einen Schalter mit dem man den negativen Bereich raus bekommt und den vollen positiven Bereich erhält, entzieht sich aber meiner Kenntnis.Versuch es mal so: https://www.autoitscript.com/autoit3/docs/functions/Dec.htm
Aber irgendwie wird da auch ab 0x80000000 gekappt.
Hilft dir ggf. das hier: https://www.autoitscript.com/forum/topic/73…ecimal-numbers/
-
Knapp daneben ist auch vorbei^^
-
Ohne es definitiv zu wissen denke ich das er wenn "\" im String ist, es durch "/" ersetzt wird.War falsch!