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. BugFix

Beiträge von BugFix

  • QR-Code Dll - Übergabe Errorlevel-Parameter, Aufruf: DestroyBuffer() ?

    • BugFix
    • 22. Dezember 2012 um 21:25

    Hi,
    für den QR-Code Creator nutze ich die quricol32.dll. Jedoch finde ich keinen Weg den Parameter für den ErrorCorretion-Level zu übergeben, somit wird immer mit dem Default-Wert 0 gearbeitet.
    Ebenso unklar ist, wie die Funktion DestroyBuffer() aufgerufen werden soll. Ich interpretiere die Funktion so, dass dazu als Parameter ein Buffer übergeben werden soll, jedoch liefern die vorab zum encodieren genutzten Funktionen keinen Rückgabewert. Ein Aufruf der Funktion ohne Parameter führt zum Crash von AutoIt. :huh:

    [autoit]


    Global $iMargin = 4, $iPixelSize = 2
    DllCall("quricol32.dll", "none", "GenerateBMPW", "str", $sPath & $_sImageName & ".bmp", "str", $_sText, "int", $iMargin, "int", $iPixelSize) ; == funktioniert

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

    ; == TErrorCorretion
    Global Const $QR_ECLEVEL_L = 0 ; == up to 7% damage
    Global Const $QR_ECLEVEL_M = 1 ; == up to 15% damage
    Global Const $QR_ECLEVEL_Q = 2 ; == up to 25% damage
    Global Const $QR_ECLEVEL_H = 3 ; == up to 30% damage
    DllCall("quricol32.dll", "none", "GenerateBMPW", "str", $sPath & $_sImageName & ".bmp", "str", $_sText, "int", $iMargin, "int", $iPixelSize, "int", $QR_ECLEVEL_Q) ; == funktioniert nicht

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

    DllCall("quricol32.dll", "none", "DestroyBuffer") ; <== CRASH!!!

    [/autoit]

    Da mir C++ recht fremd ist, kann ja vielleicht ein in dieser Richtung Beschlagener mit dem Code was anfangen:

    quricol.h
    C
    #pragma once
    
    
    #include "qrencode.h"
    
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    
    void WINAPI GeneratePNGW(LPWSTR fileName, LPWSTR text, int margin, int size, QRecLevel level);
    void WINAPI GeneratePNGA(LPSTR fileName, LPSTR text, int margin, int size, QRecLevel level);
    #ifdef UNICODE
    #define GeneratePNG  GeneratePNGW
    #else
    #define GeneratePNG  GeneratePNGA
    #endif // !UNICODE
    
    
    HBITMAP WINAPI GetHBitmapW(LPWSTR text, int margin, int size, QRecLevel level);
    HBITMAP WINAPI GetHBitmapA(LPSTR text, int margin, int size, QRecLevel level);
    #ifdef UNICODE
    #define GetHBitmap  GetHBitmapW
    #else
    #define GetHBitmap  GetHBitmapA
    #endif // !UNICODE
    
    
    void WINAPI GenerateBMPW(LPWSTR fileName, LPWSTR text, int margin, int size, QRecLevel level);
    void WINAPI GenerateBMPA(LPSTR fileName, LPSTR text, int margin, int size, QRecLevel level);
    #ifdef UNICODE
    #define GenerateBMP  GenerateBMPW
    #else
    #define GenerateBMP  GenerateBMPA
    #endif // !UNICODE
    
    
    void WINAPI GetPNGW(LPWSTR text, int margin, int size, QRecLevel level, LPINT bufSize, __deref_opt_out void **ppvBits);
    void WINAPI GetPNGA(LPSTR text, int margin, int size, QRecLevel level, LPINT bufSize, __deref_opt_out void **ppvBits);
    #ifdef UNICODE
    #define GetPNG  GetPNGW
    #else
    #define GetPNG  GetPNGA
    #endif // !UNICODE
    
    
    void WINAPI DestroyBuffer(void* buffer);
    
    
    #ifdef __cplusplus
    }
    #endif
    Alles anzeigen


    Die kompletten Source-Dateien inkl. der 32Bit-Dll habe ich angehängt.


    Edit 25.12.2012:
    Wie aus der Doku nicht hervorgeht, ist der ErrorCorrectionLevel-Parameter ausschließlich in der 64-Bit Variante der Dll verfügbar. Damit ist der Parameter dann ja total überflüssig. Tools zu erstellen, die nicht auf 32-Bit Maschinen laufen würde ich ziemlich schräg finden.

    Dateien

    src.zip 159,71 kB – 400 Downloads
  • Youtube video downloaden

    • BugFix
    • 22. Dezember 2012 um 18:47

    http://www.youtube.com/t/terms

    Zitat von Nutzungsbedingungen:


    C
    Sie erklären sich damit einverstanden, auf Nutzerübermittlungen (wie unten definiert) oder andere auf der Webseite verfügbar gemachte Inhalte (einschließlich YouTube-Inhalte wie unten definiert) nicht über irgendwelche andere Technologien oder Mittel als die Video-Wiedergabeseiten der Webseite selbst, den YouTube-Player oder solche anderen Mittel zuzugreifen, die YouTube ausdrücklich für diesen Zweck bestimmt;
    ...
    ...
    K
    Sie erklären sich damit einverstanden, Zugriff auf Nutzervideos nur in der Form des Streamings und zu keinen anderen Zwecken als der rein persönlichen, nicht-kommerziellen Nutzung, und nur in dem Rahmen zu nehmen, der durch die normale Funktionalität der Dienste vorgegeben und erlaubt ist. „Streaming“ bezeichnet eine gleichzeitige digitale Übertragung des Materials über das Internet durch YouTube auf ein nutzerbetriebenes internetfähiges Endgerät in einer Weise, bei der die Daten für eine Echtzeitansicht bestimmt sind, nicht aber für einen (permanenten oder vorübergehenden) Download, ein Kopieren, ein Speichern oder einen Weitervertrieb durch den Nutzer.

    Alles anzeigen

    Verstoß gegen die Bedingungen des Seitenbetreibers und somit auch gegen unsere Forenregeln!

  • QR-Code Creator

    • BugFix
    • 21. Dezember 2012 um 19:07

    Wie es aussieht, fehlte eine Wrapper-Anweisung, ergänzt. s. Post #1

  • Dateien vergleichen

    • BugFix
    • 21. Dezember 2012 um 15:38

    Guckst du: https://autoit.de/index.php?page…60542#post60542

  • Excel Tabelle Zellen einfärben

    • BugFix
    • 21. Dezember 2012 um 15:33

    Einfach mal die SuFu nutzen, dann findest du u.a. dieses: [ gelöst ] Excell Färben

  • Suche nach 0 Byte Files in Verzeichnissen

    • BugFix
    • 21. Dezember 2012 um 09:57

    Ich hab mal meine Rekursive Dateifunktion zusammengeschrumpft auf diesen Fall:

    [autoit]

    ConsoleWrite(_GetEmptyFiles_Rekursiv('C:\Test') & @CRLF) ; == statt ConsoleWrite mit FileWrite in Datei schreiben

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

    ;==================================================================================================
    ; Function Name: _GetEmptyFiles_Rekursiv($sPath)
    ; Description: Rekursive Auflistung von 0-Byte Dateien
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; Return Value(s): String (CRLF-getrennt) mit den gefundenen Pfaden der 0-Byte Dateien
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetEmptyFiles_Rekursiv($sPath)
    Local $oFSO = ObjCreate('Scripting.FileSystemObject')
    Local $strFiles = ''
    _ShowSubFolders($oFSO, $strFiles, $sPath)
    Return StringTrimRight($strFiles, 2)
    EndFunc

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

    Func _ShowSubFolders(ByRef $_oFSO, ByRef $_sFiles, $_sFolder)
    Local $Folder = $_oFSO.GetFolder($_sFolder)
    For $file In $Folder.Files
    If $file.Size = 0 Then $_sFiles &= $file.Path & @CRLF
    Next
    For $Subfolder In $Folder.SubFolders
    _ShowSubFolders($_oFSO, $_sFiles, $Subfolder)
    Next
    EndFunc

    [/autoit]
  • WARNUNG! Alle Battlefield 3 Spieler: LESEN!

    • BugFix
    • 21. Dezember 2012 um 09:32

    chip: Es bringt nichts Äpfel mit Birnen zu vergleichen. "..die gleichen Muskelgruppen beanspruchen.." :rofl:
    Ob ich einen Muskel "beanspruche" oder ihn "belaste" ist ein Unterschied wie Tag und Nacht. Und bei keiner "eSport"-Art wirst du es schaffen, im direkten Vergleich zu den von dir angeführten Sportarten, einen auch nur annähernden Energieverbrauch zu realisieren. Selbst das scheinbar so bewegungslose Sportschießen verbrennt sehr viel Energie - und zwar im Vorfeld. Denn um sicher dein Ziel anvisieren zu können brauchst du einen gut durchtrainierten Körper, mit "mentaler Kraft" alleine kannst du keine Waffe sauber halten.
    Ich bin zwar nicht unbedingt ein Sportfanatiker, empfinde es aber als Frechheit, wenn Computerspiele zum Sport hochstilisiert werden.
    Die ersten positiven Ansätze in eine körperbetonte Richtung gehen von den interaktiven Spielkonsolen aus - da ist tatsächlich auch eine körperliche Belastung vorhanden. Aber diese waren nicht Thema der bisherigen Diskussion.
    Das wars nun aber endgültig von mir zu diesem Thema. ;)

  • WARNUNG! Alle Battlefield 3 Spieler: LESEN!

    • BugFix
    • 21. Dezember 2012 um 01:28
    Zitat von Icetiger

    ist das mittlerweile ein Breitensport wie jeder andere Sport den wir im Fernsehen sehen.


    Na Klasse - wenn ich diese Definition für Sport lese, wundert es mich nicht mehr, dass unsere Kinder unfähig sind rückwärts zu laufen, es kaum koordiniert bekommen Bälle zu werfen und zu fangen, von solch "schwierigen" Dingen wie Seil-/Stangenklettern und Barrenturnen mal ganz abgesehen.
    Ich stelle mir gerade vor, wenn du beim Arzt bist und er fragt:
    "Treiben Sie auch regelmäßig Sport?" - "Ja, jeden Tag 2 h, am PC" :rofl:

    Um es nochmal klar zu sagen: eSport hat mit Sport soviel zu tun, wie Schüttelfrost mit Brakedance! Und wer allen Ernstes etwas anderes behauptet möge doch bitte mal seinen Geisteszustand überprüfen lassen.

  • Nur ein Registry "valuename" möglich warum? bzw. wie umgehe ich den Fehler?

    • BugFix
    • 20. Dezember 2012 um 14:18

    Das Problem ist recht simpel gewesen:
    In der Registry landet der String "0xFF....", zwar als DWORD gespeichert, aber ich habs beim Auslesen als String.
    Zum Umwandeln in Hex bedarf es zwingend eines Integerwertes, also: "0x" & Hex(Int(RegRead(...)),6) um einen RGB auszulesen.
    (In einer INI hat man den Ärger nicht :P)

  • Nur ein Registry "valuename" möglich warum? bzw. wie umgehe ich den Fehler?

    • BugFix
    • 20. Dezember 2012 um 14:00

    WAS wird denn in der Registry gespeichert?
    WELCHEN Wert erhältst du beim Auslesen.
    Hattest du meinen letzten Hinweis (speichern als ARGB) bereits berücksichtigt?

    Wenn wir dir die Würmer einzeln aus der Nase ziehen müssen kann das hier nix werden.

  • Nur ein Registry "valuename" möglich warum? bzw. wie umgehe ich den Fehler?

    • BugFix
    • 20. Dezember 2012 um 13:44

    OK, dann schreib es als ARGB in die Registry (aus der Funktion, die ich gepostet habe):

    [autoit]

    RegWrite("HKEY_CURRENT_USER\SOFTWARE\CountdownScreensaver", "BgColor", "REG_DWORD", "0xFF" & Hex( $aColor[$index1][1], 6) )

    [/autoit]

    Btw.: Warum aber überhaupt in die Registry schreiben? Eine INI ist doch gerade für programmbezogene Einstellungen für meinen Geschmack zu bevorzugen. Schon aus Gründen der Portabilität.

  • Nur ein Registry "valuename" möglich warum? bzw. wie umgehe ich den Fehler?

    • BugFix
    • 20. Dezember 2012 um 13:34
    Zitat von Micha_he

    Nur ich komm zur Zeit nicht drauf, wie man aus "4278255360" wieder "0xFF00FF00" bekommt


    Das geht ganz einfach:

    [autoit]

    '0x' & Hex($Farbwert,6)

    [/autoit]

    Die ersten beiden "FF" sind eh nicht erforderlich, kann man also gleich weglassen.

    Edit:
    Das Skript 2 hatte ich gar nicht beachtet, da es um das Problem RegWrite aus Skript 1 ging. Da kann er dann beim setzen des Farbwertes ja einfach das "FF" vor den eigentlichen Farbwert schreiben:
    -- gespeichert RGB, z.B. 0xFF00FF
    -- eingelesen: $colorRGB = RegRead(...)
    -- wandeln in ARGB:

    [autoit]

    $colARGB = '0xFF' & Hex($colorRGB,6)

    [/autoit]
  • Nur ein Registry "valuename" möglich warum? bzw. wie umgehe ich den Fehler?

    • BugFix
    • 20. Dezember 2012 um 13:18
    Zitat von Facemix

    damit ist mein Problem leider noch immer nicht gelößt


    Hast du die Zeilen mit den RegWrite-Befehlen wieder aktiviert und danach werden die Werte nicht in die Registry geschrieben?

  • Nur ein Registry "valuename" möglich warum? bzw. wie umgehe ich den Fehler?

    • BugFix
    • 20. Dezember 2012 um 13:08

    Ich habe es mal auf die Mini-Größe geschrumpft.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>

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

    Global $aColor[25][2] = [["Farbe belassen", 0xFFFFFF], _
    ["Rot", 0xFF0000],["Grün", 0x00FF00],["Blau", 0x0000FF],["Schwarz", 0x000000],["Maroon", 0x800000],["DarkRed", 0x8B0000], _
    ["FireBrick", 0xB22222],["Salmon", 0xFA8072],["OrangeRed", 0xFF4500],["Chocolate", 0xD2691E],["DarkOrange", 0xFF8C00],["Orange", 0xFFA500], _
    ["Gold", 0xFFD700],["Yellow", 0xFFFF00],["YellowGreen",0x9ACD32],["GreenYellow",0xADFF2F],["Green", 0x008000],["Navy", 0x000080], _
    ["Purple", 0x800080],["Crimson", 0xDC143C],["Brown", 0xA52A2A],["Gray", 0x808080],["Silver", 0xC0C0C0],["LightGray", 0xD3D3D3]]

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

    Global $Form1, $hImage1, $hImage2,$hListView1,$hListView2,$Button1,$Button2

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

    $Form1 = GUICreate("Einstellungen", 284, 388, 192, 124)
    GUICtrlCreateLabel("Hier können Sie die Einstellungen vornehmen!", 8, 8, 266, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlCreateLabel("HintergrundFarbe:", 8, 48, 114, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlCreateLabel("TextFarbe:", 8, 200, 65, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Abbrechen", 56, 352, 75, 25)
    $Button2 = GUICtrlCreateButton("Übernehmen", 144, 352, 75, 25)
    ;$List1 = GUICtrlCreateList("", 8, 80, 265, 97)
    $hListView1 = GUICtrlCreateListView("", 8, 80, 265, 97)
    $hListView2 = GUICtrlCreateListView("", 8, 232, 265, 97)

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

    ; Add columns
    _GUICtrlListView_AddColumn($hListView1, "Hintergrundfarbe", 200)
    _GUICtrlListView_AddColumn($hListView2, "Textfarbe", 200)

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

    ; Load images
    $hImage1 = _GUIImageList_Create()
    $hImage2 = _GUIImageList_Create()
    For $i = 0 To 24
    _GUIImageList_Add($hImage1, _GUICtrlListView_CreateSolidBitMap($hListView1, $aColor[$i][1], 16, 16))
    _GUIImageList_Add($hImage2, _GUICtrlListView_CreateSolidBitMap($hListView2, $aColor[$i][1], 16, 16))
    ; Add items
    _GUICtrlListView_AddItem($hListView1, $aColor[$i][0], $i)
    If $i = 0 Then
    _GUICtrlListView_AddItem($hListView2, "Eingestellte Farbe", $i)
    Else
    _GUICtrlListView_AddItem($hListView2, $aColor[$i][0], $i)
    EndIf
    Next
    _GUICtrlListView_SetImageList($hListView1, $hImage1, 1)
    _GUICtrlListView_SetImageList($hListView2, $hImage2, 1)

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

    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $Button1
    Exit
    Case $Button2
    _RegWrite()
    EndSwitch
    WEnd

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

    Func _RegWrite()
    Local $index1 = _GUICtrlListView_GetSelectedIndices($hListView1), $index2 = _GUICtrlListView_GetSelectedIndices($hListView2)
    If $index1 < 0 Or $index2 < 0 Then Return MsgBox(0, 'Fehler', 'Bitte in beiden Listen auswählen')
    If $index1 = 0 Then
    For $i = 0 To 23
    _GUICtrlListView_SetItemChecked($hListView1, $i, False) ; aber wozu das??? sind doch keine Checkboxen vorhanden
    Next
    Else
    ;~ RegWrite("HKEY_CURRENT_USER\SOFTWARE\CountdownScreensaver", "BgColor", "REG_DWORD", $aColor[$index1][1])
    ConsoleWrite('REG: BgCol: 0x' & Hex($aColor[$index1][1],6) & @CRLF)
    EndIf
    If $index2 = 0 Then
    For $i = 0 To 23
    _GUICtrlListView_SetItemChecked($hListView2, $i, False)
    Next
    Else
    ;~ RegWrite("HKEY_CURRENT_USER\SOFTWARE\CountdownScreensaver", "TextColor", "REG_DWORD", $aColor[$index2][1])
    ConsoleWrite('REG: TextCol: 0x' & Hex($aColor[$index2][1],6) & @CRLF)
    EndIf
    EndFunc

    [/autoit]


    Das Schreiben in die Registry habe ich nicht ausgeführt, aber meine Konsolenausgabe tut das Richtige :D
    Was soll übrigens: "_GUICtrlListView_SetItemChecked" darin? (habs noch dringelassen) - Du hast doch gar keine Checkboxen.

  • Nur ein Registry "valuename" möglich warum? bzw. wie umgehe ich den Fehler?

    • BugFix
    • 20. Dezember 2012 um 12:04

    Schau dir bitte unbedingt Arrays an, dann kannst du dein Skript um min. 200 Zeilen kürzen.

  • WARNUNG! Alle Battlefield 3 Spieler: LESEN!

    • BugFix
    • 19. Dezember 2012 um 19:22
    Zitat

    und bei Origin stimmst man bei der Installation zu, das laufende Prozesse und der Arbeitsspeicher gescannt werden dürfen.

    :rofl:

    Da frag ich mich ernsthaft, wer solchen Bedingungen zustimmt. Kann ich kein Verständnis für aufbringen. In diesem Fall also: Ihr habt diesem an sich rechtswidrigen Verhalten des Anbieters zugestimmt, dann müßt ihr auch damit leben.

  • WARNUNG! Alle Battlefield 3 Spieler: LESEN!

    • BugFix
    • 19. Dezember 2012 um 19:13
    Zitat

    die mit AutoIt compilierte Programme geöffnet haben!!!

    Soll heißen: Wenn irgendein mit AutoIt erstelltes Programm auf dem PC läuft das in keinerlei Sachzusammenhang zu diesem Game steht wirst du gebannt? - Sorry, halte ich für totalen Quatsch. Das würde bedeuten, dass dieses Game deinen PC scannt. Dann ist es kein Game sondern eher ein Trojaner und gehört sowieso nicht auf den Rechner.

  • Tabs im Windows Stil

    • BugFix
    • 18. Dezember 2012 um 18:47

    Ich weiß jetzt nicht genau, worauf du hinaus willst - aber das kann man doch ganz normal zwischen den Item switchen.

    [autoit]

    #include <GuiTab.au3>

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

    $hGUI = GUICreate("Draw Tab", 300, 200)
    $hTab = GUICtrlCreateTab(10, 10, 280, 180)
    $TabItem_1 = GUICtrlCreateTabItem("Item1")
    ; == erst alle Ctrl für Tab-Item_1 erstellen, dann das nächste Tab usw.
    GUICtrlCreateLabel('Label-TAB_1',30,50)
    $TabItem_2 = GUICtrlCreateTabItem("Item2")
    GUICtrlCreateLabel('Label-TAB_2',30,50)
    $TabItem_2 = GUICtrlCreateTabItem("Item3")
    GUICtrlCreateLabel('Label-TAB_3',30,50)
    GUICtrlCreateTabItem("")

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

    GUISetState()

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]
  • mehrdimensionales array -> einfügen klappt nicht

    • BugFix
    • 18. Dezember 2012 um 14:08

    In meiner 2D-Array-UDF https://autoit.de/index.php?page…21161#post21161 findest du die Funktion: _Array2DInsert() zum Einfügen von leeren od.mit Daten befüllten Arrayelementen.

  • WinMove() und Opt("GUIResizeMode", 802) Höhe stimmt nicht mehr

    • BugFix
    • 17. Dezember 2012 um 20:42

    Wenn du eine GUI erstellst, sind die Abmaße OHNE die Höhe der Titelleiste. Beim Resizen mußt du aber die Titelleist einrechnen. Schau dir mal _WinAPI_GetSystemMetrics an.

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™