Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
Внизsendkey в неактивном окне как hotkey Найти похожие ветки
← →
porting © (2007-05-04 05:38) [0]Приветствую всех собственно как реализовать hotkey в sendkey+неактивное окно?
Максимум что получилось это сендекей в неактивном окне, но опять же надо нажимать на кнопку на форме что бы сендкей работал.
вот так она определяет имя окна и нажимает в неактивном окне нужную кнопку клавы.
procedure TForm1.Button3Click(Sender: TObject);
begin
SendKeys1.GetWindowHandle("test 2");
if SendKeys1.WindowHandle <> 0 then
SendKeys1.SendKeys(Chr($39));
end;
Что надо зделать что бы это работала не по нажатию кнопки, а по нажатию горчих клавиш на клавературе например shift+9.
Например: есть test 1 окно активное, и test 2 не активное и чтобы работая в окне test 1 нажимая горячие клавишы нажималися в окне test2.
← →
ЮЮ © (2007-05-04 06:24) [1]Написать код не в обработчике OnClick кнопки, а в обработчике, который будет вызван по нажатию горчих клавиш на клавературе например shift+9.
З.Ы. А как вводить символ "(" в поле ввода при такой "горячей клавише"?
Посмотри комбинации, предлагаемве в TAction.ShortCut. Кстати, достатчно будет создать TActionList, а в нем TAction c твоим кодом
← →
porting © (2007-05-04 16:06) [2]procedure TForm1.Button3Click(Sender: TObject);
begin
SendKeys1.GetWindowHandle("test 2");
end;
procedure TForm1.WM_HotKeyHandler (var Message: TMessage);
var
idHotKey: integer;
fuModifiers: word;
uVirtKey: word;
begin
SendKeys1.SendKeys(Chr($39));
if (fuModifiers = MOD_SHIFT) AND (uVirtKey = VK_F9) then
caption:="Shift-F9 Нажата";
inherited;
end;
Вроде что-то получилось но есть одна проблема теперь при нажатие горячих клавиш окно которое должно быть активным становится не активным как это зделать ? Тоесть надо что бы окно test 1 было активным постоянно.
← →
porting © (2007-05-05 04:31) [3]собственно не только окно test 1 становится не активным, а все окна как зделать чтобы активное окно не слетало??
← →
Leonid Troyanovsky © (2007-05-05 10:13) [4]
> porting © (04.05.07 05:38)
> и чтобы работая в окне test 1 нажимая горячие клавишы нажималися
> в окне test2.
Что за окно test2 и какие, собс-но, клавиши требуется "нажать".
--
Regards, LVT.
← →
porting © (2007-05-05 16:59) [5]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Sendkey1, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
SendKeys1: TSendKeys;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
procedure WM_KeyPress (var Message: TMessage);
message WM_HOTKEY;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
keyid:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
SendKeys1.GetWindowHandle("Безымянный - Блокнот");
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
SendKeys1.SendKeys(Chr($39));
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
close;
end;
procedure TForm1.WM_KeyPress (var Message: TMessage);
var
idHotKey: integer;
fuModifiers: word;
uVirtKey: word;
begin
SendKeys1.SendKeys(Chr($39));
if (fuModifiers = MOD_SHIFT) AND (uVirtKey = VK_F9) then
caption:="Shift-F9 Проверка";
inherited;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
keyid:=GlobalAddAtom("VK_9");
RegisterHotKey(handle, keyid, MOD_SHIFT, VK_F9);
end;
end.
Вот полный исходик, допустим это будет 2 блокнота перый блокнот должен быть активным, второй не активный и при нажатие горячих клавиш во второй блокнот должна нажиматся клавиша, для примера взял клавишу 9 - $39 так вот всё нажимается, но только все окна каторые находятся в данные момент открытие и активные становятся сразу не активные при нажатие гор клавиш.
← →
Leonid Troyanovsky © (2007-05-05 19:20) [6]
> porting © (05.05.07 16:59) [5]
Объясни словами, что конкретно требуется.
Какой программе и что нужно посылать.
--
Regards, LVT.
← →
porting © (2007-05-05 20:57) [7]ок. Значит так! На рабочем столе вызванно 2 notepad.exe один активный нотепад, второй нет. Надо что бы в неактивном нотепаде нажималася кнопка 9 - $39, а активный был всегда активным даже когда нажимается горячия кнопка. так понятней ? в этом исходник что выложил выше всё нажимается и передаётся как надо, но! при нажатие горячий клавиш все окна становятся не активными...
мб есть другой способ как написать hotkey на неактивное приложения что бы принажатие горячий клавиш в неактивном окне которое будет распознано, нажималася определённая клавиша например это будет клавиша 9 (в щеснадцатеричном числе это будет $39).
← →
Leonid Troyanovsky © (2007-05-06 09:30) [8]
> porting © (05.05.07 20:57) [7]
> мб есть другой способ как написать hotkey на неактивное
> приложения что бы принажатие горячий клавиш в неактивном
> окне которое будет распознано, нажималася определённая клавиша
> например это будет клавиша 9 (в щеснадцатеричном числе это
> будет $39).
PostMessage(FindWindowEx(FindWindow("Notepad", nil), 0, "EDIT", nil), WM_CHAR, Ord("9"), 0);
--
Regards, LVT.
← →
porting © (2007-05-07 03:09) [9]а как зделать нажатие кнопок, а не при нажатие горячих клавиш вставлять текст ?
PostMessage(FindWindow(nil, "testwindow"), WM_KEYDOWN, VK_CONTROL, $00000039); так или как точно ? и вобще где можно почитать подробно о PostMessage.
← →
Германн © (2007-05-07 03:26) [10]Я страдаю ерундой! Помогите мне получить от этого удовольствие.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c