Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.051 c
3-1173524269
@dimon
2007-03-10 13:57
2007.05.27
Копирование Базы SQL SERVER 2000


15-1178042973
Kolan
2007-05-01 22:09
2007.05.27
Поставил винду, не могу зайти в DocumentsAndSettings старой


2-1178785606
vitv
2007-05-10 12:26
2007.05.27
Получение хэндла родительской формы.


2-1178584148
dreamse
2007-05-08 04:29
2007.05.27
Подскажите функцию стандартную для проверки и добавления


15-1177291363
koha
2007-04-23 05:22
2007.05.27
Прочитал Джеффри РИХТЕР "Создание эффективных WIN32-приложений"





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