<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Получить размеры изображения]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10086&amp;type=atom" />
	<updated>2014-10-31T13:30:04Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=10086</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87878#p87878" />
			<content type="html"><![CDATA[<p><strong>Flasher</strong>,</p><p>Не согласен с примером. Дело тут совершенно не в &quot;стрингах&quot;. В переменной <strong>js</strong> имеем объект с <strong>default</strong>&nbsp; свойством ( функцией / методом), вызываемым по умолчанию. <strong>VarType</strong> обращается к нему и получает &quot;результат&quot;. И уже по полученному результату делает вывод о данных. В данном случае, в этой переменной, находится объект <strong>JScriptTypeInfo</strong>. Его умолчательным методом, если я не ошибаюсь, является метод <strong>toString()</strong>, который и возвращает строку представляющую текущий объект.</p><p><strong>TypeName</strong> работает иначе. Она берёт данные о типе содержимого из заголовка переменной <strong>Variant</strong>, в которой находятся данные (String / Long / Object / ...).</p><p>Рассмотрим пример:</p><div class="codebox"><pre><code>
Option Explicit
Dim oTest
Set oTest = new cCls

oTest.Value = 1
MsgBox VarType(oTest)

oTest.Value = &quot;test&quot;
MsgBox VarType(oTest)

Set oTest.Value = Me
MsgBox VarType(oTest)


Class cCls
    Public Value
    Public Default Property Get data
        if isObject(Value) Then
            Set data = Value
        Else
            data = Value
        End if
    End Property
End Class</code></pre></div><br /><p>Таким образом <strong>VarType(oTest)</strong> может быть любым из возвращаемых типов данных. <br />Но если возвращаемое значение <strong>String</strong>, то оно именно <strong>String</strong>, адекватно опознанный движком скрипта.<br />И разновидностей у него как таковых нет. Поэтому не совсем понимаю, какая необходимость в <strong>CStr</strong> у Вас возникла в первом примере и в последнем.</p><div class="quotebox"><cite>Flasher пишет:</cite><blockquote><p>P.P.S.: Бывают и мужские. wink</p></blockquote></div><p>P.S Про мужские стринги тем более лучше умолчим )))</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2014-10-31T13:30:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87878#p87878</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87876#p87876" />
			<content type="html"><![CDATA[<p>Ну, например, c возможностью цикличного перебора:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;такой vbString</div><div class="fancy_spoiler"><div class="codebox"><pre><code>arr = Array(&quot;a&quot;,&quot;b&quot;)
Set SC = CreateObject(&quot;ScriptControl&quot;)
SC.Language = &quot;JScript&quot;
SC.AddCode(&quot;function VBArraySort(vbarray){return(new VBArray(vbarray).toArray().sort());}&quot;)
Set js = SC.Run(&quot;VBArraySort&quot;,arr)
WScript.Echo js &amp; vbCr &amp; &quot;Подтип: &quot; &amp; VarType(js)
For Each item In js : WScript.Echo item : Next</code></pre></div></div></div><p>P.P.S.: Бывают и мужские. <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2014-10-31T13:07:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87876#p87876</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87871#p87871" />
			<content type="html"><![CDATA[<p><strong>Flasher</strong>, а примерчик &quot;разных стрингов&quot; можно увидеть ? O_o</p><p>P.S В <strong>VBScript</strong> не зря сделали функции <strong>VarType</strong> и <strong>TypeName</strong>. Они дают возможность понять с чем Вы работаете.</p><p>P.P.S Или вы про другие &quot;стринги&quot; ? Женские в расчёт не берём. Это другая область. O_o</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2014-10-31T11:46:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87871#p87871</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87870#p87870" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong><br />&quot;Стринги&quot; тоже разные бывают. НА 7-ке я проверял давно ещё, т.к. метод не раз применял для своих нужд.</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2014-10-31T11:40:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87870#p87870</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87869#p87869" />
			<content type="html"><![CDATA[<p><strong>Flasher</strong>, </p><div class="quotebox"><blockquote><p>Обратите внимание на мой пример, я там неспроста привожу значение к строковому типу по CStr.</p></blockquote></div><p>Так в том то и дело, что это никак не решает проблему преобразования. Проверьте. Смысла приводить его к <strong>CStr</strong> нет, так как метод и так возвращает <strong>String</strong>.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2014-10-31T11:01:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87869#p87869</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87868#p87868" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Не всегда верьте MSDN</p></blockquote></div><p>Не знаю, проверил на 4-х машинах (SP2-SP4 Pro, SP3-2 Pro, SP3 Home), везде выдаёт отсутствие объекта.</p><div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Обнаружил неприятный момент. В Win 7 в строке присутствуют спец символы (на XP не обнаружил), которые не дают сделать преобразование полученных значений к числу.</p></blockquote></div><p>Обратите внимание на мой пример, я там неспроста привожу значение к строковому типу по CStr.</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2014-10-31T10:34:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87868#p87868</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87864#p87864" />
			<content type="html"><![CDATA[<p><strong>alexii</strong>, полезная инфа. Благодарствую.</p><p><strong>Flasher</strong>,</p><div class="quotebox"><blockquote><p>Стремление к работоспособности на большинстве машин не мотивирует? wink<br />В первом варианте я бы всё же проверку добавил.<br />Либо по наличию &quot; x &quot; либо по &quot;HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion&quot; &gt; 5.1.</p></blockquote></div><p>Согласен. Буду исправляться.</p><div class="codebox"><pre><code>
Option Explicit
Dim sPath, oFile, i, vTmp
sPath = &quot;C:\Image.jpg&quot;
Set oFile = CreateObject(&quot;Scripting.FileSystemObject&quot;).GetFile(sPath)
With CreateObject(&quot;Shell.Application&quot;).NameSpace(oFile.ParentFolder.Path) 
    For Each i in Array(31,26)
        vTmp = .GetDetailsOf(.ParseName(oFile.Name),i)
        if InStr(1,vTmp,&quot;x&quot;,1) &gt; 0 Then
            vTmp = Split(Replace(vTmp,&quot; &quot;,&quot;&quot;),&quot;x&quot;,2)
            MsgBox &quot;Ширина: &quot; &amp; vTmp(0) &amp; vbCrlf &amp; &quot;Высота: &quot; &amp; vTmp(1)
            Exit For
        End if
    Next
End With
</code></pre></div><p>Решил оформить в виде процедурки. Обнаружил неприятный момент. В Win 7 в строке присутствуют спец символы (на XP не обнаружил), которые не дают сделать преобразование полученных значений к числу. Так что без регулярки для выбора только чисел&nbsp; (за помощь спасибо&nbsp; <strong>JSman</strong>) не обошлось.</p><div class="codebox"><pre><code>
Option Explicit
Dim lWidth
Dim lHeight

GetImageWidth &quot;C:\Image.jpg&quot;, lWidth, lHeight

MsgBox &quot;Ширина: &quot; &amp; lWidth &amp; vbCrlf &amp; &quot;Высота: &quot; &amp; lHeight

Sub GetImageWidth(sImagePath,lWidth,lHeight)
    Dim i, oFile, oRegExp
    Set oFile = CreateObject(&quot;Scripting.FileSystemObject&quot;).GetFile(sImagePath)
    With CreateObject(&quot;Shell.Application&quot;).NameSpace(oFile.ParentFolder.Path) 
        Set oRegExp = New RegExp
        oRegExp.Global = True
        oRegExp.Pattern = &quot;[0-9]+&quot;
        For Each i in Array(31,26)
            With oRegExp.Execute(.GetDetailsOf(.ParseName(oFile.Name),i)) 
                if .Count = 2 Then
                    lWidth = CLng(.Item(0))
                    lHeight = CLng(.Item(1))
                    Exit Sub
                End if
            End With
        Next
    End With
    Err.Raise vbObjectError + 1, &quot;GetImageWidth&quot;, &quot;Function failed.&quot;
End Sub
</code></pre></div><p>P.S Хотя конечно проверять по наличию &quot;x&quot; некорректно. Надо будет ещё подумать.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2014-10-31T08:22:21Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87864#p87864</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87860#p87860" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Неа. На MSDN - минимум Виста. Проверял на SP3.</p></blockquote></div><p>Не всегда верьте MSDN: <a href="http://forum.script-coding.com/viewtopic.php?pid=30088#p30088">1</a>, <a href="http://forum.script-coding.com/viewtopic.php?pid=47361#p47361">2</a>.<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p>Кстати, загрузка библиотеки из поста по первой ссылке — уже тю-тю.</p></div></div><p>Вот Вам оттуда же: <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms630368(v=vs.85).aspx">Windows Image Acquisition (WIA) (Windows)</a>:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="quotebox"><blockquote><p><strong>Developer Audience</strong></p><p>The WIA API is designed for use by C/C++ programmers. Familiarity with the Windows&nbsp; GUI and Component Object Model (COM) interfaces is required.</p><p>For developers familiar with Microsoft Visual Basic 6.0, Active Server Pages (ASP), or scripting, WIA provides an automation layer for Windows XP Service Pack 1 (SP1) or later that builds upon and simplifies access to the foundation provided by C/C++. For information about the automation layer, see Windows Image Acquisition Automation Layer.</p><p><em>Note&nbsp; The WIA Automation Layer supersedes Windows Image Acquisition (WIA) 1.0 scripting.</em></p><p><strong>Run-Time Requirements</strong></p><p>Applications that use the WIA API require Windows XP or later.</p></blockquote></div></div></div>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2014-10-30T22:01:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87860#p87860</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87856#p87856" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Для XP. Нужен как минимум SP1.</p></blockquote></div><p>Неа. На MSDN - минимум Виста. Проверял на SP3.</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2014-10-30T19:13:10Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87856#p87856</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87854#p87854" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Flasher пишет:</cite><blockquote><p>На XP 26 вместо 31 (может, не везде).</p></blockquote></div><p>Предлагаю <a href="http://forum.script-coding.com/viewtopic.php?pid=4436#p4436">перебирать свойства</a>, проверяя его имя.</p><div class="quotebox"><cite>Flasher пишет:</cite><blockquote><p>Вариант тоже не для XP.</p></blockquote></div><p>Для XP. Нужен как минимум SP1.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2014-10-30T19:05:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87854#p87854</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87851#p87851" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Ну, автор не уточнял под что пишем. <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" /> Сюрприз будет.</p></blockquote></div><p>Стремление к работоспособности на большинстве машин не мотивирует? <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p><p>В первом варианте я бы всё же проверку добавил.<br />Либо по наличию &quot; x &quot; либо по &quot;HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion&quot; &gt; 5.1.</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2014-10-30T18:12:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87851#p87851</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87844#p87844" />
			<content type="html"><![CDATA[<p><strong>Flasher</strong></p><div class="quotebox"><cite>Flasher пишет:</cite><blockquote><p>На XP 26 вместо 31 (может, не везде).</p></blockquote></div><p>Ага. Вспомнил было дело.</p><div class="quotebox"><cite>Flasher пишет:</cite><blockquote><p>Вариант тоже не для XP.</p></blockquote></div><p>Ну, автор не уточнял под что пишем. <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" /> Сюрприз будет.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2014-10-30T15:11:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87844#p87844</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87840#p87840" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Решение очень удачное.</p></blockquote></div><p>На XP 26 вместо 31 (может, не везде).<br /></p><div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Как вариант, можно ещё через WIA</p></blockquote></div><p>Вариант тоже не для XP.</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2014-10-30T14:06:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87840#p87840</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87829#p87829" />
			<content type="html"><![CDATA[<p>Позволил себе немного изменить код, который предложил <strong>Flasher</strong>. Решение очень удачное. Подзабыл о том, что в свойствах присутствуют эти значения.</p><div class="codebox"><pre><code>
Option Explicit
Dim sPath, oFile, aTmp
sPath = &quot;C:\Image.jpg&quot;
Set oFile = CreateObject(&quot;Scripting.FileSystemObject&quot;).GetFile(sPath)
With CreateObject(&quot;Shell.Application&quot;).NameSpace(oFile.ParentFolder.Path) 
    aTmp = Split(.GetDetailsOf(.ParseName(oFile.Name),31),&quot; x &quot;)
    MsgBox &quot;Ширина: &quot; &amp; aTmp(0) &amp; vbCrlf &amp; &quot;Высота: &quot; &amp; aTmp(1)
End With
</code></pre></div><br /><p>Как вариант, можно ещё через <strong>WIA</strong></p><div class="codebox"><pre><code>
Option Explicit

With CreateObject(&quot;WIA.ImageFile&quot;)
    .LoadFile &quot;C:\Image.jpg&quot;
    MsgBox .Width &amp; &quot;x&quot; &amp; .Height
End With
</code></pre></div><p>Или </p><div class="codebox"><pre><code>
Option Explicit

Dim oImg
Dim oHtmlDoc
Dim lPicWidth
Dim lPicHeight
Set oImg = LoadPicture(&quot;C:\Image.jpg&quot;)
Set oHtmlDoc = CreateObject(&quot;htmlfile&quot;)
With oHtmlDoc.parentWindow.screen
    lPicWidth = CLng(oImg.Width / 2540 * .deviceXDpi)
    lPicHeight = CLng(oImg.Height / 2540 * .deviceYDpi)
End With
MsgBox lPicWidth &amp; &quot;x&quot; &amp; lPicHeight
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2014-10-30T08:10:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87829#p87829</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Получить размеры изображения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87825#p87825" />
			<content type="html"><![CDATA[<p>Спасибо.</p>]]></content>
			<author>
				<name><![CDATA[wildwolf007]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30994</uri>
			</author>
			<updated>2014-10-29T17:53:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87825#p87825</id>
		</entry>
</feed>
