Навигация
· XNA FAQ
· С чего начать
· Конкурсы
· Обратная связь
· XNA Блоги
Сейчас на сайте
· Гостей: 1

· Пользователей: 0

· Всего пользователей: 3,684
· Новый пользователь: headron
Последние фото
Эх, чуть не проспал закрытие.
Эх, чуть не проспал ...
Альбом: XNA Engine

GB
GB
Альбом: XNA Engine

South Park Coon & Friends
South Park Coon & Fr...
Альбом: XNA Games

Блоги
yavshoke
» XboxOne - интерес...
dampirik
» Push уведомления ...
dampirik
» Реклама,статистик...
Chort
» XNA и StartCoroutine
Chort
» Curve Class
dampirik
» Реклама, статисти...
dampirik
» Увеличение скорос...
dampirik
» Реклама, статисти...
general
» Распаковка DxtCom...
general
» Как работать с XN...
Поддержка
microsoft.com
1gb.ru - Дом для вашего сайта
Статистика посещений:

Просмотр темы
 Распечатать тему
Скриншот с DirectX эрана.
Hellmapper
#1 Распечатать сообщение
Опубликовано 10.10.2011 22:14:52
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Возник вопрос: как сделать скриншот с помощью C# из игры, которая использует директX/openGL? Может кто-нибудь уже занимался данным вопросом?
 
VAB
#2 Распечатать сообщение
Опубликовано 10.10.2011 23:38:03
Аватар пользователя

Администратор


Сообщений: 1431
Зарегистрирован: 21.07.09

Нужно перехватывать хуки Direct 3D
когда-то давно это делал, но на с++

разницы не должно быть. Посмотри в этом направлении
 
Chort
#3 Распечатать сообщение
Опубликовано 11.10.2011 12:08:18
Аватар пользователя

Администратор


Сообщений: 1296
Зарегистрирован: 16.02.09

хм... как-то можно получить директ-девайс имея хендл. А хендл мейн окна можно получить по хендле процесса.
На вопросы отвечаю с головы. Ссылка на ответы или запускаю студию только в интересных случаях.
 
Hellmapper
#4 Распечатать сообщение
Опубликовано 11.10.2011 13:28:35
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Хэндлы я получаю и скрин делаю, но в итоге выводит черный экран. З.Ы. Уже замучил гуглю этим вопросом.
 
VAB
#5 Распечатать сообщение
Опубликовано 11.10.2011 13:44:43
Аватар пользователя

Администратор


Сообщений: 1431
Зарегистрирован: 21.07.09

http://spazzarama...api-hooks/
 
Hellmapper
#6 Распечатать сообщение
Опубликовано 11.10.2011 21:20:07
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Спасибо, попробую разобраться. И еще в форме у меня есть picturebox у него есть событие передвижения мыши. Так вот, в этом событии идет SendMessage(hwnd, WM_MOUSEMOVE, x, y); С помощью Spy++ я проверил идет ли событие перемещения в WOW, но результата не было. Может еще подскажите?
 
Chort
#7 Распечатать сообщение
Опубликовано 12.10.2011 11:01:31
Аватар пользователя

Администратор


Сообщений: 1296
Зарегистрирован: 16.02.09

SendMessage(hwnd, WM_MOUSEMOVE, x, y); ? как я помню x y шли одним параметром через MakeLParam
На вопросы отвечаю с головы. Ссылка на ответы или запускаю студию только в интересных случаях.
 
Hellmapper
#8 Распечатать сообщение
Опубликовано 12.10.2011 19:32:55
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Да да последним, просто от ошибся при написании. Вот полный код функции:
Загрузить источник  GeSHi: C#
  1.  
  2. public void Input_MOUSEMOVE(MouseEventArgs args)
  3. {
  4. int x = args.X;
  5. int y = args.Y;
  6. SendMessage(hwnd, WM_MOUSEMOVE, 0, MakeLong(x, y));
  7. SendMessage(hwnd, WM_SETCURSOR, 0, MakeLong(x, y));
  8.  
  9. }
Добавлено за 0.005 секунд, используя GeSHi 1.0.8.2

Говорю сразу hwnd задан, тк на события клавы Wow откликается, а вот на мышь нет. А WM_MOUSEMOVE как отправляет координаты: относительно своей формы(тогда перемещение будет вне игрового окна) или же переводит координаты мыши на форме с которой идет вызов функции в координаты формы игры?
 
Hellmapper
#9 Распечатать сообщение
Опубликовано 12.10.2011 20:19:33
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

И да там еще через Spy++ видно что возникает какое-то странное событие под названием WM_NCHITTEST и WM_NCMOUSEMOVE может они еще что-нибудь делают?
 
Hellmapper
#10 Распечатать сообщение
Опубликовано 12.10.2011 20:27:47
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

и да вот пример по той ссылке так же захватывает и окно которые находится на форме игры
 
Chort
#11 Распечатать сообщение
Опубликовано 12.10.2011 22:01:59
Аватар пользователя

Администратор


Сообщений: 1296
Зарегистрирован: 16.02.09

http://vsokovikov...semove.htm
http://vsokovikov...ittest.htm
Судя по написанному ВоВ не захватил мышь, попробуй обернуть SetCapture/ReleaseCapture
На вопросы отвечаю с головы. Ссылка на ответы или запускаю студию только в интересных случаях.
 
Hellmapper
#12 Распечатать сообщение
Опубликовано 12.10.2011 23:19:46
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Загрузить источник  GeSHi: C#
  1. public void Input_MOUSEMOVE(MouseEventArgs args)
  2. {
  3. int x = args.X;
  4. int y = args.Y;
  5. SendMessage(hwnd, WM_MOUSEMOVE, (int)args.Button, MakeLong(x, y));
  6. SendMessage(hwnd, WM_NCMOUSEMOVE, (int)args.Button, MakeLong(x, y));
  7. SendMessage(hwnd, WM_NCHITTEST, (int)args.Button, MakeLong(x,y));
  8. }
Добавлено за 0.005 секунд, используя GeSHi 1.0.8.2

Spy++ показывает что событие передается, но вот эффекта никакого :(
Изменил(а) Hellmapper, 12.10.2011 23:20:09
 
Hellmapper
#13 Распечатать сообщение
Опубликовано 12.10.2011 23:24:28
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Самое обидное, что события с клавиатуры передаются.
 
Hellmapper
#14 Распечатать сообщение
Опубликовано 13.10.2011 22:38:30
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Один вопрос по передаче игры: такой код будет только по локалке(сервер)
Загрузить источник  GeSHi: C#
  1. public static void SendScreen(Image image, string ipAddr, int portAddr)
  2. {
  3. try
  4. {
  5. ms = new MemoryStream();// Store it in Binary Array as Stream
  6. ms2 = new MemoryStream();
  7.  
  8. // Сохранили картинку в MemStream
  9. image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
  10. // Картинка в массиве
  11. byte[] arrImage = ms.GetBuffer();
  12. // Получили длину массива с картинкой
  13. int lenght = arrImage.Length;
  14.  
  15. byte[] len = BitConverter.GetBytes(lenght);
  16. // Записали длину в поток
  17. ms2.Write(len, 0, 4);
  18. // Записали картинку в поток
  19. ms2.Write(arrImage, 0, arrImage.Length);
  20.  
  21.  
  22. // Извлекли все из потока в массив передачи
  23. send = ms2.GetBuffer();
  24.  
  25. // Передаем
  26. myclient = new TcpClient(ipAddr, portAddr);//Connecting with server
  27. myns = myclient.GetStream();
  28. mysw = new BinaryWriter(myns);
  29. mysw.Write(send);//send the stream to above address
  30. ms.Flush();
  31. ms2.Flush();
  32. mysw.Flush();
  33. myns.Flush();
  34. Thread.Sleep(100);
  35. ms.Close();
  36. ms2.Close();
  37. mysw.Close();
  38. myns.Close();
  39. myclient.Close();
  40.  
  41. }
  42. catch (Exception ex)
  43. {
  44. ///
  45. }
  46. }
Добавлено за 0.011 секунд, используя GeSHi 1.0.8.2
 
Hellmapper
#15 Распечатать сообщение
Опубликовано 13.10.2011 22:38:57
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

И клиент
Загрузить источник  GeSHi: C#
  1. public static void GetImage(string IpAddr, int portAddr)
  2. {
  3. try
  4. {
  5.  
  6. // Open The Port
  7. IPAddress ip = IPAddress.Parse(IpAddr);
  8. mytcpl = new TcpListener(ip, portAddr);
  9.  
  10. mytcpl.Start(); // Start Listening on That Port
  11.  
  12. mytcpl.AcceptTcpClient();
  13. mysocket = mytcpl.AcceptSocket(); // Accept Any Request From Client and Start a Session
  14. ns = new NetworkStream(mysocket); // Receives The Binary Data From Port
  15. byte[] reciveLen = new byte[4];
  16. ns.Read(reciveLen, 0, 4);
  17. int lenght = BitConverter.ToInt32(reciveLen, 0);
  18. byte[] recive = new byte[lenght];
  19. Read(ns, recive, lenght);
  20.  
  21. ms = new MemoryStream();
  22. ms.Write(recive, 0, lenght);
  23. img = Image.FromStream(ms);
  24.  
  25.  
  26.  
  27.  
  28. //_Image.Image = Image.FromStream(ns);
  29. mytcpl.Stop(); // Close TCP Session
  30. }
  31. catch (Exception ex)
  32. {
  33. ///
  34. }
  35. }
Добавлено за 0.009 секунд, используя GeSHi 1.0.8.2
 
Hellmapper
#16 Распечатать сообщение
Опубликовано 14.10.2011 13:17:43
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Мне бы хотелось, чтобы сервер сам распознавал клиента и отсылал ему скрин игры.
 
Hellmapper
#17 Распечатать сообщение
Опубликовано 14.10.2011 21:00:18
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Идеи?
 
Перейти на форум:
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Мини-чат
Вы должны авторизироваться, чтобы добавить сообщение.

27.08.2014
Я умею немного на asp.net + html и css

22.08.2014
на ASP mvc 3 есть пару проектов. Могу помочь, если нужно. Обидно, если закроется Frown

21.08.2014
я тоже ноль

21.08.2014
Я в вебе только с php занимался да и то на уровне чтоб работало.

21.08.2014
Я в вебе полный ноль…

21.08.2014
Переводить его надо, хоть на ту же азуру. И двиг менять на что-то современное. Если есть веб-разрабы - можем скооперироваться. Один делать не буду.

21.08.2014
не знаю всех нюансов по оплате и все хорошее когда нибудь заканчивается

21.08.2014
А что случилось?

21.08.2014
похоже сайт будет работать до 28го числа

09.08.2014
Апи пока не видел. Но есть приложение в магазине Live Lock Screen BETA, так что думаю скоро будет

08.08.2014
Я про API для Update1. На нем работает это

08.08.2014
А что именно нужно? Чтото и сейчас открыто http://msdn.micro.
...105).aspx

06.08.2014
Кто-нибудь слышал об открытии доступа к Lock Screen Api?

31.07.2014
VPDExpress на базе MVS 2012, ни в какую не ловит исключения. Даже если их сам создаешь. И всех так?

25.07.2014
С днем системного администратора причастных к этой профессии! По случаю - тортик от жены

RSS каналы сайта
XNA - Новости
XNA - Статьи
XNA - Форум
XNA - Галерея
XNA - Файлы
Время загрузки: 0,51 секунд 8,710,773 уникальных посетителей