Видео на самом деле довольно просто. Все, что вам нужно - это таймер, работающий 20 раз в секунду, который сохранит холст формы в файлы изображений в виде кадров. Затем создайте анимацию из этих картинок.
Для захвата изображения:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
tVideo.Start();
}
int i = 0;
private void tVideo_Tick(object sender, EventArgs e)
{
String lFile = String.Format("c:\\{0}.bmp", i);
SaveAsBitmap(this, lFile);
i++;
}
public void SaveAsBitmap(Control aCtrl, string aFileName)
{
if (File.Exists(aFileName))
File.Delete(aFileName);
Graphics lGraphics = aCtrl.CreateGraphics();
Bitmap lImage = new Bitmap(aCtrl.Width, aCtrl.Height);
aCtrl.DrawToBitmap(lImage, new Rectangle(0, 0, aCtrl.Width, aCtrl.Height));
lImage.Save(aFileName);
lImage.Dispose();
}
}
Это всего лишь небольшой пример, конечно, вам придется добавить некоторое сжатие и попытаться избежать сохранения одного и того же изображения дважды. Зная, сколько изображений одинаково + зная частоту кадров, вы знаете, как долго показывать один и тот же кадр.
Чтобы добавить курсор, вам нужно сохранить некоторые переменные с помощью мыши x, y и событие при щелчке мыши. А потом просто добавь его в картинки.
Конечно, это не будет работать для 3d-игр, несмотря на оверлей, который рисуется после рисования win32.
Для этого вам придется использовать DirectX / OpenGl / XNA. Я думаю, что идея та же самая.
Для аудио также DirectX.
Мой полный источник:
http://deathsquad.pl/archiwum/Inne/so/answer-1934452.rar
Некоторые образцы аудио DirectX:
http://www.codeproject.com/KB/directx/audiosav.aspx