1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. bernd670

Beiträge von bernd670

  • C++ DLL

    • bernd670
    • 16. Januar 2010 um 21:34

    Hallo,

    ich habe deinen Quellcode mal so angepasst das man daraus auch einen DLL erstellen kann.

    test.c
    Code
    #include <windows.h>
    
    
    extern "C" {
    __declspec(dllexport) int _stdcall in (int,int,int,int,int,int);
    __declspec(dllexport) int _stdcall RectCollision (int,int,int,int,int,int,int,int);
    }
    
    
    BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
    {
        switch (fdwReason)
        {
            case DLL_PROCESS_ATTACH:
                // attach to process
                // return FALSE to fail DLL load
                break;
    
    
            case DLL_PROCESS_DETACH:
                // detach from process
                break;
    
    
            case DLL_THREAD_ATTACH:
                // attach to thread
                break;
    
    
            case DLL_THREAD_DETACH:
                // detach from thread
                break;
        }
        return TRUE; // succesful
    }
    
    
    __declspec(dllexport) int _stdcall RectCollision (int x1,int y1,int w1,int h1,int x2,int y2,int w2,int h2)
    {
    	bool returnvar=false; // 15
    	if (in(x2,y2,x1,y1,w1,h1))
    	{
             	returnvar=true;
    	}
    	if (in(x2+w2,y2,x1,y1,w1,h1))
    	{
             	returnvar=true;
    	}
    	if (in(x2,y2+h2,x1,y1,w1,h1))
    	{
             	returnvar=true;
    	}
    	if (in(x2+w2,y2+h2,x1,y1,w1,h1))
    	{
             	returnvar=true;
    	}
    	return returnvar;
    }
    
    
    __declspec(dllexport) int _stdcall in (int po1,int po2,int x,int y,int w,int h)
    {
    	bool myreturn=false;
    	if (po1>x && po1<x+w && po2>y && po2<y+h)
    	{
              	myreturn=true;
    	}
    	return myreturn;
    }
    Alles anzeigen

    Mit folgenden Befehlen kann man aus dieser Datei eine, für AutoIt brauchbare DLL, erstellen.

    Zitat


    g++ -O3 -Wall -c -fmessage-length=0 -otest.o test.c
    g++ -s -Wl,--add-stdcall-alias -Wl,--kill-at -shared -otest.dll test.o

    Wichtig ist die Funktion DllMain, die zuminstest TRUE zurückgeben muß und das die Funktionen die man mit der DLL zur Verfügung stellen will auch veröffentlicht werden (__declspec(dllexport)).

    Edit: extern "C" - im Quellcode hinzugefügt

  • Loop Counter mit Anzeige

    • bernd670
    • 10. Januar 2010 um 23:00

    Hallo,

    sollte das nicht etwa so was werden?

    Spoiler anzeigen
    [autoit]

    $drive = InputBox("ROBOTIC LAUFWERK", "Laufwerksbuchstaben eingeben", "H:")
    $Comport = InputBox("ROBOTIC COMPORT", "Comport der Robotic eingeben", "COM6")
    $Anzahl = InputBox("Anzahl der Discs", "Anzahl der zu verarbeitenden Discs", "*")

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{ESC}", "_exit")

    [/autoit] [autoit][/autoit] [autoit]

    Global $iCount = 1

    [/autoit] [autoit][/autoit] [autoit]

    RunWait('load.exe --comport=' & $Comport & ' --drive=' & $drive & ' --command=V:X:30:2:E')
    Sleep(1000)

    [/autoit] [autoit][/autoit] [autoit]

    RunWait('load.exe --comport=' & $Comport & ' --drive=' & $drive & ' --command=C:X:30:2:E')
    Sleep(1000)

    [/autoit] [autoit][/autoit] [autoit]

    RunWait('load.exe --comport=' & $Comport & ' --drive=' & $drive & ' --open --command=I:X:30:2:E --ifcommandfailortimeoutskip=failedload --set=loaderrors:0:robot --skip=trayanddiscin --label=failedload --skip=loadmorediscs --label=loadmorediscs --notify="You can cancel the batch with Abort. Hit Retry only after you load more discs on the spindle and CLEAR REJECTS. Hit Ignore if the disc loaded correctly.":"Load may have failed for drive {drive} on port {comport}.":2 --set=rc:{notifyreturncode} --ifsetskip=rc:3:shutdown --ifsetskip=rc:4:resetloaderrors --ifsetskip=rc:5:trayanddiscin --skip=failedload --label=resetloaderrors --set=loaderrors:0:robot --rejectsreset --skip=doreset --label=trayanddiscin --closeblind --sleep=2 --unbindtodrive --comportrelease --label=successexit --exit=0 ')
    Sleep(2000)
    ToolTip("Disk " & $iCount)

    [/autoit] [autoit][/autoit] [autoit]

    While True
    $status = DriveStatus($drive)
    If ($status = "NOTREADY") Then
    If $iCount < $Anzahl Then
    _next()
    $iCount += 1
    ToolTip("Disk " & $iCount)
    Else
    ExitLoop
    EndIf
    EndIf
    Sleep(1000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _next()
    RunWait('load.exe --comport=' & $Comport & ' --drive=' & $drive & ' --open --command=A:X:30:2:E --ifcommandfailortimeoutskip=failedexit --comportrelease --skip=successexit --label=failedexit --notify="Problem with robot on port {comport} for drive {drive}, shutting down..." --set=shutdown:yes:robot --skip=shutdown --exit=0 --label=successexit --exit=0 --label=shutdown --set=needsreset:yes:robot --messagefile={passerrorsback} --message="[cancel batch]" --exit')
    Sleep(2000)

    [/autoit] [autoit][/autoit] [autoit]

    RunWait('load.exe --comport=' & $Comport & ' --drive=' & $drive & ' --command=I:X:30:2:E --ifcommandfailortimeoutskip=failedload --set=loaderrors:0:robot --skip=trayanddiscin --label=failedload --skip=loadmorediscs --label=loadmorediscs --notify="You can cancel the batch with Abort. Hit Retry only after you load more discs on the spindle and CLEAR REJECTS. Hit Ignore if the disc loaded correctly.":"Load may have failed for drive {drive} on port {comport}.":2 --set=rc:{notifyreturncode} --ifsetskip=rc:3:shutdown --ifsetskip=rc:4:resetloaderrors --ifsetskip=rc:5:trayanddiscin --skip=failedload --label=resetloaderrors --set=loaderrors:0:robot --rejectsreset --skip=doreset --label=trayanddiscin --closeblind --sleep=2 --unbindtodrive --comportrelease --label=successexit --exit=0')
    Sleep(2000)

    [/autoit] [autoit][/autoit] [autoit]

    MouseClick("left", 591, 550, 2)
    EndFunc ;==>_next

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    Exit
    EndFunc ;==>_exit

    [/autoit]
  • Mausbewegungen umkehren

    • bernd670
    • 5. Januar 2010 um 19:10

    Hatten wir schon mal,

    Mausachsen vertauschen!

  • VB Script für AutoIt umschreiben

    • bernd670
    • 5. Januar 2010 um 16:07

    Hallo,

    so sollte es gehen:

    Spoiler anzeigen
    [autoit]

    ;~ Set Constants
    Const $NET_FW_IP_PROTOCOL_UDP = 17
    Const $NET_FW_IP_PROTOCOL_TCP = 6

    [/autoit] [autoit][/autoit] [autoit]

    Const $NET_FW_SCOPE_ALL = 0
    Const $NET_FW_SCOPE_LOCAL_SUBNET = 1

    [/autoit] [autoit][/autoit] [autoit]

    Global $g_eventerror = 0 ; to be checked to know if com error occurs. Must be reset after handling.

    [/autoit] [autoit][/autoit] [autoit]

    $fwMgr = ObjCreate("HNetCfg.FwMgr")

    [/autoit] [autoit][/autoit] [autoit]

    $oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; Initialize a COM error handler

    [/autoit] [autoit][/autoit] [autoit]

    $profile = $fwMgr.LocalPolicy.CurrentProfile

    [/autoit] [autoit][/autoit] [autoit]

    If $g_eventerror then
    $g_eventerror = 0
    Msgbox (0,"COM Fehler","Fehlernummer: " & @error)
    Exit
    Endif

    [/autoit] [autoit][/autoit] [autoit]

    $port = ObjCreate("HNetCfg.FWOpenPort")

    [/autoit] [autoit][/autoit] [autoit]

    $port.Name = "HTTP"
    $port.Protocol = $NET_FW_IP_PROTOCOL_TCP
    $port.Port = 80

    [/autoit] [autoit][/autoit] [autoit]

    ;~ If using Scope, don't use RemoteAddresses
    $port.Scope = $NET_FW_SCOPE_ALL
    ;~ Use this line to scope the port to Local Subnet only
    ;~ $port.Scope = $NET_FW_SCOPE_LOCAL_SUBNET

    [/autoit] [autoit][/autoit] [autoit]

    $port.Enabled = TRUE
    ;~ Use this line instead if you want to add the port, but disabled
    ;~ $port.Enabled = FALSE

    [/autoit] [autoit][/autoit] [autoit]

    $profile.GloballyOpenPorts.Add($port)

    [/autoit] [autoit][/autoit] [autoit]

    If $g_eventerror then
    $g_eventerror = 0
    Msgbox (0,"COM Fehler","Fehlernummer: " & @error)
    Exit
    Endif

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; This is my custom defined error handler
    Func MyErrFunc()

    [/autoit] [autoit][/autoit] [autoit]

    Msgbox(0,"COM-Error","We intercepted a COM Error !" & @CRLF & @CRLF & _
    "err.description is: " & @TAB & $oMyError.description & @CRLF & _
    "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
    "err.number is: " & @TAB & hex($oMyError.number,8) & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
    "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
    "err.source is: " & @TAB & $oMyError.source & @CRLF & _
    "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oMyError.helpcontext _
    )

    [/autoit] [autoit][/autoit] [autoit]

    Local $err = $oMyError.number
    If $err = 0 Then $err = -1

    [/autoit] [autoit][/autoit] [autoit]

    $g_eventerror = $err ; to check for after this function returns
    Endfunc

    [/autoit]
  • geschlossen, nicht gelöst: SAP Business One auslesen

    • bernd670
    • 5. Januar 2010 um 14:43

    Hallo,

    Evtl. könnte man mit der SAP Business One SDK UI API etwas machen. Leider ist ohne SAP etwas schwierig.

  • RegWrite - Prozess mit niedriger Priorität

    • bernd670
    • 5. Januar 2010 um 14:21

    Hallo,

    bei eigenen Programmen kannst du mit ProcessSetPriority die Priorität auf Low (0) setzen.

    [autoit]

    ProcessSetPriority(@AutoItPID, 0)

    [/autoit]
  • fileopendialog mit arbeitsplatz

    • bernd670
    • 5. Januar 2010 um 14:05

    Hallo,

    schau mal in die Liste. Wenn du also bein FileOpenDialog als Init-Dir "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" angibst wird der Arbeitsplatz geöffnet.

  • _ExcelReadSheetToArray

    • bernd670
    • 4. Januar 2010 um 22:53

    Hallo,

    mit Office 2007 funktionierts auch, hast du vllt. doch eine alte AutoIt-Version. Es gab da mal ein Problem mit der deutschen Version von Office.

  • Excel.au3

    • bernd670
    • 4. Januar 2010 um 22:48

    Hallo,

    schon mal die Suche benutzt?
    Als Suchbegriff einfach "Excel Datum" eingeben dann kommt an 3. oder 4. Position die Lösung für dein Problem.

  • Dateiname

    • bernd670
    • 4. Januar 2010 um 12:53

    Hallo,

    nimm _PathSplit!

  • GDIPlus Digitaluhr

    • bernd670
    • 4. Januar 2010 um 00:48

    Hallo,

    wenn man statt AdlibEnable die Funktion _Timer_SetTimer nimmt bleibt die Uhr auch nicht mehr stehen!

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <Timers.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Dim $ws[12] = [0, 0, 10, -7, 50, -7, 60, 0, 50, 7, 10, 7] ;Koordinaten Polygonzug: von links nach rechts WAAGRECHTER Balken, von rechts nach links SENKRECHTER Balken
    Dim $ziffer[10] = [239, 10, 118, 94, 154, 220, 253, 14, 254, 222] ;alle gesetzten bits des Indexes in der 7-segmentanzeige ergeben die Ziffer
    Dim $balkenpos[8] = [0, "60.0", "0.0", "60.60", "0.60", "0.60", "0.120", "0.0"] ;position der Leuchtbalken der 7-Segmentanzeige innerhalb der Ziffer
    Dim $p[7][2] ;nimmt die polygonzug-koordinaten zum Zeichnen auf
    $p[0][0] = 6 ;6 Punkte im Polygonzug

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $hgui = GUICreate('Uhr', 620, 175, -1, -1, $WS_POPUP) ;GUI erstellen ohne Rahmen
    ;~ Global $hWnd = WinGetHandle($hgui) ;Handle holen
    GUICtrlCreateLabel("", 0, 0, 620, 175, Default, $GUI_WS_EX_PARENTDRAG) ;verschieben des Fensters möglich machen durch 2. Fenster
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ;das 2. Fenster transparent machen
    GUISetBkColor(0x000000) ;Hintergrund der GUI schwarz
    GUISetState() ;GUI anzeigen

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui) ;"Leinwand" erstellen, auf der gezeichnet werden kann
    _time()
    _Timer_SetTimer($hgui, 1000, "_TIMER_CALLBACK")

    [/autoit] [autoit][/autoit] [autoit]

    Do ;Endlosschleife, solange bis..
    Sleep(100)
    Until GUIGetMsg() = -3 ;..ESC gedrückt wird

    [/autoit] [autoit][/autoit] [autoit]

    _Timer_KillAllTimers($hgui)
    _GDIPlus_GraphicsDispose($hGraphic) ;freigeben
    _GDIPlus_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    Func _TIMER_CALLBACK($hWnd, $Msg, $iIDTimer, $dwTime)
    _time()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _time() ;Uhrzeit anzeigen :o)
    For $k = 1 To 6 ;die 6 Ziffern der Uhrzeit
    $setbits = $ziffer[StringMid(String(@HOUR & @MIN & @SEC), $k, 1)] ;gesetzte Bits in der siebensegmentanzeige anhand der Ziffer in der Uhrzeit holen
    For $bitnr = 7 To 1 Step -1 ;alle Bits durchlaufen
    _drawpolygon(BitAND($setbits, 128), $k * 100 - 80 + ($k = 1 Or $k = 3 Or $k = 5) * 20, $bitnr) ;parameter: bit gesetzt ja/nein, position der gesamten ziffer,nummer des bits(gerade=waagrechter balken, ungerade=senkrechter balken)
    $setbits = BitShift($setbits, -1) ;nächstes Bit holen
    Next
    Next
    $brush = _GDIPlus_BrushCreateSolid(0xFF440000 + (@SEC / 2 = Int(@SEC / 2)) * 0xBB0000) ;Pinsel erstellen, wenn Ziffer gerade, dann farbig, ansonsten schwarz
    _GDIPlus_GraphicsFillEllipse($hGraphic, 202, 55, 15, 15, $brush) ;Punkte zeichnen
    _GDIPlus_GraphicsFillEllipse($hGraphic, 402, 55, 15, 15, $brush)
    _GDIPlus_GraphicsFillEllipse($hGraphic, 202, 105, 15, 15, $brush)
    _GDIPlus_GraphicsFillEllipse($hGraphic, 402, 105, 15, 15, $brush)
    _GDIPlus_BrushDispose($brush) ;Pinsel auflösen
    EndFunc ;==>_time

    [/autoit] [autoit][/autoit] [autoit]

    Func _drawpolygon($bit, $xpos, $bitnr) ;zeichnet einen polygonzug ("Balken") an die entsprechende Position
    $split = StringSplit($balkenpos[$bitnr], ".", 3) ;x- und y-koordinaten des Balkens innerhalb der Ziffer holen
    $b = (($bitnr / 2) = Int($bitnr / 2)) ;$bit gerade => $b = true => Balken waagrecht, ansonsten Balken senkrecht
    $step = -1 + 2 * $b ;schrittweite durch das $WS-Array
    For $i = 11 - 11 * $b To 11 * $b Step 2 * $step ;array mit waagrechten (bit=gerade) oder (Bit=ungerade) senkrechten Balken füllen
    $r = Int(Abs((11 * (Not ($b))) - $i) / 2) + 1 ;abhängig von der Reihenfolge, egal ob $i von 0 bis 11 oder von 11 bis 0, $r muss immer 1,2,3,4,5,6
    $p[$r][0] = $ws[$i] + $split[0] + $xpos ;x- und
    $p[$r][1] = $ws[$i + $step] + $split[1] + 30 ;y-position in das polygonarray schreiben
    Next
    $brush = _GDIPlus_BrushCreateSolid(0xFF440000 + ($bit <> 0) * 0xBB0000) ;wenn bit gesetzt, dann farbig, ansonsten schwarz
    _GDIPlus_GraphicsFillPolygon($hGraphic, $p, $brush) ;Balken zeichnen
    _GDIPlus_BrushDispose($brush)
    EndFunc ;==>_drawpolygon

    [/autoit]
  • Pfad zur Schnellstartleiste bei Windows 7

    • bernd670
    • 4. Januar 2010 um 00:20

    Hallo,

    schau mal im Verzeichnis "%userprofile%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch" oder such einfach mal nach "Quick Launch".

  • FileOpen in Funktion

    • bernd670
    • 3. Januar 2010 um 15:08

    Hallo,

    wenn du @ScriptDir nicht angibst wird die Datei in das Verzeichnis geschrieben in dem du den Browser wählst!

  • Organize Includes

    • bernd670
    • 3. Januar 2010 um 10:17

    Hallo,

    dann benutzt du die Version 4.3 und nicht die um die es in diesem Thema geht.

  • Organize Includes

    • bernd670
    • 3. Januar 2010 um 08:46

    Hallo,

    die Buttons sind doch oben, dass einzige was man nicht sieht ist die Statusleiste!

  • Organize Includes

    • bernd670
    • 2. Januar 2010 um 21:24

    Hallo,
    ich war mal so frei, da ich gerade etwas mit eclipse und mingw experimentiere, deine Icons in eine DLL zu packen.

    Die Icons sind in folgender Reihenfolge gespeichert:

    • Release.ico
    • Beta.ico
    • icon.ico
    • Check.ico
    • Configurator.ico
    • Refresh.ico
    • Find.ico
    • Help.ico
    • Edit.ico
    • Exit.ico

    Dateien

    OIRes.zip 110,82 kB – 952 Downloads
  • Icon von Dateiendungen

    • bernd670
    • 2. Januar 2010 um 15:26

    Hallo,

    du musst zuerst unter HKEY_CLASSES_ROOT\.Dateiendung den Wert bei (Standard) auslesen.

    z.B.

    [autoit]

    ConsoleWrite(RegRead("HKEY_CLASSES_ROOT\" & RegRead("HKEY_CLASSES_ROOT\.au3", "") & "\DefaultIcon" ,"") & @CRLF)

    [/autoit]
  • Kleines Rechenprogramm zeigt keine Nachkommastellen an

    • bernd670
    • 28. Dezember 2009 um 22:51

    Hallo, Du rechnest nicht mit den Daten aus den Inputboxen sondern mit den ControlID's. An die Daten kommst Du mit GUICtrlRead!

  • Relais-Karte... Ports auslesen

    • bernd670
    • 28. Dezember 2009 um 17:15

    @RAPTOR-ONE, nur zur Info, DllCall gibt ein Array zurück! ;)

  • GetMonitor-Funktion testen

    • bernd670
    • 23. Dezember 2009 um 11:13

    Hallo,

    vllt. solltest du die API-Funktionen von Windows verwenden.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™