Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Открытие dll библиотеки иконок

Ответить
Настройки темы
[решено] Открытие dll библиотеки иконок

Старожил


Сообщения: 156
Благодарности: 1


Конфигурация

Профиль | Отправить PM | Цитировать


Привет! Нужно открывать библиотеку, выбирать иконку, и писать в переменные имя и номер иконки.
Пробовал DllCall - количество иконок ограничено 500, не хватает.
Смотрел на IconChoser.au3 - открыть файл получилось нормально, но выбора настроить не смог и не нашел правильного. Хотя этот вариант открыл все иконки с библиотеки.
Кто что может предложить?

Отправлено: 21:38, 12-10-2013

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата eus_deus:
Нужно открывать библиотеку, выбирать иконку, и писать в переменные имя и номер иконки. »
Для чего?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 07:56, 13-10-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


для выбора иконки с файла и получения строки вида - имя файла, иконка. Для использования потом в коде

Отправлено: 15:05, 13-10-2013 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата eus_deus:
для выбора иконки с файла и получения строки вида - имя файла, иконка. Для использования потом в коде »
Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <WinAPI.au3>

$hGUI = GUICreate('Icons', 150, 150, -1, -1, BitOR($WS_POPUP, $WS_BORDER))
GUISetState(@SW_SHOW, $hGUI)

$iLoading_Lbl = GUICtrlCreateLabel('Loading...', 10, 10)

$aIcons = _LoadIcons('shell32.dll')
$iRandom = Random(1, $aIcons[0][0], 1)
$iCenter = (150  / 2) - (32 / 2)

GUICtrlDelete($iLoading_Lbl)
GUICtrlCreateIcon($aIcons[$iRandom][0], $aIcons[$iRandom][1], $iCenter, $iCenter, 32, 32)

While 1
    $iMsg = GUIGetMsg()

    Switch $iMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _LoadIcons($sFile)
    Local $iIcons = _WinAPI_ExtractIconEx($sFile, -1, 0, 0, -1)
    Local $aIcons[$iIcons + 1][2] = [[$iIcons]]

    For $i = 1 To $iIcons
        $aIcons[$i][0] = $sFile
        $aIcons[$i][1] = -$i
    Next

    Return $aIcons
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 02:39, 14-10-2013 | #4


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


Creat0R, ладно, понял - фигню. сморозил, фигню и получил.
Код нужен вот такого назначения, чтобы
Цитата Creat0R:
выбора иконки с файла и получения строки вида - имя файла, иконка »
Код: Выделить весь код
Func _iconselect()
    $stIcon = DllStructCreate('int') ;Структура для номера иконки
    ;преобразование строки имени файла в Unicode
    $nBuffersize = DllCall('KERNEL32.DLL', _
            'int', 'MultiByteToWideChar', _
            'int', 0, _
            'int', 0x00000001, _
            'str', $sFileName, _
            'int', -1, _
            'ptr', 0, _
            'int', 0)
    $stString = DLLStructCreate("byte[" & 2 * $nBuffersize[0] & "]")
    DllCall('KERNEL32.DLL', _
            'int', 'MultiByteToWideChar', _
            'int', 0, _
            'int', 0x00000001, _
            'str', $sFileName, _
            'int', -1, _
            'ptr', DllStructGetPtr($stString), _
            'int', $nBuffersize[0])
    ;Вызов функции диалога выбора значков
    DllCall('shell32.dll', _
            'none', 62, _
            'hwnd', 0, _
            'ptr', DllStructGetPtr($stString), _
            'int', DllStructGetSize($stString), _
            'ptr', DllStructGetPtr($stIcon))
    ;обратное преобразование строки имени файла в однобайтную кодировку
    $nBuffersize = DllCall('KERNEL32.DLL', _
            'int', 'WideCharToMultiByte', _
            'int', 0, _
            'int', 0x00000200, _
            'ptr', DllStructGetPtr($stString), _
            'int', -1, _
            'ptr', 0, _
            'int', 0, _
            'ptr', 0, _
            'ptr', 0)
    $stFile = DLLStructCreate('char[' & $nBuffersize[0] & ']')
    DllCall('KERNEL32.DLL', _
            'int', 'WideCharToMultiByte', _
            'int', 0, _
            'int', 0x00000200, _
            'ptr', DllStructGetPtr($stString), _
            'int', -1, _
            'ptr', DllStructGetPtr($stFile), _
            'int', $nBuffersize[0], _
            'ptr', 0, _
            'ptr', 0)
    $sFileName = DllStructGetData($stFile, 1)
    $nIconIndex = DllStructGetData($stIcon, 1) ;Получение номера иконки
    ;Контрольное сообщение
    ; Msgbox(262192, 'Info', _
    ;        'Выбран файл: ' & $sFileName & @CR & _
    ;        'Иконка: ' & $nIconIndex)
    GUICtrlSetData($sInput4, $nIconIndex)
    $stBuffer = 0
    $stFile = 0
    $stIcon = 0
