Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 5

Как запустить код?

19.03.2018, 18:16. Показов 2157. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Господа, прошу помощи. Знаний не достаточно, приходится действовать, что называется "вплавь"
Прошу помочь с кодом. Как его запустить?
Суть в следующем:
Берутся данные из реестра о подключенных мониторах с серийными номерами. Данная информация записывается в файл на диске D:.. Запустить никак не могу..

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
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Win32;
using System.IO;
 
namespace ConsoleApp8
{
    class Program
    {
        static void Main(string[] args)
        {
         
        }
        private void MonitorInfo()
        {
            Microsoft.Win32.RegistryKey Display = Microsoft.Win32.Registry.LocalMachine;
            Boolean bFailed = false;
            try
            {
                Display = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Enum\DISPLAY");
            }
            catch
            {
                bFailed = true;
            }
                        if (!bFailed & (Display != null))
            {
                foreach (string sMonitorID in Display.GetSubKeyNames())
                {
                    RegistryKey MonitorID = Display.OpenSubKey(sMonitorID);
                    if (MonitorID != null)
                    {
                        foreach (string sPNPID in MonitorID.GetSubKeyNames())
                        {
                            RegistryKey PnPID = MonitorID.OpenSubKey(sPNPID);
                            if (PnPID != null)
                            {
                                string[] sSubkeys = PnPID.GetSubKeyNames();
                                // if (sSubkeys.Contains("Control"))
                                {
                                    if (sSubkeys.Contains("Device Parameters"))
                                    {
                                        RegistryKey DevParam = PnPID.OpenSubKey("Device Parameters");
                                        string sSerial = "";
                                        string sModel = "";
                                        string sSerFind = new string(new char[] { (char)00, (char)00, (char)00, (char)0xff });
                                        string sModFind = new string(new char[] { (char)00, (char)00, (char)00, (char)0xfc });
                                        byte[] bObj = DevParam.GetValue("EDID", null) as byte[];
                                        if (bObj != null)
                                        {
                                            string[] sDescriptor = new string[4];
                                            Encoding ANSI = Encoding.GetEncoding(1252);
                                            sDescriptor[0] = ANSI.GetString(bObj, 0x36, 18);
                                            sDescriptor[1] = ANSI.GetString(bObj, 0x48, 18);
                                            sDescriptor[2] = ANSI.GetString(bObj, 0x5A, 18);
                                            sDescriptor[3] = ANSI.GetString(bObj, 0x6C, 18);
                                            //Search the Keys
                                            foreach (string sDesc in sDescriptor)
                                            {
                                                if (sDesc.Contains(sSerFind))
                                                {
                                                    sSerial = sDesc.Substring(4).Replace("\0", "").Trim(); //4
                                                }
                                                if (sDesc.Contains(sModFind))
                                                {
                                                    sModel = sDesc.Substring(4).Replace("\0", "").Trim(); //4
                                                }
                                            }
                                        }
                                        if (!string.IsNullOrEmpty(sPNPID + sSerFind + sModel + sMonitorID))
                                        {
                                            string fileName = "D:/monitors.txt";
                                            FileStream aFile = new FileStream(fileName, FileMode.OpenOrCreate);
                                            StreamWriter sw = new StreamWriter(aFile);
                                            aFile.Seek(0, SeekOrigin.End);
                                            sw.WriteLine("Модель: " + sModel);
                                            sw.WriteLine("Серийный номер: " + sSerial);
                                            sw.Close();
                                            //MessageBox.Show("Модель: " + sModel + Environment.NewLine + "Серийный номер: " + sSerial);
                                          
                                        }
                                    }
                                }
                            }
                        }
                    }
 
                }
            }
        }
    } 
    }

Так же в коде присутствует: if (sSubkeys.Contains("Control"))

C#
1
2
3
4
5
6
7
8
9
   foreach (string sPNPID in MonitorID.GetSubKeyNames())
                        {
                            RegistryKey PnPID = MonitorID.OpenSubKey(sPNPID);
                            if (PnPID != null)
                            {
                                string[] sSubkeys = PnPID.GetSubKeyNames();
                                // if (sSubkeys.Contains("Control"))
                                {
                                    if (sSubkeys.Contains("Device Parameters"))
Когда он закомментирован, Все работает... Когда не закомментирован - результат не выходит почему то...


Данный код нужно запускать из под консоли...

Спасибо заранее
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.03.2018, 18:16
Ответы с готовыми решениями:

Потоки, как запустить этот код в потоке?
Доброго времени суток, что-то никак я не разжую эти потоки:) Моя программа качает поочерёдно песни с вк: ...

имеется исходный код программы. как его запустить?
ТЕКСТ ПРОГРАММЫ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using...

Как запустить определённый код в отдельном потоке по нажатию кнопки?
как запустить определённый код в отдельном потоке по нажатию кнопки?(этот код бесконечен)

7
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
19.03.2018, 21:06
У меня сработало с раскоментированным
C#
1
if (sSubkeys.Contains("Control"))
Единственные изменения, только в начале:
C#
1
2
3
4
5
6
static void Main(string[] args)
{
     MonitorInfo();
}
 
private static void MonitorInfo()
0
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 5
19.03.2018, 21:31  [ТС]
Понял, спасибо )
У вас ОС какая? На Вин 8-10, Control не срабатывает.

Добавлено через 5 минут
Если скрипт закомментирован, то Сообщения с одним и тем же с/н и моделью монитора выходят. Как можно осуществить проверку, чтобы уникальный монитор выводился один раз. К примеру:
На выводе:
Модель:
Sony
Серийный номер:
1234567
Модель:
Sony
Серийный номер:
1234567
Модель:
Sony
Серийный номер:
2222222

Т.е иногда скрипт повторяет один и тот же монитор несколько раз:-(
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
19.03.2018, 23:15
win7.

Ну можно составлять набор заранее, проверять на уникальность, и потом всей пачкою запивать в файл.

Но наличие Contains("Control") срабатывала как проверка уникальности (для меня на вин7). Может у вас тоже что-то есть как заменитель. К пример у меня

C#
1
MonitorID.GetSubKeyNames()
возвращает 3 строки:

4&2139cb8&0&1.....
5&53dafd4&0&.....
5&53dafd4&0&UID.....

Потом MonitorID.OpenSubKey(sPNPID) для первой и второй дает такие наборы:

"Device Parameters"
"LogConf"
"Properties"

Для третьей дает еще плюс "Control". Может у вас тоже есть какая-то разница между результатами за которую можна зацепиться?

Для самой простой проверки уникальности (по серийнику) что-то такое:

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
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
using System.IO;
 
namespace ConsoleApp8
{
 
    class Program
    {
        static void Main(string[] args)
        {
            MonitorInfo();
        }
        private static void MonitorInfo()
        {
            Microsoft.Win32.RegistryKey Display = Microsoft.Win32.Registry.LocalMachine;
            Boolean bFailed = false;
            try
            {
                Display = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Enum\DISPLAY");
            }
            catch
            {
                bFailed = true;
            }
 
            var result = new Dictionary<string, string>();
 
            if (!bFailed & (Display != null))
            {
                foreach (string sMonitorID in Display.GetSubKeyNames())
                {
                    RegistryKey MonitorID = Display.OpenSubKey(sMonitorID);
                    if (MonitorID != null)
                    {
                        foreach (string sPNPID in MonitorID.GetSubKeyNames())
                        {
                            RegistryKey PnPID = MonitorID.OpenSubKey(sPNPID);
                            if (PnPID != null)
                            {
                                string[] sSubkeys = PnPID.GetSubKeyNames();
                                
                                if (sSubkeys.Contains("Device Parameters"))
                                {
                                    RegistryKey DevParam = PnPID.OpenSubKey("Device Parameters");
                                    string sSerial = "";
                                    string sModel = "";
                                    string sSerFind = new string(new char[] { (char)00, (char)00, (char)00, (char)0xff });
                                    string sModFind = new string(new char[] { (char)00, (char)00, (char)00, (char)0xfc });
                                    byte[] bObj = DevParam.GetValue("EDID", null) as byte[];
                                    if (bObj != null)
                                    {
                                        string[] sDescriptor = new string[4];
                                        Encoding ANSI = Encoding.GetEncoding(1252);
                                        sDescriptor[0] = ANSI.GetString(bObj, 0x36, 18);
                                        sDescriptor[1] = ANSI.GetString(bObj, 0x48, 18);
                                        sDescriptor[2] = ANSI.GetString(bObj, 0x5A, 18);
                                        sDescriptor[3] = ANSI.GetString(bObj, 0x6C, 18);
                                        //Search the Keys
                                        foreach (string sDesc in sDescriptor)
                                        {
                                            if (sDesc.Contains(sSerFind))
                                            {
                                                sSerial = sDesc.Substring(4).Replace("\0", "").Trim(); //4
                                            }
                                            if (sDesc.Contains(sModFind))
                                            {
                                                sModel = sDesc.Substring(4).Replace("\0", "").Trim(); //4
                                            }
                                        }
                                    }
                                    if (!string.IsNullOrEmpty(sPNPID + sSerFind + sModel + sMonitorID))
                                    {
                                        if (!result.ContainsKey(sSerial))
                                        {
                                            result.Add(sSerial, sModel);
                                        }
                                    }
                                }
                                
                            }
                        }
                    }
 
                }
            }
 
            if (result.Any())
            {
                string fileName = "D:/monitors.txt";
                FileStream aFile = new FileStream(fileName, FileMode.OpenOrCreate);
                StreamWriter sw = new StreamWriter(aFile);
                aFile.Seek(0, SeekOrigin.End);
 
                foreach (var keyValue in result)    
                {
                    sw.WriteLine("Модель: " + keyValue.Value);
                    sw.WriteLine("Серийный номер: " + keyValue.Key);
                }
               
                sw.Close();
            }
        }
    }
}
0
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 5
20.03.2018, 17:16  [ТС]
Уважаемый Wlk.
Вопрос в том, что:
if (sSubkeys.Contains("Control")) срабатывает еще и как контролер активных мониторов.
По факту, если включен if (sSubkeys.Contains("Control")), то программа понимает и выдает результат активных мониторов.
Если, if (sSubkeys.Contains("Control")) - выключен, то система выдает список мониторов, присоединенный когда либо к данному ПК.

Как это исправить, не могу понять... Опять повторюсь на win 7 все работает прекрасно, на 8 -ке, 10 -ке при включенном (sSubkeys.Contains("Control"))запущенная программа просто не выдает результат...

Прошу помочь...
Спасибо.
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
20.03.2018, 21:53
Тот код, что я дал в посте выше выдает уникальные (по серийнику) устройства (там нету проверки на Control). Надо было что-то другое?
0
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 5
20.03.2018, 22:23  [ТС]
Wlk, я прошу прощение, если не до конца выдал всю информацию.
уважаемый, Wlk, мне нужно, чтобы система вытаскивала активные мониторы, а не все те, которые когда либо были подключены к системному блоку.
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
20.03.2018, 23:52
Ну понятно. На вин7, видимо, для этого есть критерий - наличие ключа Control. Какой критерий на вин8-10 не знаю, к сожалению.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2018, 23:52
Помогаю со студенческими работами здесь

Запустить код на C# ссылаясь на код из Vb.Net
Как ссылать код из одного проекта на VB.NET на другой проект на C#. Т.е. чтобы в папке было два проекта и проект на с# запускал код vb.net...

Запустить код спустя время
Проще некуда,нужно всего запустить некий код спустя время допустим,через 3 секунды.с# Заранее спасибо.

Модифицировать код так, чтобы появилась возможность его запустить
Помоги запустить в консольном предложени в с# бинарный поиск вот этот код: /* Номер первого элемента в массиве */ size_t first =...

Как запустить код через Windows Form?
Здравствуйте. Помогите пожалуйста разобраться с windows form в Visual Studio Текст программы прилагаю using System; using...

Как по нажатию кнопки запустить консольный код на выполнение?
Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing;...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru