Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.06.16;
Скачать: [xml.tar.bz2];

Вниз

Ёксель и 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
15-1356445425
Oleguslu
2012-12-25 18:23
2013.06.16
Зкспорт cxGrid в Excel


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


15-1360232154
Interrupt Directive
2013-02-07 14:15
2013.06.16
Внешний диск - не работает.


15-1360259305
Ega23
2013-02-07 21:48
2013.06.16
Внезапно возник вопрос


15-1360151414
Mozart
2013-02-06 15:50
2013.06.16
php+ajax





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский