SORRY ! grad als in diesen Eintrag geschrieben hatte ist mir mein Fehler aufgefallen ..
hab den Destination Eintrag nicht richtig ausgefüllt ..
Spoiler anzeigen
FileInstall("test.txt",@ScriptDir&"\")
SORRY !!
SORRY ! grad als in diesen Eintrag geschrieben hatte ist mir mein Fehler aufgefallen ..
hab den Destination Eintrag nicht richtig ausgefüllt ..
FileInstall("test.txt",@ScriptDir&"\")
SORRY !!
Hi @ all
Hab da n kleines Problem.
Starte mit einem Script ein anderes Script, welches eigentlich komplett eigenständig ist, und auch sehr gut funktioniert.
In diesem zweiten Script ist der befehl FileInstall , um eine *.dll anzuhängen.
Jetzt passiert aber folgendes :
wenn ich mit dem ersten Skript das zweite aufrufe also starte,
installiert das zweite skript die dll in den ordner des ersten Skript'S ..
schwer zu erklären .. aber leich zu simulieren.
benutzt das
HotKeySet("{ESC}", "Terminate")
$exe = "unterordner\SUB.EXE"
Run($exe, "")
while 1
ToolTip(@ScriptDir,0,0)
Sleep(5)
WEnd
Func Terminate()
Exit 0
EndFunc
als Skript 1, welches skript 2 starten soll ..
und das hier
FileInstall("test.txt","")
;FileWrite(@ScriptDir&"\test.txt",@ScriptDir)
while 1
ToolTip(@ScriptDir)
Sleep(5)
WEnd
als skript 2 .. welches gestartet wird ..
als dll dummi einfach eine txt datei erstellen mit dem namen test.txt versehen.
...
so jetzt zu meiner Frage .. wie kann ich diesen " bug" umgehen ?
wie schaffe ich es, dass die dll .. in diesem fall die Txt in den richtigen pfad abgelegt wird?
weil Makros wie @scriptdir, ja nicht verwendet werden können ..
DANKE !
Hi ..
Ich misch mich hier mal ein ..
also ein "Parallelen" Ablauf in einem Programm gibt es nicht.
EINZIGE Ausnahme wäre, wenn du einen (mindestens) dual-Core Rechner besitzt und den OHNE Betriebsystem direkt sagst, welche Aufgabe, welcher Core, zu tun hat.
( aber mit AutoIT sicher nicht lösbahr )
alles andere nennt sich Multhi-Threading .. oder so ..
d.h. ein scheinbar paraleller ablauf. wird so erzeugt, dass die aufgaben in kleine "mini" aufgaben zerhackt werden.
aber auch das, ist mit AutoIt nicht hin zu bekommen, sogar GUTE C Programmierer, werden sich hierbei fast ein Bein ausreisen müssen.
Hab mal ein C- code gesehen, der mehrere Funktionen "zeitgleich" in Echtzeit verarbeitet .. WAHNSINN .. alles voll mit Timern, die andere Timer starten .. und hin und her ..
.. schweife ab ..
noch mal zu der Adlib funktion ... macht nix anderes, wie dein " skript" pausieren, .. in der pause, die funktion abarbeiten.
Meine bisherigen Erfahrungen : bei zuvielen Variablen in einem Skript, so war es zumindest bei mir der fall, werden machne verändert. ( unauffindbahrer Grund )
ausschlaggebend bei mir, habe in der Funktion die durch die adlib aufgerufen wird, eine Funktion verwendet, welche auch sonnst im Programm verwendet wurde.
hab halt einfach nicht so funktioniert, wie es sollte..
ich würde die finger davon lassen ....
obwohl es sehr reizvoll wäre .. ![]()
bye
also meine kleine *.au3 für folgende dll..
http://www.vellemanusa.com/downloads/file…ll_rev3_0_2.zip
direkte downloadseite des Herstellers. ( velleman ... dll V 3.02 )
und hier meine include ..
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.0.0
Author: vivus
Script Function:
handles the k8055d.dll 2009.10.19
NOTE RENAME the k8055d.dll in k8055D_multi.dll
#ce ----------------------------------------------------------------------------
Func USB_DLLOpen()
DllOpen(@ScriptDir & "\" & "k8055D_multi.dll") ; öffnen der DLL
EndFunc ;==>USB_DLLOpen
;----------------------------------------------------------------------------
Func USB_DLLClose()
DllClose(@ScriptDir & "\" & "k8055D_multi.dll") ; öffnen der DLL
EndFunc ;==>USB_DLLClose
;----------------------------------------------------------------------------
Func initial_board($address)
Local $begin, $result, $dif
$begin = TimerInit()
Do
$result = USBOpenDevice($address)
Sleep(250)
$dif = TimerDiff($begin)
If $dif > "4000" Then ExitLoop
Until $result = 1
ClearAllDigital($address)
Sleep(250)
SetDigitalChannel($address, "8")
If $result = 1 Then
Return "1"
Else
MsgBox(0, "ERROR", "fehler bei initialisierung des USB board's " & $address)
MsgBox(0, "ERROR", "Programm wird beendet! mit " & $result)
Exit
Return "0"
EndIf
EndFunc ;==>initial_board
;----------------------------------------------------------------------------
Func USBOpenDevice($address)
Local $result
$result = DllCall("k8055D_multi.dll", "long", "OpenDevice", "long", $address)
If $result[0] = $address Then
Return "1"
Else
;exit
Return "0"
EndIf
EndFunc ;==>USBOpenDevice
;---------------------------------------------------------------------------
Func CloseAllDevice()
Local $result
$result = DllCall("k8055D_multi.dll", "none", "CloseDevice")
USB_DLLClose()
EndFunc ;==>CloseAllDevice
;---------------------------------------------------------------------------
Func SearchDevices()
Local $result
$result = DllCall("k8055D_multi.dll", "long", "SearchDevices")
Return $result[0]
EndFunc ;==>SearchDevices
;---------------------------------------------------------------------------
Func USBCloseDevice($address)
Local $result
SetCurrentDevice($address)
$result = DllCall("k8055D_multi.dll", "none", "CloseDevice")
;Return ;;$result[0]
EndFunc ;==>USBCloseDevice
;---------------------------------------------------------------------------
Func ClearAllDigital($address)
Local $result
SetCurrentDevice($address)
$result = DllCall("k8055D_multi.dll", "int", "ClearAllDigital")
EndFunc ;==>ClearAllDigital
;----------------------------------------------------------------------------
Func SetCurrentDevice($address)
Local $result, $begin, $dif
$begin = TimerInit()
Do
$result = DllCall("k8055D_multi.dll", "long", "SetCurrentDevice", "int", $address)
;ToolTip($address&"="&$result[0],0,0)
$dif = TimerDiff($begin)
If $dif > "4000" Then ExitLoop
Until $address = $result[0]
;ToolTip("",0,0)
If $address = $result[0] Then
;nix
Else
MsgBox(0, "", "adresse = " & $address & " result = " & $result[0])
EndIf
EndFunc ;==>SetCurrentDevice
;----------------------------------------------------------------------------
Func SetDigitalChannel($address, $channel)
SetCurrentDevice($address)
DllCall("k8055D_multi.dll", "none", "SetDigitalChannel", "int", $channel)
EndFunc ;==>SetDigitalChannel
;---------------------------------------------------------------------------
Func ClearDigitalChannel($address, $channel)
SetCurrentDevice($address)
DllCall("k8055D_multi.dll", "none", "ClearDigitalChannel", "int", $channel)
EndFunc ;==>ClearDigitalChannel
;---------------------------------------------------------------------------
Func ReadAnalogChannel($address, $channel)
Local $result
SetCurrentDevice($address)
$result = DllCall("k8055D_multi.dll", "int", "ReadAnalogChannel", "int", $channel)
Return $result[0]
EndFunc ;==>ReadAnalogChannel
;---------------------------------------------------------------------------
Func ReadAllDigital($address)
Local $result, $alldigit
SetCurrentDevice($address)
$alldigit = DllCall("k8055D_multi.dll", "int", "ReadAllDigital")
Return $alldigit[0]
EndFunc ;==>ReadAllDigital
;---------------------------------------------------------------------------
Func ReadDigitalChannel($address, $sellect)
Local $wert
Local $channel[6]
$channel[1] = 0
$channel[2] = 0
$channel[3] = 0
$channel[4] = 0
$channel[5] = 0
$wert = ReadAllDigital($address)
;MsgBox(0,"",$alldigit[0] & " " & $wert)
Select
Case $wert = 0
$channel[1] = 0
$channel[2] = 0
$channel[3] = 0
$channel[4] = 0
$channel[5] = 0
Case $wert = 1
;I1
$channel[1] = 1
Case $wert = 2
;I2
$channel[2] = 1
Case $wert = 3
;I1 + I2
$channel[1] = 1
$channel[2] = 1
Case $wert = 4
;I3
$channel[3] = 1
Case $wert = 5
;I3 + I1
$channel[1] = 1
$channel[3] = 1
Case $wert = 6
;I3 + I2
$channel[2] = 1
$channel[3] = 1
Case $wert = 7
;I3 + I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[3] = 1
Case $wert = 8
;I4
$channel[4] = 1
Case $wert = 9
;I4 + I1
$channel[1] = 1
$channel[4] = 1
Case $wert = 10
;I4 + I2
$channel[2] = 1
$channel[4] = 1
Case $wert = 11
;I4 + I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[4] = 1
Case $wert = 12
;I4 + I3
$channel[3] = 1
$channel[4] = 1
Case $wert = 13
;I4 + I3 + I1
$channel[1] = 1
$channel[3] = 1
$channel[4] = 1
Case $wert = 14
;I4 + I3 + I2
$channel[2] = 1
$channel[3] = 1
$channel[4] = 1
Case $wert = 15
;I4 + I3 * I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[3] = 1
$channel[4] = 1
Case $wert = 16
;I5
$channel[5] = 1
Case $wert = 17
;I1
$channel[1] = 1
$channel[5] = 1
Case $wert = 18
;I2
$channel[2] = 1
$channel[5] = 1
Case $wert = 19
;I1 + I2
$channel[1] = 1
$channel[2] = 1
$channel[5] = 1
Case $wert = 20
;I3
$channel[3] = 1
$channel[5] = 1
Case $wert = 21
;I3 + I1
$channel[1] = 1
$channel[3] = 1
$channel[5] = 1
Case $wert = 22
;I3 + I2
$channel[2] = 1
$channel[3] = 1
$channel[5] = 1
Case $wert = 23
;I3 + I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[3] = 1
$channel[5] = 1
Case $wert = 24
;I4
$channel[4] = 1
$channel[5] = 1
Case $wert = 25
;I4 + I1
$channel[1] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 26
;I4 + I2
$channel[2] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 27
;I4 + I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 28
;I4 + I3
$channel[3] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 29
;I4 + I3 + I1
$channel[1] = 1
$channel[3] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 30
;I4 + I3 + I2
$channel[2] = 1
$channel[3] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 31
;I4 + I3 * I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[3] = 1
$channel[4] = 1
$channel[5] = 1
Case Else
$channel[1] = 0
$channel[2] = 0
$channel[3] = 0
$channel[4] = 0
$channel[5] = 0
EndSelect
If $channel[$sellect] = 1 Then
; MsgBox(0,"","return 1")
Return 1
Else
; MsgBox(0,"","return 0")
Return 0
EndIf
EndFunc ;==>ReadDigitalChannel
;----------------------------------------------------------------------------
wichtig .. die original dll MUSS umbenannt werden .. weil's anderst nicht funktioniert ..
aber fragt mich bitte nicht warum ..
VIEL spaß !!
HI "wolkenloser"
zu deiner Frage:
also die USB-Board'S sind klasse ..
gibt nur ein Problem, musste mir, da ich 2 Board's gleichzeitig ansprechen will ( brauch mehr ein aus ausgänge)
n kleines work arround basteln, ....
wenn du dich mal näher befasst, verstehst du sicher das problem... man kann mit der einen DLL NUR ein board ansprechen.
( obwohl man's ja jumpern kann ) "adresse 0-3"
... so wenn man jetzt aber gleichzeitig .. auf die dll zugreifen will.... um z.b. 2 Ausgänge verschiedener board's gleichzeitig anzusprechen.... TERROR !!
na egal .. schicksal ...
also als singel Lösung .. absolut GEIL !!
.. mit meinem workarround klappt's auch schon recht gut mit 2 .. aber irgend wie .. macht windows da glaub ich nicht mit...
kenn mich leider zu wenig mit dll's aus.. als dass ich mir da selber was basteln könnte..
bräuchte da profesionellere hilfe..
wenn du fragen hast , kannst mich auch gerne direkt anschreiben ..
BYE
alles klar .. muss ich mich noch mal einlesen .. ![]()
echt super dein code !! DANKE !
BugFix !! alle ACHTUNG !!
Zeit: 233.57348757058
klasse !! so funktioniert's !!
könntest du mir aber bitte
==> $ret = StringRegExp(FileRead($file), '(?:EAN-Code: )(\d+)', 3) <== erklären ?
den Teil :: (?:EAN-Code: )(\d+) ???? da hört's bei mir auf ..
vielen vielen dank !!
wie kommt man denn da dauf ?! kennst wohl jede Funktion auswendig .. ![]()
SUPER !!
Hallo AutoBert
Mit deiner angepassten Version von Bugfix komme ich auf 829 ms.
Wäre absolut top.
Aber es ist ja nicht immer die 6.- letzte Zeile..
Das Programm, welches das Log-file generiert, schreibt kontinuirlich in das File.
deshalb auch der knappe zeit Rahmen von unter 5 sec, weil eine neue Messung um die 6 sec liegt.
und bei einem bestimmten EAN-Code eine Meldung erscheinen soll.
ich denke, dass dann der enorme Zeitverlust, an "meinem" suchverfahren liegt.
dann werde ich jetzt mal versuchen , das zu umgehen.. . irgendwie
..warum mein Rechner soo viel langsamer ist wie deiner.. kann ich dir leider nicht sagen ..
danke noch mal ...
Hallo BusFix
deine Version
[autoit][/autoit][autoit][/autoit][autoit]#include <Array.au3>
#include <File.au3>
$file = "log.log"
[/autoit][autoit][/autoit][autoit]$lines = _FileCountLines($file)
[/autoit][autoit][/autoit][autoit];MsgBox(0,"lines",$lines)
[/autoit][autoit][/autoit][autoit];MsgBox(0, 'Inhalt letzte Zeile', FileReadLine($file, $lines))
[/autoit][autoit][/autoit][autoit];$file = FileOpen($file, 0)
[/autoit][autoit][/autoit][autoit]Dim $avArray[1]
[/autoit][autoit][/autoit][autoit]$lines=$lines-20
[/autoit][autoit][/autoit][autoit]While 1
[/autoit][autoit][/autoit][autoit][/autoit][autoit]$line = FileReadLine($file,$lines)
If @error = -1 Then ExitLoop
$result =StringInStr($line,"EAN-Code:")
If $result = 1 Then
$ean = StringTrimLeft ( $line, 10 )
_ArrayAdd( $avArray,$ean)
[/autoit][autoit][/autoit][autoit]EndIf
[/autoit][autoit][/autoit][autoit]$lines=$lines+1
[/autoit][autoit][/autoit][autoit]WEnd
[/autoit][autoit][/autoit][autoit]FileClose($file)
[/autoit][autoit][/autoit][autoit];_ArrayDisplay( $avArray, "Updated Array" )
[/autoit][autoit][/autoit][autoit]$last=UBound($avArray)
[/autoit][autoit][/autoit][autoit]$last = $avArray[$last-1]
[/autoit][autoit][/autoit][autoit]MsgBox(0,"letzter Eintrag","der letzte eintrag war "&$last)
[/autoit]bringt beachtliche 38 SEC !!!
ist ja schon "fast" GUT ! ![]()
32 SEC sollten noch weg .. noch ein Vorschlag ?
Vielen Vielen DANK ! !
Hallo AutoBert
habe deine Version gerade getestet.
gestoppte 2:36 Minuten .. bei 10253 Einträgen
.. im Gegensatz zu 2:02 Minuten mit meiner Version..
alternative ? muss unter 5 sec kommen ..
aber trotzdem Danke !!
Hi@ all
Hab da mal ne Frage:
Habe mir ein Skript gebastelt, welches mir den LETZTEN Wert in einer Zeile in einem Log-File ausgibt.
#include <Array.au3>
$file = "log.log"
$file = FileOpen($file, 0)
Dim $avArray[1]
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
$result =StringInStr($line,"EAN-Code:")
If $result = 1 Then
$ean = StringTrimLeft ( $line, 10 )
_ArrayAdd( $avArray,$ean)
EndIf
WEnd
FileClose($file)
;_ArrayDisplay( $avArray, "Updated Array" )
$last=UBound($avArray)
$last = $avArray[$last-1]
MsgBox(0,"letzter Eintrag","der letzte eintrag war "&$last)
log-FILE :
----------------------------------------
[08-24-2009 - 11:02:03]:
Version: Ver. 2.04
EAN-Code: 4022709224101
Variante: 19
EEPROM Format: Ver. 09.00
Quarzabweichung: 7.65[s/d] abgeglichen auf +0.00[s/d]
Temperatur: 24.09[°C]
----------------------------------------
[08-24-2009 - 11:03:03]:
Version: Ver. 2.04
EAN-Code: 4025709224101
Variante: 20
EEPROM Format: Ver. 09.00
Quarzabweichung: 7.65[s/d] abgeglichen auf +0.00[s/d]
Temperatur: 24.09[°C]
----------------------------------------
####
so : Funktioniert super. . . ABER viel zu langsam !!
die Files haben in der regel 2 MB ( Monatsweise )
Die Ausgabe dauert rund 40 Sek.
Hat jemand ne Idee, wie des schneller gehen kann ?
Irgend wie File von hinten her lesen ?
oder kurz vor Ende anfangen ? irgend wie sowas ..
DANKE !
kannst du den pfad, des web servers "fest" anbinden ?
als zusätzliche festplatte oder so ?
wie es z.B mit servern funktioniert ?
weil dann kannst du ganz normal einfach den pfad angeben.
hab auch ne ini auf m server liegen, funktioniert super .. auch wenn mehrere scripte darauf zu greifen..
soweit ..
bye
Hallo,
Arbeite viel mit Barcode Systemen,
"normalerweile" gibt es für jeden Scanner ein umrüst Kabel ..
USB, oder RS232 ..
dann haste du das Problem auch nicht mehr.
Die PS2 Variante ist total unbrauchbar ..
Preisunterschiede gibt's eigentlich auch nicht.
Würde dir raten mal mit der RS232 Lösung anzufangen. Wenn du für autoit dort hilfe brauchst, kann ich dir gerne skript material zu kommen lassen.
Ich verwende die Datalogic Touch 65 Serie ( kostet komplett 65 Euro mit USB )
Wie du deine Probleme beheben kannst, kann ich dir leider auch nicht weiter helfen, aber wenn es einfach wäre, würden es bestimmt von einem Barcodehersteller ähnliche Software geben.
Gibt es aber nicht.
Wundert mich sowieso, wie du die F10 vor deinen Barcode setzen kannst.
soweit ...
bye
Hallo ,
Kennt sich jemand mit ABAS-ERP aus ?
würde gerne einen USER mit autoIT imitieren. Und somit Daten auslesen.
Der weg über MySQL ( ABAS => MySQL => autoit => MySQL => ABAS ) soll "anscheinend" funktionieren, weis aber nicht wie ...
Jemand einen TIP ?
THX !
bye
was willst denn genau wissen ?!
ich versteh irgend wie deine frage nicht ...
wenn du ein login machen willst, und in abhängigkeit dieses login ein bild aufrufen willst ..
dann must du ja eine "auswahl " treffen ..
z.B
[autoit]
#include <GuiConstantsEx.au3>
$gui_breite = 1024;( @DesktopWidth / 2 ) ; Variable um Gui in der mitte de desktops zu platzieren
$gui_hoehe = 600;( @DesktopHeight/ 2 ) ; Variable um Gui in der mitte de desktops zu platzieren
Opt("GUIOnEventMode", 1) ; Change to OnEvent mode , damit gui protokoll anderst abgearbeitet wird ( mit funktionen , nicht case )
[/autoit][autoit][/autoit][autoit]$mainwindow = GUICreate("login .. bla bla " & @ScriptName, $gui_breite, $gui_hoehe, (@DesktopWidth / 2) - ($gui_breite / 2), (@DesktopHeight / 2) - ($gui_hoehe / 2)) ; Gui erstellen mainwindow
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") ; wenn event $GUI_EVENT_CLOSE aktiviert wird, wird funktion "CLOSEClicked" aufgerufen
$bild1_quelle = (@ScriptDir & "\bilder\bild1.jpg")
$bild2_quelle = (@ScriptDir & "\bilder\bild2.jpg")
$bild3_quelle = (@ScriptDir & "\bilder\bild3.jpg")
$bild_offset_breite = 464 ;$gui_breite / 2
[/autoit][autoit][/autoit][autoit]$bild_breite = 537;$gui_breite / 2
$bild_hoehe = 401;$gui_hoehe /2
$bild_offset_hoehe = 176 ;$gui_hoehe /2
[/autoit][autoit][/autoit][autoit]$bild1 = GUICtrlCreatePic($bild1_quelle, $bild_offset_breite, $bild_offset_hoehe, $bild_breite, $bild_hoehe)
;GUICtrlCreatePic ( filename, left, top [, width [, height [, style [, exStyle]]]] )
GUICtrlSetState($bild1, $GUI_HIDE)
$bild2 = GUICtrlCreatePic($bild2_quelle, $bild_offset_breite, $bild_offset_hoehe, $bild_breite, $bild_hoehe)
GUICtrlSetState($bild2, $GUI_HIDE)
$bild3 = GUICtrlCreatePic($bild3_quelle, $bild_offset_breite, $bild_offset_hoehe, $bild_breite, $bild_hoehe)
GUICtrlSetState($bild3, $GUI_HIDE)
; hier deine auswahl
[/autoit][autoit][/autoit][autoit]$login = InputBox("login","bitte zahl zwischen 1 und 3 eingeben")
[/autoit][autoit][/autoit][autoit]If $login = "1" Then
GUICtrlSetState($bild1, $GUI_show)
ElseIf $login = "2" Then
GUICtrlSetState($bild2, $GUI_show)
ElseIf $login = "3" Then
GUICtrlSetState($bild3, $GUI_show)
EndIf
[/autoit][autoit][/autoit][autoit]GUISetState(@SW_SHOW) ; starten des gui ! ( ausführung)
[/autoit][autoit][/autoit][autoit][/autoit][autoit]While 1
[/autoit][autoit][/autoit][autoit]; und hier dein übriger code
[/autoit][autoit][/autoit][autoit]sleep(250)
[/autoit][autoit][/autoit][autoit]WEnd
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]Func CLOSEClicked()
[/autoit][autoit][/autoit][autoit]Exit
[/autoit][autoit][/autoit][autoit]EndFunc ;==>CLOSEClicked
[/autoit]noch bilder angeben .. dann müste es funktionieren .. .. wenn ich verstanden hab, was du überhaupt willst ..
bye
;; http://www.autoitscript.com/forum/index.ph…41&#entry681941
[/autoit][autoit][/autoit][autoit]#Include <GUIConstantsEx.au3>
[/autoit][autoit][/autoit][autoit]Opt('WinTitleMatchMode', 3)
[/autoit][autoit][/autoit][autoit]global const $TITLE_SENDER = '#Sender'
global const $TITLE_RECEIVER = '#Reseiver'
global const $WM_COPYDATA = 0x004A
global $sMsg, $Dummy, $Flag = 0
[/autoit][autoit][/autoit][autoit];;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[/autoit][autoit][/autoit][autoit]if WinExists($TITLE_RECEIVER) then
if WinExists($TITLE_SENDER) then
exit
endif
_Sender()
else
_Receiver()
endif
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[/autoit][autoit][/autoit][autoit][/autoit][autoit]func _Sender()
[/autoit][autoit][/autoit][autoit]local $Input, $Button, $ID
[/autoit][autoit][/autoit][autoit]GUICreate($TITLE_SENDER, 400, 100)
$Input = GUICtrlCreateinput('', 20, 20, 360, 20)
$Button = GUICtrlCreateButton('Send', 165, 60, 70, 23)
$Dummy = GUICtrlCreateDummy()
GUIRegisterMsg($WM_COPYDATA, '_WM_COPYDATA')
GUISetState()
while 1
$ID = GUIGetMsg()
switch $ID
case 0
continueloop
case $GUI_EVENT_CLOSE
_SendData(WinGetHandle($TITLE_RECEIVER), '@exit')
exitloop
case $Button
$sMsg = GUICtrlRead($Input)
$hWnd = WinGetHandle($TITLE_RECEIVER)
if (not @error) and ($sMsg > '') then
if _SendData($hWnd, $sMsg) then
GUICtrlSetState($Button, $GUI_DISABLE)
endif
endif
case $Dummy
GUICtrlSetState($Button, $GUI_ENABLE)
endswitch
wend
GUIDelete()
endfunc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[/autoit][autoit][/autoit][autoit][/autoit][autoit]func _Receiver()
GUICreate($TITLE_RECEIVER)
GUIRegisterMsg($WM_COPYDATA, '_WM_COPYDATA')
while 1
Sleep(10)
if $Flag then
if $sMsg = '@exit' then
exitloop
endif
$Flag = 0
_DoSomething($sMsg)
_SendData(WinGetHandle($TITLE_SENDER), '')
endif
wend
GUIDelete()
endfunc; _Receiver
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[/autoit][autoit][/autoit][autoit][/autoit][autoit]func _DoSomething($sData)
MsgBox(0, 'Message', $sData)
endfunc; _DoSomething
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[/autoit][autoit][/autoit][autoit][/autoit][autoit]func _SendData($hWnd, $sData)
[/autoit][autoit][/autoit][autoit]local $tCOPYDATA, $tMsg
[/autoit][autoit][/autoit][autoit]$tMsg = DllStructCreate('char[' & StringLen($sData) + 1 & ']')
DllStructSetData($tMsg, 1, $sData)
$tCOPYDATA = DllStructCreate('dword;dword;ptr')
DllStructSetData($tCOPYDATA, 2, StringLen($sData) + 1)
DllStructSetData($tCOPYDATA, 3, DllStructGetPtr($tMsg))
$Ret = DllCall('user32.dll', 'lparam', 'SendMessage', 'hwnd', $hWnd, 'int', $WM_COPYDATA, 'wparam', 0, 'lparam', DllStructGetPtr($tCOPYDATA))
if (@error) or ($Ret[0] = -1) then
return 0
endif
return 1
endfunc; _SendData
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[/autoit][autoit][/autoit][autoit][/autoit][autoit]func _WM_COPYDATA($hWnd, $msgID, $wParam, $lParam)
[/autoit][autoit][/autoit][autoit]local $tCOPYDATA = DllStructCreate('dword;dword;ptr', $lParam)
local $tMsg = DllStructCreate('char[' & DllStructGetData($tCOPYDATA, 2) & ']', DllStructGetData($tCOPYDATA, 3))
$sMsg = DllStructGetData($tMsg, 1)
[/autoit][autoit][/autoit][autoit]; For Sender
GUICtrlSendToDummy($Dummy)
; For Receiver
$Flag = 1
return 0
endfunc; _WM_COPYDATA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[/autoit]ich find's einfach nur GEIL !!
schon mal die control... funktionen probiert ?!
wäre jetzt das einzige .. was mir dazu einfällt ..
was isch n des für n programm ?!
du kannst die koordinaten durch einen beliebigen wert teilen .. oder multiplizieren .. und könntest somit deine "eigene" auflösung bekommen ..
z.B.
desktop 1680 * 1050
gui aber nur 800*600
gewünschte auflösung 100 teiler auf 800
800/100 = 8 pixel pro teiler ..
dein gui passt 2,1 mal in dein desctop ..
also würde ich jetzt mal sagen ..
$X_pos = ($mauswert_breit/2.1)/8
.. oder verstehe ich dich jetzt falsch ?!
die koordinaten der maus kannst du auslesen ..
die plazierung des gui auch ...
die größe des gui auch ..
und die größe des bildes .. ist ja klar ..
der rest ist ne große rechenaufgabe ..
viel spaß
schleifen ..
..
do while ..
while ..
for ...
ich würde for nehmen ..
da du ja ne gewissen anzahl schon hast .. und keine bedingung ..
functionen würde ich nicht nehmen ..
.. klar kannst du das was gemacht werden soll in eine func schreiben .. aber dann must du diese trotzdem X* aufrufen ...
lesbahrer ist es allemal ..
bye