<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=15085&amp;type=atom" />
	<updated>2019-12-11T18:47:57Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=15085</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=136810#p136810" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-12-11T18:47:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=136810#p136810</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=136805#p136805" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Дмитрий_DimAs]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40524</uri>
			</author>
			<updated>2019-12-11T16:35:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=136805#p136805</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=136798#p136798" />
			<content type="html"><![CDATA[<p><strong>Дмитрий_DimAs</strong>: А чем не подходит объект <strong>CDO.Message</strong> для отправки писем напрямую ? O_o</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-12-11T13:02:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=136798#p136798</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=136779#p136779" />
			<content type="html"><![CDATA[<p><strong>alexii</strong> Скрипт будет запускаться из меню правой кнопки мыши(клик по папке):<br />1) Скопировать путь до папки<br />2) Создать новое письмо в Thunderbird<br />3) Вставить в него ссылку на папку(из буфера обмена)<br />4) Скопировать путь до другой папки<br />5) Вставить ссылку на папку в то же письмо, ниже первой ссылки<br />конец скрипта, дальше пользователь руками выбирает адресата и жмёт отправить.</p>]]></content>
			<author>
				<name><![CDATA[Дмитрий_DimAs]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40524</uri>
			</author>
			<updated>2019-12-06T16:40:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=136779#p136779</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=136778#p136778" />
			<content type="html"><![CDATA[<p>Зачем такие извращения?! Лучше опишите Вашу задачу (а не <em>уже выбранное</em> решение).</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2019-12-06T16:18:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=136778#p136778</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS:Поиск и активизация дочернего окна приложения с помощью vbs]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=136774#p136774" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Дмитрий_DimAs]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40524</uri>
			</author>
			<updated>2019-12-06T07:20:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=136774#p136774</id>
		</entry>
</feed>
