Допомагаємо ЗСУ!

не пашет TBGETBUTTONINFO

🔴 08:29 Повітряна тривога в Харків.обл.
Статус: Offline
Реєстрація: 22.06.2007
Повідом.: 1661
  • 🔴 08:29 Повітряна тривога в Харків.обл.
  • #1
не пашет 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 - то же самое.
В гугле пока решение не нашлось.
Может кто подскажет, что я неправильно делаю, или хоть посоветует в какую сторону копать.
 
  • 🔴 08:29 Повітряна тривога в Харків.обл.
  • #2
Что под семеркой говорит GetLastError? Отсюда и нужно плясать
 
  • 🔴 08:29 Повітряна тривога в Харків.обл.
  • #3
Что под семеркой говорит GetLastError? Отсюда и нужно плясать
Ничего не говорит. Остаётся старое значение. Если перед SendMessage сделать SetLastError(0), то так и остаётся ноль. Да оно в общем-то и не должно ничего говорить.
 
  • 🔴 08:29 Повітряна тривога в Харків.обл.
  • #4
Я бы проверил результат WriteProcessMemory (успешна ли запись в процесс).
Плюс, не следуюет забывать, что если сам процесс с тулбаром х64, а ваш х86, то размеры структур TBBUTTONINFO у них разные.
 
Останнє редагування:
  • 🔴 08:29 Повітряна тривога в Харків.обл.
  • #5
Я бы проверил результат WriteProcessMemory (успешна ли запись в процесс).
успешна, проверялось в первую очередь.
Плюс, не следуюет забывать, что если сам процесс с тулбаром х64, а ваш х86, то размеры структур TBBUTTONINFO у них разные.
Да, в этом и было дело, ночью докопался. В структуре есть указатели, и для x64 приложения они в два раза больше. Сделал свою структуру с int64 вместо указателей, и всё заработало.
 
  • 🔴 08:29 Повітряна тривога в Харків.обл.
  • #6
Да, в этом и было дело, ночью докопался. В структуре есть указатели, и для x64 приложения они в два раза больше. Сделал свою структуру с int64 вместо указателей, и всё заработало.

:пиво:
 
Назад
Зверху Знизу