| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > глобальная текущая директория |
| Автор: slavic 25.3.2007, 11:57 |
| вопрос может быть и немного выходит за рамки раздела, но задам его здесь. в с++ есть такое понятие как "текущая директория", ее можно получать и задавать функциями типа GetCurrentDir() и SetCurrentDir(). проблема возникла в следующем, есть 2 приложения, второе запускается сразу за первым. каким образом сделать так, чтобы 1ое (написаное на билдере, исходники его можно редактировать) в конце своей работы устанавливало "текущую директорию" , а 2ое (его пофиксить уже никак нельзя, оно вроде написано на делфях) - в котором есть стандартные вещи типа opendialog, считало initial directory как раз ту "текущую директорию", которую в конце своей работы установило 1ое приложение. где копать? есть подозрения на реестр, но выжать из него ничего не смог.. еще раз повторю, если бы можно было менять исходники обоих приложений - вопрос решался бы очень просто , например, записью текущей директории в файл. в моем случае я второе приложение изменять не могу. PS. как показали практические исследования функция SetCurrentDir()работает только для текущего приложения. на второе она никак не влияет :( |
| Автор: Klin 25.3.2007, 13:20 | ||
Если я тебя правильно понял, то тебе нужно, чтобы первое приложение определяло рабочию директорию второй программы. Тогда можно использовать глобальные переменные и прочее(об этом можешь почитать в FAQ). Но проще всего - этот либо файл, из которого будет браться эта директория, либо старый добрый реестр).
|
| Автор: slavic 25.3.2007, 13:44 |
| Klin, насколько я понимаю не подойдет. Так как код второго приложения я изменять не могу! (соответственно и передать ему ничего я не могу - если речь идет о параметрах, и сделать чтобы оно брало данные из реестра тоже не могу - ибо надо изменять код). Но во втором приложении есть opendialog, у которого не прописана "инишиал директория". Посему и вопрос, откуда по умолчанию оно черпает инишиал директорию для opendialoga (например, какая то ячейка в реестре), хочется узнать это место и пистаь туда первым приложением нужную директорию. |
| Автор: W4FhLF 25.3.2007, 13:59 |
| slavic, единственое, что здесь можно предложить - это перехват API в целевом приложении(а именно GetOpenFileName и правка управляющей структуры передаваемой параметром в эту функцию) |
| Автор: slavic 25.3.2007, 14:13 |
| W4FhLF, а может вы мне поможете кодом, которым должно завершаться 1ое приложение, чтобы второе считало текущую директорию 1го своей текущей? А то ваши объяснения для меня еще слишком суровы |
| Автор: W4FhLF 25.3.2007, 15:04 |
| slavic, нет, помочь не могу, т.к. на Borland C++ я не пишу, но перехвату api материалов множество и эта тема регулярно обсуждается на форуме. |
| Автор: Klin 25.3.2007, 22:15 |
| Неплохая задачка Могу сказать точно, что первая программа не должна закрываться перед второй. Первая в процессе выполнения программы должна перехватывать появление диалога открытия файла и менять путь. Или в компоненте аторой программы изменять этот путь. Есть API команды: GetCurrentDirectory и SetCurrentDirectory (о них можешь почитать в хелпе). Но на директорию OpenDialog они не влияют. Поэтому задачка не слишком быстро решается... з.ы. опиши подробней вторую программу |