Мне не хватало сна, поэтому я просто супер, убивая это.Как читать память у указателя (local_tbb.dwData), чтобы получить дескриптор окна
То, что я пытаюсь сделать, это получить дескриптор из окна с панели задач. После этого учебника здесь: http://www.codeproject.com/Articles/10497/A-tool-to-order-the-window-buttons-in-your-taskbar. Это специфическая часть:
Получение оконную ручку
Это было действительно повезло часть. Я подумал про себя: «Где бы я держать ручку окна?». Они должны держать их где-нибудь, чтобы активировать правильное окно при выборе кнопки . очевидное место для сохранения было бы в структуре для каждой кнопки, а очевидным местом для хранения указателя на эту структуру было бы в поле dwData каждого TBBUTTON.
Итак, я взглянул на поля dwData, и они оказались указателями. До сих пор. Затем я посмотрел на память, на которую они указывали, и вот они: первое поле хранит ручку окна Smile | :))) Разработчики Microsoft не такие разные, ведь Smile | :)
Так что я успешно получить кнопку на панели задач, как это:
в любом случае это, как я получаю local_tbb:
remote_tbb = ralloc_alloc(struct_TBButton.size);
var rez = SendMessage(hToolbar, TB_GETBUTTON, i, ctypes.voidptr_t(remote_tbb));
if (!rez) { throw new Error('Failed on SendMessage of TB_GETBUTTON'); }
var local_tbb = new struct_TBButton();
var retRead = ralloc_read(remote_tbb, local_tbb.address());
var freed = ralloc_free(remote_tbb);
console.log('freed', freed);
for (var n in local_tbb) {
console.log(n, local_tbb[n]);
try {
console.log('toString', n, local_tbb[n].toString());
} catch (ignore) {}
}
и успешно получить dwData
поле заполняется. Из этого console.log
, когда он делает это на dwData
:
"dwData" UInt64 { }
"toString" "dwData" "1499288"
Так что теперь я хочу делать то, что говорит, что парень и Then I had a look at the memory they pointed to
. Поэтому я пытаюсь это сделать.
Так что я знаю, что я должен сделать что-то вроде этого, но то, что команда IPC должна идти в SendMessage
(в настоящее время я использую 0x004A /** WM_COPYDATA **/
, но это не может быть правильным), и где я должен поставить в local_tbb.dwData
в качестве адреса?
var remote_hwnd = ralloc_alloc(ctypes.voidptr_t.size);
var smHwndRez = SendMessage(hToolbar, 0x004A /** WM_COPYDATA **/, local_tbb.idCommand, ctypes.voidptr_t(remote_hwnd));
console.log('smHwndRez=', smHwndRez);
var local_hwnd = ctypes.voidptr_t;
var retRead = ralloc_read(remote_hwnd, local_hwnd.address());
console.log('retRead=', retRead);
var freed = ralloc_free(remote_hwnd);
console.log('freed=', freed);
console.log('local_hwnd = ', local_hwnd, local_hwnd.toString(), uneval(local_hwnd));
Вы действительно должны быть более конкретными в своих вопросах, и после повторного, производимая минимальные примеры кода. Люди закрывают этот вопрос, потому что «Неясно, что вы просите», и я не могу сказать, что я их виню. Хотя я * думаю * Я понимаю ваш вопрос, но это только так, потому что я читал ваши другие вопросы раньше (и мне не нравится гадать, так или иначе). Пожалуйста, перепишите свой вопрос, чтобы люди могли его понять (например, вы должны упомянуть, что используете WINAPI из Firefox js-ctypes, поэтому обычные пользователи WINAPI не путаются, а WTF - 'ralloc_alloc' , и т. д.) – nmaier
А, ладно, я сейчас поработаю над этим. Это мой код, который может работать в блокноте (копировать/вставлять), но трудно сделать минимальное количество его, которое можно воспроизвести. :([GitHubGist :: _ff-addon-snippet-GetHandleFromTBB] (https://gist.github.com/Noitidart/1fc56b28be82d45a245d) Я прокомментировал часть дескриптора get, потому что так плохо, что комментарий начинается в строке 238. – Noitidart