Получение активного окна

  • Автор темы kaa
  • Дата начала
K
#1
Платформа 7.7 . Есть задачка. Надо на кнопку в панели инструментов повесть сохранение активной таблицы в файл(для последующей манипуляции).
Аналог - сохранить как. Вопрос как получить в 1С активное окно , определить таблица это или нет, получить саму таблицу. Вот.
 
T

TimeDontWait

#2
Возможно попробуй поэксперементировать с методом
Код:
Активнаяобласть()
Или посмотри возможности коспоненты FormEx
 
K
#3
АктивнаяОбласть() - это не то.
Компоненты использовать не хочу :KillMe:
на мисте нашел кусочек кода
<!--shcode--><pre><code class='# 1C'>Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.language = "javascript";
Скрипт.AddCode("Текст=Array(1024).join(' ');
|function getWindowText(Хендл){Враппер.GetWindowTextW(Хендл,Текст,1024);return(Текст)}
|function getWindowClass(Хендл){Враппер.GetClassNameW(Хендл,Текст,1024);return(Текст)};
Враппер = СоздатьОбъект("DynamicWrapper");
Враппер.Register("user32.dll", "FindWindowExA", "i=llsl", "f=s", "r=l");
Враппер.Register("user32.dll", "FindWindowW", "i=ll", "f=s", "r=l");
Враппер.Register("user32.dll", "GetWindow", "i=ll", "f=s", "r=l");
Враппер.Register("user32.dll", "GetParent", "i=l", "f=s", "r=l");
Враппер.Register("kernel32.dll", "GetCurrentThreadId", "f=s", "r=l" );
Враппер.Register("User32.dll", "GetWindowThreadProcessId", "i=ll", "f=s", "r=l");
Враппер.Register("User32.dll", "GetWindowTextW", "i=hwl", "f=s", "r=l");
Враппер.Register("User32.dll", "GetClassNameW", "i=hwl", "f=s", "r=l");
Враппер.Register("User32.dll", "SetForegroundWindow", "i=hwl", "f=s", "r=l");

Скрипт.AddObject("Враппер",Враппер);
Хендл = Враппер.FindWindowW(0, 0);
Пока Хендл <> 0 Цикл
Если Враппер.GetParent(Хендл)=0 Тогда
Нить=Враппер.GetWindowThreadProcessId(Хендл, 0);
Если Нить=Враппер.GetCurrentThreadId() Тогда
Прервать;
КонецЕсли;
КонецЕсли;
Хендл = Враппер.GetWindow(Хендл, 2);
КонецЦикла;
Хендл=Враппер.FindWindowExA(Хендл,0,"MDIClient",0);
ТаблицаОкон = СоздатьОбъект("ТаблицаЗначений");
ТаблицаОкон.НоваяКолонка("Хендл");
ТаблицаОкон.НоваяКолонка("Заголовок");
ТаблицаОкон.НоваяКолонка("Класс");
Хендл = Враппер.GetWindow(Хендл,5);
Пока Хендл <> 0 Цикл
ЗаголовокОкна = СокрЛП(Скрипт.CodeObject.getWindowText(Хендл));
КлассОкна = СокрЛП(Скрипт.CodeObject.getWindowClass(Хендл));
ТаблицаОкон.НоваяСтрока();
ТаблицаОкон.Хендл = Хендл;
ТаблицаОкон.Заголовок = ЗаголовокОкна;
ТаблицаОкон.Класс = КлассОкна;
Хендл = Враппер.GetWindow(Хендл, 2);
КонецЦикла;

ТаблицаОкон.ВыбратьСтроку();[/CODE]

Теперь мыслю как применить к моему случаю
 
K
#5
Таблицы я так понимаю можно отобрать пот классу, а как сделать окно активным и эмулировать Сохранить-Как
 
T

TimeDontWait

#6
Мда, озадачил ты себя, но никак не пойму если у вас бухи знают 1с , то как они не могут простым способом сохранить таблицы?
Код:
GetActiveWindow()
 
K
#7
дело в том что таблицы нужно добавлять в систему документооборота DIRECTIUM, можно конечно на каждую печатную форму повесть функционал типа Обновить, но их-то многооооо. Вот и думаю как бы забульбенить одну кнопочку на все :newconfus: