Ввод в другие программы [C / C ++] - PullRequest
1 голос
/ 19 апреля 2009

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

Какими способами можно ввести адрес электронной почты в эту программу?

Я думал о простом сценарии, который просто принимает параметры, такие как адрес электронной почты, тема и т. Д. Затем просто заставьте сценарий создать текстовый файл с похожими ярлыками, несколько эквивалентными:

TO адрес электронной почты ОТ адрес электронной почты SUB sub

А затем просто попросите мою программу прочитать эти значения и присвоить их символическим переменным. чем удалить файл конфигурации.

Какие есть еще способы?

Ответы [ 8 ]

4 голосов
/ 19 апреля 2009

Некоторые другие способы:

  • Registry
  • Файл конфигурации
  • Параметры командной строки
  • Переменные среды
  • Общая память

Реестр

Использование реестра подходит для многих видов информации о конфигурации. Выбрав подходящее место в реестре, вы можете сделать некоторые настройки для всей системы, некоторые настройки для каждого пользователя (что не похоже на ваше приложение, но я все равно упомяну об этом) или любую их комбинацию. Windows управляет хранением данных и предоставляет пользователям простой способ их редактирования (regedit.exe).

Использование реестра затрудняет одновременное выполнение нескольких экземпляров вашей программы с разными параметрами.

Файл конфигурации

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

Этот метод позволяет вам легко запускать более одного экземпляра вашей программы, каждый со своим отдельным файлом конфигурации (например, если ваше приложение ищет в своем каталоге конфигурационный файл).

Параметры командной строки

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

Переменные среды

Ваша программа может считывать информацию о своей конфигурации из переменных среды. Это могут быть переменные, которые устанавливаются сценарием, запускающим ваши программы (где у вас те же проблемы, что и у параметров командной строки, данные все равно должны храниться где-то еще), или это может быть глобально установленная переменная среды, предоставляемая системой. Windows предоставляет очень примитивные инструменты для изменения глобальной среды, менее доступные, чем даже regedit. Этот выбор не часто используется в Windows.

Общая память

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

3 голосов
/ 19 апреля 2009

Надень мою кепку бокового мышления здесь ... Как насчет того, чтобы сделать адрес электронной почты постоянным (или настраиваемым, в любом случае), но сделать его адресом списка. Пусть ваш почтовый сервер управляет подписками на список. Теперь ваша программа делает то, для чего она хороша (сбор журналов), а почтовый сервер делает то, для чего он хорош (распространение электронной почты), с очень маленьким интерфейсом между ними (адрес списка).

Редактирование какого-либо скрытого файла конфигурации или записи реестра где-либо каждый раз, когда вам нужно добавить / удалить кого-либо из списка получателей журнала, вероятно, не лучший способ справиться с этим.

2 голосов
/ 19 апреля 2009

Вы также можете использовать реестр Windows.

1 голос
/ 19 апреля 2009

Есть ли причина, по которой вы не можете изменить программу, чтобы она просто читала список аргументов, который вы могли бы передать ей во время запуска, и таким образом установили для вас «на» и «от»?

Пример: program.exe email@address.com email2@address2.com

0 голосов
/ 19 апреля 2009

Ваша программа может открыть сокет и принимать данные через сокет. Тогда вам понадобится хотя бы простой протокол с некоторой безопасностью. Возможно, вам также придется написать какой-нибудь клиент. Из вашего описания я бы предложил один из предоставленных ответов, но в некоторых ситуациях это может быть приемлемым вариантом.

0 голосов
/ 19 апреля 2009

Лично я бы использовал Boost.Program_options , что позволило бы вам иметь файл конфигурации или параметры командной строки (или оба!) - хотя вы пометили этот C / C ++, а Boost - для C ++ только. Тем не менее, это не должно быть сложно в C, просто иметь файл конфигурации и fscanf его. Также всегда есть argc и argv.

0 голосов
/ 19 апреля 2009

Я живу в мире Linux, поэтому у меня есть каналы, чтобы позаботиться о таких ситуациях, но я слышал, что в Windows делается следующее:

Можно управлять элементами GUI (или элементами управления) других окон, используя API, и, например, заполнять поля «Кому», «От» и «Данные», а затем отправлять нажатое событие кнопке простой почтовой программы. Подлая часть заставляет это случиться на заднем плане. Еще раз используя API, можно сделать так, чтобы окно почтовой программы имело «скрытое» состояние, делая его невидимым. Для скрытых окон все еще можно манипулировать дескрипторами, как если бы они были обычными окнами.

Так что это должно дать вам эффект фонового управления программой в Windows, я знаю, что это было сделано, но я никогда не смотрел на это лично. Кажется, это не самый эффективный в мире, но это крутой трюк. :)

0 голосов
/ 19 апреля 2009

Registry! : -Р

...