<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3805307</guid>
        <pubDate>Mon, 29 Jul 2019 16:06:14 +0000</pubDate>
        <title>Как узнать версию любого файла, доступную в его свойствах?</title>
        <link>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3805307</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415214&view=findpost&p=3805302'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сергей85 &#064; <time class="tag-quote__quoted-time" datetime="2019-07-29T18:08:07+03:00">29.07.19, 15:08</time></span><div class='quote '>Последний вопрос остался: для чего нужна кодировка asCharset со странным значением 040904B0?</div></div>Ресурс версии может содержать разные строковые блоки одинакового назначения, различающиеся языком описания. Старший WORD определяет кодовую страницу (0x0409 – U.S. English), младший – способ кодирования символов (0x04B0 – юникод). По идее, чтобы предоставить эту инфу пользователю, ты должен определить предпочтительную им кодовую страницу и искать соответствующие ей строковые блоки, декодируя их указанным способом кодирования. Если не нашлось... зависит от предпочтений пользователя. Или твоей программы.]]></description>
        <author>Qraizer</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3805305</guid>
        <pubDate>Mon, 29 Jul 2019 15:22:16 +0000</pubDate>
        <title>Как узнать версию любого файла, доступную в его свойствах?</title>
        <link>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3805305</link>
        <description><![CDATA[JoeUser: Посмотри <a class='tag-url' href='https://helloacm.com/c-function-to-get-file-version-using-win32-api-ansi-and-unicode-version/' target='_blank'>эту статью</a>. <br>
Никаких разборок с кодировками. <br>
Единственное - нужно определиться какую версию использовать ansi или unicode. <br>
Хотя выбор очевиден.]]></description>
        <author>JoeUser</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3805302</guid>
        <pubDate>Mon, 29 Jul 2019 15:08:07 +0000</pubDate>
        <title>Как узнать версию любого файла, доступную в его свойствах?</title>
        <link>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3805302</link>
        <description><![CDATA[Сергей85: В общем, нашел функцию и причесал. Она работает и для SYS, и для EXE. Остальные не проверял. Последний вопрос остался: для чего нужна кодировка asCharset со странным значением 040904B0?<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">AnsiString asGetGileInfo(AnsiString asFile_Path, int iMode) //0 - ProductName, 1 - FileVersion, 2 - LegalCopyright, 3 - CompanyName.</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwTemp; //Временная переменная для GetFileVersionInfoSize.</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwSize = GetFileVersionInfoSize(asFile_Path.c_str(), &amp;dwTemp);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (dwSize == 0) return &quot;(GetFileVersionInfoSize не отработала)&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char *cBuffer = &quot;&quot;; //Буфер получения информации для GetFileVersionInfo.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cBuffer = (char*)GlobalAlloc(GMEM_FIXED, dwSize);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (GetFileVersionInfo(asFile_Path.c_str(), dwTemp, dwSize, cBuffer) != 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;char *cValueBuf = &quot;&quot;; //Буфер получения информации для VerQueryValue.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;UINT uiLen; //Количество параметров файла. Минимум 4.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;VerQueryValue(cBuffer, &quot;\VarFileInfo\Translation&quot;, &amp;(void*)cValueBuf, &amp;uiLen);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (uiLen &#62;= 4)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AnsiString asCharSet = IntToHex((int)MAKELONG(*(int*)(cValueBuf+2), *(int*)cValueBuf), 8);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (iMode == 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (VerQueryValue(cBuffer, (&quot;\StringFileInfo\&quot; + asCharSet + &quot;\ProductName&quot;).c_str(), &amp;(void*)cValueBuf, &amp;uiLen) != 0) return cValueBuf;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else return &quot;(не удалось получить ProductName)&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else if (iMode == 1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (VerQueryValue(cBuffer, (&quot;\StringFileInfo\&quot;+asCharSet+&quot;\FileVersion&quot;).c_str(), &amp;(void*)cValueBuf, &amp;uiLen) != 0) return cValueBuf;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else return &quot;(не удалось получить FileVersion)&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else if (iMode == 2)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (VerQueryValue(cBuffer, (&quot;\StringFileInfo\&quot;+asCharSet+&quot;\LegalCopyright&quot;).c_str(), &amp;(void*)cValueBuf, &amp;uiLen) != 0) return cValueBuf;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else return &quot;(не удалось получить LegalCopyright)&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else if (iMode == 3)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (VerQueryValue(cBuffer, (&quot;\StringFileInfo\&quot;+asCharSet+&quot;\CompanyName&quot;).c_str(), &amp;(void*)cValueBuf, &amp;uiLen) != 0) return cValueBuf;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else return &quot;(не удалось получить CompanyName)&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else return &quot;(uiLen &#60; 4)&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;else return &quot;GetFileVersionInfo не отработала&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GlobalFree(cBuffer);</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Сергей85</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3804754</guid>
        <pubDate>Thu, 25 Jul 2019 01:28:06 +0000</pubDate>
        <title>Как узнать версию любого файла, доступную в его свойствах?</title>
        <link>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3804754</link>
        <description><![CDATA[Gonarh: Всё уже давно придумано до нас <a class='tag-url' href='https://docs.microsoft.com/en-us/windows/win32/api/winver/nf-winver-verqueryvaluea' target='_blank'>https://docs.microsoft.com/en-us/windows/wi...-verqueryvaluea</a>]]></description>
        <author>Gonarh</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3804713</guid>
        <pubDate>Wed, 24 Jul 2019 17:55:08 +0000</pubDate>
        <title>Как узнать версию любого файла, доступную в его свойствах?</title>
        <link>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3804713</link>
        <description><![CDATA[Славян: Да просто откройте WinNT.H:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#define IMAGE_DIRECTORY_ENTRY_RESOURCE &nbsp; &nbsp; &nbsp; &nbsp;2 &nbsp; // Resource Directory</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-07-24T18:18:29+00:00">24.07.19, 18:18</time></span></span><br>
Готового примера у меня нет, так как я делал давно на весьма низком уровне. Схема же такова:<br>
1. Открываем = читаем EXE-шник.<br>
2. Находим начало PE-заголовка.<br>
3. Находим адрес таблицы с ресурсами - IMAGE_DIRECTORY_ENTRY_RESOURCE.<br>
4. Находим смещение в ней раздела с версией.<br>
5. Находим поле-строку ProductVersion/FileVersion.<br>
6. Читаем его-её значение.]]></description>
        <author>Славян</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3804698</guid>
        <pubDate>Wed, 24 Jul 2019 17:21:13 +0000</pubDate>
        <title>Как узнать версию любого файла, доступную в его свойствах?</title>
        <link>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3804698</link>
        <description><![CDATA[Сергей85: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415214&view=findpost&p=3804679'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2019-07-24T16:18:58+00:00">24.07.19, 16:18</time></span><div class='quote '>IMAGE_DIRECTORY_ENTRY_RESOURCE</div></div><br>
<br>
Мне бы пример. Гугл результатов по Image_Directory не дает.]]></description>
        <author>Сергей85</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3804679</guid>
        <pubDate>Wed, 24 Jul 2019 16:18:58 +0000</pubDate>
        <title>Как узнать версию любого файла, доступную в его свойствах?</title>
        <link>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3804679</link>
        <description><![CDATA[Славян: Быть может, вы про то, что этот SYS - всего лишь EXE-шник, с PE32/PE64-заголовком. Тогда можно его открыть, найти поле IMAGE_DIRECTORY_ENTRY_RESOURCE, а там найти подраздел Версия, а там поле ProductVersion.]]></description>
        <author>Славян</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3804677</guid>
        <pubDate>Wed, 24 Jul 2019 15:54:35 +0000</pubDate>
        <title>Как узнать версию любого файла, доступную в его свойствах?</title>
        <link>https://forum.sources.ru/index.php?showtopic=415214&amp;view=findpost&amp;p=3804677</link>
        <description><![CDATA[Сергей85: Есть файл .SYS. Имеет версию, если посмотреть правой мышой свойства.<br><br>Как достать программно эту версию?]]></description>
        <author>Сергей85</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      </channel>
      </rss>
	