Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/84: Рейтинг темы: голосов - 84, средняя оценка - 4.80
14 / 14 / 5
Регистрация: 23.05.2011
Сообщений: 78

Как нарисовать что-либо на рабочем столе

30.09.2011, 00:30. Показов 16345. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
И снова приветсвую всех, у меня родилась эта идея вспонтанно, но очень заинтерисовала, ибо не так скучна как обыденные лабы с программирования(хотя доля интереса в них присуцтвует)

Хочу выводить на рабочем столе что-нибудь: линии, графики, изображения, может быть какие-то компоненты кинуть(если таково возможно), тоесть использовать рабочий стол как "форму", чтоли...

Я не прошу готовых исходных кодов, прошу помощи в поиске информации по данной теме.

Заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.09.2011, 00:30
Ответы с готовыми решениями:

Программы не запускаются на рабочем столе, ко всем ярлыкам на рабочем столе добавляется приставка .Ink
Помогите пожалуйста, использовал рекомендованную вами программу CureIT (нашел 18 вредоносных объектов) и вылечил, но проблема с рабочим...

Что за папка появляется произвольно на рабочем столе?
Что за папка появляется произвольно на рабочем столе?. После удаления появляется только при перезагрузке.

Ярлыки на рабочем столе. 3 клика что бы открыть
Если у меня активно любое окно (например калькулятор), и я хочу открыть любой ярлык на рабочем столе, мне нужно сделать 3 клика: первый -...

13
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
30.09.2011, 00:52
Лучший ответ Сообщение было отмечено как решение

Решение

Вроде как можно через интероп

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Импорт библиотек
[DllImport("User32.dll")] public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")] public static extern void ReleaseDC(IntPtr dc);
 
// Получение дескриптора рабочего стола
IntPtr d = GetDC(IntPtr.Zero);
 
// Создание объекта для работы с графикой через дескриптор
Graphics gfx = Graphics.FromHdc(d);
 
// Здесь используйте объект gfx для рисования всякого разного
 
// Освобождение дескриптора
ReleaseDC(desktopDC);
11
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
23.01.2012, 00:13
kolorotur, Ошибка 1 Инициализатор поля не может обращаться к нестатическому полю, методу или свойству "DrawingOnDesktop.FormMain.d" D:\\Chap2\WindowsFormsApplication1\Drawi ngOnDesktop\DrawingOnDesktop\FormMain.cs 30 41 DrawingOnDesktop
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
23.01.2012, 00:31
Radzhab, ну это же наброски кода. Они и не будут работать, если их тупо "куда-нибудь" вставить.

Импорт библиотек идет в область класса, все остальное должно быть в каком-нибудь методе.
0
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
23.01.2012, 00:55
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
public partial class FormMain : Form
    {
        [DllImport("User32.dll")]
        public static extern IntPtr GetDC(IntPtr hwnd);
        [DllImport("User32.dll")]
        public static extern void ReleaseDC(IntPtr dc);
 
        // Получение дескриптора рабочего стола
        IntPtr d = GetDC(IntPtr.Zero);
 
        // Создание объекта для работы с графикой через дескриптор
        Graphics gfx = Graphics.FromHdc(GetDC(IntPtr.Zero));
 
        public FormMain()
        {
            InitializeComponent();
        }
 
 
private void button1_Click(object sender, EventArgs e)
        {
           
           
           
           Thread th2 = new Thread(Radz);
           
            th2.Start();
            Thread.Sleep(1000);
           
           
        }
 
        
        /// ///////////////////
        static void Back()
        {
            while (true)
            {
                Thread.Sleep(200);
               gfx.DrawString("Tekst na rabochem", new Font("Tahoma", 12), Brushes.Black, new PointF(50, 50));
             
            }
         }
Как сделать чтобы форма не зависала.. Вроде добавил метод в поток, но все равно нагружает проц
0
c#
 Аватар для temich-92
95 / 95 / 27
Регистрация: 25.03.2011
Сообщений: 290
23.01.2012, 01:34
действительно виснет...мой планшет чуть не спалил)

