Я пытаюсь создать инструмент на C ++, который взаимодействует с функциями ОС, но я никогда раньше не делал ничего подобного, поэтому даже не представляю, где искать ответ.
Вот краткий пример того, что я хотел бы сделать:
Допустим, у меня есть несколько текстовых файлов, хранящихся в папке. В каждом файле есть текст и пароль (только строка, без шифрования). То, что я хочу сделать, это ввести ключевое слово (например, «1» или «2», или любое другое ключевое слово), а затем пароль будет выбран среди файлов. Теперь я знаю, как делать все эти «простые» вещи, моя проблема идет дальше:
Как только я найду пароль — скажем, пароль будет сохранен в переменной psw String — я хочу скопировать строку psw в «буфер» (или что бы то ни было), который моя ОС (скажем, Windows) использует для функции «copy» «(Ctrl + C). В результате: в следующий раз, когда я нажму Ctrl + V, будет вставлен psw.
Пример использования:
Пользователь запускает .exe, и открывается окно. Затем он вводит ключевое слово, и пароль выбирается и добавляется в «буфер», который обрабатывает функцию «копирования». Программа может завершить работу в этом состоянии или ждать другого пароля (мы больше не заботимся о нем). Теперь предположим, что пользователь создает текстовый файл, нажимает Ctrl + V и пароль вставляется в текстовый файл, без каких-либо других взаимодействий со стороны пользователя.
И вот мои вопросы:
Это вообще возможно или я должен отказаться от идеи?
Если да, я был бы признателен за любую помощь, учебник или какой-либо образец, где искать это.
Заранее спасибо !
Это скорее ответ «Windows», чем ответ «C ++», но приведенный ниже код будет работать на C или C ++.
На окнах вы прагматично «вставляете» строки в буфер обмена через Win32 API.
void PasteString(const char* pszPhrase)
{
int len = strlen(pszPhrase);
BOOL fResult = FALSE;
fResult = OpenClipboard(GetDesktopWindow());
if (fResult == FALSE)
{
return;
}
HGLOBAL hglob = GlobalAlloc(GHND, len+1);
void* pGlobalMemory = GlobalLock(hglob);
strcpy((char*)pGlobalMemory, pszPhrase);
GlobalUnlock(hglob);
EmptyClipboard();
SetClipboardData(CF_TEXT, hglob);
CloseClipboard();
}
Других решений пока нет …