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

Вниз

RegisterHotKey   Найти похожие ветки 

 
Lucifer ©   (2005-01-22 12:35) [0]

Начну сразу с кода, при его компиляции никаких ошибок нет, но при нажатии СНТР+Ф7, заданного события не происходит!!, в чём ошибка??
Заранее благодарен!!
Пример демонстрирует установку горячей клавиши CTRL-F7:

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;

type
 TForm1 = class(TForm)
   procedure FormActivate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   procedure WMHotKey(var Message: TMessage); message WM_HOTKEY;
 end;

var
 Form1: TForm1;
implementation

{$R *.DFM}
procedure Tform1.WMHotKey(var Message: TMessage);
begin
 application.Restore;
 application.bringtofront;
 showmessage("Нажата CTRL-F7!");
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
 RegisterHotKey(form1.Handle,123,mod_control,vk_f7);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 UnregisterHotKey(Handle, 123)
end;

end.


 
tradakad ©   (2005-01-22 12:56) [1]

poprobui eto. u menya rabotaet
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   procedure RD_Hide(var mess: TWMHotKey); message WM_HOTKEY;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 d_hide: LongWord;

implementation

{$R *.dfm}

procedure TForm1.RD_Hide;
var
 wnd: HWND;
 buff: array [0..127] of Char;  
begin
 if mess.HotKey <> 49227 then Exit;
 Wnd := GetWindow(Handle, gw_HWndFirst);
 while Wnd <> 0 do
 begin
   if (Wnd <> Application.Handle) and
      (GetWindow(Wnd, gw_Owner) = 0) and
      (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) then
   begin
     GetWindowText(Wnd, buff, sizeof(buff));
     if Pos("Удаленный рабочий стол", buff) <> 0 then
     begin
       if IsWindowVisible(Wnd) then ShowWindow(Wnd, SW_HIDE) else ShowWindow(Wnd, SW_NORMAL)
     end
   end;
   Wnd := GetWindow(Wnd, gw_hWndNext)
 end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 d_hide := GlobalAddAtom("d_hide");
 RegisterHotKey(Form1.Handle, d_hide, 0, VK_F10)
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 UnregisterHotKey(Form1.Handle, d_hide)
end;

end.


 
GuAV ©   (2005-01-22 13:01) [2]

Lucifer ©   (22.01.05 12:35)

У меня работает.

1. Скорее всего, CTRL-F7 уже назначена как хоткей другим приложением.
2. TForm.OnActivate не лучшее место для инициализации, лучше TForm.OnCreate


 
Lucifer ©   (2005-01-22 13:06) [3]

1. Скорее всего, CTRL-F7 уже назначена как хоткей другим приложением.
Дак тогда должно, что-то происходить по нажатию, а тут вообще ничего не происходит!!


 
Digitman ©   (2005-01-22 14:39) [4]


> Дак тогда должно, что-то происходить по нажатию, а тут вообще
> ничего не происходит!!


а с чего ты взял, что что-то обязательно должно визуально происходить ? мало ли как другое приложение обрабатывает это событие ! может оно просто фиксирует сам факт его возникновения и более ничего не делает ..

а вообще говоря RegisterHotKey() - это ф-ция, и она возвращает опред.результат, анализ которого как раз и дастт детальную инф-цию о том , успешен ли вызов, и если не успешен, то по какой конкретно причине


 
i-s-v ©   (2005-01-23 01:32) [5]

После себя убирать надо: после

> UnregisterHotKey(Form1.Handle, d_hide)

GlobalDeleteAtom(d_hide); //:)

А тута:

> d_hide := GlobalAddAtom("d_hide");
>  RegisterHotKey(Form1.Handle, d_hide, 0, VK_F10)

лучше не "d_hide", а нажать Ctrl+Shift+G...

---
The Death Will Come


 
Просто Джо ©   (2005-01-23 03:21) [6]

GuAV ©   (22.01.05 13:01) [2]
1. Скорее всего, CTRL-F7 уже назначена как хоткей другим приложением.


Ага. Watch List в IDE Delphi, например ;)


 
Lucifer ©   (2005-01-25 19:19) [7]

Блин, люди, ВСЁ перепробовал, любые комбинации клавишь делал, ничего не работает! (А у других пашет??) Я у себя на двух машинах пробовал, не работает!


 
GuAV ©   (2005-01-26 00:09) [8]

Lucifer ©   (25.01.05 19:19) [7]
Самое простое - обработчик OnActivate не назначен :-)

Вообще см [4] внизу.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.04 c
1-1109056083
Neznaika
2005-02-22 10:08
2005.03.06
DBGrid


1-1109156917
SAVage
2005-02-23 14:08
2005.03.06
Преобразование типов (record<->pointer)


1-1108733095
snake_r
2005-02-18 16:24
2005.03.06
изменение размеров


8-1100436588
frEEstyler
2004-11-14 15:49
2005.03.06
Как узнать длину проигрываемого фильма???


1-1108844251
wingman
2005-02-19 23:17
2005.03.06
integer overflow error - почему?





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