<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Как в Lua получить название вкладки терминала?]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Как в Lua получить название вкладки терминала? форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sat, 02 May 2026 15:31:38 +0300</pubDate>
		<item>
			<title>Как в Lua получить название вкладки терминала?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50870/topic6034/">Как в Lua получить название вкладки терминала?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="https://quik2dde.ru/viewtopic.php?id=329" target="_blank" rel="nofollow">https://quik2dde.ru/viewtopic.php?id=329</a></noindex><br /><br />
====code====
<pre>w32 = require("w32")

-- Возвращает handle главного окна QUIK или 0 при ошибке
-- Если запущено несколько терминалов - выбирается тот QUIK, из которого запущен наш скрипт
function GetQuikMainWindowHandle()
&nbsp;&nbsp;&nbsp;&nbsp;local hQuikWnd = 0
&nbsp;&nbsp;&nbsp;&nbsp;while true do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hQuikWnd = w32.FindWindowEx(0, hQuikWnd, "InfoClass", "")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if hQuikWnd == 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local t,WinProcId = w32.GetWindowThreadProcessId(hQuikWnd)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if WinProcId == w32.GetCurrentProcessId() then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;return hQuikWnd
end

-- Тестовая функция создания пользовательского окна с таблицей
function CreateTableWindow(caption)
&nbsp;&nbsp;&nbsp;&nbsp;local t_id = AllocTable()&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;AddColumn(t_id, 0, "1", true, QTABLE_INT_TYPE, 15)
&nbsp;&nbsp;&nbsp;&nbsp;AddColumn(t_id, 1, "2", true, QTABLE_INT_TYPE, 15)
&nbsp;&nbsp;&nbsp;&nbsp;local t = CreateWindow(t_id)
&nbsp;&nbsp;&nbsp;&nbsp;SetWindowCaption(t_id, caption)
&nbsp;&nbsp;&nbsp;&nbsp;InsertRow(t_id, -1)
&nbsp;&nbsp;&nbsp;&nbsp;SetCell(t_id, 1, 1, "&#60;&#60;" .. caption .. "&#62;&#62;")
end

-- Основной код

hQuikWnd = GetQuikMainWindowHandle()

-- получим handle окна вкладок, далее все операции по переключению вкладок будем совершать с этим окном
hTabWnd = 0
if hQuikWnd &#62; 0 then
&nbsp;&nbsp;&nbsp;&nbsp;hTabWnd = w32.FindWindowEx(hQuikWnd, 0, "SysTabControl32", "")
&nbsp;&nbsp;&nbsp;&nbsp;if hTabWnd ~= 0 and not w32.IsWindowVisible(hTabWnd) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Если окно вкладок найдено, но отображение вкладок отключено - сбросим в 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hTabWnd = 0
&nbsp;&nbsp;&nbsp;&nbsp;end
end

if hTabWnd &#62; 0 then
&nbsp;&nbsp;&nbsp;&nbsp;-- Если вкладки в терминале отображаются
&nbsp;&nbsp;&nbsp;&nbsp;-- Сохраним индекс текущей активной вкладки
&nbsp;&nbsp;&nbsp;&nbsp;local prevIdx = w32.TabCtrl_GetCurFocus(hTabWnd)

&nbsp;&nbsp;&nbsp;&nbsp;-- Определим и выведем через message() наименование активной вкладки на момент старта
&nbsp;&nbsp;&nbsp;&nbsp;-- (индекс активной вкладки сохранён ранее, так что здесь получаем / отображаем имя просто так)
&nbsp;&nbsp;&nbsp;&nbsp;-- w32.TabCtrl_GetItemText() вызываем только с 1 параметром, т.к. нас интересует имя активной вкладки
&nbsp;&nbsp;&nbsp;&nbsp;local activeTabName = w32.TabCtrl_GetItemText(hTabWnd)
&nbsp;&nbsp;&nbsp;&nbsp;if activeTabName then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- т.к. явно проверили, что имя вкладки получить удалось (оно не nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- просто отображаем его без tostring()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Активна вкладка: " .. activeTabName)
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;-- Получим индекс вкладки с именем "Графики" (если такая существует)
&nbsp;&nbsp;&nbsp;&nbsp;local idxGr = w32.TabCtrl_GetItemIndexByText(hTabWnd, "Графики")
&nbsp;&nbsp;&nbsp;&nbsp;if idxGr &#62;= 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Если вкладка "Графики" найдена
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- переключимся на неё и создадим таблицу на ней, получив имя
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w32.TabCtrl_SetCurFocus(hTabWnd, idxGr)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Получим название текущей активной вкладки (только что на нее переключились)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local txt = w32.TabCtrl_GetItemText(hTabWnd)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Используем tostring(), т.к. TabCtrl_GetItemText при ошибке возвращает nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateTableWindow("Вкладка '" .. tostring(txt) .. "'")
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;-- Получим общее количество вкладок
&nbsp;&nbsp;&nbsp;&nbsp;cnt = w32.TabCtrl_GetItemCount(hTabWnd)
&nbsp;&nbsp;&nbsp;&nbsp;for i = 0, cnt-1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Переключаемся поочередно на каждую вкладку и создаем таблицу с именем вкладки
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w32.TabCtrl_SetCurFocus(hTabWnd, i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Получим название вкладки
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- т.к. получаем название текущей активной вкладки (только что на нее переключились),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- то второй параметр можно не указывать; но здесь оставлен второй параметр для тестов
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local txt = w32.TabCtrl_GetItemText(hTabWnd, i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Используем tostring(), т.к. TabCtrl_GetItemText при ошибке возвращает nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateTableWindow(tostring(txt))
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;-- Переключимся назад на исходную вкладку
&nbsp;&nbsp;&nbsp;&nbsp;w32.TabCtrl_SetCurFocus(hTabWnd, prevIdx)
else
&nbsp;&nbsp;&nbsp;&nbsp;-- Если вкладки в терминале не отображаются
&nbsp;&nbsp;&nbsp;&nbsp;CreateTableWindow("Вкладки отключены")
end</pre>
============= <br />
			<i>08.12.2020 14:27:08, swerg.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50870/topic6034/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50870/topic6034/</guid>
			<pubDate>Tue, 08 Dec 2020 14:27:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как в Lua получить название вкладки терминала?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50868/topic6034/">Как в Lua получить название вкладки терминала?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_AKDszSIH" href="/user/1889/" bx-tooltip-user-id="1889">Sergey Denegin</a>, добрый день!<br /><br />В текущей реализации <U>Q</U>Lua данный функционал не предусмотрен.<br />Вероятно, подобное можно реализовать с помощью сторонних библиотек для Lua. <br /><br />Рекомендуем поискать в сети интернет и на тематических форумах (в том числе и на этом). <br />
			<i>08.12.2020 12:40:59, Roman Azarov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50868/topic6034/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50868/topic6034/</guid>
			<pubDate>Tue, 08 Dec 2020 12:40:59 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как в Lua получить название вкладки терминала?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50866/topic6034/">Как в Lua получить название вкладки терминала?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Есть косяк - что когда в настройках терминала несколько вкладок, и на одной из вкладок работает робот на луа, и ему надо пересоздать окно, то он пересоздает его в той вкладке, в которой сейчас работает пользователь. <br /><br />Как можно этого избежать? <br /><br /><br />И как можно определить название вкладки, в которой сейчас работаешь, чтобы использовать в параметрах робота? <br />
			<i>08.12.2020 12:34:56, Sergey Denegin.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50866/topic6034/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50866/topic6034/</guid>
			<pubDate>Tue, 08 Dec 2020 12:34:56 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
