hi ..
hier fiel mein Name ?
wo liegt den das Problem ?
von meiner UDF kommt ein Array zurück, dass du auch als solches auswerten musst.
sonnst kommt natürlich ein Fehler ..
bye
hi ..
hier fiel mein Name ?
wo liegt den das Problem ?
von meiner UDF kommt ein Array zurück, dass du auch als solches auswerten musst.
sonnst kommt natürlich ein Fehler ..
bye
kann jemand mal den Thread als gelöst markieren ?
gib mal den Source her ... dann guck ich mir des gern an ..
denke da liegt der Hund wo anderst begraben ..
in der webcam.au3 ..
in der Funktion :: _WebcamClose($sId)
fehlt DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_STOP , "int", 0, "int", 0)
... und wenn man es genau nimmt auch :: DllClose($avi) ..
würde ich jetzt so sagen .. .. test's ,mal aus ..
... also ich würde mich ja echt gerne produktiv beteiligen,
ich verstehe aber immer noch nicht, was hier eigentlich das Ziel sein soll . . .
kannst du mal in verständlichen zusammenhängenden Sätzen formulieren, was dein Script eigentlich machen soll......
oder zumindest mal deine Anfänge posten .. damit man sich das mal angucken kann ....
hi @ all ,
hab da mal ne Frage.
hier ist ein Progrämmle, mit dem man ein Web-Cam steam um 90 grad drehen kann.
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <ClipBoard.au3>
Opt("TrayIconHide", 1)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$Gridstep=50 ;Abstand zwischen den Pixeln zum Abtasten
[/autoit] [autoit][/autoit] [autoit]$sensitivity = 15 ;Empfindlichkeit
[/autoit] [autoit][/autoit] [autoit]$gui_x=300;@DesktopWidth-(@DesktopWidth/8)
$gui_y=300;@DesktopHeight-(@DesktopHeight/8)
$top = $CMDLINE[4] ;150
$left = $CMDLINE[3] ;160
$TopDebug = $CMDLINE[6] ;162
$LeftDebug = $CMDLINE[5] ;637
$drehwinkel = $CMDLINE[7] ;90
$picx = 640
$picy = 480
$width=$gui_x
[/autoit] [autoit][/autoit] [autoit]$cam_xlength=400;(1.3*($width/2)-(2*($width/20)));300 ;Breite (1.3*($width/2)-(2*($width/20)))
$cam_ylength=400;( $width/2)-(2*($width/20));300 ;Höhe ( $width/2)-(2*($width/20))
;HotKeySet("{END}", "Quit");
HotKeySet("{INSERT}", "SnapShot")
Global $snapfile[4]
$snapfile[0] = @ScriptDir & "\MusterBilder\scrshot1.jpg"
$snapfile[1] = @ScriptDir & "\MusterBilder\scrshot2.jpg"
$snapfile[2] = @ScriptDir & "\MusterBilder\scrshot3.jpg"
$snapfile[3] = @ScriptDir & "\MusterBilder\scrshot4.jpg"
$snapcount = 0
$tempbild = @ScriptDir & "\temp.bmp"
#include-once
$WM_CAP_START = 0x400
$WM_CAP_UNICODE_START = $WM_CAP_START +100
$WM_CAP_PAL_SAVEA = $WM_CAP_START + 81
$WM_CAP_PAL_SAVEW = $WM_CAP_UNICODE_START + 81
$WM_CAP_UNICODE_END = $WM_CAP_PAL_SAVEW
$WM_CAP_ABORT = $WM_CAP_START + 69
$WM_CAP_DLG_VIDEOCOMPRESSION = $WM_CAP_START + 46
$WM_CAP_DLG_VIDEODISPLAY = $WM_CAP_START + 43
$WM_CAP_DLG_VIDEOFORMAT = $WM_CAP_START + 41
$WM_CAP_DLG_VIDEOSOURCE = $WM_CAP_START + 42
$WM_CAP_DRIVER_CONNECT = $WM_CAP_START + 10
$WM_CAP_DRIVER_DISCONNECT = $WM_CAP_START + 11
$WM_CAP_DRIVER_GET_CAPS = $WM_CAP_START + 14
$WM_CAP_DRIVER_GET_NAMEA = $WM_CAP_START + 12
$WM_CAP_DRIVER_GET_NAMEW = $WM_CAP_UNICODE_START + 12
$WM_CAP_DRIVER_GET_VERSIONA = $WM_CAP_START + 13
$WM_CAP_DRIVER_GET_VERSIONW = $WM_CAP_UNICODE_START + 13
$WM_CAP_EDIT_COPY = $WM_CAP_START + 30
$WM_CAP_END = $WM_CAP_UNICODE_END
$WM_CAP_FILE_ALLOCATE = $WM_CAP_START + 22
$WM_CAP_FILE_GET_CAPTURE_FILEA = $WM_CAP_START + 21
$WM_CAP_FILE_GET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 21
$WM_CAP_FILE_SAVEASA = $WM_CAP_START + 23
$WM_CAP_FILE_SAVEASW = $WM_CAP_UNICODE_START + 23
$WM_CAP_FILE_SAVEDIBA = $WM_CAP_START + 25
$WM_CAP_FILE_SAVEDIBW = $WM_CAP_UNICODE_START + 25
$WM_CAP_FILE_SET_CAPTURE_FILEA = $WM_CAP_START + 20
$WM_CAP_FILE_SET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 20
$WM_CAP_FILE_SET_INFOCHUNK = $WM_CAP_START + 24
$WM_CAP_GET_AUDIOFORMAT = $WM_CAP_START + 36
$WM_CAP_GET_CAPSTREAMPTR = $WM_CAP_START + 1
$WM_CAP_GET_MCI_DEVICEA = $WM_CAP_START + 67
$WM_CAP_GET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 67
$WM_CAP_GET_SEQUENCE_SETUP = $WM_CAP_START + 65
$WM_CAP_GET_STATUS = $WM_CAP_START + 54
$WM_CAP_GET_USER_DATA = $WM_CAP_START + 8
$WM_CAP_GET_VIDEOFORMAT = $WM_CAP_START + 44
$WM_CAP_GRAB_FRAME = $WM_CAP_START + 60
$WM_CAP_GRAB_FRAME_NOSTOP = $WM_CAP_START + 61
$WM_CAP_PAL_AUTOCREATE = $WM_CAP_START + 83
$WM_CAP_PAL_MANUALCREATE = $WM_CAP_START + 84
$WM_CAP_PAL_OPENA = $WM_CAP_START + 80
$WM_CAP_PAL_OPENW = $WM_CAP_UNICODE_START + 80
$WM_CAP_PAL_PASTE = $WM_CAP_START + 82
$WM_CAP_SEQUENCE = $WM_CAP_START + 62
$WM_CAP_SEQUENCE_NOFILE = $WM_CAP_START + 63
$WM_CAP_SET_AUDIOFORMAT = $WM_CAP_START + 35
$WM_CAP_SET_CALLBACK_CAPCONTROL = $WM_CAP_START + 85
$WM_CAP_SET_CALLBACK_ERRORA = $WM_CAP_START + 2
$WM_CAP_SET_CALLBACK_ERRORW = $WM_CAP_UNICODE_START + 2
$WM_CAP_SET_CALLBACK_FRAME = $WM_CAP_START + 5
$WM_CAP_SET_CALLBACK_STATUSA = $WM_CAP_START + 3
$WM_CAP_SET_CALLBACK_STATUSW = $WM_CAP_UNICODE_START + 3
$WM_CAP_SET_CALLBACK_VIDEOSTREAM = $WM_CAP_START + 6
$WM_CAP_SET_CALLBACK_WAVESTREAM = $WM_CAP_START + 7
$WM_CAP_SET_CALLBACK_YIELD = $WM_CAP_START + 4
$WM_CAP_SET_MCI_DEVICEA = $WM_CAP_START + 66
$WM_CAP_SET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 66
$WM_CAP_SET_OVERLAY = $WM_CAP_START + 51
$WM_CAP_SET_PREVIEW = $WM_CAP_START + 50
$WM_CAP_SET_PREVIEWRATE = $WM_CAP_START + 52
$WM_CAP_SET_SCALE = $WM_CAP_START + 53
$WM_CAP_SET_SCROLL = $WM_CAP_START + 55
$WM_CAP_SET_SEQUENCE_SETUP = $WM_CAP_START + 64
$WM_CAP_SET_USER_DATA = $WM_CAP_START + 9
$WM_CAP_SET_VIDEOFORMAT = $WM_CAP_START + 45
$WM_CAP_SINGLE_FRAME = $WM_CAP_START + 72
$WM_CAP_SINGLE_FRAME_CLOSE = $WM_CAP_START + 71
$WM_CAP_SINGLE_FRAME_OPEN = $WM_CAP_START + 70
$WM_CAP_STOP = $WM_CAP_START + 68
$avi = DllOpen("avicap32.dll")
$user = DllOpen("user32.dll")
$gui_name=$CMDLINE[1]
[/autoit] [autoit][/autoit] [autoit];$gui = GUICreate($gui_name,$gui_x,$gui_y)
;$gui = GUICreate($gui_name,$gui_x,$gui_y, $top, $left, $WS_BORDER, $WS_EX_TOPMOST)
;$gui = GUICreate("sodele", 1600, 1000, 0, 0, -1, $WS_EX_TOPMOST) ; generierung des haupt fensters
;$WebcamID = _WebcamOpen($gui, 0, 0, $cam_xlength, $cam_ylength)
;$WebcamID = _WebcamOpen($gui, 10, 10, $cam_xlength, $cam_ylength)
$WebcamID = _WebcamOpen($CMDLINE[2], $leftDebug, $topDebug, $cam_xlength, $cam_ylength)
;GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]$hMatrix = _GDIPlus_MatrixCreate()
;_GDIPlus_MatrixTranslate($hMatrix, $left+$picy, $top)
_GDIPlus_MatrixTranslate($hMatrix, $left, $top+$picx)
_GDIPlus_MatrixRotate($hMatrix, $drehwinkel)
;$hGraphic = _GDIPlus_GraphicsCreateFromHWND($gui)
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($CMDLINE[1])
_GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix)
While 1
[/autoit] [autoit][/autoit] [autoit]sleep(5)
[/autoit] [autoit][/autoit] [autoit]$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then
_WebcamClose($WebcamID)
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
Exit
EndIf
_Drehen()
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
Exit
Func SnapShot()
_WebcamSnap($WebcamID, $snapfile[$snapcount])
$snapcount += 1
EndFunc
Func Quit()
_WebcamClose($WebcamID)
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
Exit
EndFunc
Func _Drehen()
DllCall($user, "int", "SendMessage", "hWnd", $WebcamID, "int", $WM_CAP_GRAB_FRAME_NOSTOP, "int", 0, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $WebcamID, "int", $WM_CAP_EDIT_COPY, "int", 0, "int", 0)
sleep(10)
_ClipBoard_Open ($CMDLINE[2])
$hImageCB = _ClipBoard_GetDataEx ($CF_BITMAP )
;If $hImageCB = 0 Then _WinAPI_ShowError ("Mist hImageCB")
$hImage = _GDIPlus_BitmapCreateFromHBITMAP( $hImageCB )
;If $hImage = 0 Then _WinAPI_ShowError ("Mist hImage")
_WinAPI_DeleteObject($hImageCB)
_ClipBoard_Close ()
;$iWidth = _GDIPlus_ImageGetWidth($hImage) * 96 / _GDIPlus_ImageGetVerticalResolution($hImage)
;$iHeight = _GDIPlus_ImageGetHeight($hImage) * 96 / _GDIPlus_ImageGetHorizontalResolution($hImage)
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
;_GDIPlus_ImageDispose($hImage)
_GDIPlus_BitmapDispose($hImage)
EndFunc
;===============================================================================
;
; Description: Open's a webcam preview screen in your gui
; Syntax: _WebcamOpen($sHwnd, $sLeft, $sTop, $sWidth, $sHeight)
; Parameter(s): $sHwnd - The handle of the gui
; $sLeft - Left coord. of the preview screen
; $sTop - Top coord. of the preview screen
; $sWidth - Width of the preview screen
; $sHeight - Height of the preview screen
; Requirement(s): A webcam
; Return Value(s): On Success - Returns id needed for other controls
; On Failure - Returns -1
; Author(s): Ludocus
; Note(s): None
;
;===============================================================================
func _WebcamOpen($sHwnd, $sLeft, $sTop, $sWidth, $sHeight)
;$cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,$WS_VISIBLE), "int", $sLeft, "int", $sTop, "int", $sWidth, "int", $sHeight, "hwnd", $sHwnd, "int", 1)
$cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,$WS_VISIBLE), "int", $sLeft, "int", $sTop, "int", $sWidth, "int", $sHeight, "hwnd", $sHwnd, "int", 1)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_CONNECT, "int", 0, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_SCALE, "int", 1, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_OVERLAY, "int", 1, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEW, "int", 1, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEWRATE, "int", 1, "int", 0)
if @error then return -1
return $cap[0]
EndFunc
;===============================================================================
;
; Description: Creates a Snapshot from a webcam
; Syntax: _WebcamSnap($sId, $sFile)
; Parameter(s): $sId - Id (returned from _WebcamOpen)
; $sFile - File to save the snapshot to (*.bmp)
; Requirement(s): A webcam
; Return Value(s): On Success - Returns 1
; On Failure - Returns 0
; Author(s): Ludocus
; Note(s): None
;
;===============================================================================
Func _WebcamSnap($sId, $sFile)
DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_GRAB_FRAME_NOSTOP, "int", 0, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $WebcamID, "int", $WM_CAP_EDIT_COPY, "int", 0, "int", 0)
sleep(10)
_ClipBoard_Open ($CMDLINE[2])
$hImageCB1 = _ClipBoard_GetDataEx ($CF_BITMAP )
If $hImageCB1 = 0 Then _WinAPI_ShowError ("Mist hImageCB1")
$hImage1 = _GDIPlus_BitmapCreateFromHBITMAP( $hImageCB1 )
If $hImage1 = 0 Then _WinAPI_ShowError ("Mist hImage1")
_ClipBoard_Close ()
$hMatrix1 = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixRotate($hMatrix1, $drehwinkel)
$hGraphic1 = _GDIPlus_ImageGetGraphicsContext($hImage1)
_GDIPlus_GraphicsSetTransform($hGraphic1, $hMatrix1)
;_GDIPlus_GraphicsDrawImage($hGraphic1, $hImage1, 0, 0)
_GDIPlus_ImageSaveToFile($hImage1, $sFile)
;_GDIPlus_BitmapDispose($hImage)
_GDIPlus_ImageDispose($hImage1)
_GDIPlus_MatrixDispose($hMatrix1)
_GDIPlus_GraphicsDispose($hGraphic1)
_WinAPI_DeleteObject($hImageCB1)
;ALT DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_FILE_SAVEDIBA, "int", 0, "str", $sFile)
if @error Then
return 0
Else
return 1
EndIf
EndFunc
;===============================================================================
;
; Description: Closes the preview screen created with _WebcamOpen
; Syntax: _WebcamClose($sId)
; Parameter(s): $sId - Id (returned from _WebcamOpen)
; Requirement(s): A webcam
; Return Value(s): On Success - Returns 1
; On Failure - Returns 0
; Author(s): Ludocus
; Note(s): None
;
;===============================================================================
Func _WebcamClose($sId)
DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_END, "int", 0, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_DRIVER_DISCONNECT, "int", 0, "int", 0)
DllClose($user)
if @error Then
return 0
Else
return 1
EndIf
EndFunc
soweit ist ja alles ganz gut .. und erfüllt seinen zweck.
jetzt stört mich aber die "dreh" Funktion ..
_ClipBoard_Open ($CMDLINE[2])
$hImageCB = _ClipBoard_GetDataEx ($CF_BITMAP )
;If $hImageCB = 0 Then _WinAPI_ShowError ("Mist hImageCB")
$hImage = _GDIPlus_BitmapCreateFromHBITMAP( $hImageCB )
;If $hImage = 0 Then _WinAPI_ShowError ("Mist hImage")
_WinAPI_DeleteObject($hImageCB)
_ClipBoard_Close ()
;$iWidth = _GDIPlus_ImageGetWidth($hImage) * 96 / _GDIPlus_ImageGetVerticalResolution($hImage)
;$iHeight = _GDIPlus_ImageGetHeight($hImage) * 96 / _GDIPlus_ImageGetHorizontalResolution($hImage)
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
;_GDIPlus_ImageDispose($hImage)
_GDIPlus_BitmapDispose($hImage)
im grunde genommen wird der Steam als Bild gespeichert, dann durch eine Matrix gedreht
und das unter Zuhilfenahme des _ClipBoard_ . . . . was ich echt MIST finde..
WEIL, wenn man z.B. ein Desctop- abbild macht, schiesst es einem den Video Steam zusammen.
.. schon weng störend .. und absolut nicht stabil ..
mir fällt aber absolut nicht ein, wie ich das anders lösen könnte.
jemand ne Idee ... oder n Tip ??
.. egal ob Leichenschänder oder nicht .. ich mache dinge gerne fertig ...
also hier ein komplett lauf fähiges Programm.
welches alle in einem Ordner befindlichen bmp oder jpg Dateien einliest, und via Zufall eines als Hintergrund darstellt.
#include <Array.au3>
#include <File.au3>
#include <gdiplus.au3>
Global Const $SPIF_UPDATEINIFILE = 0x01
Global Const $SPIF_SENDWININICHANGE = 0x02
Global Const $SPI_SETSCREENSAVEACTIVE = 0x11
Global Const $SPI_SETDESKWALLPAPER = 0x14
Global Const $SPI_GETDESKWALLPAPER = 0x73
Global $target = @ScriptDir & "\Wallpapers"
Global $aktuellesWP = $target & "\aktuell"
$ppic = _FileListToArray($target, "*.*")
[/autoit] [autoit][/autoit] [autoit];_ArrayDisplay($ppic,"test")
[/autoit] [autoit][/autoit] [autoit]$result = $ppic[0]
[/autoit] [autoit][/autoit] [autoit];MsgBox(0,"",$result)
[/autoit] [autoit][/autoit] [autoit]$random_nummer = Random(1, $result ,1)
[/autoit] [autoit][/autoit] [autoit];MsgBox(0,"",$random_nummer)
[/autoit] [autoit][/autoit] [autoit]dim $rpic = $ppic[$random_nummer]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];MsgBox(0,"",$rpic)
[/autoit] [autoit][/autoit] [autoit]Global $Bitmap = $target & "\"& $rpic
[/autoit] [autoit][/autoit] [autoit];MsgBox(0,"",$Bitmap)
[/autoit] [autoit][/autoit] [autoit]RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "TileWallpaper", "REG_SZ", "0")
RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "WallpaperStyle", "REG_SZ", "2")
$ext = StringTrimLeft($Bitmap, StringInStr($Bitmap, ".", -1))
[/autoit] [autoit][/autoit] [autoit];MsgBox(0,"",$ext)
[/autoit] [autoit][/autoit] [autoit]If not ($ext = "bmp") then
; MsgBox(0,"Hintergrundbild","Bild muss konvertiert werden.")
_GDIPlus_Startup()
$Bild = _GDIPlus_ImageLoadFromFile($Bitmap)
_GDIPlus_ImageSaveToFile($Bild, $aktuellesWP & "\wallpaper.bmp")
_GDIPlus_ImageDispose($Bild)
_GDIPlus_Shutdown()
Else
FileCopy($Bitmap, $aktuellesWP & "\wallpaper.bmp",1)
endif
[/autoit] [autoit][/autoit] [autoit];MsgBox(0,"",$aktuellesWP & "\wallpaper.bmp")
[/autoit] [autoit][/autoit] [autoit]if FileExists($aktuellesWP & "\wallpaper.bmp") Then
_SetDeskWallpaper($aktuellesWP & "\wallpaper.bmp")
Else
MsgBox(0,"Hintergrundbild","FEHLER - Bild existiert nicht")
EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];MsgBox(0,"EXIT","Exit")
[/autoit] [autoit][/autoit] [autoit]Exit
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];#####################################################################################
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _SetDeskWallpaper($Filename)
[/autoit] [autoit][/autoit] [autoit]DllCall("user32.dll", "long", "SystemParametersInfo" _
, "long", $SPI_SETDESKWALLPAPER _
, "long", 0 _
, "str", $Filename _
, "long", BitOR($SPIF_UPDATEINIFILE, $SPIF_SENDWININICHANGE) _
)
;MsgBox(0,"",$Filename & " Als Hintergrund übernommen")
EndFunc ;==>_SetDeskWallpaper
Func _GetDeskWallpaper()
Local $Filename = DllStructCreate("char[256]")
DllCall("user32.dll", "long", "SystemParametersInfo" _
, "long", $SPI_GETDESKWALLPAPER _
, "long", 255 _
, "ptr", DllStructGetPtr($Filename) _
, "long", 0 _
)
Return DllStructGetData($Filename, 1)
EndFunc ;==>_GetDeskWallpaper
;--------------------------------------------------------;
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit].. viel spaß, für den, den's noch interessiert ..
müsste Zeile 8 deines Spoilers nicht
$ppic = _FileListToArray("C:\Dokumente und Einstellungen\Nickname\Eigene Dateien\Eigene Bilder", "*.*")
anstelle von $ppic = _FileListToArray("C:\Dokumente und Einstellungen\Nickname\Eigene Dateien\Eigene Bilder", "*.jpg")
heissen ?
weil er ja sonst gar keine bmp in das array übernimmt. . .
oder täusche ich mich da jetzt ...
mmm sehr schön ..
jetzt muss ich nur noch raus finden, wie das mit c++ express dll funktioniert ..
das wunder schöne tool bringt nämlich n error..
error : 'c:\dokumente und einstellungen\ich\eigene dateien\visual studio 2008\projects\get_back\debug\get_back.dll' has no valid CLR header and cannot be disassembled
jemand n tip ?
da gibt's n paar möglichkeiten ..
erstens über die "commMG.dll " . mit entsprechender au3 .. ( müste ab V2,8 die signale bereitstellen, die du willst ..
oder über die Windows standart .. MSCOMM32.OCX ....
.. dann z.b. mit ..
$MsComm1 = ObjCreate("MSCOMMLib.MsComm.1") ; überprüfung ob sich objekt com generieren lässt
if not IsObj($MsComm1) then ; wenn nicht dann
MsgBox(0,"Fehler"," Kann datei : mscomm32.ocx : nicht im system finden. Installation läuft")
FileInstall("MSCOMM32.OCX", EnvGet("SystemRoot") & "\System32\MSCOMM32.OCX") ; installation der mscomm32.ocx
Run(@ComSpec & " /c C:\WINDOWS\SYSTEM32\REGSVR32.EXE C:\WINDOWS\SYSTEM32\MSCOMM32.OCX") ; ausführung
RegWrite("HKEY_CLASSES_ROOT\Licenses\DB4C0D00-400B-101B-A3C9-08002B2F49FB", "", "REG_SZ", "mgkgtgnnmnmninigthkgogggvmkhinjggnvm") ; registration
RegWrite("HKEY_CLASSES_ROOT\Licenses\7BC20EDC-4A42-101B-A3C9-08002B2F49FB", "", "REG_SZ", "gifblihbhiiihbciocfbkifbqcfcdiebbiqh") ; registration
$MsComm1 = ObjCreate("MSCOMMLib.MsComm.1") ; erneute überprüfung ob sich objekt com generieren lässt
endif
$MsComm1.Settings = "110,N,8,1"; settings für com
$MsComm1.Handshaking = 1 ; settings für com
;$MsComm1.InBufferSize = 1
$MsComm1.InputLen = 20 ; settings für com
$MSComm1.DTREnable = 1 ; setzt dtr signal hi
;MsgBox(0,"",IniRead($wrkdir&$targets,"SETUP","COM","FEHLER"))
$MsComm1.CommPort = IniRead($wrkdir&$targets,"SETUP","COM","FEHLER") ; settings für com
$MsComm1.PortOpen = 1 ; settings für com setzt com-port .. reservierung für script
If NOT $MsComm1.PortOpen = True then ; überprüfung ob reservierung gelungen
MsgBox(0,"ERROR","kann PORT nicht Öffnen") ; error meldung
Exit ; exit
EndIf
zum initialisieren .. und mit
While $MsComm1.CtsHolding="-1"
[/autoit] [autoit][/autoit] [autoit]oder
[/autoit] [autoit][/autoit] [autoit]$MSComm1.RTSEnable = $zustand
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]oder
[/autoit] [autoit][/autoit] [autoit]$MSComm1.DTREnable = 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]die kalälchen ansprechen .. was willste denn damit machen ? .. ne richtige communikation kriegste damit nicht hin .. oder halt mit viel vielarbeit ..
recht grad dafür um n lämpchen am PC blinken zu lassen .. ( obwohl cih die leitungen auch schon mal vergewohltätigt hab .. ![]()
hoffe ich konnte helfen ..
hier ne udf...
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.0.0
Author: myName
Script Function:
handles the k8055d.dll 2009.10.19
#ce ----------------------------------------------------------------------------
func USB_DLLOpen()
DllOpen(@ScriptDir & "\" & "k8055D_multi.dll") ; öffnen der DLL
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit];----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]Func initial_board($address)
[/autoit] [autoit][/autoit] [autoit]$begin = TimerInit()
Do
$result = USBOpenDevice($address)
Sleep(250)
$dif = TimerDiff($begin)
[/autoit] [autoit][/autoit] [autoit]If $dif > "4000" Then ExitLoop
[/autoit] [autoit][/autoit] [autoit]Until $result = 1
[/autoit] [autoit][/autoit] [autoit]ClearAllDigital($address)
[/autoit] [autoit][/autoit] [autoit]Sleep(250)
[/autoit] [autoit][/autoit] [autoit]SetDigitalChannel($address, "8")
[/autoit] [autoit][/autoit] [autoit]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
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]EndFunc ;==>initial_board
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]Func USBOpenDevice($address)
[/autoit] [autoit][/autoit] [autoit]$result = DllCall("k8055D_multi.dll", "long", "OpenDevice", "long", $address)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]If $result[0] = $address Then
Return "1"
Else
;MsgBox(0, "ERROR", "Keine Verbindung zu USB BOARD ADRESSE " & $address & " !!", 2)
;exit
Return "0"
EndIf
EndFunc ;==>USBOpenDevice
[/autoit] [autoit][/autoit] [autoit];---------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]Func CloseAllDevice()
$res = DllCall("k8055D_multi.dll", "none", "CloseDevice")
DllClose(@ScriptDir & "\" & "k8055D_multi.dll") ; öffnen der DLL
EndFunc ;==>USBCloseDevice
[/autoit] [autoit][/autoit] [autoit];---------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]Func SearchDevices()
[/autoit] [autoit][/autoit] [autoit]$result = DllCall("k8055D_multi.dll", "long", "SearchDevices")
[/autoit] [autoit][/autoit] [autoit]Return $result[0]
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit];---------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]Func USBCloseDevice($address)
SetCurrentDevice($address)
$res = DllCall("k8055D_multi.dll", "none", "CloseDevice")
;Return ;;$result[0]
EndFunc ;==>USBCloseDevice
;---------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]Func ClearAllDigital($address)
SetCurrentDevice($address)
$res = DllCall("k8055D_multi.dll", "int", "ClearAllDigital")
EndFunc ;==>ClearAllDigital
;----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]Func SetCurrentDevice($address)
[/autoit] [autoit][/autoit] [autoit]$begin = TimerInit()
Do
$result = DllCall("k8055D_multi.dll", "long", "SetCurrentDevice", "int", $address)
[/autoit] [autoit][/autoit] [autoit];ToolTip($address&"="&$result[0],0,0)
$dif = TimerDiff($begin)
If $dif > "4000" then ExitLoop
[/autoit] [autoit][/autoit] [autoit]Until $address = $result[0]
[/autoit] [autoit][/autoit] [autoit];ToolTip("",0,0)
[/autoit] [autoit][/autoit] [autoit]If $address = $result[0] Then
;nix
Else
MsgBox(0, "", "adresse = " & $address & " result = " & $result[0])
EndIf
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>SetCurrentDevice
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]Func SetDigitalChannel($address, $channel)
SetCurrentDevice($address)
DllCall("k8055D_multi.dll", "none", "SetDigitalChannel", "int", $channel)
EndFunc ;==>SetDigitalChannel
;---------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]Func ClearDigitalChannel($address, $channel)
SetCurrentDevice($address)
DllCall("k8055D_multi.dll", "none", "ClearDigitalChannel", "int", $channel)
EndFunc ;==>ClearDigitalChannel
;---------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]Func ReadAnalogChannel($address, $channel)
SetCurrentDevice($address)
$result = DllCall("k8055D_multi.dll", "int", "ReadAnalogChannel", "int", $channel)
Return $result[0]
EndFunc ;==>ReadAnalogChannel
;---------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]Func ReadAllDigital($address)
SetCurrentDevice($address)
$alldigit = DllCall("k8055D_multi.dll", "int", "ReadAllDigital")
Return $alldigit[0]
EndFunc ;==>ReadAllDigital
;---------------------------------------------------------------------------
Func ReadDigitalChannel($address, $sellect)
Dim $channel[6]
$channel[1] = 0
$channel[2] = 0
$channel[3] = 0
$channel[4] = 0
$channel[5] = 0
$wert = ReadAllDigital($address)
[/autoit] [autoit][/autoit] [autoit];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
[/autoit] [autoit][/autoit] [autoit]$channel[1] = 0
$channel[2] = 0
$channel[3] = 0
$channel[4] = 0
$channel[5] = 0
EndSelect
[/autoit] [autoit][/autoit] [autoit]If $channel[$sellect] = 1 Then
; MsgBox(0,"","return 1")
Return 1
Else
; MsgBox(0,"","return 0")
Return 0
EndIf
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>ReadDigitalChannel
;----------------------------------------------------------------------------
ich find's blöd ...
war echt ne gute sache ... musste man nicht immer soo sauber alles horten .. und konnt au mal schnell was nachgucken au wenn man die AU3 nimme hatte ...
.. überflüssige Lizenz Geschichte immer ..
hab ich das richtig verstanden ? du willst die msgbox ändern ?
.. soweit ich weis, geht das nicht ..
ist ne standardisierte Ausgabe .. die schon sehr stark angepasst werden kann durch msgbox(XXXX,"",.....)
anstelle der XXXX kannst du n weng variieren...
aber sowas wie diseable .. geht nicht ...
dazu must du dich in die GUI einarbeiten ..
ich hatte mal n ähnliches Problem
hier ist eine Funktion aus nem Programm,
Es durchsucht eine *.log Datei nach dem zuletzt eingetragenen EAN
da die Dateien recht groß werden wird hier von hinten her gearbeitet
vielleicht bringt's dich ja auf den richtigen weg ![]()
Func _get_last_log_ean($file)
$start = TimerInit() ;startet sicherheitstimer
[/autoit] [autoit][/autoit] [autoit]$file = FileRead($file)
[/autoit] [autoit][/autoit] [autoit];$ret = StringRegExp(FileRead($file), 'EAN-Code: \d+', 3)
$ret = StringRegExp($file, '(?:EAN-Code: )(\d+)', 3)
#cs
[/autoit] [autoit][/autoit] [autoit]'(?:EAN-Code: )(\d+)' - ist das Suchmuster (Pattern)
(?:EAN-Code: ) - erster Ausdruck in Klammern (Backreferenz) dient zum Finden des Strings (EAN...)
?: ist die Anweisung: diese Backreferenz im Ergebnis nicht aufführen
(\d+) - zweite Backreferenz, ist zu berücksichtigen.
\d bedeutet Ziffer, + ist ein Quantifier und heißt mindestens 1-mal bis beliebig oft
#ce
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];_ArrayDisplay($ret)
[/autoit] [autoit][/autoit] [autoit]$letzter_eintrag = UBound($ret) - 1
[/autoit] [autoit][/autoit] [autoit]$ean = $ret[$letzter_eintrag]
[/autoit] [autoit][/autoit] [autoit];ConsoleWrite($ean & @CRLF)
[/autoit] [autoit][/autoit] [autoit];ConsoleWrite('Zeit: ' & TimerDiff($start) & @CRLF)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Local $return[3]
$return[1] = $ean
$return[2] = TimerDiff($start)
Return $return
EndFunc ;==>_get_last_log_ean
[/autoit]Hi bugFix
hast du schon recht . . . die funktion ist nicht in der dll
Habe jetzt auch den grund für die Misere :
man benötigt eine Runtime-Engine . . . um die DLL auszuführen.
die DLL versucht wahrscheinlich in ihren Funktionen selbst auf die bemängelte "fehlende" Funktion zu zu greifen.
leider hab ich die DLL nicht selber geschrieben und habe somit keinen einblick in diese.
... habe die Runtime installiert .. ( von ni.com ) ist die CVI runtime 8.5
jetzt ist auch die Fehlermeldung weg.
allerdings muss man doch die dll mit "int" aufrufen nicht mit "int:cdecl" .. weil sonst autoIt abraucht.
leider bekomme ich noch keine Werte zurück von der Karte ..
muss wohl noch ein wenig rum spielen ..
DANKE !
hier ein beispiel ..
#include <GDIPlus.au3>
$drehwinkel=90
_GDIPlus_Startup()
$hGui = GUICreate("Test Rotate", 800, 600)
GUISetState()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Test.bmp")
$iWidth = _GDIPlus_ImageGetWidth($hImage) * 96 / _GDIPlus_ImageGetVerticalResolution($hImage)
$iHeight = _GDIPlus_ImageGetHeight($hImage) * 96 / _GDIPlus_ImageGetHorizontalResolution($hImage)
$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix, 400, 300)
;For $i = 1 To 360
_GDIPlus_MatrixRotate($hMatrix, $drehwinkel, "False")
_GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix)
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, -$iWidth / 2, -$iHeight / 2)
; Sleep(1)
;Next
While GUIGetMsg() <> -3
Sleep(10)
WEnd
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
must nur noch ein Bild umbenennen in "Test.bmp" und ins gleiche Verzeichnis legen.
wenn du das Bild kontinuierlich drehen lassen willsch,
must du "$drehwinkel=90" immer erhöhen .. oder verringern .. jeh nach dreh richtung .. und das script als funktion erneut aufrufen ..
ich guck mal ob ich da noch was rum liegen hab ..
hi Greenhorn !!
hab's mal versucht ... kommt leider genau der gleiche Fehler wie bei meinem Script
-> SetPanelCharacterSet in cvirte.dll nicht gefunden <- ? ??
hängt wahrscheinlich irgend was noch in der Luft was noch gefunden werden muss ..
Ich häng mich jetzt noch mal an die Initialisierungsparameter, vielleicht stimmt da was nicht.
Danke für dein Script . . habe die restlichen Parameter weg gelassen, weil ich dachte dass die nur für die Fehlerroutinen sind.
du hast "int:cdecl" eingesetzt .. hab mal ge googelt . . handelt sich also um einen Aufrufmethode . . hat was mit dem stack zugriff zu tun.
Woher weist du, dass man das hier verwenden muss ? Woran sieht man das ?
DANKE !
Hallo @ all
hab da n kleines Problemchen...
Ich versuche eine DLL anzusprechen mit einer Struktur.
ABER irgendwie glaube ich, funktioniert mein dllcall nicht, weis aber nicht, was ich da anderst machen soll.
hier mein Script
also wenn irgend jemand was auf fällt ... einfach mal los schreiben ..
DANKE !!
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: myName
Script Function:
NIdll ansprechen
#ce ----------------------------------------------------------------------------
#cs
#define BUFFERSIZE 256
#define NumberIOs 24
typedef struct
{
char name[BUFFERSIZE]; // Name der Karte
char port0[BUFFERSIZE]; // Name von Port0
char port1[BUFFERSIZE]; // Name von Port1
char port2[BUFFERSIZE]; // Name von Port2
BOOL ioPort0; // Input (TRUE) oder Output (FALSE)
BOOL ioPort1; // Input (TRUE) oder Output (FALSE)
BOOL ioPort2; // Input (TRUE) oder Output (FALSE)
int handle[NumberIOs]; // Maximal pro IO ein Handle
BOOL bits[NumberIOs]; // Eine Karte hat NumberIOs Bits.
} NICard;
;#########################################################
how to use:
niDll:
NI USB-Karten,
init_NICard (NICard *nicard, +Std)
öffnet die Handle für die einzelnen Ports.
Hierbei wird unterschieden zwischen Input/Output-Ports
Für einen Input-Port wird ein Handle aufgemacht,
für einen Output-Port wird für jedes Bit ein Handle aufgemacht,
so dass auch jedes Bit einzeln geschrieben werden kann.
write_NICard_bit (NICard *nicard, int bit, +Std)
schreibt ein einzelnes bit,
read_NICard (NICard *nicard, +Std)
liest alle Ports auf einmal und
shutdown_NICard (NICard *nicard, +Std)
schließt alle Handle.
genauer :
int init_NICard (NICard *nicard, char* reportText, short* errorOccured, long* errorCode, char* errorMsg);
int read_NICard (NICard *nicard, char* reportText, short* errorOccured, long* errorCode, char* errorMsg);
int write_NICard_bit (NICard *nicard, int bit, char* reportText, short* errorOccured, long* errorCode, char* errorMsg);
int shutdown_NICard (NICard *nicard, char* reportText, short* errorOccured, long* errorCode, char* errorMsg);
#ce
; strukturparameter
$str = "char name[256];char port0[256];char port1[256];char port2[256];BOOL ioPort0; BOOL ioPORT1;BOOL ioPORT2;int handle[24];BOOL bits[24]"
$nidll_Strukt = DllStructCreate($str) ; struktur generieren
DllStructSetData($nidll_Strukt,"name","test")
DllStructSetData($nidll_Strukt,"port0","A")
DllStructSetData($nidll_Strukt,"port1","B")
DllStructSetData($nidll_Strukt,"port2","C")
DllStructSetData($nidll_Strukt,"ioPort0",True)
DllStructSetData($nidll_Strukt,"ioPort1",True)
DllStructSetData($nidll_Strukt,"ioPort2",True)
DllStructSetData($nidll_Strukt,"handle",3)
DllStructSetData($nidll_Strukt,"bits",0)
; dll öffnen
$niDll_dll = DllOpen("niDll.dll")
;result = DllCall ( "dll ","return type"," function " , type1 , param1 )
$result = DllCall ( $niDll_dll , "int" ,"init_NICard", "ptr" ,DllStructGetPtr($nidll_Strukt) )
; close
DllClose($niDll_dll)
$nidll_Strukt = 0 ; struktur löschen
ich suche grad noch free-webspace, dann poste ich noch die zugehörige dll
hier die DLL -> http://uploaded.to/file/m5b7sn
soll des so ne art sync-tool werden ?
oder wie ?