EndFunc
Но этот открывает только не более 500 иконок с библиотеки

Отправлено: 16:12, 14-10-2013 | #5


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата eus_deus:
Код нужен вот такого назначения »
Т.е нужно просто вывести на экран диалог выбора иконки, и получить выбранную в нём иконку?

А так:

Код: Выделить весь код
$aRet = _PickIconDlg('shell32.dll', 2, WinGetHandle(''))

If Not @error Then
    ConsoleWrite('Icon: ' & $aRet[0] & @LF)
    ConsoleWrite('ID: ' & $aRet[1] & @LF)
EndIf

;Open Dialog to pick an icon of certain file.
Func _PickIconDlg($sFileName, $nIconIndex = 0, $hWnd = 0)
    Local $nRet, $aRetArr[2]

    $nRet = DllCall("shell32.dll", "int", "PickIconDlg", "hwnd", $hWnd, "wstr", $sFileName, "int", 1000, "int*", $nIconIndex)
    If @error Or Not $nRet[0] Then Return SetError(1, 0, -1)

    $aRetArr[0] = $nRet[2]
    $aRetArr[1] = $nRet[4]

    Return $aRetArr
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 21:00, 14-10-2013 | #6


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Т.е нужно просто вывести на экран диалог выбора иконки, и получить выбранную в нём иконку? »
да, вот только
Цитата eus_deus:
открывает только не более 500 иконок с библиотеки »
а нужна вся библиотека

Отправлено: 21:27, 14-10-2013 | #7


Аватара для AZJIO

Старожил


Сообщения: 265
Благодарности: 126

Профиль | Отправить PM | Цитировать


eus_deus,
1. Известно что иконку можно вытащить по номеру
2. Известно что ListView может отобразить иконки в соотвествующем стиле
От вас требуется запустить цикл запроса иконок и тупо вставить их в ListView. Когда цикл перестанет возвращать иконки, значит они закончились и сделать выход из цикла.

Отправлено: 23:33, 15-10-2013 | #8


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


AZJIO, все так просто? Вечером обязательно попробую))

Отправлено: 15:11, 16-10-2013 | #9


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


не все просто)) ладно, фиг с ним, другим займусь

Отправлено: 20:45, 16-10-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Открытие dll библиотеки иконок

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие - [решено] Библиотеки DLL Корабль Microsoft Windows 7 7 10-11-2012 13:35
Разное - [решено] Отображение иконок dll в проводнике. smoke-grenade Оформление Windows XP 8 01-02-2010 16:48
Для чего нужны dll библиотеки или Учимся редактировать dll Ban_vam_Dam Флейм 5 31-07-2009 17:41
библиотеки,dll...драйвера?? Stepka 83 Видеокарты 10 08-05-2009 10:09
Ошибка библиотеки dll wellann Microsoft Windows 95/98/Me (архив) 2 16-03-2005 23:49




 
Переход