Официальный сайт студ.городка НГТУ
Программирование и БД » Подскажите в дельфи 

#1  04.05.07 02:35

Подскажите в дельфи

Не могу вспомнить функцию, чтоб переключиться на другое окно в винде. Подскажите плз

Offline

#2  04.05.07 10:53

rzk
Профиль

Re: Подскажите в дельфи

типа form.show?

Offline

#3  04.05.07 12:13

Re: Подскажите в дельфи

rzk, не, помойму не это. Там указываеш имя окна и фокус переключается на него.

Offline

#4  04.05.07 12:14

Re: Подскажите в дельфи

Mozg_RUS, спасибо, думаю это пойдет ;)

Offline

#5  05.05.07 00:40

Re: Подскажите в дельфи

А и вот еще тут проблемка... Нигде не смог найти как непосредственно передать команду нажатия кнопки. Чтобы это выглядело как будто юзер сам нажимает кнопки и тыкает мышкой.
з.ы. плиз, если можно, скажите для мыши и для клавы)

Offline

#6  05.05.07 00:42

Re: Подскажите в дельфи

LRESULT SendMessage(          HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
);

Offline

#7  05.05.07 00:49

Re: Подскажите в дельфи

эээ, даже не представляю что такое

Fatboy написал(а):

UINT Msg,
    WPARAM wParam,
    LPARAM lParam

первое то оно ясно, на окно указвает, а вот остальное...
з.ы. справка не рулит(

Исправлено SaveNET (05.05.07 01:00)

Offline

#8  05.05.07 01:54

Re: Подскажите в дельфи

SendMessage  это апи-функция, поэтому ее описнаие должно быть в справке. А то, что написал я, взято из МСДН.

Offline

#9  05.05.07 02:00

Re: Подскажите в дельфи

Ух разобрался немного) Подскажите второй параметр для отправки нажатия кнопки плиз
з.ы. вы неподумайте что спрашиваю не поискав, ипу моск уже 5 часов)

Offline

#10  05.05.07 02:23

Re: Подскажите в дельфи

Спасибо парни большое! Выручили) Делфи Ворлд ваще тема)))

Offline

#11  05.05.07 14:42

Re: Подскажите в дельфи

Ох еще одна проблемка(наверно уже достал)
По некоторым причинам через апи не  могу сделать, нашел код на ассемблере:

Код::

procedure EmulateKey(Wnd: HWND; VKey: Integer);
asm
   push 0
   push edx
   push 0101H //WM_KEYUP
   push eax
   push 0
   push edx
   push 0100H //WM_KEYDOWN
   push eax
   call PostMessage
   call PostMessage
end;

но это только для клавы. Подскажите как такой же сделать для мыши, ато ассемблер я вообще не знаю(

Offline

#12  05.05.07 15:58

Maq
Профиль

Re: Подскажите в дельфи

{Эмуляция нажатия клавиши с клавиатуры}
procedure SetKey(const Key: Byte);
begin
  try
    keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
    keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY,0);
    keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
  except
  end;
end;

далее по мышке:


// Эмуляция нажатия левой кнопки

mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

// Эмуляция нажатия правой кнопки
{
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
}
// Эмуляция двойного клика
{
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}

//Симуляция левого клика по объекту чей Handle ты знаешь
{
SendMessage(Handle, WM_LBUTTONDOWN, 0,0);
SendMessage(Handle, WM_LBUTTONUp, 0,0);
}


можно и координаты клика задавать, но эт чуть посложнее))

а вообще советую если ты эмулируешь нажатие клавиши в определенной форме, то и отправляей только ей, а не всей системе.

Offline

#13  05.05.07 16:57

Re: Подскажите в дельфи

Не, я конечно понимаю по SendMessage все хорошо и прекрасно, только не работает это в моем случае. Не знаю в чем дело конкретно, наверно там есть дочерние окна или еще что-то. Короче работает только по коду написаному выше, на ассемблере. Вот мне и надо такой же для мыши

Offline

#14  05.05.07 18:48

Maq
Профиль

Re: Подскажите в дельфи

гон, это одно и тоже фактически.
на на что хочешь сделать клик мыши?

Offline

#15  05.05.07 19:10

Re: Подскажите в дельфи

Maq написал(а):

гон, это одно и тоже фактически.

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

Offline

#16  05.05.07 19:26

Maq
Профиль

Re: Подскажите в дельфи

значит надо вычислять хенд нужного окна/объекта, способов уйма

кстати если просто клик нужен, чем плох:

mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

??

Offline

#17  05.05.07 19:58

Re: Подскажите в дельфи

скажи, какую задачу решаешь, может сумеем подсказать как без кликов обойтись?

Offline

#18  05.05.07 20:02

Re: Подскажите в дельфи

но скажу одно замечание: не пытайся эмулировать нажатие клавиш клавиатуры и мыши SendMessage'ом, для этого есть SendInput!
SendMessage'ом конечно можно, но нереально сложно повторить нужные сообщения нужным окнам, какие посылаются при реальном нажатии на клавиши. там ведь не только результирующему окну сообщение идет.
А SendInput эмулирует реальное нажатие клавиш

Offline

#19  05.05.07 21:05

Re: Подскажите в дельфи

Ну задача секретная ;) Без кликов никак и хенд окна ОЧЕНЬ наврятли удастся выяснить) Скажу одно, что прога на один раз, под один конкретный случай и мне неважно как она будет работать. С клавой уже разобрался, осталась мишь

Offline

#20  05.05.07 22:49

Re: Подскажите в дельфи

Эх, придется наверно с пивом идти к кому нить)

Offline

Программирование и БД » Подскажите в дельфи 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.195 сек.
Выполнено 11 запросов.