Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

Эмуляция нажатия комбинаций клавиш   Найти похожие ветки [Alt + A]

 
Dr. Genius   (2005-05-11 20:19) [0]

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

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


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

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


 
Cobalt ©   (2005-05-11 22:49) [2]

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

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


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

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


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

Ну, типа так:

жмём 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);


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

Ну, типа так:

жмём 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);


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


> GreatMaster   (12.05.05 08:28) [5]


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


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


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


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


 
nikkie ©   (2005-05-15 13:11) [8]

ShellExecute(.. "properties" ..)


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

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

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


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


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


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


 
begin...end ©   (2005-05-16 12:16) [11]

> 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-18 10:10) [12]


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


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


 
Marser ©   (2005-05-26 18:32) [13]


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

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


 
begin...end ©   (2005-05-26 18:46) [14]

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

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


 
Marser ©   (2005-05-26 18:48) [15]


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

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


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

Marser ©   (26.05.05 18:48) [15]

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


 
begin...end ©   (2005-05-26 19:28) [17]

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.038 c
3-1115201790
Shaman_Naydak
2005-05-04 14:16
2005.06.14
Хозяюшке На Заметку (ХНЗ). Баг MSSQL 2000


14-1116707198
Gamer
2005-05-22 00:26
2005.06.14
CD-ROM => CD-Player


14-1116788413
Qwertyk
2005-05-22 23:00
2005.06.14
Тотализаторы(попытка № 2 :) )


6-1111724084
Ozone
2005-03-25 07:14
2005.06.14
Полное описание протокола SMTP


4-1114175557
ANB
2005-04-22 17:12
2005.06.14
Как включить/выключить конкретный элемент TCheckListBox