Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Bo0m21
7 / 7 / 5
Регистрация: 14.07.2014
Сообщений: 554
1

Вывод текста в окно стороннего приложения

08.04.2015, 15:55. Просмотров 731. Ответов 13
Метки нет (Все метки)

Подскажите есть игра и в ней нужно по координатам вывести текст или что нибудь нарисовать. Какими способами это можно сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2015, 15:55
Ответы с готовыми решениями:

Клик в свернутое окно стороннего приложения
Вообщем, мне нужно сделать клик в форму которая свернутая. Например Skype. Он у...

Отправка нажатий клавиш в окно стороннего приложения
Есть код на C++, в нём реализован поиск нужного окна по известному классу,...

Получение текста из стороннего приложения
Всем доброго времени суток. Стоит такая задача: необходимо из внешнего...

Как программно эмулировать Drag&drop файла на окно стороннего приложения
ну собственно вопрос в названии к окну никакого отношения не имею и оно не на...

Вывод стороннего приложения из трея
Доброго времени суток. Проблема такова, я знаю что есть некое приложение, и...

13
tarasalk
1192 / 708 / 284
Регистрация: 13.06.2013
Сообщений: 2,486
08.04.2015, 16:08 2
Юзайте класс Graphics, например нарисовать строку drawString
0
Bo0m21
7 / 7 / 5
Регистрация: 14.07.2014
Сообщений: 554
08.04.2015, 16:29  [ТС] 3
Я так понимаю если юзать его то все то что рисуется будет и на экране винды когда свернуть игру.
0
tarasalk
1192 / 708 / 284
Регистрация: 13.06.2013
Сообщений: 2,486
08.04.2015, 16:33 4
Bo0m21, нет конечно.
0
Bo0m21
7 / 7 / 5
Регистрация: 14.07.2014
Сообщений: 554
08.04.2015, 16:44  [ТС] 5
А можно пример как использовать эту функцию в стороннем окне
0
tarasalk
1192 / 708 / 284
Регистрация: 13.06.2013
Сообщений: 2,486
08.04.2015, 16:46 6
В каком стороннем окне? У вас игра отдельно чтоли? не часть вашей программы?
0
Bo0m21
7 / 7 / 5
Регистрация: 14.07.2014
Сообщений: 554
08.04.2015, 16:50  [ТС] 7
Ну естественно нет. Нужно вывести надпись в игре в стороннем окне игра не моя. И моя программа вообще не игра
0
BroDIK
86 / 86 / 51
Регистрация: 19.06.2013
Сообщений: 323
08.04.2015, 16:57 8
Bo0m21, тогда я Вас разочарую. Это процесс не легкий, так как нужно работать с видеопамятью, а каждая игра по своему работает с ней. Плюс ко всему, для этого .net не заточен. Если все же хотите учиться этому, нужен C++ и знание Windows API
0
Bo0m21
7 / 7 / 5
Регистрация: 14.07.2014
Сообщений: 554
08.04.2015, 18:28  [ТС] 9
А можно хотя бы где нибудь отрыть пример хоть кружка в другом окне а дальше я сам уже буду копать ибо я смотрел и никак понять не могу куда копать и как нарисовать в другом окне круг
0
tarasalk
1192 / 708 / 284
Регистрация: 13.06.2013
Сообщений: 2,486
08.04.2015, 18:47 10
Bo0m21, вам же сказали, рисовать прямо в игре тот еще геморой. Начать копать можно в сторону WinApi, и скорее всего каждый случай надо будет разбирать индивидуально.
А вот поверх, ну не знаю. Можно конечно копать в сторону прозрачной формы, которая будет всегда поверх игры...
Код для прозрачной формы такой:
C#
1
2
3
4
this.FormBorderStyle = FormBorderStyle.None;
            this.AllowTransparency = true;
            this.BackColor = Color.AliceBlue;//цвет фона  
            this.TransparencyKey = this.BackColor;//он же будет заменен на прозрачный цвет
Но тут проблема в том, что форма будет перекрывать игру,т.е. часть игровые кнопки под формой не сработают.
0
EvilFromHell
944 / 843 / 345
Регистрация: 26.04.2012
Сообщений: 2,648
08.04.2015, 19:05 11
Можно попробовать извратиться с BitBlt, это позволит запихать любое изображение напрямую в окно игры, вот только при каждом обновлении изображения в игре все будет возвращаться на свои места. Запустив BitBlt в цикле можно сделать это незаметным.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
 
namespace WindowsFormsApplication11
{
    public partial class Form1 : Form
    {
 
        [DllImport("user32.dll", EntryPoint = "ReleaseDC")]
        public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC);
        [DllImport("gdi32.dll")]
        private static extern int BitBlt(
          IntPtr hdcDest, // handle to destination DC
          int nXDest,  // x-coord of destination upper-left corner
          int nYDest,  // y-coord of destination upper-left corner
          int nWidth,  // width of destination rectangle
          int nHeight, // height of destination rectangle
          IntPtr hdcSrc,  // handle to source DC
          int nXSrc,   // x-coordinate of source upper-left corner
          int nYSrc,   // y-coordinate of source upper-left corner
          UInt32 dwRop    // raster operation code
        );
        [DllImport("user32.dll")]
        public static extern IntPtr GetDesktopWindow();
        [DllImport("user32.dll")]
        public static extern IntPtr GetWindowDC(IntPtr hWnd);
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
                IntPtr hWnd = GetDesktopWindow();
                Bitmap innerbitmap = new Bitmap(100, 100);
                Graphics loGraphics = Graphics.FromImage(innerbitmap);
                IntPtr lnDst = loGraphics.GetHdc();
                IntPtr hDC = GetWindowDC(hWnd);
                while (true)
                {
                BitBlt(hDC, 100, 100, 100, 100, lnDst, 0, 0, 13369376);
                }
        }
    }
Клик на кнопку приведет к появлению на экране черного пятна 100 на 100(было создано пустое изображение и налеплено на главное окно рабочего стола) по координатам x=100 и y=100. тут и тут тоже есть кое-какая инфа по этой функции.
0
Bo0m21
7 / 7 / 5
Регистрация: 14.07.2014
Сообщений: 554
08.04.2015, 19:58  [ТС] 12
Ну мне посоветовали копать C# directX hook в ту сторону но примеры есть но я никак разобрать их не могу
0
SignalRule
0 / 0 / 1
Регистрация: 09.04.2015
Сообщений: 3
09.04.2015, 01:46 13
Ну на сколько я знаю на примере игры Lineage2 делается инжект либы своей в которой уже вызываются методы рисования.
0
Bo0m21
7 / 7 / 5
Регистрация: 14.07.2014
Сообщений: 554
10.04.2015, 14:58  [ТС] 14
Посмотрел я код но странно у меня ничего нет и да как он будет выллядеть если запускать по координатам в сторорннем приложении
0
10.04.2015, 14:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2015, 14:58

Автоматическая "кликалка" в окно стороннего приложения
Добрый день. Есть задание, автоматически запускать некую "прогу1", которая...

Вызов стороннего приложения из трея
Добрый вечер. Много раз попадал на глаза такая тема (или схожая), но вот и...

Поиск кнопок стороннего приложения
Привет Хочу нажать кнопку в приложении "Калькулятор". Вот такой код: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru