<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=15085</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=15085&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS:Поиск и активизация дочернего окна приложения с помощью vbs».]]></description>
		<lastBuildDate>Wed, 11 Dec 2019 18:47:57 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=136810#p136810</link>
			<description><![CDATA[<p><strong>Дмитрий_DimAs</strong>, да какая бы она не была @_@. Кто Вам запрещает использовать встроенный в Windows абсолютно адекватный COM компонент для отправки той же самой почты. Я тоже пользуюсь корп. почтой. И никаких проблем с CDO.Message при этом не испытываю. Поясню - вариант автоматизации, который Вы используете, крайне неэффективен и ненадёжен. Любые эмуляции нажатия кнопок таким способом это рандомное (непредсказуемое) поведение скрипта. Всё равно что Вы бы посадили слепоглухонемого человека за комп и поручили ему что-то делать. На экране, в процессе работы, могут появляться окна, всплывающие сообщения, диалоговые запросы и чёрт ещё знает что, что тут же собьёт скрипт с его работы. Автоит или AHK от части решают эту проблему за счёт связи с окнами, отправки нажатий и прочих событий по хэндлу контролов, но это В ЛЮБОМ случае самый крайний вариант. В Вашем случае, как мне видится, CDO.Message самый простой вариант автоматизации, чтобы не ломать себе голову и не изобретать велосипед. Тем более <a href="http://forum.script-coding.com/viewtopic.php?id=10395">примеров</a> на форуме полно, как его использовать.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 11 Dec 2019 18:47:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=136810#p136810</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=136805#p136805</link>
			<description><![CDATA[<p><strong>Xameleon</strong> Это наша корпоративная почта(Thunderbird) и нужно все письма отправлять через него. Мне помогли в этом направлении, сейчас вот что имею<br /></p><div class="codebox"><pre><code>Function Zamena(x)
Zamena = Replace(x, &quot; &quot;, &quot;%20&quot;)
End Function

Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
For Each FTR In wscript.Arguments
   		Folder = FSO.GetAbsolutePathName(FTR)
    	FolderZ = &quot;file:///&quot; &amp; Zamena(FSO.GetAbsolutePathName(FTR))   
Next

Set WshShell = CreateObject(&quot;WScript.Shell&quot;)
Thunder = &quot;&quot;&quot;C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe&quot;&quot; -compose body=&#039;Любой текст&#039;,to=test@mail.ru,subject=test,attachment=&#039;file:///C:\Users\Desktop\Test.docx&#039;&quot;
Set WshExec = WshShell.Exec(Thunder)
WScript.Sleep 500
WshShell.SendKeys (&quot;^k&quot;)
WshShell.SendKeys (&quot;^л&quot;)
WScript.Sleep 500
WshShell.SendKeys (Folder)
&#039;WshShell.SendKeys (&quot;^м&quot;)
WshShell.SendKeys (&quot;{TAB}&quot;)
WScript.Sleep 500
WshShell.SendKeys (FolderZ)</code></pre></div><p>Кто-нибудь знает как через ком.команду -compose, создать письмо сразу с нужной ссылкой, типа -compose href? поискал ком.команды для Thunderbird насчёт ссылок - ничего.<br />И второй вопрос как передать значение переменных Folder и FolderZ напрямую в WshShell.SendKeys (Folder) без потерь, потомучто как на русской раскладке они вставляются как кракозябры. Решение я вижу либо в переключении раскладки перед вставкой, либо через буфер обмена и потом WshShell.SendKeys(&quot;^v&quot;) - этот вариант пробовал работает, но громоздкий.</p>]]></description>
			<author><![CDATA[null@example.com (Дмитрий_DimAs)]]></author>
			<pubDate>Wed, 11 Dec 2019 16:35:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=136805#p136805</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=136798#p136798</link>
			<description><![CDATA[<p><strong>Дмитрий_DimAs</strong>: А чем не подходит объект <strong>CDO.Message</strong> для отправки писем напрямую ? O_o</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 11 Dec 2019 13:02:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=136798#p136798</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=136779#p136779</link>
			<description><![CDATA[<p><strong>alexii</strong> Скрипт будет запускаться из меню правой кнопки мыши(клик по папке):<br />1) Скопировать путь до папки<br />2) Создать новое письмо в Thunderbird<br />3) Вставить в него ссылку на папку(из буфера обмена)<br />4) Скопировать путь до другой папки<br />5) Вставить ссылку на папку в то же письмо, ниже первой ссылки<br />конец скрипта, дальше пользователь руками выбирает адресата и жмёт отправить.</p>]]></description>
			<author><![CDATA[null@example.com (Дмитрий_DimAs)]]></author>
			<pubDate>Fri, 06 Dec 2019 16:40:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=136779#p136779</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=136778#p136778</link>
			<description><![CDATA[<p>Зачем такие извращения?! Лучше опишите Вашу задачу (а не <em>уже выбранное</em> решение).</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Fri, 06 Dec 2019 16:18:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=136778#p136778</guid>
		</item>
		<item>
			<title><![CDATA[VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=136774#p136774</link>
			<description><![CDATA[<p>Всем доброго дня, пытаюсь реализовать такую тему: вставка содержимого буфера обмена(путь до папки) в тело письма почтовой программы Thunderbird, в виде ссылки. На данный момент всё это дело я с горем пополам реализовал в виде 3-х скриптов, один из которых написан на AutoIt и представляет из себя одну строчку кода - WinActivate(&quot;Создание сообщения: - - Thunderbird&quot;, &quot;&quot;).</p><p>Первый скрипт создаёт новое сообщение и вставляет в него ссылку<br /></p><div class="codebox"><pre><code>		Set WshShell = CreateObject(&quot;WScript.Shell&quot;)	
		WshShell.Run (&quot;&quot;&quot;C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe&quot;&quot;&quot;)
		WshShell.Run (&quot;&quot;&quot;R:\Recovery\ActivateWindow.au3&quot;&quot;&quot;) &#039; запускаем скрипт на AutoIt, если окно с указанным Title существует - оно активируется, если нет  - код продолжается
		WScript.Sleep 1000
		
		ctrlNeng = &quot;^n&quot;
		ctrlNrus = &quot;^т&quot;
		ctrlKeng = &quot;^k&quot;
		ctrlKrus = &quot;^л&quot;
		ctrlVeng = &quot;^v&quot;
		ctrlVrus = &quot;^м&quot;
		
		WshShell.SendKeys(ctrlNeng)
		WshShell.SendKeys(ctrlNrus)  &#039; создаём новое исходящее сообщение
		
		WScript.Sleep 500
		WshShell.SendKeys(&quot;{TAB}&quot;)
		WScript.Sleep 500
		WshShell.SendKeys(&quot;-&quot;) &#039; в поле Тема вставляем символ &quot;-&quot;,  так как он одинаковый на рус. и анг. раскладке
		WScript.Sleep 500
		WshShell.SendKeys(&quot;{TAB}&quot;)
		WScript.Sleep 500

		WshShell.SendKeys(ctrlKeng)
		WshShell.SendKeys(ctrlKrus) &#039; имитируем нажатие на двух раскладках ctrll+K - открытие окна создания ссылки
		
		WScript.Sleep 300
		WshShell.SendKeys(&quot;{TAB}&quot;) 
		WshShell.SendKeys(ctrlVeng) 
		WshShell.SendKeys(ctrlVrus)  &#039; вставляем содержимое буфера(путь до папки)
		WScript.Sleep 300

		WshShell.SendKeys(&quot;{TAB 4}&quot;) &#039;перемещаемся на кнопку ОК - завершение создания ссылки
		WshShell.SendKeys(&quot;{ENTER}&quot;) &#039;подтверждаем нажатие кнопки ОК
		
		WScript.Sleep 300
		WshShell.SendKeys(&quot;{ENTER}&quot;) &#039;смещаемся на строчку вниз</code></pre></div><p>Второй скрипт используется если нужно добавить ссылку в уже созданное сообщение(ссылка вставляется под предыдущей), для этого из основного вызывается скрипт на AutoIt<br />		</p><div class="codebox"><pre><code>Set WshShell = CreateObject(&quot;WScript.Shell&quot;)
		
		WshShell.Run (&quot;&quot;&quot;C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe&quot;&quot;&quot;)
		WshShell.Run (&quot;&quot;&quot;R:\Recovery\ActivateWindow.au3&quot;&quot;&quot;)
		WScript.Sleep 1000
		
		ctrlKeng = &quot;^k&quot;
		ctrlKrus = &quot;^л&quot;
		ctrlVeng = &quot;^v&quot;
		ctrlVrus = &quot;^м&quot;
		
		WshShell.SendKeys(ctrlKeng)
		WshShell.SendKeys(ctrlKrus)
		
		WScript.Sleep 300
		WshShell.SendKeys(&quot;{TAB}&quot;) 
		WshShell.SendKeys(ctrlVeng) 
		WshShell.SendKeys(ctrlVrus)
		WScript.Sleep 300
		
		WshShell.SendKeys(ctrlVeng)
		WshShell.SendKeys(ctrlVrus)
		WScript.Sleep 300
		
		WshShell.SendKeys(&quot;{TAB 4}&quot;)
		WshShell.SendKeys(&quot;{ENTER}&quot;)
		
		WScript.Sleep 300
		WshShell.SendKeys(&quot;{ENTER}&quot;)</code></pre></div><p>Проблема заключается в том, что необходимо обойтись без сторонних библиотек(т.е. без AutoIt) и добавить условие проверки существования уже созданного окна, дабы соединить 3 скрипта в один. Как активизировать окно нового сообщения? т.е. это процесс не основного приложения Thunderbird.exe, а его дочернее окно, замечу, что Title этого окна будет всегда одинаковым, так как создаётся программно. Пробовал активизировать нужное мне окно вот так, но это ни к чему не привело, похоже что ProcessID -&nbsp; в данном случае, это процесс основного окна!<br /></p><div class="codebox"><pre><code>Set WshShell = CreateObject(&quot;WScript.Shell&quot;)
Set WshExec = WshShell.Exec(&quot;&quot;&quot;C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe&quot;&quot;&quot;) &#039; запускаем почтовик
WScript.Sleep 2000
WshShell.SendKeys(&quot;^n&quot;) &#039; создаём новое сообщение
WScript.Sleep 500
PID = WshShell.AppActivate(WshExec.ProcessID) &#039; получаем ID процесса нужного окна
WshShell.Run(&quot;notepad&quot;) &#039; запускаем ради эксперимента окно блокнота поверх почтовика
If PID Then  &#039; по идее эта строчка должна активизировать нужное окно по его ID
WshShell.SendKeys(&quot;^k&quot;) &#039; вызываем окно создания ссылки
Else
MsgBox &quot;Что-то пошло не так!&quot;
End if</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Дмитрий_DimAs)]]></author>
			<pubDate>Fri, 06 Dec 2019 07:20:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=136774#p136774</guid>
		</item>
	</channel>
</rss>
