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

Тема в разделе "1C и всё что с ней связано", создана пользователем kaa, 13 янв 2010.

  1. kaa

    kaa Гость

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

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    Возможно попробуй поэксперементировать с методом
    Код (Text):
    Активнаяобласть()
    Или посмотри возможности коспоненты FormEx
     
  3. kaa

    kaa Гость

    АктивнаяОбласть() - это не то.
    Компоненты использовать не хочу :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]

    Теперь мыслю как применить к моему случаю
     
  4. TimeDontWait

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    Используй
    для определения заголовка Таблица
    а
    вызывает функцию
    , чтобы извлечь имя окна для сравнения.
     
  5. kaa

    kaa Гость

    Таблицы я так понимаю можно отобрать пот классу, а как сделать окно активным и эмулировать Сохранить-Как
     
  6. TimeDontWait

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    Мда, озадачил ты себя, но никак не пойму если у вас бухи знают 1с , то как они не могут простым способом сохранить таблицы?
    Код (Text):
    GetActiveWindow()
     
  7. kaa

    kaa Гость

    дело в том что таблицы нужно добавлять в систему документооборота DIRECTIUM, можно конечно на каждую печатную форму повесть функционал типа Обновить, но их-то многооооо. Вот и думаю как бы забульбенить одну кнопочку на все :newconfus:
     
Загрузка...

Поделиться этой страницей