Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];

Вниз

Поделитесь опытом использования EnumProps   Найти похожие ветки 

 
Artog   (2007-08-18 12:29) [0]

Есть чужая программа с контролом TEdit. Необходимо получит его текст. Я его получаю через WM_GETTEXT, но захотелось узнать, какие еще есть способы получить текст из чужого TEdit. Решил попробовать EnumProps, но не смог разобраться что он возвращает. Может подскажите как работает данная функция (даже если через нее нельзя получить текст из контрола), уже просто интересно, что же она возвращает. Код:

var
 Form1: TForm1;
 h1, h2 : HWND;
 txtLength : dword;
 strX : PChar;
 s : array[0..255] of char;

implementation

{$R *.dfm}

function WinPropProc(Handle: HWND; Prop: longint; hData: integer): BOOL; stdcall;
begin
  if Prop = TAtom(Prop) then begin
         GetMem(strX, 255);
         GlobalGetAtomName(Prop, strX, 255);
      end
      else begin
              GetMem(strX, lstrlen(pchar(Prop)));
              lstrcpy(strX, pchar(Prop));
           end;
  FreeMem(strX);
  Result:= True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  h1 := FindWindow(nil, "FormListBoxStrGrid");
  h2 := FindWindowEx(h1, 0, "TEdit", nil);
  //это работает
  txtLength := SendMessage(h3,WM_GETTEXTLENGTH, 0, 0);
  SendMessage(h3, WM_GETTEXT, txtLength+1, longint(@s));
  //А как должно работать вот это?
  EnumProps(h3, @WinPropProc);
end;

  В WinPropProc получаю две строки: "ControlOfs004....F04" и "Delphi00000F00", а также два атом, но я не смог их преобразовать в строки. Собственно вопрос яуже задавал: как должна работать EnumProps.


 
Leonid Troyanovsky ©   (2007-08-18 15:07) [1]


> Artog   (18.08.07 12:29)

> TEdit. Решил попробовать EnumProps, но не смог разобраться
> что он возвращает. Может подскажите как работает данная
> функция (даже если через нее нельзя получить текст из контрола),
>  уже просто интересно, что же она возвращает.

Возвращает то, что было установлено путем SetProp.
Дельфи записывает туда некоторую служебную информацию
о своем объекте, созданному для управления окном.

См., например, реализацию FindControl.

--
Regards, LVT.


 
Artog   (2007-08-18 16:21) [2]

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


 
Leonid Troyanovsky ©   (2007-08-19 11:04) [3]


> Artog   (18.08.07 16:21) [2]

> Пожалуй, я перефразирую вопрос. Каким образом можно использовать
> информацию, возвращаемую EnumProps? И какие еще существуют
> способы для получения текста из чужого TEdit?

Перефразирую ответ.

Получение информации о TEdit чужого приложения путем GetProp -
гиблый путь, но, если хочешь, то вот тебе для начала:

function GetDelphiControlByHandle(wnd: HWND): TWinControl;
var
 pid: DWORD;
begin
 Win32Check(GetWindowThreadProcessId(wnd, pid) <> 0);
 Result := Pointer(GetProp( wnd,
                            PChar(Format( "Delphi%8.8x",
                                          [pid]))));
end;

Получить (из внедренной длл) текст TEdit может и повезет.

--
Regards, LVT.


 
Юрий Зотов ©   (2007-08-21 02:56) [4]

> Artog   (18.08.07 16:21) [2]

> Каким образом можно использовать информацию,
> возвращаемую EnumProps?

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

VCL пишет туда ссылку на свой объект, но это лишь частный случай.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.046 c
15-1204887995
Igor_
2008-03-07 14:06
2008.04.20
define для определения версии C++ Builder


2-1206612850
nicky000
2008-03-27 13:14
2008.04.20
ConnectDialog


15-1204819301
Пробегал...
2008-03-06 19:01
2008.04.20
Переход по CTRL + клик глючит


2-1206043591
Alex
2008-03-20 23:06
2008.04.20
Отзовитесь те кто работал с BigFloat.pas и UMathServices.pas


2-1206508766
@!!ex
2008-03-26 08:19
2008.04.20
Определить, что текущая раскладка Ru или не Ru





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский