Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.06.16;
Скачать: CL | DM;

Вниз

Ёксель и ShellExecute   Найти похожие ветки 

 
Dimka Maslov ©   (2013-02-08 17:51) [0]

Сгеренировал XML файл с соответствии с требованиями Ёкселя, дабы передать в него результаты расчётов. Потом, не корысти ради, а чтобы усер не искал, где это лежит, обозвал файл XLS и пытаюсь его Ёкселем открыть через ShellExecute. Всё хорошо, но ShellExecute не возвращает управление до тех пор, пока файл до конца не прочитан, загружен и готов к употреблению. Ежели у Ёкселя есть что сказать, управление в мою прогу не возвращается до тех пор, пока диалоговое окно Ёкселя открыто. Та же фигня, если я сгенерировал DXF и открываю AutoCAD. Вопрос: как они это делают? Или же что нужно у себя сделать, что при запуске моей проги через ShellExecute я мог управлять процессом возврата управления в породившем мою прогу процессе, у меня получается, что выход из ShellExecute происходит мгновенно...


 
Игорь Шевченко ©   (2013-02-08 19:25) [1]

Возможно, дело в установке флага SEE_MASK_FLAG_DDEWAIT согласно параметрам в реестре для типа файла и указанного verb.

http://www.transl-gunsmoker.ru/2009/10/shellexecute.html


 
Dimka Maslov ©   (2013-02-08 19:34) [2]

Если я правильно понял прочитанное, если я выставлю такой флаг в параметрах функции, управление мне будет отдаваться сразу? Мне же наоборот хотелось бы научиться делать такую задержку у себя, когда уже моя прога получает имя файла.


 
Игорь Шевченко ©   (2013-02-08 19:44) [3]

Dimka Maslov ©   (08.02.13 19:34) [2]


> Если я правильно понял прочитанное, если я выставлю такой
> флаг в параметрах функции, управление мне будет отдаваться
> сразу?


Во-первых, наоборот, вроде.

Во-вторых, возможно, тебе стоит использовать не ShellExecute, а ShellExecuteEx и задавать в маске SEE_MASK_WAITFORINPUTIDLE, в этом случае управление не вернется до тех пор, пока вызываемая программа не ответит на вызов WaitForInputIdle.

Вообще, в ShellExecuteEx масса гаек
http://msdn.microsoft.com/en-us/library/windows/desktop/bb759784(v=vs.85).aspx


 
Dimka Maslov ©   (2013-02-08 20:07) [4]

Сама задержка меня устраивает, и избавляться от неё я не хочу. Я хочу свою прогу научить делать такую задержку, когда её кто-то вызывает через ShellExecute.


 
Игорь Шевченко ©   (2013-02-08 20:16) [5]

http://stackoverflow.com/questions/7931173/dde-implementing-an-application-which-launches-correctly-via-shell-and-ddeexec

?


 
Dimka Maslov ©   (2013-02-08 20:25) [6]

Нет, там у чела другая проблема, он хочет того, что делается элементарными вещами - найти ранее запущенную копию своего приложения и передать имя открываемого файла. Я же хочу научиться указывать системе, когда можно отдать управление родительскому процессу, как это происходит в Ёкселе.


 
Игорь Шевченко ©   (2013-02-08 20:46) [7]


> Я хочу свою прогу научить делать такую задержку, когда её
> кто-то вызывает через ShellExecute.


Тогда, возможно, надо организовать в ней DDE-сервер, насколько я понимаю смысл всех предыдущих ссылок.

Для файлов типа DXF в HKCR есть раздел open\ddeexec ?


 
Dimka Maslov ©   (2013-02-08 20:55) [8]


> Для файлов типа DXF в HKCR есть раздел open\ddeexec ?


Таки да. Но если это действительно делается через DDE, я и заморачиваться не буду.


 
tesseract ©   (2013-02-08 21:02) [9]


> Сгеренировал XML файл с соответствии с требованиями Ёкселя,
>  дабы передать в него результаты расчётов.


Каждый раз сохраняя файл в xml - ты сталкиваешся с кучей проблем вроде AD и правами файловой системы. Если выходной файл выходит меньше 50 мегабайт лучше через ole открывать - проверено. Exel очень долго читает нетипизированные данные, плюс еще не любит числа(не  строки) разрядностью выше 13 символов.


 
Dimka Maslov ©   (2013-02-08 21:07) [10]


> tesseract ©   (08.02.13 21:02) [9]


Вроде не сталкивался ни с какими проблемами, тем более что сам файл имеет расширение xls и на ура проглатывается Ёкселем. И там уже всё сбрасывается, сохряняется и читается. Не буду же я всё переделывать.


 
tesseract ©   (2013-02-08 21:17) [11]


> И там уже всё сбрасывается, сохряняется и читается. Не буду
> же я всё переделывать.


Я не спорю. Но что лучше excel не злить - знаю. Если файл не содержит диаграмм и хитрого форматирования - можно использовать ODBC или com-объект (их куча) напрямую с файлами работающий. Быстрее раз в 10-15. Зуб даю. У нас на конторе уже всё сохраняется в mxl - его excel считывает раз в 10 быстрее - но у нас и файлики в 100-500 мегабайт.


 
Dimka Maslov ©   (2013-02-08 21:26) [12]


> tesseract ©   (08.02.13 21:17) [11]


Скорость чтения файла Ёкселем непринципиальна буквально вообще, ибо сам процесс выполнения расчётов длителен в силу нелинейности, итерационности и выполнения на удалённом сервере. Так что можно и потерпеть.


 
tesseract ©   (2013-02-08 21:30) [13]


> Так что можно и потерпеть.


Ну тогда используй не shellexecute, а открывай через ActiveX.


 
Dimka Maslov ©   (2013-02-08 21:59) [14]


> Ну тогда используй не shellexecute, а открывай через ActiveX.


Я не же не против задержки при открытии. Мне такое же поведение хотелось воспроизвести.


 
Rouse_ ©   (2013-02-08 22:42) [15]


> Dimka Maslov ©   (08.02.13 21:59) [14]
> Я не же не против задержки при открытии. Мне такое же поведение
> хотелось воспроизвести.

Дим, ну что ты за балаболка-то? Хочу да хочу.
Тебе ж дали направление еще в первом посте. DDE делай


 
Dimka Maslov ©   (2013-02-09 23:10) [16]


> Rouse_ ©   (08.02.13 22:42) [15]


Я думал, может есть какая п р о с т а я функция для этого. А с DDEй я и связываться не буду...


 
Игорь Шевченко ©   (2013-02-09 23:24) [17]

Dimka Maslov ©   (09.02.13 23:10) [16]

Я, если честно, не совсем понимаю, зачем требуется такое поведение. Может, есть какие-то обходные пути ?


 
Dimka Maslov ©   (2013-02-10 11:30) [18]


> Игорь Шевченко ©   (09.02.13 23:24) [17]


Хотя бы для своего рода синхронизации. Обходные пути есть, но пока получается, что оба процесса (запускающий и запускаемый) должны знать о том, что такие пути применяются.



Страницы: 1 вся ветка

Текущий архив: 2013.06.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.009 c
15-1359965017
Админ.клаб
2013-02-04 12:03
2013.06.16
Как убрать корзину в Семерке?


15-1359807822
Дмитрий С
2013-02-02 16:23
2013.06.16
Стартовый бит rs232


2-1352477885
Signal
2012-11-09 20:18
2013.06.16
Другой вопрос по фреймам и IWebBrowser2


15-1360007713
Германн
2013-02-04 23:55
2013.06.16
Лицензия на убийство:


15-1359237872
Rouse_
2013-01-27 02:04
2013.06.16
Перехват АПИ