Форум: "Прочее";
Текущий архив: 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