Я полный нуб в С++, это моя первая программа на этом языке (сам пишу на PHP).
Моя задача создать программу, которая смотрит какое окно в текущий момент активно у пользователя и если это окно браузера, то сохранять адрес страницы в базе данных. Для простоты эксперимента я начал с того, чтобы узнать адрес страницы открытой в браузере Internet Explorer. Описываю все свои шаги, потому как не знаю где кроется решение проблемы.
1. Создаю новый проект в Visual Studio, как Win32 Console Application (при создании ставлю галку Empty Project)
2. Далее захожу в свойства проекта и изменяю параметр Character Set на "Not Set"
3. Потом создаю cpp файл со следующим кодом
#include <windows.h>
#include <iostream>
#include <locale.h>
using namespace std;
void main()
{
setlocale(LC_ALL, "rus");
HWND hwnd;
int code_value = 255;
char asciiChar = static_cast<char>(code_value);
char caption[1000]={asciiChar};
hwnd = GetDesktopWindow();
hwnd = FindWindowEx(hwnd, NULL, "IEFrame", NULL);
hwnd = FindWindowEx(hwnd, NULL, "WorkerW", NULL);
hwnd = FindWindowEx(hwnd, NULL, "ReBarWindow32", NULL);
hwnd = FindWindowEx(hwnd, NULL, "Address Band Root", NULL);
hwnd = FindWindowEx(hwnd, NULL, "Edit", NULL);
SendMessage(hwnd, EM_GETLINE, sizeof(caption), (LPARAM)caption);
if (strlen(caption)>0) cout << "Адрес открытой страницы: " << caption << endl;
}
Программа работает, но с некоторой оговоркой - если длина адресной строки страницы больше 254 символов, то строка полученная через SendMessage обрезается до 254.
если вместо кода
int code_value = 255;
char asciiChar = static_cast<char>(code_value);
char caption[1000]={asciiChar};
я пишу просто
char caption[1000]="";
то SendMessage возращает вообще пустую строку. Проблема как я понял зарыта тут
http://msdn.microsoft.com/en-us/library/vstudio/bb761584.aspx, а именно важен текст "A pointer to the buffer that receives a copy of the line. Before sending the message, set the first word of this buffer to the size, in TCHARs, of the buffer. For ANSI text, this is the number of bytes; for Unicode text, this is the number of characters. The size in the first word is overwritten by the copied line."
и возможно еще это " The return value is zero if the line number specified by the wParam parameter is greater than the number of lines in the edit control."
Уважаемые форумчане, подскажите пожалуйста, что мне нужно поправить в программе, чтобы адресная строка целиком попадала в переменную caption?
Сутки мучаюсь, не могу найти решение, а решение скорее всего очень простое.