Что нового

Как отловить текст из Grid из чужого окна?

Flame_xXx

Новичок
Сообщения
18
Репутация
0
Здравствуйте!
Пытаюсь получить текст из Grida(из чужого окна). Никак не получается. Форум на наличие похожих тем просматривал, но это все не то. Впринципе
Делал следующее:
Получал хендл грида и по нему пытался выцепить текст функцией _GUICtrlListView_GetItemText
Вот отчет по гриду из Windows Info :
[box title=TitleBox]
>>>> Window <<<<
Title: Удаленные АРМ клиентов
Class: TExecDialog
Position: 503, 178
Size: 1197, 682
Style: 0x16CF0000
ExStyle: 0x00010100
Handle: 0x00870982

>>>> Control <<<<
Class: TExecViewGrid
Instance: 2
ClassnameNN: TExecViewGrid2
Advanced (Class): [CLASS:TExecViewGrid; INSTANCE:2]
ID: 3082628
Text:
Position: 12, 12
Size: 776, 587
ControlClick Coords: 387, 111
Style: 0x54210000
ExStyle: 0x00000200
Handle: 0x002F0984

>>>> Mouse <<<<
Position: 906, 331
Cursor ID: 0
Color: 0xFFFFFF

>>>> StatusBar <<<<

>>>> Visible Text <<<<
Организации
Счета
Счета организации
Счета АРМ
Все организации
Закрыть

Фильтр

Импорт
Сортировка
Поиск


>>>> Hidden Text <<<<
Отчет
СКЗИ
Расширенные права подписи
Количество подписей в документах
Используемые ЭЦП данной организации
Менеджер СКЗИ
Закрыть[/box]
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
qsort сказал(а):
В чем там было дело, я так и не понял, но заработало!

Нельзя получить текст из окна другого процесса до тех пор, пока не "приаттачешь" этот процесс к своему. Вот похожий пример.
 
Автор
F

Flame_xXx

Новичок
Сообщения
18
Репутация
0
Чтобы не было голословно, выложу скрин программки. Может я что то не допонимаю..
Необходимо отловить текст из столбца "@". То есть номер записи.
Методом
Код:
ControlGetText( "Удаленные АРМ клиентов", "",  [CLASS:TExecViewGrid; INSTANCE:2])
тоже пробовал.
Текст вытянуть не получилось
Так же пробовал
Код:
$hEdit  = ControlGetHandle("","","[CLASS:TExecViewGrid; INSTANCE:2]")
$txt = _GUICtrlEdit_GetText($hEdit)
Ссылку Yashied читал, что-то не особо понял :wacko:
 
Автор
F

Flame_xXx

Новичок
Сообщения
18
Репутация
0
qsort, видимо контрол не стандартный :-\
Методом :
Код:
ControlListView("Удаленные АРМ клиентов", "", "[CLASS:TExecViewGrid; INSTANCE:2]", "GetText", 0)
текст не выдергивается :(
Код:
$temp = ControlListView("Удаленные АРМ клиентов", "", "[CLASS:TExecViewGrid; INSTANCE:2]", "GetText",0)
MsgBox(0,$temp,$temp)
Пустой мессаджбокс
Вот я и бьюсь.. Все варианты уже перебрал..
 

e-Mike

Новичок
Сообщения
15
Репутация
1
Помнится, когда-то я писал выдиралку СМСок из окна Mobiledit, и все замечательно работало... Может проблема с указанием ControlID ?
Предлагаю такой вариант:
Код:
$temp1 = ControlListView("Удаленные АРМ клиентов", "", "TExecViewGrid2", "GetSelectedCount")
$temp2 = ControlListView("Удаленные АРМ клиентов", "", "TExecViewGrid2", "GetText", 5, 2)
MsgBox(0, "Найдено " & $temp1 & " записей", "Одно из полученных значений: " & $temp2)
 

e-Mike

Новичок
Сообщения
15
Репутация
1
Видимо в моем примере не хватало выбора записей для подсчета, и для считывания данных. Тогда такой вариант:
Код:
ControlListView("Удаленные АРМ клиентов", "", "TExecViewGrid2", "SelectAll")
$temp1 = ControlListView("Удаленные АРМ клиентов", "", "TExecViewGrid2", "GetSelectedCount")
ControlListView("Удаленные АРМ клиентов", "", "TExecViewGrid2", "SelectClear")
ControlListView("Удаленные АРМ клиентов", "", "TExecViewGrid2", "Select", 0)
$temp2 = ControlListView("Удаленные АРМ клиентов", "", "TExecViewGrid2", "GetSelected", 1)
MsgBox(0, "Найдено " & $temp1 & " записей", "Первая строка значений: " & $temp2)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Flame_xXx
На оф. форуме советуют сделать так.
Я попробовал, у меня работает:
Код:
$hWin = WinWait('Заголовок окна', '', 3)
If Not $hWin Then Exit
ControlSend($hWin, '', 'TsDbGrid1', '{HOME}')
ControlSend($hWin, '', 'TsDbGrid1', '^{HOME}')
For $i = 1 To 5
	ControlSend($hWin, '', 'TsDbGrid1', '^{INSERT}')
	MsgBox(0, 'Строка ' & $i, 'Значение: ' & ClipGet())
	ControlSend($hWin, '', 'TsDbGrid1', '{DOWN}')
Next
Поменяйте мои 'TsDbGrid1' на Ваши 'TExecViewGrid2', может и у Вас будет работать.
 
Автор
F

Flame_xXx

Новичок
Сообщения
18
Репутация
0
e-Mike, Нет так не работает
madmasles, спасибо за предложение, но я этот метод уже пробовал. Проблема в том, что если попробовать вручную скопировать данные при помощи горячих клавиш (Ctrl + C, Ctrl + Insert), то данные в буфер обмена не попадают.
Пришлось немного изменить структуру программы. В принципе, данные выцепить получилось, но уже совсем другим способом, не через грид
 
Верх