3000 грн на місяць

не пашет TBGETBUTTONINFO

  • Автор теми Автор теми Jogger
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 22.06.2007
Повідом.: 1657
не пашет TBGETBUTTONINFO

Раз уж раздел называется "Программирование" то вопреки традициям задам вопрос по программированию.
Итак, ситуация - есть примерно такой код:
Код:
TBBUTTONINFO mtbbi;
HWND hwnd;
HANDLE hProc;
DWORD dwProcessID;
void* lpData;

.....

GetWindowThreadProcessId(hwnd, &dwProcessID);
hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, dwProcessID);
lpData = VirtualAllocEx(hProc , 0, sizeof(TBBUTTONINFO), MEM_COMMIT, PAGE_READWRITE);
memset(&mtbbi,0,sizeof(mtbbi));
mtbbi.cbSize=sizeof(TBBUTTONINFO);
mtbbi.dwMask=TBIF_BYINDEX|TBIF_LPARAM;	
WriteProcessMemory(hProc,lpData,&mtbbi,sizeof(TBBUTTONINFO),&dwBytesRead);
SendMessage(hwnd, TB_GETBUTTONINFO, 0, (LPARAM)lpData);
ReadProcessMemory(hProc, lpData, &mtbbi, sizeof(TBBUTTONINFO), &dwBytesRead);

где hwnd - хендл тулбара с кнопками. Хендл правильный, другие сообщения (например TB_BUTTONCOUNT или TB_GETBUTTON) до него доходят.
И вот трабла - под WinXP это всё прекрасно работает, а под Win7 x64 - SendMessage возвращает -1, что свидетельствует об ошибке. Пробовал вместо GETBUTTONINFO посылать GETBUTTONINFOA - то же самое.
В гугле пока решение не нашлось.
Может кто подскажет, что я неправильно делаю, или хоть посоветует в какую сторону копать.
 
Что под семеркой говорит GetLastError? Отсюда и нужно плясать
 
Что под семеркой говорит GetLastError? Отсюда и нужно плясать
Ничего не говорит. Остаётся старое значение. Если перед SendMessage сделать SetLastError(0), то так и остаётся ноль. Да оно в общем-то и не должно ничего говорить.
 
Я бы проверил результат WriteProcessMemory (успешна ли запись в процесс).
Плюс, не следуюет забывать, что если сам процесс с тулбаром х64, а ваш х86, то размеры структур TBBUTTONINFO у них разные.
 
Останнє редагування:
Я бы проверил результат WriteProcessMemory (успешна ли запись в процесс).
успешна, проверялось в первую очередь.
Плюс, не следуюет забывать, что если сам процесс с тулбаром х64, а ваш х86, то размеры структур TBBUTTONINFO у них разные.
Да, в этом и было дело, ночью докопался. В структуре есть указатели, и для x64 приложения они в два раза больше. Сделал свою структуру с int64 вместо указателей, и всё заработало.
 
Назад
Зверху Знизу