Я пишу приложение, которое автоматически заполняет сохраненные данные в любом приложении win32. Это приложение сделано в vc ++ для MFC.
Рабочий процесс состоит в том, чтобы отправить программу в трей, глобальную клавиатуру перехвата, поймать CTRL + SHIFT + K (K = A, чтобы добавить, R, чтобы удалить, S, чтобы отправить информацию, M, чтобы изменить информацию и Q, чтобы выйти), encript / расшифровать и сохранить / получить информацию из базы данных MySql.
Когда программа ловит действие пользователя, она сканирует активное верхнее окно следующим образом:
HWND hWndMW = GetForegroundWindow();
wchar_t buff[512];
this->ClearBuffer<wchar_t>(buff, 512);
GetClassName(hWndMW, buff, 512);
String^ sClassName = gcnew String(buff);
this->ClearBuffer<wchar_t>(buff, 512);
GetWindowText(hWndMW, buff, 512);
String^ sText = gcnew String(buff);
zOrder=0;
EnumChildWindowsDelegate^ ecwDel = gcnew AutoComplete::EnumChildWindowsDelegate(this, &AutoComplete::hWndControls);
EnumChildWindows(hWndMW, ecwDel, (LPARAM) NULL);
И функция, которая извлекает информацию:
bool hWndControls(HWND hWnd, LPARAM lParam)
{
wchar_t buff[512];
zOrder++;
this->ClearBuffer<wchar_t>(buff, 512);
GetClassName(hWnd, buff, 512);
String^ sClassName = gcnew String(buff);
if (sClassName->ToUpper()->Contains("EDIT"))
{
char buff1[MAX_DATASIZE];
this->ClearBuffer<char>(buff1, MAX_DATASIZE);
int len = this->SendMessage(hWnd, WM_GETTEXT, MAX_DATASIZE, (LPARAM) buff1);
buff1[len] = 0;
String^ sTextInside = gcnew String(buff1);
if(textInside!="") SaveData(hWndMW, hWnd, zOrder, sTextInside);
}
return true;
};
SaveData () еще не разработан.
Вопросы:
1- Как получить информацию из формы веб-сайта (в основном в Mozilla, IExplore или Google Crome)?
2- Есть ли способ сопоставить информацию с элементом управления, где она находится, вместо использования zOrder? Я думаю, что-то вроде «управляющего имени», которое можно получить из hWnd ..
Любые комментарии приветствуются! Спасибо,
Miguel