Bilder aus einer DLL laden

  • Da ich derzeitig ein Praktikum in der Universitätsklinikum Charité absolviere
    habe ich reichlich Zeit und weiß damit nichts anzufangen, also habe ich
    wieder mit AutoIT angefangen und möchte einige meiner alten Scripte
    ausbauen.

    Da es leider nicht möglich ist per Index oder ID eine Bilddatei aus einer
    Dll auszulesen ist das irgendwie per Dll realisierbar, da ich aber keine Ahnung von den Dll Funktionen habe, wäre es nett wenn mir jemand sagt welche
    Dll benötigt wird (ich tippe mal auf user32.dll) und wie das ganze dann
    geladen werden kann.


    ~Mirage

  • Hi,

    ich möchte Bilder für verschiedene Controls benutzen die dann aber
    nicht zu editieren wären damit bestimmte Fehler vorgebeugt werden usw.
    Da ich keine Funktion ausser #include kenne die Dateien in das Script
    einbindet wollte ich das via .dll machen (hab es mit #include schon probiert,
    konnte aber die Datei nicht aufrufen)

  • Ist nicht von mir ...

    Spoiler anzeigen
    [autoit]


    #cs
    ; Funktion: SetBitmapResourceToPicCtrl($hwnd,$ctrl,$file,$resource)
    ;
    ; Bitmap aus einer DLL laden.

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

    #ce

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

    $gui = GUICreate("")
    $pic = GUICtrlCreatePic("",0,0,200,200)

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

    GUISetState()

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

    SetBitmapResourceToPicCtrl($gui,$pic,"resource.dll","OK_BMP")

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

    While 1
    If GUIGetMsg() = -3 Then Exit
    WEnd

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

    Func SetBitmapResourceToPicCtrl($hwnd,$ctrl,$file,$resource)
    Local Const $STM_SETIMAGE = 0x0172
    Local Const $IMAGE_BITMAP = 0
    Local Const $LR_CREATEDIBSECTION = 0x2000
    Local Const $LR_COPYDELETEORG = 8
    Local $hBitmap

    $hwnd = ControlGetHandle($hwnd,"",$ctrl)

    Local $DLLinst = DLLCall("kernel32.dll","hwnd","LoadLibraryEx","str",$file,"hwnd",0,"int",0x00000022)
    $DLLinst = $DLLinst[0]

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

    If IsInt($resource) Then
    $hBitmap = DLLCall("user32.dll","hwnd","LoadImage","hwnd",$DLLinst,"int",$resource, _
    "int",$IMAGE_BITMAP,"int",0,"int",0,"int",0)
    Else
    $hBitmap = DLLCall("user32.dll","hwnd","LoadImage","hwnd",$DLLinst,"str",$resource, _
    "int",$IMAGE_BITMAP,"int",0,"int",0,"int",0)
    EndIf
    $hBitmap = $hBitmap[0]

    DeleteObject(_SendMessage($hwnd,$STM_SETIMAGE,$IMAGE_BITMAP,$hBitmap,0,"int","int","hwnd"))

    DLLCall("kernel32.dll","int","FreeLibrary","hwnd",$DLLinst)
    EndFunc

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

    Func _SendMessage($hWnd, $msg, $wParam = 0, $lParam = 0, $r = 0, $t1 = "int", $t2 = "int", $t3 = "long")
    Local $ret = DllCall("user32.dll", $t3, "SendMessage", "hwnd", $hWnd, "int", $msg, $t1, $wParam, $t2, $lParam)
    If @error Then Return SetError(@error, @extended, "")
    If $r >= 0 And $r <= 4 Then Return $ret[$r]
    Return $ret
    EndFunc ; _SendMessage()
    Func DeleteObject($hObj)
    Local $bResult = DllCall('gdi32.dll', 'int', 'DeleteObject', _
    'hwnd', $hObj)
    Return $bResult[0]
    EndFunc ;==>DeleteObject

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


    Gruß
    Greenhorn