2014-12-28 2 views
0

Я пытаюсь прочитать текст значков на рабочем столе с помощью win32gui (я должен использовать win32, потому что мне также нужно получить позиции значков, и они должны соответствовать тексту).ReadProcessMemory читает пустую строку

Я использовал код здесь: Use Python to extract ListView items from another application и он вернул список с пустыми строками. Я попытался проверить коды возврата и другие значения, и все они имеют смысл.

Если элемент управления находится в том же процессе, что и ваш код, он должен работать. Если это происходит в другом процессе (как предполагает «другое приложение»), то это не работает (или, по крайней мере, не должно). Проверьте коды ошибок, вы должны получить что-то в соответствии с «разрешенным разрешением».

Но рабочий стол находится в другом процессе, и у меня нет кодов ошибок!

Чтобы получить дескриптор окна рабочего стола, я использовал функцию get_desktop(), что я писал в разделе решения здесь: How to get desktop item count in python?

Любые идеи? Благодаря!

+0

hmm ... напоминает мне игровой тренажер. –

+0

....... а? ^^ " –

+0

игровые тренеры используют readprocessmemory и writeprocessmemory для взлома игр путем перезаписи памяти. Soo вне темы, но whatevs –

ответ

0

Я нашел ответ! Это была неправильная структура LVITEM.

Структура, которую я использовал, была для 32-битной архитектуры, но мой компьютер 64-разрядный (питон 32 бит, но это не имеет значения).

У этого forum есть ответ сборки. И вот продолжение question, которое содержит структуру в python.

В основном, stateMask поле должно иметь длину 64 бита, и все указатели должны быть также 64 бит длиной (pszText, puColumns и piColFmt), а также lParam. Я не понимаю, почему stateMask должен быть еще 64 бит, но для этого нужен следующий вопрос.

0

Вот пример кого-то с той же проблемой, когда ListView был в другом процессе, поэтому он не может быть прочитан непосредственно:

http://www.xiandg.com/2094118/codep1/get-text-of-lvitem-with-lvmgetitem-and-sendmessage-in-c

Ответ:

Поскольку блок памяти, который содержит текст, принадлежит другому процессу , вам нужно будет вытащить несколько трюков, чтобы вывести текст из процесса в ваш процесс.

Эта процедура подробно описана здесь: http://taylorza.blogspot.com/2009/08/archive-hacking-my-way-across-process.html

+0

Спасибо, но я все еще боюсь, чего не хватает из кода в ссылке Я опубликовал? (Используйте Python для извлечения элементов ListView из другого приложения) –

+0

Мне удалось написать этот блок вручную и прочитать его (блок находится в другом процессе). Таким образом, проблема заключается в SendMessage. –

Смежные вопросы