Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Приложение на второй монитор, Перенос запущенного приложения на 2моник 
:(
    Опции темы
max-@
Дата 28.9.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 8.12.2004
Где: Тольятти

Репутация: нет
Всего: нет



помогите перенести запускаемое приложение на второй вспомогательный монитор средствами хWinAPI

Код

  CreateProcess(nil, 'E:\123.exe', nil, nil, FALSE, CREATE_NEW_CONSOLE, nil, nil, StartupInfo, ProcessInformation);

  GetClassInfoEx(ProcessInformation.hProcess, '', Tmp);

  hnd := FindWindow(Tmp.lpfnWndProc, '');

  //PostMessage(hnd, WM_)



я так понимаю дальше нужно послать прилодению какуюто команду?

Добавлено через 1 минуту и 18 секунд
пробывал 

Код
SetWindowPos(Form1.Handle, 0, 1280, 0, 100, 100, SWP_SHOWWINDOW);


Добавлено через 2 минуты и 55 секунд
за пределы первого монитора не выходит приложение!
PM MAIL WWW   Вверх
Snowy
Дата 28.9.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Код

  MoveWindow(Handle, x, y, width, height, true);

PM MAIL   Вверх
max-@
Дата 28.9.2007, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 8.12.2004
Где: Тольятти

Репутация: нет
Всего: нет



попробывал

у меня разрешение 1280 на 800

указываю так
Код
MoveWindow(Form1.Handle, 1280, 0, 100, 100, true);


переносит в начало главного монитора.

на второй не переходит!
PM MAIL WWW   Вверх
Alix
Дата 28.9.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 3
Всего: 23



отлично работает. просто ты вероятно путаешь мониторы. А если указать вторым аргументом 0?


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
max-@
Дата 28.9.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 8.12.2004
Где: Тольятти

Репутация: нет
Всего: нет



X := 0;

так тоже остается на первом мониторе!

Добавлено через 2 минуты и 53 секунды
Код

procedure TForm1.FormShow(Sender: TObject);
begin
  MoveWindow(Form1.Handle, 0, 0, 100, 100, true);
end;


вот так не работает, что не так делаю?

Добавлено через 5 минут и 18 секунд
Может я не правильно бьяснил суть проблемы?

есть два монитора, при компиляции проекта приложение отображается на главном...а мне нужно чтобы оно отображалось на втором (вспомогательном)...причем средствами winapi это нужно реализовать!
PM MAIL WWW   Вверх
Rennigth
Дата 28.9.2007, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



В VCL это организовано так:
Код

  SetWindowPos(FHandle, 0, ALeft, ATop, AWidth, AHeight,
     SWP_NOZORDER + SWP_NOACTIVATE)

Посмотри что у тебя Screen.Monitors[1].Left. И вообще сколько мониторов показывает.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
max-@
Дата 28.9.2007, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 8.12.2004
Где: Тольятти

Репутация: нет
Всего: нет



ОООООООООООО отлично получилось!

Но возник другой вопрос, а если у меня разрешение другое на первом или например второй стоит не справа относительно первого а слева!

Добавлено @ 14:34
Можно ли послать команду чтобы приложение перешло не по X и Y а по номеру монитору с списке?

Подобно вот этой но тольrко в winapi
Код
MakeFullyVisible(Screen.Monitors[1]);


Это сообщение отредактировал(а) max-@ - 28.9.2007, 14:34
PM MAIL WWW   Вверх
Rennigth
Дата 28.9.2007, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



дык у Screen.Monitors[X] есть left, top и т.д. или тебе Screen оюъект нельзя использовать?


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Snowy
Дата 28.9.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Вот настрочил код, который собирает информацию о мониторах в системе.
Код

type
  TMonInfo = record
    h:  THandle;
    dc: HDC;
    r:  TRect;
  end;

var
  MonList: array of TMonInfo;

implementation

function EnumDisplayMonitors(dc: HDC; rect: PRect; EnumProc: pointer; lData: LPARAM): BOOL; stdcall; external user32;
function MonitorEnumProc(hMonitor: THandle; hdcMonitor: HDC; lprcMonitor: DWORD; dwData: LPARAM): BOOL; stdcall;
type PRect = ^TRect;
var c: integer;
begin
  c := High(MonList)+1; SetLength(MonList, c+1);
  MonList[c].h := hMonitor;
  MonList[c].dc := hdcMonitor;
  MonList[c].r := PRect(lprcMonitor)^;
  result := true;
end;

initialization
  EnumDisplayMonitors(0, nil, Addr(MonitorEnumProc), 0);

finalization

end.

при запуске перебирает все мониторы, определяет их параметры и заносит в MonList.
Пример работы с MonList на VCL (просто на VCL проще).
Код

procedure TForm1.btn1Click(Sender: TObject);
var i: Integer;
begin
  memo1.Clear;
  for i := 0 to High(MonList) do
  with MonList[i] do
  begin
    memo1.Lines.Add('Monitor #' + IntToStr(i));
    memo1.Lines.Add('hMon:  ' + IntToHex(h, 0));
    memo1.Lines.Add('HDC:   ' + IntToHex(dc, 0));
    memo1.Lines.Add('Left:  ' + IntToStr(r.Left));
    memo1.Lines.Add('Top:   ' + IntToStr(r.Top));
    memo1.Lines.Add('Right: ' + IntToStr(r.Right));
    memo1.Lines.Add('Bott:  ' + IntToStr(r.Bottom));
    memo1.Lines.Add('');
  end;
end;


Добавлено через 3 минуты и 41 секунду
Можно конечно и Screen использовать.
Но ты ж просил на API  smile 
PM MAIL   Вверх
max-@
Дата 28.9.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 8.12.2004
Где: Тольятти

Репутация: нет
Всего: нет



о огромное спасибо сейчас потестю!

Добавлено через 10 минут и 24 секунды
Спасибо, всем.

Благодарю за код Snowy  smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1094 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.