![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Есть клавиатуры на которых имеются клавиши мультимедиа, у меня не такая). Можно настроить переключение песен в проигрывателе(windows media player) на определённую клавишу? Чтоб как на мультимедийной клаве вперед и назад.
|
|
#2
|
|||
|
|||
|
Ну что-то нашёл
Код:
function TForm1.GetWMPHandle: hwnd;
begin
result := FindWindow('WMPlayerApp', nil);
result := FindWindowEx(result, 0, 'WMPAppHost', 'WMPAppHost');
if result = 0 then result := Findwindow(nil,'Windows Media Player');
end;
//На бутон или имя клавиши
var wnd:hwnd;
begin
wnd := GetWMPHandle;
if wnd <> 0 then SendMessage(wnd,WM_APPCOMMAND,0,$B0000);
end;Цитата:
Но это работает только если прога имеет фокус, а как теперь сделать чтоб это работало независимо от активного на данный момент приложения? Т.е. например на VK_NUMPAD0 переключался трек? Последний раз редактировалось Qwed86, 07.11.2008 в 13:59. |
|
#3
|
|||
|
|||
|
регистрировать их как глобальные горячие клавиши.
|
|
#4
|
|||
|
|||
|
Ну теперь всё работает
Код:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
function GetWMPHandle : hwnd;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
var wnd:hwnd;
implementation
{$R *.dfm}
function TForm1.GetWMPHandle: hwnd;
begin
result := FindWindow('WMPlayerApp', nil);
result := FindWindowEx(result, 0, 'WMPAppHost', 'WMPAppHost');
if result = 0 then result := Findwindow(nil,'Windows Media Player');
end;
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
wnd := GetWMPHandle;
if msg.HotKey=1 then
if wnd <> 0 then SendMessage(wnd,WM_APPCOMMAND,0,$C0000);
if msg.HotKey=2 then
if wnd <> 0 then SendMessage(wnd,WM_APPCOMMAND,0,$B0000);
if msg.HotKey=3 then
if wnd <> 0 then SendMessage(wnd,WM_APPCOMMAND,0,$E0000);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Form1.Handle, 1, 0, vk_f1);
RegisterHotKey(Form1.Handle, 2, 0, vk_f2);
RegisterHotKey(Form1.Handle, 3, 0, vk_f3);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(Form1.Handle, vk_f1);
UnRegisterHotKey(Form1.Handle, vk_f2);
UnRegisterHotKey(Form1.Handle, vk_f3);
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
ShowWindow(Handle,SW_MINIMIZE);
ShowWindow(Application.Handle,SW_MINIMIZE);
end;
end.Если просто переделывать ругается на procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; в часности на слово message типа unknown directive? Последний раз редактировалось Qwed86, 07.11.2008 в 17:51. |
|
#5
|
|||
|
|||
|
Сервис писать, или еще проще просто спрятать форму.
|
|
#6
|
|||
|
|||
|
Alexo Ну спрятать это понятно, я чтоб весила меньше хочу, щас я допру уже почти родил).
|