<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Получить иконку папки или ассоциированного файла]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=12211&amp;type=atom" />
	<updated>2016-12-09T09:18:34Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=12211</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получить иконку папки или ассоциированного файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=109729#p109729" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>FilePath := A_Desktop

WM_SETICON := 0x80, ICON_BIG := 1, ICON_SMALL := 0
sz := { 16: &quot;SMALL&quot;, 32: &quot;LARGE&quot;, 48: &quot;EXTRALARGE&quot;, 256: &quot;JUMBO&quot; }

Icon1 := GetSysImgListIcon(FilePath, sz[16])
Icon2 := GetSysImgListIcon(FilePath, sz[32])
Icon3 := GetSysImgListIcon(FilePath, sz[48])
Icon4 := GetSysImgListIcon(FilePath, sz[256])

Gui, +LastFound
Gui, Add, Pic, % &quot;w&quot; Icon2.W &quot; h&quot; Icon2.H, % &quot;HICON:&quot; Icon2.HICON
Gui, Add, Pic, % &quot;x+10 yp w&quot; Icon3.W &quot; h&quot; Icon3.H, % &quot;HICON:&quot; Icon3.HICON
Gui, Add, Pic, % &quot;x+10 yp w&quot; Icon4.W &quot; h&quot; Icon4.H, % &quot;HICON:&quot; Icon4.HICON
SendMessage, WM_SETICON, ICON_SMALL, Icon1.HICON  ; иконка в строке заголовка
SendMessage, WM_SETICON, ICON_BIG  , Icon2.HICON  ; иконка для Alt + Tab
Gui, Show
Return

GuiClose:
   ExitApp

GetSysImgListIcon(Path, Size := &quot;SYSSMALL&quot;, Overlay := &quot;&quot;)  {
   static SHIL := { LARGE: 0x00, SMALL: 0x01, EXTRALARGE: 0x02, SYSSMALL: 0x03, JUMBO: 0x04 }  ; возможные размеры
        , AW := A_IsUnicode ? &quot;W&quot; : &quot;A&quot;
        , cbSFI := A_PtrSize + 8 + (340 &lt;&lt; A_IsUnicode)
        , IID_IIL_Str := &quot;{46EB5926-582E-4017-9FDF-E8998DAA0950}&quot;
        , SHGFI := {SYSICONINDEX: 0x4000, PIDL: 0x8}
        , SHGIOI := {SHARE: 0x0FFFFFFF, LINK: 0x0FFFFFFE, SLOWFILE: 0x0FFFFFFD, DEFAULT: 0x0FFFFFFC}
        , ILD_IMAGE := 0x20
   
   VarSetCapacity(IID_IIL, 16, 0) ; IID
   DllCall(&quot;Ole32\IIDFromString&quot;, WStr, IID_IIL_Str, Ptr, &amp;IID_IIL, UInt)
   
   HMOD := DllCall(&quot;GetModuleHandle&quot;, Str, &quot;shell32.dll&quot;, UPtr)
   FileIconInit := DllCall(&quot;GetProcAddress&quot;, Ptr, HMOD, Ptr, 660, UPtr)
   DllCall(FileIconInit, UInt, True, UInt)
   
   VarSetCapacity(SFI, cbSFI, 0) ; SHFILEINFO
   DllCall(&quot;Shell32\SHParseDisplayName&quot;, Str, path, Ptr, 0, PtrP, ppidl, UInt, 0, UIntP, 0)
   Flags := SHGFI.PIDL | SHGFI.SYSICONINDEX
   if !DllCall(&quot;Shell32\SHGetFileInfo&quot; . AW, Ptr, ppidl, UInt, 0, Ptr, &amp;SFI, UInt, cbSFI, UInt, Flags, UPtr)
      Return False
   
   IconIndex := NumGet(SFI, A_PtrSize, &quot;Int&quot;)
   if DllCall(&quot;Shell32\SHGetImageList&quot;, Int, SHIL[Size], Ptr, &amp;IID_IIL, PtrP, IIL, UInt)
      Return False
   
   Flags := ILD_IMAGE
   if SHGIOI.HasKey(Overlay)
   &amp;&amp; (IOV := DllCall(&quot;Shell32\SHGetIconOverlayIndex&quot;, Ptr, 0, UInt, SHGIOI[Overlay], Int)) &gt;= 0
      Flags |= IOV &lt;&lt; 8
      
   DllCall(&quot;Comctl32\ImageList_GetIconSize&quot;, Ptr, IIL, IntP, CX, IntP, CY, UInt)
   hIcon := DllCall(&quot;Comctl32\ImageList_GetIcon&quot;, Ptr, IIL, Int, IconIndex, UInt, Flags, UPtr)
   
   Return { HICON: hIcon, W: CX, H: CY }
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2016-12-09T09:18:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=109729#p109729</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получить иконку папки или ассоциированного файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=109728#p109728" />
			<content type="html"><![CDATA[<p><strong>Flasher</strong> спасибо, тоже уже об этом думал, desctop.ini еще смог бы распарсить, а вот в реестр даже не знаю.<br />Я, кстати, нашел такой код на забугорном:<br /></p><div class="codebox"><pre><code>
FilePath = C:\Header.png
h_icon := DllCall(&quot;Shell32\ExtractAssociatedIcon&quot; (A_IsUnicode ? &quot;W&quot; : &quot;A&quot;), ptr, DllCall(&quot;GetModuleHandle&quot;, ptr, 0, ptr), str, FilePath, &quot;ushort*&quot;, lpiIcon, ptr)   ;only supports 32x32
Gui, Add, Text, w64 h64 Y0 X48 hwndmypic1 0x3 gMySubroutine, ; 0x3 = SS_ICON
SendMessage, STM_SETICON := 0x0170, h_icon, 0,, Ahk_ID %mypic1%
Gui, Add, Text, w128 h64 Y32 X0 Center gMySubroutine, VPBank- Thu bo nhiem kiem toan 2012
Gui, Show, AutoSize Center
return
MySubroutine:
run, C:\Header.png
Exitapp
</code></pre></div><p>Работает, показывает правильную иконку папок и файлов, но, как человек там пишет, можно получить иконку размера 32х32. Я пробовал методом тыка менять, но результата пока нет.</p>]]></content>
			<author>
				<name><![CDATA[upsi_daezium]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34120</uri>
			</author>
			<updated>2016-12-09T09:06:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=109728#p109728</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получить иконку папки или ассоциированного файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=109706#p109706" />
			<content type="html"><![CDATA[<p>Для папки см. ключ IconResource вложенного desktop.ini.<br />Для файлов нужно ковырять HKCR. Смотрим дефолтный ключ в <em>.&lt;ext&gt;</em>, переходим в указанную там ветку, и в нём читаем дефолтный ключ в подветке <em>DefaultIcon</em>.</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2016-12-08T21:54:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=109706#p109706</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Получить иконку папки или ассоциированного файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=109702#p109702" />
			<content type="html"><![CDATA[<p>День добрый.</p><p>Как получить иконку у конкретного файла (C:\test.pdf, к примеру) или папки (C:\users\user\desktop, тут в идеале нужна иконка именно десктопа, на худой конец просто иконка папки) и поместить в окно, например, на кнопку.<br />Я нашел только примеры извлечения иконок из exe, dll.<br />Есть ли какой-нибудь относительно простой способ или это очень сложно получается.</p>]]></content>
			<author>
				<name><![CDATA[upsi_daezium]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34120</uri>
			</author>
			<updated>2016-12-08T20:31:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=109702#p109702</id>
		</entry>
</feed>
