Главная страница
    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.031 c
14-1116745105
totti
2005-05-22 10:58
2005.06.14
Матеметический компонент. Есть ли он в Делфи?


8-1108377216
_micha
2005-02-14 13:33
2005.06.14
Как приближённо оценить совпадение двух RGB- цветов ?


3-1115789288
kyn66
2005-05-11 09:28
2005.06.14
Кто реально работает с базами Access, отзовитесь...


1-1117471717
Karlson
2005-05-30 20:48
2005.06.14
Значение параметра Sender в ComboBoxChange(Sender: TObject)


6-1111217227
ArchValentin
2005-03-19 10:27
2005.06.14
Mirc на Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский