Сведения о вопросе

Killer

19:39, 15th August, 2020

Теги

Delphi    

Как программно нажать checkbox внутри SysListView32 в чужом приложении?

Просмотров: 414   Ответов: 3

Есть чужое приложение, одно из окон которого выглядит так:

ad909a6b2fa411c46ac7e4c77d092841.png


Мне нужно программно снять галочку с checkbox'ов внутри этого списка.

Handle окна и handle списка уже получил, а что делать дальше? Как добраться до этих checkbox'ов?


Программа пишется на Delphi.

// ищем окно с заголовком &quot;Select Tools&quot;<br/>
SelectToolsHandle:=GetWindowHandle('Select Tools');<br/>
if (SelectToolsHandle &lt;&gt; 0) then begin<br/>
 // ищем список<br/>
 SysListHandle:=FindWindowEx(SelectToolsHandle, 0, 'SysListView32', nil);<br/>
 if (SysListHandle &lt;&gt; 0) then begin<br/>
 showmessage(IntToStr(SysListHandle)); // handle списка получен<br/>
 // Что же дальше делать?(<br/>
 end;<br/>
end;<br/>



  Сведения об ответе

SEEYOU

13:11, 9th August, 2020

Варианта два:

1. Либо эмулировать нажатия клавиш\мыши, что есть плохо.

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


  Сведения об ответе

appple

10:26, 16th August, 2020

Думаю это то, что вы ищите:


  Сведения об ответе

ЯЯ__4

05:09, 16th August, 2020

Всем спасибо, немного обошел стороной проблему, заметил, что галочка снимается, если на выделенном пункте нажать Пробел. Поэтому получил текст всех итемов из списка, в этом помогла следующая статья:
http://www.ddsoft.hoha.ru/notes/lvmgetitem/
А после этого просто выделял нужный пункт и эмулировал нажатие пробела, в этом помог следующий код:
http://www.delphisources.ru/forum/showthread.php?t=8592


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться