Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2010, 20:19   #1
Vaigard
Delphi and (not C)
Форумчанин
 
Аватар для Vaigard
 
Регистрация: 04.12.2010
Сообщений: 117
Восклицание Сочетание клавиш.

В общем, проблема такая. Требуется сделать скрин, открыть Paint, вставить туда скрин. Для этого я пользовался двумя вариантами.
1.
Код:
var
h:hwnd;
begin
keybd_event(vk_snapshot,0,0,0);
keybd_event(vk_snapshot,0,keyeventf_keyup,0);
shellexecute(handle,0,'C:\WINDOWS2\system32\mspaint.exe',0,0,
sw_show);

h:=findwindow(nil,'Безымянный - Paint');
postmessage(h,wm_keydown,vk_control,1);

PostMessage(h, Wm_KeyDown, Vk_control, 1);
PostMessage(h, Wm_Keydown, byte('V'), 1);
PostMessage(h, Wm_Keyup, VK_control, 1);
PostMessage(h, Wm_Keyup, byte('V'), 1);

end;

2.
Код:
var
h:hwnd;
begin
keybd_event(vk_snapshot,0,0,0);
keybd_event(vk_snapshot,0,keyeventf_keyup,0);
shellexecute(handle,0,'C:\WINDOWS2\system32\mspaint.exe',0,0,
sw_show);

h:=findwindow(nil,'Безымянный - Paint');
setforegroundwindow(h);

keybd_event(vk_control,0,0,0);
keybd_event(byte('V'),0,0,0);
keybd_event(vk_control,0,keyeventf_keyup,0);
keybd_event(byte('V'),0,keyeventf_keyup,0);

end;
Скрин снимается, Paint открывает, но не вставляется. Скрин в буфере обмена. В первом случае Paint деляется активным, но не более. На одиночные нажатия клавиш реагирует, а такое сочетание клавиш не читает. В чем дело? Тему для подобного сочетания не нашел. Заранее спасибо
<--Жми на весы

Последний раз редактировалось Stilet; 29.12.2010 в 11:25. Причина: Ошибка.
Vaigard вне форума Ответить с цитированием
Старый 29.12.2010, 10:39   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,281
По умолчанию

Вариант №2. После ShellExecute поставь
Код:
  Sleep (1000);
Sibedir вне форума Ответить с цитированием
Старый 29.12.2010, 11:09   #3
Vaigard
Delphi and (not C)
Форумчанин
 
Аватар для Vaigard
 
Регистрация: 04.12.2010
Сообщений: 117
По умолчанию

То есть не сразу реагирует? Надо попробовать.
<--Жми на весы

Последний раз редактировалось Vaigard; 29.12.2010 в 18:32. Причина: Ошибка.
Vaigard вне форума Ответить с цитированием
Старый 29.12.2010, 11:29   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

А может стоит сделать так:http://www.programmersforum.ru/showthread.php?t=10992
А потом просто через shellexecute заставить паинт открыть файл скриншота?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.12.2010, 15:59   #5
Vaigard
Delphi and (not C)
Форумчанин
 
Аватар для Vaigard
 
Регистрация: 04.12.2010
Сообщений: 117
По умолчанию

Мне надо через имитацию сочетания клавиш) Кстати, про Sleep. Он открывает скрин свежезапущенного Пэйнта, а если через waitforsingleobject, то случайным образом либо скрин Пэйнта, либо ничего. 2 Stilet. А как заставить Пэйнт открыть файл? Что - то в shellexecute()?
<--Жми на весы
Vaigard вне форума Ответить с цитированием
Старый 29.12.2010, 16:27   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Да там параметром можно попробовать указать файл. Посмотри примеры на форуме, были уже темы про эту функцию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.12.2010, 17:05   #7
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

Цитата:
Сообщение от Vaigard Посмотреть сообщение
А как заставить Пэйнт открыть файл? Что - то в shellexecute()?
не shell'ом вот так лучше
Код:
Winexec('mspaint c:\image.bmp', SW_SHOW);
wm_leviathan вне форума Ответить с цитированием
Старый 29.12.2010, 17:11   #8
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Цитата:
Сообщение от wm_leviathan Посмотреть сообщение
не shell'ом вот так лучше
Код:
Winexec('mspaint c:\image.bmp', SW_SHOW);
Winexec - устаревшая функция. Уж лучше использовать CreateProcess, хотя в данном примере и ShellExecute подойдет
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 29.12.2010, 17:19   #9
Vaigard
Delphi and (not C)
Форумчанин
 
Аватар для Vaigard
 
Регистрация: 04.12.2010
Сообщений: 117
По умолчанию

Ага, спасибо, попробую)
<--Жми на весы
Vaigard вне форума Ответить с цитированием
Старый 29.12.2010, 18:11   #10
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

устаревший согласен однако работает в ХР вполне норм.
или через шел
Код:
ShellExecute(Handle, nil, 'mspaint', 'c:\image.bmp', nil, SW_SHOW);
wm_leviathan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сочетание клавиш, есть ли такое kzld Microsoft Office Excel 2 05.11.2010 13:39
Сочетание клавиш Fezdipekla Microsoft Office Access 3 19.06.2010 19:38
Не работает сочетание клавиш vikttur Операционные системы общие вопросы 6 06.06.2010 00:23
Сочетание клавиш Денис546546 Помощь студентам 3 07.12.2009 09:45
Сочетание клавиш Malder Общие вопросы .NET 0 19.01.2009 20:57