Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Эмуляция нажатия комбинаций клавиш [Alt + A] [D6, Win95/98]


Dr. Genius ©   (2005-05-11 20:19:00) 

Как программно эмулировать нажатие комбинаций клавиш [Alt + A] (код клавиши A – $41). И чтобы это сэмулированное нажатие клавиш принял Handle моей формы. В Интернете я нашел много исходников эмуляции нажатия клавиш, но ни одна у меня не заработала. Может быть это из-за того, что сэмулированную комбинацию должна принять моя форма, будучи в скрытом состоянии (Form1.Hide). Не знаю, но как бы то ни было должен быть какой-то способ. Мне нужна точная эмуляция, как если бы пользователь сам вручную нажимал [Alt + A].

И задам еще один вопрос (не хочу открывать для него отдельную тему): как открыть окно свойств папки (Properties), зная полный путь к этой самой папке.


begin...end   (2005-05-26 19:28:00) [1]

> Marser ©   (26.05.05 18:48) [15]

> мне броилось в глаза то, что параметров явно больше одного

Количество параметров функции, вроде бы, ничего не говорит о её функциональности, не так ли?


Игорь Шевченко   (2005-05-26 19:17:00) [2]

Marser ©   (26.05.05 18:48) [15]

Ты б хоть хелп почитал


Marser   (2005-05-26 18:48:00) [3]


> begin...end ©   (26.05.05 18:46) [14] [Новое
>сообщение][Ответить]
>> Marser ©   (26.05.05 18:32) [13]
>
> Ты, может быть, приведёшь код, реализующий задачу [7]
> с помощью ShellExecute, чтобы не быть голословным?

Сейчас немножко не до того, но мне броилось в глаза то, что параметров явно больше одного. Никки тебе наверняка предоставит такой пример.


begin...end   (2005-05-26 18:46:00) [4]

> Marser ©   (26.05.05 18:32) [13]

Ты, может быть, приведёшь код, реализующий задачу [7] с помощью ShellExecute, чтобы не быть голословным?


Marser   (2005-05-26 18:32:00) [5]


> begin...end ©   (15.05.05 13:27) [9] [Новое
>сообщение][Ответить]
>> nikkie ©   (15.05.05 13:11) [8]
>
> Только не ShellExecute, а ShellExecuteEx.

Это как раз ShellExecute. ShellExecuteEx работает с одним параетром(структурой)


Dr. Genius   (2005-05-18 10:10:00) [6]


> begin...end ©   (16.05.05 12:16) [11]


Спасибо! Помогло!


begin...end   (2005-05-16 12:16:00) [7]

> Dr. Genius   (16.05.05 10:41) [10]

Список и назначение параметров ShellExecuteEx описаны в справке по WinAPI. См. Help -> Windows SDK или MSDN.

var
 Info: TShellExecuteInfoA;
begin
 ZeroMemory(@Info, SizeOf(Info));
 with Info do
 begin
   Wnd := MyForm.Handle;
   cbSize := SizeOf(Info);
   lpVerb := 'properties';
   lpFile := 'C:\Windows';
   fMask := SEE_MASK_INVOKEIDLIST
 end;
 ShellExecuteEx(@Info)
end.


Dr. Genius   (2005-05-16 10:41:00) [8]


> Только не ShellExecute, а ShellExecuteEx.


Как обращаться к ShellExecuteEx? Какой у него синтаксис?


begin...end   (2005-05-15 13:27:00) [9]

> nikkie ©   (15.05.05 13:11) [8]

Только не ShellExecute, а ShellExecute Ex.


nikkie   (2005-05-15 13:11:00) [10]

ShellExecute(.. 'properties' ..)


Dr. Genius   (2005-05-15 09:45:00) [11]


> И задам еще один вопрос (не хочу открывать для него отдельную
> тему): как открыть окно свойств папки (Properties), зная
> полный путь к этой самой папке.


Никто не ответит на этот вопрос?


Dr. Genius   (2005-05-12 15:27:00) [12]


> GreatMaster   (12.05.05 08:28) [5]


Спасибо! Помогло!


GreatMaster   (2005-05-12 08:28:00) [13]

Ну, типа так:

жмём Alt:
keybd_event(VK_MENU, 0, 0, 0);

нажание-отпускание A:
keybd_event(VK_A, 32, 0, 0);
keybd_event(VK_A, 32, KEYEVENTF_KEYUP, 0);

отпускаем Alt:
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);


GreatMaster   (2005-05-12 08:27:00) [14]

Ну, типа так:

жмём Alt:
keybd_event(VK_MENU, 0, 0, 0);

нажание-отпускание A:
keybd_event(VK_A, 32, 0, 0);
keybd_event(VK_A, 32, KEYEVENTF_KEYUP, 0);

отпускаем Alt:
keybd_event(VK_MENU, MapVirtualKey(Key, 0), KEYEVENTF_KEYUP, 0);


[wl]   (2005-05-11 22:50:00) [15]

возможно вот эта функция:
BOOL SHObjectProperties(          HWND hwnd,
   DWORD dwType,
   LPCWSTR szObject,
   LPCWSTR szPage
);


Cobalt   (2005-05-11 22:49:00) [16]

по 2-му вопросу - способ известный, очень простой, видел как-то, уже не помню. К папке, или файлу. Поищи на Исходниках (www.sources.ru)

Насчёт 1-го - тут какой-то низкоуровневый способ, не как сообщения, а keybd_event, кажется.


[wl]   (2005-05-11 22:41:00) [17]

могу посоветовать только попробовать WM_SYSKEYDOWN - она Alt-ами заведует, но сам я не пробовал... насчёт того, что скрытая форма не принимает события, я вроде бы не встречал, а если форма видимая, то она принимает это событие? если да, то можно не скрывать форму а поместить её в заоблачные координаты.
окно свойств кажется можно получить с помощью ShellAPI функции, щаз пороюсь в msdn


Наверх

Титульная страница Поиск, карта сайта Написать письмо