Теперь разбирёмся с регламентом. Логичнее всего, данную идею оформить в виде расширения для Google Chrome. Но, как мне кажется, и на C++, программа будет выглядеть тоже достойно. А расширение мы ещё напишем. Если говорить о внешнем виде, то лично я буду писать консольное приложение, а кому надо, могут прикрутить GUI, ну и дописать ещё что-нибудь. Ведь наша цель больше образовательная и не претендует на полноценное решение.
Ну пора начинать. Создаём новый файл в Visual Studio и после этого, думаем что будем писать. Очевидно, что сначала надо получить дескриптор окна, который принадлежит Хрому, потом получить данные которые находятся в URL и если этот адрес находится в чёрном списке, то переходим на www.google.ru. Всё это выглядит примерно так:
Листинг 1.1
#include < windows.h >
#include < tchar.h >
#pragma comment(lib, "user32.lib")
const TCHAR wqq[] = L"www.google.ru";
BOOL __stdcall GetChromeEditText(HWND hWnd,LPARAM)
{
char szbuff[500];
if( GetWindowTextA(hWnd, szbuff, sizeof(szbuff)/sizeof(szbuff[0]))!= 0 ) //Получаем адрес
{
if(!strstr(szbuff,"Chrome")) //Если там нет слова Chrome, то выходим
false;
HWND hw = FindWindowExA(hWnd,NULL,"Chrome_AutocompleteEditView",NULL); //Ищем дескриптор //адресной строки
if(hw != NULL) //Если дескриптор найден
{
TCHAR buff[1000];
char szdisplay[1000];
SendMessage(hw,WM_GETTEXT,100,(LPARAM)buff); //считываем URL
wcstombs(szdisplay,buff,lstrlen(buff)); //приводим его к виду
if(strstr(szdisplay,"sex")) //если он содержит слово
{
//то посылаем текст Google
SendMessage(hw,WM_SETTEXT,100,(LPARAM)wqq);
//нажимаем Enter
PostMessage(hw, WM_KEYDOWN, VK_RETURN, VK_RETURN);
}
}
}
return true;
}
void main() {EnumWindows(GetChromeEditText,0);}
Тут надо сделать несколько пояснений. Наверное сразу у многих появился вопрос: Откуда взялся “Chrome_AutocompleteEditView”? Имя этого класса, удалось получить с помощью утилиты Spy++. Далее, у нас блокируется только одно слово, а если мы хотим несколько? Для этого, поместим все ненужные нам слова в отдельный массив и при проверки, с помощью цикла, будем проверять соответствия. То есть сделаем как-то так:
Листинг 1.2
const int len = 2;
const char* badwords[len] = {"sex","porno"};
…..
for(int i = 0;i
{
SendMessage(hw,WM_SETTEXT,100,(LPARAM)wqq);
PostMessage(hw, WM_KEYDOWN, VK_RETURN, VK_RETURN);
PostMessage(hw, WM_KEYUP, 0, VK_RETURN);
}
….......
И в завершении, надо сделать чтобы программа работала всегда и реагировала на изменения в в адресной строке браузера. Это можно сделать через хуки, но я оформлю это просто как бесконечный цикл.
void main() {
while(1)
{
Sleep(1000);
EnumWindows(GetChromeEditText,0);
}
}
Вы можете всё доработать и переработать по своему вкусу.
Мы рассмотрели способ доступа к адресной строки браузера Google Chrome. Аналогично, тоже самое можно сделать и для других браузеров, но это уже на ваш выбор. А пока, удачи во всех ваших начинаниях!