Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2013, 10:34   #1
Le0n4iko_o
Пользователь
 
Аватар для Le0n4iko_o
 
Регистрация: 11.08.2013
Сообщений: 77
Печаль Перемещение мыши по координатам чужого окна

Добрый день господа программисты, возник такой вопрос.
Есть определенное окно , например notepad

Код:
var  
Window:HWND;
X,Y : integer;
begin
Window := FindWindow(nil,'notepad');// находим по заголовку
if Window <>0 then begin
SetForegroundWindow(window); // Делаем поверх окон
далее нужно по координатам x,y переместить курсор
x:=100;
y:=300;
SetCursorPos(x,y);
Дело в том что курсор переместится по экрану
слышал что нужно применять ClientToScreen но чет не понимаю как .
Подскажите пожалуйста

Последний раз редактировалось Le0n4iko_o; 11.08.2013 в 13:58.
Le0n4iko_o вне форума Ответить с цитированием
Старый 11.08.2013, 13:20   #2
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Первое, что нужно сделать, это установить на окно фокус. Функция SetFocus.
Второе перемещаешь. CursorPos(x,y).
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 11.08.2013, 14:10   #3
Le0n4iko_o
Пользователь
 
Аватар для Le0n4iko_o
 
Регистрация: 11.08.2013
Сообщений: 77
По умолчанию

Зачем устанавливать фокус , если я делаю его активным
Код:
Window := FindWindow(nil,'БотКлючи.txt - WordPad');// находим по заголовку
if Window <>0 then begin
//SetForegroundWindow(Window); // Делаем поверх окон
Sleep(100);
Windows.SetFocus(Window);
x:=100;
y:=300;

SetCursorPos(x,y);
кстати попробовал с фокусом окно не активно

Последний раз редактировалось Le0n4iko_o; 11.08.2013 в 14:13.
Le0n4iko_o вне форума Ответить с цитированием
Старый 11.08.2013, 15:41   #4
Le0n4iko_o
Пользователь
 
Аватар для Le0n4iko_o
 
Регистрация: 11.08.2013
Сообщений: 77
По умолчанию

что никто не знает Оо ?
Le0n4iko_o вне форума Ответить с цитированием
Старый 11.08.2013, 16:30   #5
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Вот функции из моего мини VCL. Немного поправишь под свою задачу и пользуйся.

Код:
function TCustomWindow.ClientToScreenRect(const ARect: TRect): TRect;
var
  Point: TPoint;
begin
  with Point, ARect do
  begin
    X := Left;
    Y := Top;
  end;

  ClientToScreen(Parent, Point);

  with Result, Point do
  begin
    Left := X;
    Top := Y;
  end;

  with Point, ARect do
  begin
    X := Right;
    Y := Bottom;
  end;

  ClientToScreen(Parent, Point);

  with Result, Point do
  begin
    Right := X;
    Bottom := Y;
  end;
end;

function TCustomWindow.ScreenToClientRect(const ARect: TRect): TRect;
var
  Point: TPoint;
begin
  with Point, ARect do
  begin
    X := Left;
    Y := Top;
  end;

  ScreenToClient(Parent, Point);

  with Result, Point do
  begin
    Left := X;
    Top := Y;
  end;

  with Point, ARect do
  begin
    X := Right;
    Y := Bottom;
  end;

  ScreenToClient(Parent, Point);

  with Result, Point do
  begin
    Right := X;
    Bottom := Y;
  end;
end;
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 11.08.2013, 18:37   #6
Le0n4iko_o
Пользователь
 
Аватар для Le0n4iko_o
 
Регистрация: 11.08.2013
Сообщений: 77
По умолчанию

Оо не совсем понимаю что тут происходит =(
Можно на моем примере ? Буду очень признателен
Le0n4iko_o вне форума Ответить с цитированием
Старый 11.08.2013, 19:08   #7
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Код:
var
  WindowName:string;
  WindowRect : TRect;
  WindowHandle : HWND;
  CursorXpos,CursorYpos: Integer;
begin
  WindowName := Edit1.Text; //Заголовок окна, например "Form1"
  WindowHandle := FindWindow(nil,PChar(WindowName));

  windows.GetWindowRect(WindowHandle,WindowRect);

  memo1.Clear;
  memo1.Lines.Add('window left pos: ' + IntToStr(WindowRect.Left));
  memo1.Lines.Add('window top pos: ' + IntToStr(WindowRect.Top));

  CursorXpos := StrToInt(Edit2.Text);//Х
  CursorYpos := StrToInt(Edit3.Text);//Y

  SetCursorPos(WindowRect.Left + CursorXpos, WindowRect.Top + CursorYpos);

  memo1.Lines.Add('cursor final position: ' + IntToStr(WindowRect.Left + CursorXpos) + ',' + IntToStr(WindowRect.Top + CursorYpos));
Lime вне форума Ответить с цитированием
Старый 11.08.2013, 19:25   #8
Le0n4iko_o
Пользователь
 
Аватар для Le0n4iko_o
 
Регистрация: 11.08.2013
Сообщений: 77
По умолчанию

Lime Огромное спасибо , выручил!
zumm спасибо за отклик
Le0n4iko_o вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получить хэндл окна по координатам Slippy Win Api 1 24.08.2011 07:47
Сворачивание чужого окна artemavd Общие вопросы Delphi 2 27.04.2010 07:45
Перемещение курсора мыши UNREALcv Помощь студентам 1 11.04.2010 11:39
VirtualStringTree чужого окна akaTemporary Общие вопросы Delphi 0 29.01.2010 14:32
курсор мыши у чужого окна STRELOK-2007 Общие вопросы Delphi 1 06.08.2009 23:17