![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Открытие dll библиотеки иконок |
|
|
[решено] Открытие dll библиотеки иконок
|
Старожил Сообщения: 156 |
Привет! Нужно открывать библиотеку, выбирать иконку, и писать в переменные имя и номер иконки.
Пробовал DllCall - количество иконок ограничено 500, не хватает. Смотрел на IconChoser.au3 - открыть файл получилось нормально, но выбора настроить не смог и не нашел правильного. Хотя этот вариант открыл все иконки с библиотеки. Кто что может предложить? |
|
Отправлено: 21:38, 12-10-2013 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата eus_deus:
|
|
------- Отправлено: 07:56, 13-10-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 156
|
Профиль | Отправить PM | Цитировать для выбора иконки с файла и получения строки вида - имя файла, иконка. Для использования потом в коде
|
Отправлено: 15:05, 13-10-2013 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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 |
|
------- Отправлено: 02:39, 14-10-2013 | #4 |
Старожил Сообщения: 156
|
Профиль | Отправить 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 |
||
Отправлено: 16:12, 14-10-2013 | #5 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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 |
|
------- Отправлено: 21:00, 14-10-2013 | #6 |
Старожил Сообщения: 156
|
Профиль | Отправить PM | Цитировать |
Отправлено: 21:27, 14-10-2013 | #7 |
Старожил Сообщения: 265
|
Профиль | Отправить PM | Цитировать eus_deus,
1. Известно что иконку можно вытащить по номеру 2. Известно что ListView может отобразить иконки в соотвествующем стиле От вас требуется запустить цикл запроса иконок и тупо вставить их в ListView. Когда цикл перестанет возвращать иконки, значит они закончились и сделать выход из цикла. |
Отправлено: 23:33, 15-10-2013 | #8 |
Старожил Сообщения: 156
|
Профиль | Отправить PM | Цитировать AZJIO, все так просто? Вечером обязательно попробую))
|
Отправлено: 15:11, 16-10-2013 | #9 |
Старожил Сообщения: 156
|
Профиль | Отправить PM | Цитировать не все просто)) ладно, фиг с ним, другим займусь
|
Отправлено: 20:45, 16-10-2013 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочие - [решено] Библиотеки 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 |
|