Как отправить строки в программу с открытым окном, ожидающим ответа строки?
У меня есть программа windows, которая ждет логина и пароля, чтобы продолжать работать. Мне нужно передать эту информацию автоматически, чтобы он закончил свою работу и начал другую.
Я использую createProcess, чтобы открыть эту программу, и жду ответа.
Сразу после того, как я использую keybd_event, чтобы написать учетные данные, и все работает нормально.
Но я не злюсь, потому что это недельное решение, как только кто-то открывает окно во время работы программы, keybd_event будет писать в открытом окне, а не в том, что хочет.
Итак, как отправить строковую информацию в программу и заставить ее понять эту строку-вот вопрос, который я обычно знаю. Какие-нибудь подсказки и подсказки?
ПС: В приведенном ниже коде я не поставил класс клавиатуры, потому что он работает нормально.
Я выполняю два раза, в основном, функцию
executeCommandLineчтобы проверить, действительно ли один ждет, пока другой закончит свою работу, чтобы начать.
Большое спасибо за ваше время.
АПН.
Что я уже пробовал:
// The class works fine. // If correctely used, It write a string in the front window windows #include "keyboard.h" bool executeCommandLine(LPCSTR path, LPSTR cmdLine, DWORD &exitCode){ PROCESS_INFORMATION processInformation = {0}; STARTUPINFO startupInfo = {0}; startupInfo.cb = sizeof(startupInfo); BOOL result = CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW, NULL, NULL, &startupInfo, &processInformation); if (!result){ // CreateProcess() failed // Get the error from the system LPVOID lpMsgBuf; DWORD dw = GetLastError(); FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL); // Display the error string strError = (LPTSTR) lpMsgBuf; //TRACE(_T("::executeCommandLine() failed at CreateProcess()\nCommand=%s\nMessage=%s\n\n"), cmdLine, strError); // Free resources created by the system LocalFree(lpMsgBuf); // We failed. return FALSE; } else{ // Here is the moment I use the keyboard to write the login and password. // It works fine, but it's a week solution, a need to send 2 different strings in two //dialogue boxes that opens one after another (once the ENTER key was pressed, in both //cases) when the process starts: one with the LOGIN and other with the PASSWORD keyboard keybd; Sleep(3000); keybd.text("LOGIN"); keybd.press_enter(TRUE); Sleep(200); keybd.text("PASSWORD"); keybd.press_enter(TRUE); // Successfully created the process. Wait for it to finish. WaitForSingleObject( processInformation.hProcess, INFINITE ); // Get the exit code. result = GetExitCodeProcess(processInformation.hProcess, &exitCode); // Close the handles. CloseHandle( processInformation.hProcess ); CloseHandle( processInformation.hThread ); if (!result){ return FALSE; } // We succeeded. return TRUE; } } int main() { LPSTR command = LPSTR("command line text"); DWORD exitCode; // executeCommandLine two times. // to verfy if the first waits for the second. It works fine. executeCommandLine(NULL, command, exitCode); executeCommandLine(NULL, command, exitCode); return 0; }