Посмотрите пример о том, как можно сделать это с полным исходным кодом здесь:
http://www.csharphelp.com/2006/08/get-current-window-handle-and-caption-with-windows-api-in-c/
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
private string GetActiveWindowTitle()
{
const int nChars = 256;
StringBuilder Buff = new StringBuilder(nChars);
IntPtr handle = GetForegroundWindow();
if (GetWindowText(handle, Buff, nChars) > 0)
{
return Buff.ToString();
}
return null;
}
Отредактированный с @Doug McClean комментирует для лучшей правильности.
Метод грубой силы: отправьте ему команду ".dump" для создания текстового представления данных. Прочтите эти данные во вторую базу данных. Не уверен, что вы можете это использовать.
Если вам нужно детализированное обновление (отправка копии каждой копии в другую), посмотрите sqlite3_update_hook
Но как вы планируете обрабатывать ошибки? Например, что происходит, когда копия базы данных в app2 не может выполнить обновление по какой-либо причине?
Чтобы решить эту проблему, переместите базу данных в серверный процесс и попросите два приложения взаимодействовать с ним.
Если вы хотите репликацию в базе данных в памяти, вам нужно посмотреть berkeley DB (BDB) . Однако модель данных для BDB - это строковый словарь, поэтому вы теряете гибкость SQL. плюс у него есть лицензия из трех пунктов, поэтому, если ваш проект коммерческий, вам необходимо получить лицензии.
Нет, это не так, потому что объем проекта - простая внутрипроцессная база данных. Но поскольку база данных представляет собой всего лишь один файл, вы можете написать свой собственный сценарий репликации на основе операций копирования простых файлов, rsync или чего-то подобного.
Если вам действительно нужен тип СУБД клиент / сервер на основе SQLite, вы можете взять посмотрите SQLiteDBMS .