а как MouseMove по экрану отловить?
Миниатюры
Как нарисовать что-либо на рабочем столе  
Изображения
 
0
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
23.01.2012, 10:14
А если рисовать на обоях рабочего стола и сохранять его через каждые 0,5 сек ,\? Нагрузка будет меньшей?
0
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
25.01.2012, 18:40
Апну,
0
24 / 24 / 4
Регистрация: 07.02.2011
Сообщений: 163
25.01.2012, 20:17
Цитата Сообщение от kolorotur Посмотреть сообщение
// Освобождение дескриптора
ReleaseDC(desktopDC);
Что есть desktopDC?

Добавлено через 19 минут
И что, тут Invalidate() не работает? Ато засунул в таймер удлинение строки на один символ и вывод ее на экран, а изображение на рабочем столе обновляется только после нажатия на кнопку запуска таймера. В таймере Invalidate стоит и нифига.
0
c#
 Аватар для temich-92
95 / 95 / 27
Регистрация: 25.03.2011
Сообщений: 290
26.01.2012, 00:41
я думаю в
C#
1
invalidate();
перерисовывается форма, а не
Цитата Сообщение от kolorotur Посмотреть сообщение
C#
1
2
// Создание объекта для работы с графикой через дескриптор
Graphics gfx = Graphics.FromHdc(d);
0
22 / 21 / 8
Регистрация: 17.02.2011
Сообщений: 399
26.01.2012, 11:03
Radzhab мог бы кодик дать, хоть примитив какой ни будь выводил, очень охото посмотреть.
0
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
26.01.2012, 12:15
leonidSDF,
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
 public partial class FormMain : Form
   {
        [DllImport("User32.dll")]
        public static extern IntPtr GetDC(IntPtr hwnd);
        [DllImport("User32.dll")]
        public static extern void ReleaseDC(IntPtr dc);
 
        // Получение дескриптора рабочего стола
        IntPtr d = GetDC(IntPtr.Zero);
 
        // Создание объекта для работы с графикой через дескриптор
        Graphics gfx = Graphics.FromHdc(GetDC(IntPtr.Zero));
 
        public FormMain()
        {
            InitializeComponent();
        }
 
 
private void button1_Click(object sender, EventArgs e)
        {
           
           
           
           Thread th2 = new Thread(Radz);
           
            th2.Start();
            Thread.Sleep(1000);
           
           
        }
 
        
        /// ///////////////////
        static void Back()
        {
            while (true)
            {
                Thread.Sleep(200);
               gfx.DrawString("Tekst na rabochem", new Font("Tahoma", 12), Brushes.Black, new PointF(50, 50));
             
            }
         }
2
c#
 Аватар для temich-92
95 / 95 / 27
Регистрация: 25.03.2011
Сообщений: 290
26.01.2012, 13:48
и все же как мышью рисовать?
0
 Аватар для iDReeM
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
21.10.2015, 14:31
Возможно тема уже старая, но я хотел бы поделится с вами своим рендер классом, который писал для рисовки через оверлей, там я написал пример отлова мышки в своем окне, так же кейстейт, в общем строго прошу не судить, мб кому пригодится:
Code
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
internal class CRender
{
    protected Graphics pDevice;
 
    internal CRender()
    {
        this.pDevice = null;
    }
 
    internal CRender(Graphics pD3D9)
    {
        this.pDevice = pD3D9;
    }
 
    #region ' Import '
 
    [DllImport("user32.dll")]
    static extern bool ScreenToClient(IntPtr hWnd, ref Point lpPoint);
 
    [DllImport("user32.dll")]
    static extern IntPtr GetForegroundWindow();
 
    [DllImport("user32.dll")]
    static extern bool GetCursorPos(out Point pt);
 
    [DllImport("user32.dll")]
    static extern short GetAsyncKeyState(int vKey);
 
    [DllImport("user32.dll")]
    static extern short GetKeyState(int vKey);
 
    internal bool dwScreenToClient(IntPtr hWnd, ref Point lpPoint)
    {
        return ScreenToClient(hWnd, ref lpPoint);
    }
 
    internal IntPtr dwGetForegroundWindow()
    {
        return GetForegroundWindow();
    }
 
    internal bool dwGetCursorPos(out Point lpPoint)
    {
        return GetCursorPos(out lpPoint);
    }
 
    internal short dwGetKEY(int VK_KEY)
    {
        return GetAsyncKeyState(VK_KEY);
    }
 
    internal short GetKEY(int VK_KEY)
    {
        return GetKeyState(VK_KEY);
    }
 
    #endregion
 
    //Отрисовка линии
    internal void Line(float x1, float y1, float x2, float y2, Color dwColor)
    {
        if (this.pDevice == null)
            return;
 
        this.pDevice.DrawLine(new Pen(new SolidBrush(dwColor)), x1, y1, x2, y2);
    }
 
    //Отрисовка бокса
    internal void Box(float x, float y, float width, float height, Color dwColor)
    {
        if (this.pDevice == null)
            return;
 
        this.pDevice.FillRectangle(new SolidBrush(dwColor), x, y, width, height);
    }
 
    //Отрисовка бордера
    internal void Border(float x, float y, float width, float height, Color dwColor)
    {
        if (this.pDevice == null)
            return;
 
        this.pDevice.DrawRectangle(new Pen(new SolidBrush(dwColor)), x, y, width, height);
    }
 
    //Вывод строки
    internal void Text(string text, float x, float y, Color dwColor)
    {
        if (this.pDevice == null)
            return;
 
        this.pDevice.DrawString(text, new Font("Calibri", 9.75F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(204))), new SolidBrush(dwColor), x, y);
    }
 
    //вывод строки с левым шрифтом
    internal void Text(string text, float x, float y, Color dwColor, Font cFont)
    {
        if (this.pDevice == null)
            return;
 
        this.pDevice.DrawString(text, cFont, new SolidBrush(dwColor), x, y);
    }
 
    internal bool IsInBox(float x, float y, float w, float h)
    {
        Point Cursor = new Point();
        this.dwGetCursorPos(out Cursor);
        this.dwScreenToClient(this.dwGetForegroundWindow(), ref Cursor);
        return (Cursor.X >= x && Cursor.X <= x + w && Cursor.Y >= y && Cursor.Y <= y + h);
    }
 
    internal bool StateKEY(int VK_KEY)
    {
        return this.dwGetKEY(VK_KEY) != 0 ? true : false;
    }
 
    internal bool KEY(int VK_KEY)
    {
        return this.GetKEY(VK_KEY) != 0 ? true : false;
    }
    ~CRender()
    {
 
    }
}
Как юзать поймет даже домохозяйка, всем удачи.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2015, 14:31
Помогаю со студенческими работами здесь

После перезагрузки пропадает все что есть на рабочем столе!
Здравствуйте,я знаю что уже есть данная тема,прошу тапками в меня не кидать! Перечитал,все форумы на данную тему,ничего не помогло,что...

Черное цифровое пятно на рабочем столе. Что это может быть? (видео)
http://my.mail.ru/mail/pashock.kl/video/_vanswers/2.html самое интересное то что когда поверх него разворачиваешь какое нибудь...

Как нарисовать что-либо поверх расположенных на форме контролов?
Private Sub Main_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint Dim g As Graphics = e.Graphics ...

Случайно отформатировал диск - можно ли восстановить то что было на рабочем столе, это очень важно
срочно нужна программа для восстановлении файлов я случайно отформатировал при переустновки win 7 можно ли восстановить то что на рабочем...

Как закрепить ярлыки на рабочем столе
Посоветуйте програмку чтоб закрепить ярлыки на рабочем столе? А то после выхода из игры под другим разрешением они збиваються по левому...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru