<?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=10204&amp;type=atom" />
	<updated>2014-12-05T20:08:46Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=10204</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Поиск содержимого переменной в активном окне]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88907#p88907" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Deluxe пишет:</cite><blockquote><p>Что делать,если искомого нет в таблице? В этом случае скрипт все равно продолжает работать по заданному алгоритму. И это приводит к очень неприятным последствиям.</p></blockquote></div><p>Без конкретного примера опять ничего не понятно.<br /></p><div class="quotebox"><cite>Deluxe пишет:</cite><blockquote><p>Какая команда позволит сделать что либо(или не сделать), при условии,если поиск не дал результатов?</p></blockquote></div><p>Else.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2014-12-05T20:08:46Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88907#p88907</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Поиск содержимого переменной в активном окне]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88902#p88902" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Тогда не понятно в чём проблема: отправку {right}/{left} вы вроде уже освоили.<br />Дошли до ячейки - послали ctrl+c (копировать) - содержимое ячейки перешло в буфер обмена и стало доступно в скрипте через встроенные переменные clipboard и clipboardall.</p></blockquote></div><p>Ну я ведь раньше уже писал, в чем запарка. Что делать,если искомого нет в таблице? В этом случае скрипт все равно продолжает работать по заданному алгоритму. И это приводит к очень неприятным последствиям.<br />Какая команда позволит сделать что либо(или не сделать), при условии,если поиск не дал результатов?</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; Спустя некоторое время.</div><div class="fancy_spoiler"><p>Возникла идея. В конце скрипта во второй табличке перемещать выделение на любую пустую ячейку.<br />При повторном выполнении скрипта, если искомое не будет найдено, выделение так и останется на этой пустой ячейке. Присвоить её значение переменной, и создать условие, если эта переменная пуста - перейти к таким то действиям.<br />Попробую на практике...<br />Может,есть способ не столь дуболомный?</p></div></div>]]></content>
			<author>
				<name><![CDATA[Deluxe]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32689</uri>
			</author>
			<updated>2014-12-05T17:50:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88902#p88902</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Поиск содержимого переменной в активном окне]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88901#p88901" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Deluxe пишет:</cite><blockquote><p>В текстовых редакторах курсор можно перемещать при помощи посылки {right} {left} {up} {down}. Имеется в виду текстовый курсор.</p></blockquote></div><p>Каретка != курсор.<br />Курсор - то, что управляется мышью, а вот каретка - это то, что в текстовых полях мигает обозначая место, куда отправится ввод с клавиатуры.</p><div class="quotebox"><cite>Deluxe пишет:</cite><blockquote><p>...Через обычный поиск нахожу нужный номер. Выделение остается на ячейке с ним. Затем, приведенным выше способом (при помощи посылов {Right}, {Left}) перехожу к строке с массами товара... <br />Имеется в виду так. Конкретный алгоритм (сколько раз вправо,влево,вверх и вниз я сам сделаю).</p><div class="quotebox"><blockquote><p>3. Правильно задачу выполнять используя COM-объекты.</p></blockquote></div><p>Именно это и есть моя слабость. К сожалению знаний пока крайне недостаточно для того, чтобы понять этот способ, особенно при отсутствии туториалов на русском, и знаний англ. языка...<br />Тем не менее, я все еще не отказываюсь от идеи это сделать другими, мне понятными методами.</p></blockquote></div><p>Тогда не понятно в чём проблема: отправку {right}/{left} вы вроде уже освоили.<br />Дошли до ячейки - послали ctrl+c (копировать) - содержимое ячейки перешло в буфер обмена и стало доступно в скрипте через встроенные переменные clipboard и clipboardall.</p><div class="quotebox"><cite>Deluxe пишет:</cite><blockquote><p>Спасибо!А я&nbsp; лазил во встроенных переменных... Никогда бы не догадался там искать)</p></blockquote></div><p>На самом деле полезно хоть 1 раз посмотреть все команды + основные статьи help файла. Тем более, что они в .chm файле даже разбиты по группам.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2014-12-05T17:38:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88901#p88901</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Поиск содержимого переменной в активном окне]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88900#p88900" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Irbis пишет:</cite><blockquote><p>Так ищет текст в активном окне Ворда. Непонятно, по какой причине выдает ошибку, если скрипт запустить раньше, чем Ворд. Если скрипт запустить поздней, ошибки нет.<br /></p><div class="codebox"><pre><code>FindText := &quot;тест&quot;
Return
F1::
   try
      word := ComObjActive(&quot;Word.Application&quot;)
   catch
   { 
      MsgBox Ошибка!
      ExitApp
   }
   if word.ActiveDocument.Content.Find.Execute(FindText)
      MsgBox Совпадение
   Else
      MsgBox Нет совпадения
Return
</code></pre></div></blockquote></div><p>Скажи пожалуйста, этот способ можно как то модифицировать, чтобы искомое выделялось курсором в документе?<br />И для того, чтобы приспособить к Экселю,достаточно будет поменять везде word на excel?<br />И последнее... Это можно будет потом вставить в мой код?)<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="codebox"><pre><code>F9::
Loop 1 
{
    summ :=
    ControlClick, EXCEL&lt;1, A
    Send ^+{left}
    Send ^{vk43}
    Number :=Clipboard
    MsgBox, %Number%
    Send {esc}
    Sleep, 200
    Send {left}
    ControlClick, EXCEL&lt;1, A
    Send ^+{left}
    Send ^{vk43}
    Mass :=clipboard + 0
    StringReplace,Mass,clipboard,`,,.,all
    MsgBox, %Mass%
    Send {esc}
    Sleep, 200
    Send {right}
    Send {down}
    Sleep, 200
    Send !{vk09}
    Sleep, 300
    Send ^{vk46}  ; Вот здесь я использую обычный поиск. В какой вид  нужно будет привести твой код, чтобы он заработал внутри моего?
    Sleep, 200 
    Send %Number%
    Sleep, 400
    Send {enter} ; здесь кончается кусок кода,ответственный за поиск.
    Sleep, 100
    Send {esc} 
    Sleep, 200
    Send {Right 9}
    Sleep, 200
    ControlClick, EXCEL&lt;1, A
    Send ^+{left}
    send ^{vk43}
    kol :=clipboard
    Send {esc}
    Send {left 2}
        loop %kol%
        {
            ControlClick, EXCEL&lt;1, A
            Send ^+{left}
            send ^{vk43}
            StringReplace,num,clipboard,`,,.,all
            MsgBox, %num%
            summ +=%num%
            Send {esc}
            Send {down}
        }
        If summ = %Mass%
        {
            MsgBox, %sum% равно %Mass%
            Send {up}
            Send {right 2}
            Send +{left 17}
            ControlClick, X363 Y104, A
            Send {up 3} ; зеленый
            Send {enter}
        }
        If summ != %Mass%
        {
            MsgBox, %summ% не равно %Mass%
            Send {up}
            Send {right 2}
            Send +{left 17}
            ControlClick, X363 Y104, A
            Send {up 3} ;
            Send {left 4} ; красный
            Send {enter}
            Send {right}
            Send %summ% не равно %Mass%
        }
        Send !{vk09}
Sleep, 300
}
Return</code></pre></div></div></div>]]></content>
			<author>
				<name><![CDATA[Deluxe]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32689</uri>
			</author>
			<updated>2014-12-05T17:21:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88900#p88900</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Поиск содержимого переменной в активном окне]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88899#p88899" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>1. Не понятно что такое &quot;посыл перемещений курсора при помощи кнопок&quot;.</p></blockquote></div><p>В текстовых редакторах курсор можно перемещать при помощи посылки {right} {left} {up} {down}. Имеется в виду текстовый курсор.</p><div class="quotebox"><blockquote><p>2. Не описано по какому алгоритму должен перемещаться курсор.</p></blockquote></div><p> <br /></p><div class="quotebox"><blockquote><p>...Через обычный поиск нахожу нужный номер. Выделение остается на ячейке с ним. Затем, приведенным выше способом (при помощи посылов {Right}, {Left}) перехожу к строке с массами товара...</p></blockquote></div><p>Имеется в виду так. Конкретный алгоритм (сколько раз вправо,влево,вверх и вниз я сам сделаю).</p><div class="quotebox"><blockquote><p>3. Правильно задачу выполнять используя COM-объекты.</p></blockquote></div><p>Именно это и есть моя слабость. К сожалению знаний пока крайне недостаточно для того, чтобы понять этот способ, особенно при отсутствии туториалов на русском, и знаний англ. языка...<br />Тем не менее, я все еще не отказываюсь от идеи это сделать другими, мне понятными методами.</p><div class="quotebox"><blockquote><p>Так выглядит любая таблица.</p></blockquote></div><p>Да, и не поспоришь <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Чуть дальше я дал более конкретное представление о&nbsp; специфике этой таблицы.</p><div class="quotebox"><blockquote><p>Читать мануалы про #Delimiter и #EscapeChar.</p></blockquote></div><p>Спасибо!А я&nbsp; лазил во встроенных переменных... Никогда бы не догадался там искать)</p>]]></content>
			<author>
				<name><![CDATA[Deluxe]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32689</uri>
			</author>
			<updated>2014-12-05T17:01:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88899#p88899</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Поиск содержимого переменной в активном окне]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88897#p88897" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Deluxe пишет:</cite><blockquote><p>Возьмем,как пример, табличку из экселя (это важно, с ним больше всего работы).<br />Моя задача взять в первом экселевском листе,из таблички номер некоторого документа. Там же взять цифру, соответствующую общей массе товара,согласно&nbsp; этому документу. Задача выполняется просто посылом перемещений курсора при помощи кнопок.</p></blockquote></div><p>1. Не понятно что такое &quot;посыл перемещений курсора при помощи кнопок&quot;.<br />2. Не описано по какому алгоритму должен перемещаться курсор.<br />3. Правильно задачу выполнять используя COM-объекты.<br /></p><div class="quotebox"><cite>Deluxe пишет:</cite><blockquote><p>Вторая таблица выглядит как строка с множеством столбцов</p></blockquote></div><p>Так выглядит любая таблица.</p><div class="quotebox"><cite>Deluxe пишет:</cite><blockquote><p>И еще. Мне нужно записать запятую в команде, как символ, а не как оператор.<br />Например, нужно найти все запятые в переменной и заменить на точки.<br />StringReplace,clipboard,clipboard,%comma%,.,all<br />Пытался присвоить переменную, но и она её читает как оператор.</p></blockquote></div><p>Читать мануалы про #Delimiter и #EscapeChar.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2014-12-05T15:28:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88897#p88897</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Поиск содержимого переменной в активном окне]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88880#p88880" />
			<content type="html"><![CDATA[<p>Тут я и понял, что надо было рассказать чуть больше....</p><p>Распишу, как приходится делать в ручную, и как хочу это автоматизировать.<br />Вся соль в том, что я рассчитывал увидеть обычный заменитель поиска.<br />Возьмем,как пример, табличку из экселя (это важно, с ним больше всего работы).<br />Моя задача взять в первом экселевском листе,из таблички номер некоторого документа. Там же взять цифру, соответствующую общей массе товара,согласно&nbsp; этому документу. Задача выполняется просто посылом перемещений курсора при помощи кнопок.<br />Затем нужно открыть вторую табличку (Winactivate, либо просто альтабнуться), и найти там номер этого документа.<br />Вторая таблица выглядит как строка с множеством столбцов, в которых различные данные по товару.<br />В одном столбце указывается номер документа. Еще один столбец в этой строке поделен на несколько строк, в каждой из которой указана масса каждого товара в этом документе.Общая масса не указывается. <br />Так вот. Через обычный поиск нахожу нужный номер. Выделение остается на ячейке с ним. Затем, приведенным выше способом (при помощи посылов {Right}, {Left}) перехожу к строке с массами товара. Суммирую их, и затем сравниваю получившееся с массой из первой таблички. Если все сходится - заливка строки зеленым, если нет - красным и комментарий напротив строки (столько то не равно тому то).<br />Сделано все, НО!<br />Поскольку поиск (все еще <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /> ) через Ctrl+F , то если документ из первой таблицы не найден во второй - начинается полный треш.<br />Оба ваших варианта рабочие, но можно их как то модернизировать, чтобы текст находился, и выделялся курсором. Конкретно, в экселе, выделялась ячейка с этим текстом, без активации контрола редакции её содержимого. ( как одиночный клик по этой ячейке )<br />И еще. Мне нужно записать запятую в команде, как символ, а не как оператор.<br />Например, нужно найти все запятые в переменной и заменить на точки.<br />StringReplace,clipboard,clipboard,%comma%,.,all<br />Пытался присвоить переменную, но и она её читает как оператор.</p>]]></content>
			<author>
				<name><![CDATA[Deluxe]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32689</uri>
			</author>
			<updated>2014-12-04T16:17:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88880#p88880</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Поиск содержимого переменной в активном окне]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88841#p88841" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Deluxe пишет:</cite><blockquote><p>В принципе, наверное, скрытые окна не понадобятся, я ведь только с вордом и экселем буду работать.</p></blockquote></div><p>Изначально задача звучала как &quot;поиск содержимого переменной в активном окне&quot;, поэтому в общем случае эта команда нужна (т.к. всё зависит от интерфейса окна).<br /></p><div class="quotebox"><cite>Deluxe пишет:</cite><blockquote><p>А вот насчет контрола. Как я узнаю ,который мне нужен, если мне нужно искать в содержимом <strong>всего</strong> документа? Просто взять ClassNN любого пустого места вокруг текста\таблички?</p></blockquote></div><p>Используя WinSpy или аналоги. Если контролов с содержимым, которое надо обработать - несколько, то значит нужен поиск в каждом из них (т.е. перебирать их). Но обычно документ находится в 1 контроле. Вот в MS Office 2010 в Word у меня, я вижу, что весь документ внутри ahk_class _WwG1, а в Excel - в ahk_class XLDESK1 (причём со всех вкладок).</p><div class="quotebox"><cite>Deluxe пишет:</cite><blockquote><p>И насчет IfInString .<br />Эта команда проводит поиск внутри другой переменной,так? Мне что, все содержание документа в переменную впихнуть?</p></blockquote></div><p>Да, да.</p><div class="quotebox"><cite>Deluxe пишет:</cite><blockquote><p>Возможно, это место вводит в заблуждение. Внутри переменной находится только та строка, <strong>которую нужно искать</strong>.<br />Остальное, т.е. то, <strong>где нужно искать</strong> находится в активном окне (в открытом листе экселя,либо страничке ворда).</p></blockquote></div><p>Не вводит. Надо искать содержимое одной переменой в содержимом другой переменной.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2014-12-04T06:31:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88841#p88841</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Поиск содержимого переменной в активном окне]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88823#p88823" />
			<content type="html"><![CDATA[<p>Так ищет текст в активном окне Ворда. Непонятно, по какой причине выдает ошибку, если скрипт запустить раньше, чем Ворд. Если скрипт запустить поздней, ошибки нет.<br /></p><div class="codebox"><pre><code>FindText := &quot;тест&quot;
Return
F1::
   try
      word := ComObjActive(&quot;Word.Application&quot;)
   catch
   { 
      MsgBox Ошибка!
      ExitApp
   }
   if word.ActiveDocument.Content.Find.Execute(FindText)
      MsgBox Совпадение
   Else
      MsgBox Нет совпадения
Return
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2014-12-03T10:54:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88823#p88823</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Поиск содержимого переменной в активном окне]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88816#p88816" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Drugoy пишет:</cite><blockquote><div class="codebox"><pre><code>DetectHiddenWindows, On
ControlGetText, thisText, Control, A
IfInString</code></pre></div></blockquote></div><p>В принципе, наверное, скрытые окна не понадобятся, я ведь только с вордом и экселем буду работать.<br />А вот насчет контрола. Как я узнаю ,который мне нужен, если мне нужно искать в содержимом <strong>всего</strong> документа? Просто взять ClassNN любого пустого места вокруг текста\таблички?<br />И насчет IfInString .<br />Эта команда проводит поиск внутри другой переменной,так? Мне что, все содержание документа в переменную впихнуть?</p><div class="quotebox"><cite>Deluxe пишет:</cite><blockquote><p>Нужно, не пользуясь обычным поиском Ctrl+F , найти некоторую строку(внутри переменной) в массиве текста или таблицы.</p></blockquote></div><p>Возможно, это место вводит в заблуждение. Внутри переменной находится только та строка, <strong>которую нужно искать</strong>.<br />Остальное, т.е. то, <strong>где нужно искать</strong> находится в активном окне (в открытом листе экселя,либо страничке ворда).</p>]]></content>
			<author>
				<name><![CDATA[Deluxe]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32689</uri>
			</author>
			<updated>2014-12-02T14:42:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88816#p88816</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Поиск содержимого переменной в активном окне]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88815#p88815" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>DetectHiddenWindows, On
ControlGetText, thisText, Control, A
IfInString</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2014-12-02T13:52:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88815#p88815</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Поиск содержимого переменной в активном окне]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88813#p88813" />
			<content type="html"><![CDATA[<p>В принципе, в названии уже отражена суть проблемы.<br />Нужно, не пользуясь обычным поиском <strong>Ctrl+F</strong> , найти некоторую строку(внутри переменной) в массиве текста или таблицы.<br />Это при условии, что окно, в котором будет проводиться поиск,уже активно.<br />Если такой строки не существует, перейти к к выполнению следующего блока команд.<br />Что то наподобие&nbsp; <a href="http://www.script-coding.com/AutoHotkey/IfExistIfNotExist.html">IfExist / IfNotExist</a> , только с содержимым переменной.<br />Подскажите пожалуйста, как это реализовать?</p>]]></content>
			<author>
				<name><![CDATA[Deluxe]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32689</uri>
			</author>
			<updated>2014-12-02T12:01:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88813#p88813</id>
		</entry>
</feed>
