Добрый день!
Подскажите, пожалуйста, создаю ExcellApplication
ExcelApplication.Visible = false;
...
ExcelApplication.Visible = true;
И Excell естественно загружается, все ок, но мне надо чтобы он еще вылезал на передний план, все перерыл, не найти.
Заранее спасибо!
Нравится
я вот чего нарыл)
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, а затем вызывать в скрипте функции 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" написал:Может быть можно сразу указать в System.CreateObject объект из user32.dll которому принадлежат эти методы?
Инетересно, какой? С учётом того, что user32.dll написана на C задолго до появления COM.