Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Получение данных с формы


Автор: A11MaNi 5.4.2008, 17:28
Помогите, пожалуйста, с решением задачи...

Есть приложение в statusbar'е которого отображаются два значения.

Есть ли возможность извлечь(скопировать) эти значения на форму моей программы?
Значения эти постоянно обновляются...
Не могу найти ничего полезного по темеПомогите, пожалуйста, с решением задачи...

Есть приложение в statusbar'е которого отображаются два значения.

Есть ли возможность извлечь(скопировать) эти значения на форму моей программы?
Значения эти постоянно обновляются...
Не могу найти ничего полезного по теме

Автор: MetalFan 5.4.2008, 17:47
читай MSDN на тему SB_GETTEXT.
надо только найти хэндл статусбара.

Автор: A11MaNi 6.4.2008, 09:47
хэндл я знаю.

Добавлено через 14 минут и 39 секунд
Class - msctls_statusbar32
Handle - 00020346

Автор: Mayk 6.4.2008, 10:04
В зависимости от того какой текст читается, может  потребовать выделить память в чужом процессе а потом скопировать её себе.
Про статус бар ничего точно не скажу, но для чтения с listview это так делается: http://www.codeproject.com/KB/threads/int64_memsteal.aspx.
ps. правда это для си и чистых винапи, есть ли в дельфи что поспециальнее -- smilen

Автор: A11MaNi 6.4.2008, 13:28
Ээээ в сях я не разбераюсь...

Автор: MetalFan 6.4.2008, 20:19
есть примеры "залазанья" в память чужого процесса.
ищи по OpenProcess, VirtualAllocEx, VirtualFreeEx

Автор: Igor22 30.11.2010, 07:43
вот выдираю статус из Internet Explorer !!! всё просто.

Код

function getbartext(): string;
var
  lpBuffer: PChar;
  lWndHandle: DWord;
begin

  lWndHandle := FindWindowEx(0, 0, 'IEFrame', nil);
  lWndHandle := findwindowex(lWndHandle, 0, 'Frame Tab', nil);
  lWndHandle := findwindowex(lWndHandle, 0, 'TabWindowClass', nil);
  lWndHandle := findwindowex(lWndHandle, 0, 'msctls_statusbar32', nil);

  lpBuffer := GetMemory(1024);
  try
    SendMessage(lWndHandle, WM_GETTEXT, 1024, Integer(lpBuffer));
  finally
    FreeMemory(lpBuffer);
  end;

  result := (string(lpBuffer));
end;


а кто нибудь знает как выдрать текст из строки состояние в опере (opera) !????

Автор: RockClimber 30.11.2010, 14:19
Цитата(Igor22 @  30.11.2010,  07:43 Найти цитируемый пост)
а кто нибудь знает как выдрать текст из строки состояние в опере (opera) !????

Если ты легко выдираешь из IE, в чем проблема с оперой? Ответ "В опере нет окна класса msctls_statusbar32" не принимается.
Я больше в теории знаю.
Теоретически, есть API функция перечисления окон. Есть функция перечисления дочерних окон. Находим окно оперы, находим ее дочерние окна, находим в них строку состояния, берем оттуда данные. В DRKB был пример по работе с дочерними окнами.

Автор: Snowy 30.11.2010, 14:31
У Оперы нет дочерних окон.
У неё есть одно окно.
Всё, что в нём - нарисовано.
Нет ни кнопок, ни меню, ни списков, ни прочих элементов.
Это всё одна большая картинка.
Так что фиг что из неё вытащишь стандартными способами.

Автор: Igor22 30.11.2010, 15:52
пока нашел 2 варианта:

1. это скринить и распозновать текст по буквам (изпользовать шаблон X:Y для каждой буквы)

2. использовать расширение для оперы. Написать на языке UserJS функцию которая при наведении на ссылку копирует в будет обмена урл...  но я чето ничего не понимаю как это расширение для оперы писать.

думаю 2 вариант будет по удачнее. только как реализовать это расширение ??? если кто умеет работать напишите!!! 

вот нашел как юзать расширение в опере 11 !!
http://habrahabr.ru/blogs/opera/106609/

Автор: RockClimber 3.12.2010, 20:00
Цитата(Snowy @  30.11.2010,  14:31 Найти цитируемый пост)
У неё есть одно окно.Всё, что в нём - нарисовано.

Опа... Интересный подход. И что, и панели и меню тоже?

Автор: Igor22 4.12.2010, 05:37
Цитата(RockClimber @ 3.12.2010,  20:00)
Цитата(Snowy @  30.11.2010,  14:31 Найти цитируемый пост)
У неё есть одно окно.Всё, что в нём - нарисовано.

Опа... Интересный подход. И что, и панели и меню тоже?

ага, никак не захамутать =))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)