ADR - Ну зачем надо было задавать все вопросы в одной теме  

 ? Тем более не в вашей.. вот если вы получите ответ, вы не сможете написать в название темы [Решено]… ладно уже поздно. 
ADR писал(а):как
1) воспроизвести аудио
Тут было про то как воспроизвести видео (для линукс) про аудио я думаю тоже самое..
так же можно вот это для кучи: 
Путеводитель по джунглям звуковых API в LinuxДля Windows, можно воспользоваться Win API и модулем mmsystem или как он там называется.. но там полная Х.. .. но решать вам. Так же можно использовать 
Bass, ну или писать свой движок.
ADR писал(а):как
2)узнать содержание буфера иксов (в линуксе при выделении текста...)
Не могу помочь.  
 
 ADR писал(а):как
3)зарегистрировать хоткей
С линухом.. не знаком.. так что там ХЗ как делать, скорее всего через Ядро или Систему Х или еще какую нибудь Весчь  
 
  для Win можно поставить глобальный отлов клавиши (комбинации)… 
Ниже код: формы для загрузки библиотеки dll в которой и идет отлов глобальной клавиши в данном случае клавиши 
A. (и записываем число нажатий этой клавиши в файл) Ну типа маленький KeyLogger… удачи.
Ну а в форме идет подключение данной библиотеки.. почему именно ДЛЛ – это ограничение самой Винды на сколько я помню…
Форма:- Код: Выделить всё
- unit Unit1; 
 
 {$mode objfpc}{$H+}
 
 interface
 
 uses
 Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
 StdCtrls, ExtCtrls,Windows;
 
 type
 
 { TForm1 }
 
 TForm1 = class(TForm)
 procedure FormCreate(Sender: TObject);
 procedure FormDestroy(Sender: TObject);
 private
 { private declarations }
 public
 { public declarations }
 end;
 
 
 var
 Form1: TForm1;
 
 //экспортируем 3 функции из библиотеки с НООК'ами
 procedure Start; external 'Hook.dll' name 'Start';
 procedure Remove; external 'Hook.dll' name 'Remove';
 Function  Count1:Integer; external 'Hook.dll' name 'GetCount';
 
 implementation
 
 {$R *.lfm}
 
 { TForm1 }
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 Start; //Старт ловушки
 end;
 
 procedure TForm1.FormDestroy(Sender: TObject);
 begin
 Remove;   //Ой убивают Хэлп ми
 end;
 
 end.
 
DLL:- Код: Выделить всё
- library Hook;
 
 {$mode objfpc}{$H+}
 
 uses
 windows, messages, IniFiles
 { you can add units after this };
 //модуль Classes удален для экономии размера ДЛЛ
 
 
 var
 Count:Integer=0;   //Изначально число нажатий = 0
 theHook: THandle;  //хэндл ловушки для дальнейшего удаления
 
 
 function MouseHook(nCode, wParam, lParam: integer): Lresult; stdcall;
 var Ini:TIniFile;
 X:Integer;
 begin
 
 if nCode < 0 then
 begin            //фигня какая то, передаем дальше
 result := CallNextHookEx(theHook, nCode, wParam, lParam);
 exit;
 end;
 //(lParam >$8000) - считаем только нажатие клавиш and (GetKeyState(VK_SHIFT)<>0)
 if (wParam = VK_A) and (lParam >$8000)     then
 begin
 Ini:=TIniFile.Create('C:\Count.Ini');
 X:=Ini.ReadInteger('Count','Value',0);
 Ini.WriteInteger('Count','Value',X+1); //тупо  подсчет числа нажатий данной клавиши
 Ini.Free;
 beep(100,100);  //Ну для красоты чтоб слышать что идет отлов
 end;
 
 result := CallNextHookEx(theHook, nCode, wParam, lParam); //дальше по цепочке
 end;
 
 //-------------------------------------------------------------------------
 procedure Start;
 begin
 theHook := SetWindowsHookEx(WH_KEYBOARD, @MouseHook, hInstance, 0); //установка ловушки
 if theHook = 0 then
 messageBox(0, 'Error!', 'Error!', mb_ok);
 end;
 //-------------------------------------------------------------------------
 procedure Remove;
 begin
 UnhookWindowsHookEx(theHook);   //удаление ловушки
 end;
 //-------------------------------------------------------------------------
 {$R *.res}
 
 Exports
 
 Start     index 1 name 'Start',
 Remove    index 2 name 'Remove';
 
 begin
 end.