Сделать активным окно Excell

Добрый день!

Подскажите, пожалуйста, создаю ExcellApplication

        var ExcelApplication = new ActiveXObject('Excel.Application');
        ExcelApplication.Visible = false;

        ...

        ExcelApplication.Visible = true;      

И Excell естественно загружается, все ок, но мне надо чтобы он еще вылезал на передний план, все перерыл, не найти.

Заранее спасибо!

Нравится

12 комментариев

я вот чего нарыл)
http://www.redov.ru/kompyutery_i_internet/o_chyom_ne_pishut_v_knigah_po…

осталось вызвать это как-то из TS :exclaim:

Проверял, API из ТС можно вызвать только подключая ДЛЛ, этот вариант у меня оставлен на последок, я думаю может как-то проще можно...

Здравствуйте, Алексей.

К сожалению, методами Excell.Application управлять окном приложения не получится. Есть метод Activate, но вызываемое окно уже, по умолчанию, активно, просто отображается не на переднем плане.
Поэтому, придется использовать упомянутый вариант - обращаться к системе.

Понял, спасибо!

я правильно понимаю, конструкция (MSDN):

            string caption = oExcel.Caption;
            IntPtr handler = FindWindow(null, caption);
            SetForegroundWindow(handler);
            oExcel.Visible = true;

работать не будет?

сделал не совсем логичный вариант:

            var Shell = new ActiveXObject('WScript.Shell');
            Shell.AppActivate(Excel.Caption);
            Excel.Visible = true;

после чего повторный вызов метода, отрабатывающего предыдущий код, с помощью:

            Shell.AppActivate(Control.ParentWindow.WindowCaption); 
            Shell.SendKeys("~");

то есть "двойное нажатие на кнопку" в террасофте всё-таки активирует эксель :smile:

--
Terrasoft 3.4.1.84
SQL Server 10.50.2500.0
Microsoft Windows NT 6.1 (7601) x64 en

Думаю первая конструкция будет работать, если подключить в конфигурацию библиотеку user32.dll, а затем вызывать в скрипте функции FindWindow, SetForegroundWindow, описанные в библиотеке.

"Бондарь Наталия" написал:подключить в конфигурацию библиотеку user32.dll

Это можно сделать так.

"Бондарь Наталия" написал:

Думаю первая конструкция будет работать, если подключить в конфигурацию библиотеку user32.dll, а затем вызывать в скрипте функции FindWindow, SetForegroundWindow, описанные в библиотеке.

Может быть можно сразу указать в System.CreateObject объект из user32.dll которому принадлежат эти методы? чтобы не пользоваться сторонними разработками, типа:

Wrap = System.CreateObject("DynamicWrapper");
Wrap.Register("SHELL32.DLL", "ShellExecute", "i=lssssl", "f=s", "r=l");

"AlexLS" написал:для непосвященных: а где эту длл-ку взять?

C:\Windows\System32

"Андросов Дмитрий" написал:AlexLS пишет:

для непосвященных: а где эту длл-ку взять?

C:\Windows\System32


Спасибо Дмитрий! Осталось определиться: возможно ли запустить com-объект этой библиотеки без использования чего-то дополнительного...

"AlexLS" написал:Может быть можно сразу указать в System.CreateObject объект из user32.dll которому принадлежат эти методы?

Инетересно, какой? С учётом того, что user32.dll написана на C задолго до появления COM.

"Зверев Александр" написал:Инетересно, какой? С учётом того, что user32.dll написана на C задолго до появления COM.

жаль. значит (если по-мне) нужно использовать мой

"AlexLS" написал:не совсем логичный вариант

Показать все комментарии