использование функции WinAPI ChildWindowFromPoint

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

использование функции WinAPI ChildWindowFromPoint

Сообщение ujif » 06.04.2015 15:00:31

на форме одна кнопка ,в Редакторе такой код

Код: Выделить всё
type
.......
   public
procedure SendChar;
........
implementation

procedure TForm1.Button2Click(Sender: TObject);
begin
SendChar;
end;

procedure TForm1.SendChar(Sender: TObject);
var
  wnd: HWND;
  child: integer;
begin
  { Находим дескриптор открытого окно приложения "Блокнот" }
  wnd:= FindWindow('Notepad', nil);
  { Находим поле ввода текста }
  child:= ChildWindowFromPoint(wnd, point(50, 50));
  { Посылаем символ в поле ввода (букву А) }
  SendMessage(child, WM_CHAR, Ord('A'), 0);
end;


пытаюсь в окно блокнота записать букву 'A' , в Delphi все нормально, но в
Lazarus указываем на место после первого параметра Point и пишет
ожидается ")" ,но найдена запятая
вот и вопрос конкретный,
Как с помощью функции WinAPI из программы ,послать символ
в открытое окно блокнота?

Добавлено спустя 41 минуту 14 секунд:
подсказали добрые люди ,что нужно так написать
Classes.Point(50,50) ..теперь компилируется все ,но
буква в Блокнот все равно не приходит
ujif
новенький
 
Сообщения: 40
Зарегистрирован: 04.07.2013 23:37:35

Re: использование функции WinAPI ChildWindowFromPoint

Сообщение Ism » 06.04.2015 17:02:12

Лучше не использовать win api в lazarus, теряется смысл его использования. Также при использовании виндовского api проблемы с кодировкой и преобразованиями картинок

Найдите замену этой функции штатными средствами lazarus
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: использование функции WinAPI ChildWindowFromPoint

Сообщение eastorwest » 06.04.2015 19:42:05

Проверил ваш код с учетом добавления Classes.Point(50,50) на Windows 8.0. Заработало все и сразу.
eastorwest
новенький
 
Сообщения: 57
Зарегистрирован: 23.07.2009 20:21:46
Откуда: Н-ск

Re: использование функции WinAPI ChildWindowFromPoint

Сообщение ujif » 06.04.2015 19:51:08

Ism писал(а): Найдите замену этой функции штатными средствами lazarus


Вы правы Уважаемые Ism ,спасибо за поддержку
все же нашлось решение

Код: Выделить всё

procedure TForm1.Button2Click(Sender: TObject);
begin
SendChar;
end; 

rocedure TForm1.SendChar;
var Wnd: hWnd;
      child: integer;
           s: string;
begin
    s:= 'Hello';

//находим главное окно приложения
  WinExec('Notepad', SW_Restore);// открываем новый блокнот
  Wnd:= FindWindow('notepad',nil);// находим дескриптор окна   
 
//находим поле ввода текста
  child:= ChildWindowFromPoint(Wnd,Classes.Point(0,0));

  SendMessage(Child, WM_CHAR, ord('A'), 0);//посылаем символ в поле ввода(букву А)
  SendMessage(Child, EM_REPlacesel, 0, lparam(PChar(S)));//посылаем слово 'Hello'

end;       
ujif
новенький
 
Сообщения: 40
Зарегистрирован: 04.07.2013 23:37:35


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 230

Рейтинг@Mail.ru