Я использовал для отправки строк и нажатия клавиш в окне другой программы процедуру SendKeys(handle,window$,keys$), найденную по ссылке:
https://www.purebasic.fr/english/viewtopic.php?t=3766
SendKeys procedure by PB -- do whatever you want with it.
Syntax: r=SendKeys(handle,window$,keys$) ; r = 0 for failure.
Specify either a handle or window$ title to type to, but not both!
You cannot type curly braces { } as part of the keystrokes, sorry!
Эта процедура принимает параметрами или имя чужого окна, или его дескриптор (handle).
Практика показала, что удобнее иногда бывает отправлять строки в чужое окно по его дескриптору (handle), а не по имени окна, которые могут быть одинаковыми у разных открытых окон.
А теперь к ответу на заданный здесь вопрос о списке окон чужих программ.
Список открытых окон, видимых и скрытых, с их именами и дескрипторами (handle) я заполнял процедурой GetAllWindows(), которую увидел в книге "Программирование в PureBasic глазами хакера": "Глава 3. Система, п. 3.1. Работа с чужими окнами", и немного изменил для удобства.
Эту процедуру GetAllWindows() я вызывал из исходной процедуры WindowsList(), сохраняющей список открытых окон в текстовый файл, командой EnumWindows_(@GetAllWindows(), 0)
Процедура GetAllWindows(hWnd, lparam) заполняет два отдельных списка - для видимых и для скрытых окон, которые я потом сортирую по имени окна и записываю оба эти списка в один текстовый файл.
Итак, сначала я объявляю в программе структуру для сохранения списка окон и создаю два списка с типом этой структуры:
А затем в процедуре WindowsList():
Ну, а затем я просто сохраняю эти две текстовые переменные в один текстовый файл с полным списком открытых окон: сначала видимых, а затем скрытых окон, и открываю этот файл для просмотра.
Отредактировано Nemo3001 (16.06.2024 12:41:03)