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

Beiträge von Trolleule1337

  • Dictionary dynamsch erstellen

    • Trolleule1337
    • 7. August 2014 um 15:17
    [autoit]

    Local $List = ObjCreate("System.Collections.ArrayList")
    For $i=0 To 3
    $List.add(ObjCreate("Scripting.Dictionary"))
    For $j=0 To 100
    $List.Item($i).add($j, $j)
    Next
    Next

    [/autoit]

    So müsste es gehen.

  • Focus auf anderes Control funktioniert, aber Text Cursor immer noch im alten Control

    • Trolleule1337
    • 7. August 2014 um 14:27

    haha Danke BugFix, als ich gerade meinen Test Code Schnipsel für dich zurecht basteln wollte, habe ich erst bemerkt, das es dort bereits funktioniert. Ein einfaches Return 0 hat schon ausgereicht. Ich häng den Code mal mit dran Jung.

    [autoit]


    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <WinAPI.au3>
    #include <GuiEdit.au3>
    #include <GuiListView.au3>
    $wProcHandle = DllCallbackRegister("_WindowProc", "ptr", "hwnd;uint;wparam;lparam")

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

    $hGUI = GUICreate("Test GUI", 300, 300)
    $hListView = _GUICtrlListView_Create($hGUI, "", 2,2, 250, 250)

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

    $hEdit = _GUICtrlEdit_Create($hListView, "This is a test" & @CRLF & "Another Line", 20, 20, 150, 50,BitOR($WS_TABSTOP, $WS_CHILD, $WS_VISIBLE, $ES_LEFT, $ES_AUTOHSCROLL, $ES_NOHIDESEL), $WS_EX_CLIENTEDGE)
    $hEdit2 = _GUICtrlEdit_Create($hListView, "This is a test2" & @CRLF & "Another Line", 20, 80, 100, 50,BitOR($WS_TABSTOP, $WS_CHILD, $WS_VISIBLE, $ES_LEFT, $ES_AUTOHSCROLL, $ES_NOHIDESEL), $WS_EX_CLIENTEDGE)
    ;~ Local $test = $hEdit
    ConsoleWrite("ret: " & Hex(_WinAPI_GetWindowLong ( $hEdit, $GWL_WNDPROC )) & @CRLF)

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

    ;~ ConsoleWrite("state: " & ControlDisable ($hGUI, "", _WinAPI_GetDlgCtrlID($hEdit2)) & @CRLF)

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

    $wProcOld = _WinAPI_SetWindowLong($hEdit, $GWL_WNDPROC, DllCallbackGetPtr($wProcHandle))
    $wProcOld2 = _WinAPI_SetWindowLong($hEdit2, $GWL_WNDPROC, DllCallbackGetPtr($wProcHandle))
    ConsoleWrite("$wProcOld: " & Hex($wProcOld) & " $wProcOld2: " &Hex($wProcOld2) & " $wProcHandle: " & $wProcHandle & " $hGUI: " & $hGUI & " $hListView: " & $hListView & " $hEdit: " & $hEdit & @CRLF)
    GUISetState()

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    GUIDelete($hGui)
    DllCallbackFree($wProcHandle)

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

    Func _WindowProc($hWnd, $Msg, $wParam, $lParam)
    If $Msg = $WM_LBUTTONDOWN Then
    ConsoleWrite("-> Left mouse click" & @LF)
    Local $sFileOpenDialog = FileOpenDialog("Titel", @WindowsDir & "", "All (*.*)", $FD_FILEMUSTEXIST)
    _GUICtrlEdit_SetText($hWnd, $sFileOpenDialog)
    Return 0
    EndIf
    Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $Msg, $wParam, $lParam )
    EndFunc

    [/autoit]

    Da ist noch eine Sache, die ich nicht verstehe: Ich muss Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $Msg, $wParam, $lParam ) aufrufen, da sonst die Edit controls nicht angezeigt werden. Ich würde gerne wissen, wieso der Parameter $wProcOld bei Edit Controls immer gleich ist, denn ich habe beiden Edit Controls mit _WinAPI_SetWindowLong mit der Funktion _WindowProc verknüpft und beide geben IMMER 0x743B99D0 zurück. Woher kommt dieser Wert, scheint ja eine Konstante zu sein, aber in den Includes habe ich den Wert nicht gefunden?

    Edit: Habe gerade folgendes zu CallWindowProc in der msdn gefunden:

    Zitat

    The SetWindowLong function creates the subclass by changing the window procedure associated with a particular window, causing the system to call the new window procedure instead of the previous one. An application must pass any messages not processed by the new window procedure to the previous window procedure by calling CallWindowProc. This allows the application to create a chain of window procedures.

    Ok, _WindowProc wird also als Zwischen Prozedur aufgerufen und ruft zum Schluss wieder die alte Prozedur auf. Also ist der Wert ein Pointer auf die alte Prozedur oder so ähnlich, wie kommts das es den Wert nicht als feste Konstante gibt, wenn er doch eigentlich Global und immer gleich ist?

    Danke!

  • Focus auf anderes Control funktioniert, aber Text Cursor immer noch im alten Control

    • Trolleule1337
    • 7. August 2014 um 03:33

    Hi,
    ich habe ein Edit Control mit _GUICtrlEdit_Create erstellt und als parent handle gebe ich das handle eines ListViews an. Dadurch sendet das Control keine Message codes mehr, aber ich habe einen anderen Weg gefunden einen Klick in dieses Edit Control abzufangen. Beim klicken in das Edit Control öffnen sich ein FileOpen Dialog und fügt den Pfad in das Control ein. Das Problem ist das ein weiterer Klick, die Funktion wieder aufruft, da der Fokus bzw. der Text Cursor immer noch auf dem Control liegt. Wenn ich den Fokus ändere

    [autoit]

    ConsoleWrite("state: " & ControlFocus("", "", 33) & @CRLF)

    [/autoit]


    und den aktuellen Fokus abfrage

    [autoit]

    GUICtrlSetState(33, $GUI_FOCUS)

    [/autoit]

    liegt der fokus auf dem neuen control, aber der Text Cursor ist nach wie vor im alten Control und damit wird auch beim Klick egal wohin, wieder die FileOpen Funktion aufgerufen.

    Habe echt schon alles durch, hat jemand eine Idee? ?(

    Dateien

    Unbenannt.png 4,98 kB – 0 Downloads
  • handle Expression von Control ID unterscheiden

    • Trolleule1337
    • 1. August 2014 um 17:02

    Ja hast ja recht mein Freund, ich weiß auch, das es noch andere Lösungen gibt: Ich benutzte diese Funktion hier:

    http://www.autoit.de/index.php?page=Thread&threadID=25132

    Damit kann ich Controls, eine Funktion mit mehreren Parametern zuweisen. Hab die Funktion von Zeitriss insoweit abgeändert, dass ich statt ein Array ein Dict benutze.
    So habe ich in meinem Dictionaries sowohl IDs als auch Handles.

    Ich habs jetzt mit If Not GuiCtrlGetHandle() gelöst, ist ja nur bei IDs 1., aber naja.

    EDIT: War mir doch zu dirty, habe jetzt im Sinne von Zeitriss wieder Arrays verwendet, gefällt mir nach paar Optimierungen so eigentlich ganz gut.

  • handle Expression von Control ID unterscheiden

    • Trolleule1337
    • 1. August 2014 um 16:30

    Arrays sind scheisse, sowas benutzt man, wenn die Daten die man speichern will keine struktur haben, wie z.B. eine Zahlenreihe.

    AspirinJunkie: Benutzte x86 Skript
    BugFix : Das wäre dann redundant, keine schöne Lösung.

    Hab jetzt alles ausprobiert: ($aParams[$i] = Parameter, entweder id oder decimal of handle)

    [autoit]

    Local $pHwnd = Ptr($aParams[$i])
    Local $hex = HWnd($aParams[$i])

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

    ConsoleWrite("value: " & $aParams[$i] & " fuction: " & $oData("sFunction") & " param: " & $i+1 & " ptr: " & $pHwnd & " isid: " & _WinAPI_GetDlgCtrlID($hex) & "is hwnd_ptr: " & IsHWnd($pHwnd) & " is hwnd_expr: " & IsHWnd($hex) & " is hwnd_var: " & IsHWnd($aParams[$i]) & @CRLF)

    [/autoit]

    Ausgabe:

    Zitat

    value: 5440730 fuction: _Updates_ItemsAll param: 1 ptr: 0x005304DA isid: 0 is hwnd_ptr: 1 is hwnd_expr: 1 is hwnd_var: 0
    value: 142 fuction: _Updates_ItemsAll param: 2 ptr: 0x0000008E isid: 0 is hwnd_ptr: 1 is hwnd_expr: 1 is hwnd_var: 0
    value: 7013890 fuction: _Updates_ItemsAll param: 3 ptr: 0x006B0602 isid: 138 is hwnd_ptr: 1 is hwnd_expr: 1 is hwnd_var: 0

    Muss man nicht verstehen, zeigt nur, dass man so wie ich es getestet habe, nicht zwischen dezimal zahl und id unterscheiden kann.
    Also ich weiß nicht weiter, gibt es deine keine Funktion die eine ID als ID identifiziert oder prüft, ob eine ID existiert?

  • handle Expression von Control ID unterscheiden

    • Trolleule1337
    • 1. August 2014 um 13:37

    BugFix : Bin zufällig auf eine Diskussion von uns gestolpert, da war das Problem (bug) mit den dictionaries schon bekannt.

    Zitat

    So wie es aussieht kann das Dictionary keine handles speichern? Ich bekomme von der Funktion _Ex_CreateCtrl beispielsweise folgendes handle zurück: 0x007604AE.
    Wenn ich mir dann das Dictionary Item anschaue steht folgendes drin: 6424530

    Zitat

    Das stimmt. Die einzige Schwäche des Dictionary Objektes. :huh:

    Aber warum willst du kein Array verwenden? Ich sehe hier eigentlich keine besonderen Vorteile beim Einsatz des Dictionary.

    Andy: Ich kann dir nicht folgen, sehe dort keine Funktion, die mir weiterhilft? Ich bräuchte eine Funktion, wie IsID oder so, die mir dann 0 oder 1 zurückgibt?

  • handle Expression von Control ID unterscheiden

    • Trolleule1337
    • 1. August 2014 um 04:19

    Hey,
    ich hab ein Dictionary in denen ich handles und control ids speicher. Das handle steht allerdings als expression im dictionary, z.B. (expression: 1705444 handle: 0x001A05E4). Wie kann ich nun eine expression 1705444 von einer control id 142 unterscheiden.

    Ich dachte die Funktion Hwnd($hwnd) würde ausreichen, da eigentlich Hwnd 0 zurückgibt, wenn $hwnd eine id ist, aber jetzt ist es vorgekommen, das er eine id 143 (also Hwnd(143 )) irgendwie als expression erkannt hat und er mir ein handle zurückgibt. Gibts da eine eindeutigere Methoden die zwischen expression und id unterscheidet?

    Danke!

  • SetupVerifyInfFile Function um zu überprüfen ob Treiber signiert sind

    • Trolleule1337
    • 31. Juli 2014 um 19:51

    Es ist nicht direkt eine Installation, sondern eine Integration in ein WIM Image. (DISM UDF) -> ergänzt die WIMGAPI UDF.

    Aber ich glaube ich weiß, wo das Problem liegt. Weisst du, ob es in der setup API eine Funktion gibt, mit der ich die zu kopierenden Files die in den folgenden sections meine INF drin stehen, identifizieren kann?

    Zitat

    [SourceDisksNames.amd64]
    0=%Desc_amd640%

    [SourceDisksFiles.amd64]
    ahcix64s.sys=1,

    Dann könnte ich nämlich abfragen, ob sich diese Dateien im Ordner der INF Datei befinden, wenn nicht, wird meine DismAddDriver Funktion nämlich einen Fehler schmeissen.

    Danke schonmal!

  • SetupVerifyInfFile Function um zu überprüfen ob Treiber signiert sind

    • Trolleule1337
    • 31. Juli 2014 um 19:00

    Also ich hab das Skript als x64 und x86 kompiliert und einen x64 treiber abgefragt, den DismAddDriver ohne Fehler zum Image hinzufügt hätte, trotz fehlender CATALOG Datei. Habe das x64 Skript auf einem x64 System und das x86 Skript auf einem x86 System getestet und auf beiden System gibt das Skript 0 zurück.

    Wieso kann DismAddDriver diesen treiber hinzufügen (obwohl er laut SetupVerifyInfFile UNSIGNED ist) und andere nicht? Ich weiß net weiter ?(

  • SetupVerifyInfFile Function um zu überprüfen ob Treiber signiert sind

    • Trolleule1337
    • 31. Juli 2014 um 18:35

    ok Danke für den Tipp. Du sagst, so wie es jetzt aufgebaut ist, wie könnte es denn für beide Architekturen aussehen? Muss ich für einen x64 Treiber, das Skript nur in x64 kompilieren und auf einem x64 OS ausführen?

  • SetupVerifyInfFile Function um zu überprüfen ob Treiber signiert sind

    • Trolleule1337
    • 31. Juli 2014 um 18:04

    Hey vielen Dank für deine Mühe, bei mir tut sich leider nichts. Er returnt immer 0. Könntest du mal bitte deine ".inf" Datei und deine setupapi.dll hochladen. Das wäre super!

    Edit: Funktioniert doch sorry, die Funktion setzt voraus, dass die dazugehörige CAT Datei im Verzeichnis der INF Datei beiliegt.

    Dann habe ich mal eine andere Frage: Ich arbeite mit der DISM API und füge Treiber einem WIM Image mit der Funktion DismAddDriver hinzu. Einer der Parameter ist ein Boolean:

    Zitat

    ForceUnsigned
    A Boolean value that specifies whether to accept unsigned drivers to an x64-based image. Unsigned drivers will automatically be added to an x86-based image.

    TRUE
    Add unsigned drivers to an x64-based image.
    FALSE
    Do not add unsigned drivers to an x64-based image.

    Alles anzeigen

    Ich habe aktuell ForceUnsigned = False
    Das Image, welches ich gemeounted habe, ist x64. Wie kommt es, das er manche INF Dateien, denen keine CAT Datei beiliegt, ohne Fehler hinzufügt, bei anderen, wo auch keine CAT im INF Verzeichnis beiliegt wirft er einen (unsupported->unsigned) Fehler. Wenn ich dann die passende CAT in den Ordner, wo die INF liegt kopiere, fügt er diese auch ohne Fehler hinzu.

    Hier mal eine Beispiel Datei, die er ohne Fehler hinzufügt, obwohl keine CAT im Ordner liegt:

    Zitat

    ;/***************************************************************************\
    ;|* *|
    ;|* Copyright 2001-2008 NVIDIA, Corporation. All rights reserved. *|
    ;|* *|
    ;|* THE INFORMATION CONTAINED HEREIN IS PROPRIETARY AND CONFIDENTIAL *|
    ;|* TO NVIDIA, CORPORATION. USE, REPRODUCTION OR DISCLOSURE TO ANY *|
    ;|* THIRD PARTY IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORP. *|
    ;|* *|
    ;|* THE INFORMATION CONTAINED HEREIN IS PROVIDED "AS IS" WITHOUT *|
    ;|* EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING ALL IMPLIED *|
    ;|* WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A *|
    ;|* PARTICULAR PURPOSE. *|
    ;|* *|
    ;\***************************************************************************/

    [Version]
    Signature="$WINDOWS NT$"
    ;Class=System
    ;ClassGuid={4D36E97D-E325-11CE-BFC1-08002BE10318}
    Class=%Vendor_ClassName%
    ClassGuid={1a3e09be-1e45-494b-9174-d7385b45bbf5}
    Provider=%NVDA%
    DriverVer = 08/01/2008, 67.8.9 ;Changelist 2638902
    CatalogFile=nvnetbus.cat

    [ClassInstall32]
    Addreg=Vendor_BusName_ClassReg

    [Vendor_BusName_ClassReg]
    HKR,,,,%Vendor_ClassName%
    HKR,,Icon,,-19
    HKR,,NoInstallClass,,1
    HKLM,SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{1a3e09be-1e45-494b-9174-d7385b45bbf5},,,

    [DestinationDirs]

    ; Dest Dir is \winnt\system32\drivers
    DefaultDestDir = 12

    ; Dest dir for co-installer files is \winnt\system32
    nvnetBus_Device_CoInstaller_CopyFiles = 11

    [SourceDisksNames]
    1 = %DiskId1%, nvnetbus.tag,,""

    [SourceDisksFiles]
    nvnetbus.sys = 1,,
    nvnrm.sys = 1,,
    bdco1.dll = 1,,
    nvconrm.dll = 1,,

    ;*****************************************
    ; NVNETBus Install Section
    ;*****************************************

    [Manufacturer]
    %StdMfg%=Standard, ntamd64

    [Standard.ntamd64]
    %nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0057
    %nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0269
    %nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0373
    %nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_03EF
    %nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0450
    %nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_054C
    %nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_07DC
    %nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0760
    %nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0AB0

    [nvnetBus_Device.ntamd64]
    CopyFiles=Drivers_Dir

    [Drivers_Dir]
    nvnetbus.sys
    nvnrm.sys


    ;-------------- Service installation
    [nvnetBus_Device.ntamd64.Services]
    AddService = nvnetbus,%SPSVCINST_ASSOCSERVICE%, nvnetbus_Service_Inst

    ; -------------- nvnetbus driver install sections
    [nvnetbus_Service_Inst]
    DisplayName = %nvnetbus.SVCDESC%
    ServiceType = 1 ; SERVICE_KERNEL_DRIVER
    StartType = 3 ; SERVICE_DEMAND_START
    ErrorControl = 1 ; SERVICE_ERROR_NORMAL
    ServiceBinary = %12%\nvnetbus.sys
    LoadOrderGroup = Extended Base


    ;-------------- Coinstaller installation

    [nvnetBus_Device.ntamd64.CoInstallers]
    AddReg=CoInstaller_AddReg
    CopyFiles=nvnetBus_Device_CoInstaller_CopyFiles

    [nvnetBus_Device_CoInstaller_CopyFiles]
    bdco1.dll
    bdco1ins.dll,bdco1.dll
    nvconrm.dll

    [CoInstaller_AddReg]
    HKR,,CoInstallers32,0x00010000, \
    "bdco1ins.dll,BDCoInstaller", \
    "nvconrm.dll,NVCoInstaller"

    HKR, Uninstall, Script,0,"nvnrm.nvu"
    HKR, Uninstall, Name,0,"NVIDIA Ethernet Driver Components"
    HKR, Uninstall, INFSrcDir, 0, %1%
    HKR, Uninstall, Uninstaller,0,"nvunrm.exe"

    [BDCoInfo]
    OriginalInfSourcePath = %1%


    [Strings]
    SPSVCINST_ASSOCSERVICE= 0x00000002
    NVDA = "NVIDIA"
    StdMfg = "NVIDIA"
    DiskId1 = "NVIDIA Network Bus Installation Disk #1"
    nvnetbus.DeviceDesc = "NVIDIA Network Bus Enumerator"
    nvnetbus.SVCDESC = "NVIDIA Network Bus Enumerator"
    Vendor_ClassName="NVIDIA Network Bus Enumerator"

    Alles anzeigen


    Es scheint als nutzt DISM die setup API. Hier ist der log zu der INF, nachdem ich sie mit DismAddDriver hinzugefügt habe:

    Zitat

    [Device Install Log]
    OS Version = 6.1.7601
    Service Pack = 1.0
    Suite = 0x0100
    ProductType = 1
    Architecture = x86

    [BeginLog]

    [Boot Session: 2014/07/29 07:27:45.057]

    >>> [Import Driver Package - C:\network_share\treiber\klappt\nvnbd64a.inf]
    >>> Section start 2014/07/31 18:24:20.660
    os: Version = 6.1.7601, Service Pack = 1.0, Suite = 0x0100, ProductType = 1, Architecture = x86
    cmd: C:\Users\andi\AppData\Local\Temp\3D99B492-EFA9-4CFC-A01F-991B6D6B71A5\dismhost.exe {06EDD581-78B3-4BE6-9EBA-62A274B50D18}
    sto: Importing driver package into Driver Store:
    sto: Driver Store = c:\mounted\Windows\System32\DriverStore (Offline | 6.1.7601)
    sto: Driver Package = C:\network_share\treiber\klappt\nvnbd64a.inf
    sto: Architecture = amd64
    sto: Locale Name = neutral
    sto: Flags = 0x00000000
    inf: Opened INF: 'C:\network_share\treiber\klappt\nvnbd64a.inf' ([strings])
    inf: Opened INF: 'C:\network_share\treiber\klappt\nvnbd64a.inf' ([strings])
    sto: Importing driver package files:
    sto: Source Path = C:\network_share\treiber\klappt
    sto: Destination Path = c:\mounted\Windows\System32\DriverStore\FileRepository\nvnbd64a.inf_amd64_neutral_d36e4bfb3a2d7452
    flq: {_commit_file_queue}
    flq: CommitQ DelNodes=0 RenNodes=0 CopyNodes=0
    flq: CommitQ early exit: No nodes are queued
    flq: {_commit_file_queue exit OK}
    sto: {Index Driver Package: c:\mounted\Windows\System32\DriverStore\FileRepository\nvnbd64a.inf_amd64_neutral_d36e4bfb3a2d7452\nvnbd64a.inf} 18:24:20.717
    idb: Registered driver store entry 'nvnbd64a.inf_amd64_neutral_d36e4bfb3a2d7452'.
    idb: Published 'nvnbd64a.inf_amd64_neutral_d36e4bfb3a2d7452\nvnbd64a.inf' to 'c:\mounted\Windows\INF\oem201.inf'
    idb: Published driver store entry 'nvnbd64a.inf_amd64_neutral_d36e4bfb3a2d7452'.
    sto: Published driver package INF 'oem201.inf' was changed.
    sto: Active published driver package is 'nvnbd64a.inf_amd64_neutral_d36e4bfb3a2d7452'.
    sto: {Index Driver Package: exit(0x00000000)} 18:24:21.171
    inf: Opened INF: 'C:\network_share\treiber\klappt\nvnbd64a.inf' ([strings])
    inf: Opened INF: 'C:\network_share\treiber\klappt\nvnbd64a.inf' ([strings])
    sto: Imported driver package into Driver Store:
    sto: Filename = c:\mounted\Windows\System32\DriverStore\FileRepository\nvnbd64a.inf_amd64_neutral_d36e4bfb3a2d7452\nvnbd64a.inf
    sto: Time = 531 ms
    <<< Section end 2014/07/31 18:24:21.222
    <<< [Exit status: SUCCESS]

    Alles anzeigen

    Hast du eine Idee, wieso das so ist?

  • SetupVerifyInfFile Function um zu überprüfen ob Treiber signiert sind

    • Trolleule1337
    • 31. Juli 2014 um 15:18

    Das Problem ist, wenn ich mir nicht 100% sicher bin, dann schließe ich eine Funktion nicht aus.
    Auf der MSDN Seite steht nicht eindeutig geschrieben, dass die Funktion unter Windows 7 nicht unterstützt wird oder?

    Wird die Funktion also nicht unterstützt BugFix? Gibt es eine andere API oder Workaround, um zu prüfen, ob eine INF Datei signiert/ unsigniert ist?

  • SetupVerifyInfFile Function um zu überprüfen ob Treiber signiert sind

    • Trolleule1337
    • 30. Juli 2014 um 22:17

    Ja so ein Beispiel hab ich auch, sieht dann so aus:

    [autoit]

    $ptr=DllStructCreate("dword;char[260];char[260];char[260]")
    $signed=DllCall("setupapi.dll","INT","SetupVerifyInfFile","wstr",$sPath, "ptr",0,"ptr",DllStructGetPtr($ptr))
    _ArrayDisplay($signed)
    MsgBox(0, "error", _WinAPI_GetLastError() & " " & _WinAPI_GetLastErrorMessage())
    _DLLStructDisplay($ptr, "dword;char[260];char[260];char[260]")

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

    If $signed[0] Then
    MsgBox(0,"",$signed[0]) ;debug only
    MsgBox(0,"Signed?",DllStructGetData($ptr,2) & @LF & DllStructGetData($ptr,3) & @LF & DllStructGetData($ptr,4))
    Else
    MsgBox(0,"Error","DllCall")
    Endif

    [/autoit]

    Ist von unseren englischen Usern geklaut, funktioniert leider auch nicht!

    PS: Bei der DISM API habe statt einen Pointer auf eine Struktur bei allen Funktionen immer einen 0 Pointer benutzt. Danach dann die Speicherstelle aus dem Array was mir DLLCall zurückgibt ausgelesen!

  • SetupVerifyInfFile Function um zu überprüfen ob Treiber signiert sind

    • Trolleule1337
    • 30. Juli 2014 um 17:48

    Hi,
    ich möchte prüfen, ob ein bestimmte inf datei "signed" ist oder nicht? Laut MSDN soll das mit dieser Funktion gehen:

    http://msdn.microsoft.com/en-us/library/…7(v=vs.85).aspx

    Hier mal ein Versuch:

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

    ;~ Local $sPath = "C:\network_share\driver\NVHDCi.inf"
    Local $sPath = "C:\network_share\driver\nv_dispi.inf"
    Local $signed = DllCall("setupapi.dll", "BOOL", "SetupVerifyInfFileW", _
    "WSTR", $sPath, _
    "PTR", 0, _
    "PTR*", 0 _ ; out
    )
    If @error Then MsgBox(0, "DLL error", @error)

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

    _ArrayDisplay($signed)

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

    MsgBox(0, "error", _WinAPI_GetLastError())

    [/autoit]

    Return code ist 0 und der letze pointer der eigentliche auf eine " SP_INF_SIGNER_INFO" Struktur verweisen sollte ist auch 0. Also Requirements ist angegeben:

    Zitat

    Minimum supported client: Windows XP


    Die wenigen autoIT Beiträge die ich dazu gefunden habe, benutzten Windows XP. Funktioniert die Funktion nicht unter Windows 7? Hier ist ein Artikel, dort steht unter Windows Vista, könnte man mit der Funktion keine Treiber prüfen, aber ist das nicht veraltet?
    Microsoft Artikel

    Gibt es eine Alternative Funktion (nicht auf WMI Basis)?

    Danke schonmal!

  • Dictionary übergeben ByRef Problem

    • Trolleule1337
    • 16. Mai 2014 um 11:36

    BugFix : okay das würde es erklären, danke.

    AspirinJunkie: Hab ich gemacht.

    Danke euch!

  • Dictionary übergeben ByRef Problem

    • Trolleule1337
    • 16. Mai 2014 um 01:43

    Wo wir gerade bei Dictionaries sind, das hab ich von progandi gefunden (2012)

    [autoit]

    $oINI = ObjCreate('Scripting.Dictionary')
    $sSection = "test"
    $oINI($sSection) = ObjCreate('Scripting.Dictionary')
    $oINI($sSection).Add("key", "value")
    $oINI($sSection).Item("key2") = "value2"

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

    [autoit]$sSection2 = "section"
    $oINI.Item($sSection) = ObjCreate('Scripting.Dictionary')
    $oINI($sSection2).Add("key2") = "value2"
    $oINI.Item($sSection2).Item("key2") = "value2"

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

    $sSection2 = "section"
    $oINI.Add($sSection, ObjCreate('Scripting.Dictionary'))

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

    MsgBox(0, "test", IsObj($oINI)) ; 1
    MsgBox(0, "test", IsObj($oINI($sSection))) ; 0

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

    MsgBox(0, "test", $oINI($sSection).Item("key2")) ; leer
    MsgBox(0, "test", $oINI($sSection).Item("key")) ; leer

    [/autoit]

    Ich bin verwundert wieso ich weder
    $oINI($sSection).Item("key") noch
    $oINI($sSection).Item("key2")
    abrufen kann, da progandy immer gute arbeit macht.

    Mir gefällt die kurze Schreibweise, kann jemand mal eine funktionierende kurz version aufzeigen bzw. erklären wieso sein Beispiel nicht klappt ?!

  • Dictionary übergeben ByRef Problem

    • Trolleule1337
    • 15. Mai 2014 um 09:55

    Super versteh ich, hast mir sehr geholfen.

    Mein gesamtes Projekt läuft so gut wie ohne globale Variablen, jetzt gibt es kein zurück. Ich versuch ein bisschen objekt orientierung reinzubringen, weil ich keine OO Sprache drauf hab, aber das nächste Projekt wird ohne AutoIt ...wahrscheinlich :D

  • Dictionary übergeben ByRef Problem

    • Trolleule1337
    • 14. Mai 2014 um 22:16

    Vielen Dank für die ausführliche Erklärung.

    Was mach ich denn wenn ich nun in SetWimData(...) die $WimData mit der $comdict gleichsetzen möchte. Also:

    [autoit]

    Func SetWimData(ByRef $comDict, ByRef $WimData)
    $WimData = $comDict ; Warum funktioniert das so nicht?

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

    ; For $k in $comDict.Keys
    ; $WimData.add($k, $comDict($k)) ; Warum funktioniert es so?
    ; Next

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

    EndFunc

    [/autoit]
  • Dictionary übergeben ByRef Problem

    • Trolleule1337
    • 14. Mai 2014 um 17:43

    Ich glaub das ist ein Bug:

    Wenn ich nach dem
    $WimData.add ...
    $WimData = 0

    schreibe, wird mir das Dictionary trotzdem angezeigt:

    [autoit]

    Func SetWimData(ByRef $comDict, ByRef $WimData)
    ;~ $WimData = $comDict ; Warum funktioniert das so nicht?

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

    For $k in $comDict.Keys
    $WimData.add($k, $comDict($k)) ; Warum funktioniert es so?
    Next

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

    $WimData = 0
    EndFunc

    [/autoit]
  • Dictionary übergeben ByRef Problem

    • Trolleule1337
    • 13. Mai 2014 um 20:37

    Danke für die Mühe AspirinJunkie!
    Leider war es anders gedacht.

    In Zeile 48 kopiere ich ja $comdict in $WimData. Damit möchte ich $WimData setzen um es dann mit dem Button "Show" ($ishow) aufzurufen, aber es ist beim Aufruf (GUICtrlSetOnEventEx($ishow, "_ArrayListDisplay", $WimData)) leer wenn ich es mache wie in Zeile 48. Mache ich es wie in Zeile 52 klappt es komischerweise. ?(?(

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™