Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

Эмуляция нажатия комбинаций клавиш   Найти похожие ветки [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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.055 c
3-1115573104
anton_m
2005-05-08 21:25
2005.06.14
вопрос по SQL


1-1117542941
Леха
2005-05-31 16:35
2005.06.14
Присвоение значений Edit через цикл


14-1116945369
DiamondShark
2005-05-24 18:36
2005.06.14
Лучше день потерять, потом за пять минут долететь?


14-1116928913
Stef
2005-05-24 14:01
2005.06.14
сжатие exe-файла


3-1115112808
jiny
2005-05-03 13:33
2005.06.14
Куда делся QrDbChart ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский