4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
1

Нерегулярная ошибка при автозагрузке программы: "Cannot create system shell notification icon"

02.09.2014, 12:03. Показов 9447. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Ребята, подскажите, по такому вопросу у меня есть программа которая была написана мной ещё 2 года назад. В этой программе я предусмотрел запуск самой программы при старте Windows в свёрнутом в трей виде. Всё бы ничё, но иногда программа вместо нивидимого запуска в трей пишет мне вот такую ошибку (см.скриншот).
Как можно исправить это? Кто-нить с этим сталкивался когда-нить?

Вот код как устанавливаю автозапуск по нажатию на CheckBox...

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
void __fastcall TOptions::Run_for_WindowsClick(TObject *Sender)
{
   TCHAR *sVarName1 = name.c_str();
   TCHAR *sKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
   AnsiString text = ExtractFilePath(Application->ExeName)+ExtractFileName(Application->ExeName);
   TCHAR *sVal = text.c_str();
   HKEY hKeyResult = NULL;
   LONG rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE,sKey,0,KEY_ALL_ACCESS,&hKeyResult);
   if (rc == ERROR_SUCCESS)
     {
        if (Run_for_Windows->Checked)
       {
            if(RegSetValueEx(hKeyResult,sVarName1,0,REG_SZ,(BYTE*)sVal,lstrlen(sVal))!=ERROR_SUCCESS)
           {
            RegCloseKey(hKeyResult);
           }
       }
        else
       {
          RegDeleteValue(hKeyResult, sVarName1);
          RegCloseKey(hKeyResult);
       }
     }
}
Считывание из реестра автозапуска

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
 DWORD dwIndex,dwSizeName;
 TCHAR *sKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Run",sParamName[80];
 HKEY hKeyResult = NULL;
 LONG rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE,sKey,0,KEY_ALL_ACCESS,&hKeyResult);//получение параметров данного данного ключа
 
 if (rc == ERROR_SUCCESS)
 {
    for(dwIndex = 0;;dwIndex++)
    {
      dwSizeName = 80;
      if(RegEnumValue(hKeyResult,dwIndex,sParamName,&dwSizeName,NULL,NULL,NULL,NULL)!=ERROR_SUCCESS)
      {
       break;
      }
       if(AnsiString(sParamName)==name)
       {
         Run_for_Windows->Checked = true;
       }
    }
 
  RegCloseKey(hKeyResult);
 }
 else
 {
  ShowMessage("Ошибка считывания параметра запуска из реестра: "+SysErrorMessage(GetLastError()));
 }
 //---------------------------------------------------------------------
Заранее благодарен
Миниатюры
Нерегулярная ошибка при автозагрузке программы: "Cannot create system shell notification icon"  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.09.2014, 12:03
Ответы с готовыми решениями:

cannot create shell notification icon
Есть самописная программа, которая ведет учёт прихода\ухода людей путем сканирования карточек....

Рисуем иконку для Notification.Builder setSmallIcon(int icon)
Что для этого нужно? Можно ли зарегистрировать свой ресурс - картинку из памяти (сам рисую). ...

Ошибка при запуске программы Failed to create OpenGL context for format QSurFaceFormat
Не могу запускать программу Spark ar studio выдет ошибку: Failed to create OpenGL context for...

Chrome notification create - русский язык и utf8
<script> function notifyMe() { if (Notification.permission !== "granted") ...

System Error - ошибка при компиляции программы.
Помогите, пожалуйста разобраться с ошибкой. Проект VB (база данных, DAO 3,51) изначально...

33
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
02.09.2014, 13:45 2
CheckBoxClick вообще -по моему опыту- не очень надежная штука. Такое ощущение, что состояние чекбокса меняется "в процессе" работы этой подпрограммы и от этого возникают коллизии (иногда).
0
Почетный модератор
Эксперт С++
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
02.09.2014, 13:52 3
Цитата Сообщение от nick42 Посмотреть сообщение
CheckBoxClick вообще -по моему опыту- не очень надежная штука. Такое ощущение, что состояние чекбокса меняется "в процессе" работы этой подпрограммы и от этого возникают коллизии (иногда).
Если изображать Дану Скалли, то не должно быть ничего такого, но лично у меня сложилось впечатление, что он любит изредка сам себя нажимать.

Цитата Сообщение от Sasha Посмотреть сообщение
Всё бы ничё, но иногда программа вместо нивидимого запуска в трей пишет мне вот такую ошибку.
Как можно исправить это?
Потихоньку. Ключевое слово иногда. Следовательно надо завести какой-либо лог и везде подряд протоколировать состояние и все изменения.
Если нужно быстрое решение, то сменить (а почему бы и не попробовать) данный компонент на какой-либо другой (BitBtn, к примеру).
0
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
02.09.2014, 13:59 4
ПС кроме того, присваивая ему значение (.. = true), ты запускаешь обработчик OnClick; тот в свою очередь снова лезет открывать ветку реестра... . А операции с реестром - не мгновенные по времени.
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
02.09.2014, 15:01 5
Цитата Сообщение от Sasha Посмотреть сообщение
Всё бы ничё, но иногда программа вместо нивидимого запуска в трей пишет мне вот такую ошибку (см.скриншот).
Как можно исправить это? Кто-нить с этим сталкивался когда-нить?
Создавать иконку в трее можно не сразу после автостарта, а спустя некоторое
время, пока оболочка (explorer.exe) не будет полностью проинициализирована.
Когда это произойдет, придет оконное сообщение "TaskbarCreated".
То же самое случается при перезапуске оболочки. Если не отреагировать на
данное сообщение, иконка потеряется.
4
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
02.09.2014, 15:24  [ТС] 6
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Если нужно быстрое решение, то сменить (а почему бы и не попробовать) данный компонент на какой-либо другой (BitBtn, к примеру).
CheckBox лучше и проще. Тем более данные с рееестра он считывает чтобы поставить сам себя тогда когда я лезу в форму с настройками и при открытии этой формы в событии FormShow он и считывает значение ключа реестра чтобы поставить галочку.

Вот скриншот
Миниатюры
Нерегулярная ошибка при автозагрузке программы: "Cannot create system shell notification icon"  
0
Почетный модератор
Эксперт С++
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
02.09.2014, 16:09 7
Цитата Сообщение от Sasha Посмотреть сообщение
CheckBox лучше и проще
Это не гарантия работоспособности.
Но я вас ни в коем случае не отговариваю от его использования. Но лучше заведите себе булевскую переменную.
И вообще, при старте приложения, как советует Убежденный, уходите в ожидание TaskbarCreated, а по его приходу проверяйте состояние своей булевской переменной-приватного члена формы, и уже от этого вот предпринимайте дальнейшие действия (выставление галки в чекбокс, работу с реестром, прорисовку значков в трее и так далее).

И еще раз, Sasha, обращаю ваше внимание на тот факт, что лучший и простой CheckBox
Цитата Сообщение от SatanaXIII Посмотреть сообщение
любит сам себя нажимать
Положите на форму чекбокс и пропишите, как в вашем примере, ему какую-либо сигнализацию нажатия:
C++
1
2
3
4
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
ShowMessage( "Click!" );
}
Понажимайте на него, убедитесь, что событие работает.
Теперь положите на форму кнопку и пропишите в ней:
C++
1
2
3
4
void __fastcall TForm1::Button1Click(TObject *Sender)
{
CheckBox1->Checked = true;
}
Нажмите на кнопку и поглядите что произойдет.
В чекбоксе не просто появится флажок, произойдет событие его нажатия.

А теперь вернитесь к своему первому посту и еще раз его внимательно просмотрите.
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
02.09.2014, 16:16  [ТС] 8
Цитата Сообщение от SatanaXIII Посмотреть сообщение
И вообще, при старте приложения, как советует Убежденный, уходите в ожидание TaskbarCreated
Честно говоря я вообще не знаю что это такое.......((((((((((((((((((((((
0
Почетный модератор
Эксперт С++
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
02.09.2014, 16:37 9
Цитата Сообщение от Sasha Посмотреть сообщение
что это такое
Возьмите за пример любимый UI класс-перехватчик, переопределите им класс свей стартовой формы так, чтобы она слушала событие TaskbarCreated (через карту сообщений (MESSAGE_MAP)) с помощью какого-либо WaitfFor, и, как только событие придет, продолжала работу.
Или можно попробовать залезть прям в само приложение, а не форму - подредактировать Project.cpp на предмет того же прослушивания.
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.09.2014, 20:41 10
Цитата Сообщение от Убежденный Посмотреть сообщение
Создавать иконку в трее можно не сразу после автостарта, а спустя некоторое
время, пока оболочка (explorer.exe) не будет полностью проинициализирована.
Когда это произойдет, придет оконное сообщение "TaskbarCreated".
То же самое случается при перезапуске оболочки. Если не отреагировать на
данное сообщение, иконка потеряется.
Только, я не пойму там ручное создание иконки, или как обычно компонентом? Если компонентом то как бы отпадает "ручное создание".

Добавлено через 3 минуты
Цитата Сообщение от nick42 Посмотреть сообщение
CheckBoxClick вообще -по моему опыту- не очень надежная штука. Такое ощущение, что состояние чекбокса меняется "в процессе" работы этой подпрограммы и от этого возникают коллизии (иногда).
Это чет вообще даже не понял.
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
30.09.2014, 17:36  [ТС] 11
Вот написал обработку сообщения TaskbarCreated. Как Вы думаете так правильно
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
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
 TrayIcon1->Visible = false;
}
//---------------------------------------------------------------------------
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
 static UINT s_uTaskbarRestart;
 
 switch(uMessage)
  {
    case WM_CREATE:
    s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
    break;
    default:
 
  if(uMessage == s_uTaskbarRestart)
   {
     Form1->TrayIcon1->Visible = true;
   }
  }
return DefWindowProc(hWnd, uMessage, wParam, lParam);
}
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 WindowProc = WndProc;
 Form1->Visible = false;
 TrayIcon1->Visible = true;
}
//---------------------------------------------------------------------------
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
02.10.2014, 10:23  [ТС] 12
Как показала практика почему-то не заходит выполнение в функцию WndProc, потому что ShowMessage не срабатывает. Ребята подскажите, пожалуйста, как правильно?
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
109
110
111
112
113
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include "tchar.h"
#pragma hdrstop
 
#include "Unit1.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
 name = ExtractFileName(ChangeFileExt(Application->ExeName,""));
 Form1->Visible = false;
 //TrayIcon1->Visible = false;
}
//---------------------------------------------------------------------------
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
 ShowMessage("В функции");
 static UINT s_uTaskbarRestart;
 
 switch(uMessage)
  {
    case WM_CREATE:
    s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
    
    break;
    default:
 
  if(uMessage == s_uTaskbarRestart)
   {
     
     Form1->TrayIcon1->Visible = true;
   }
  }
return DefWindowProc(hWnd, uMessage, wParam, lParam);
}
//----------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 
 WindowProc = WndProc;
 
 DWORD dwIndex,dwSizeName;
 TCHAR *sKey = L"Software\\Microsoft\\Windows\\CurrentVersion\\Run",sParamName[80];
 HKEY hKeyResult = NULL;
 LONG rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE,sKey,0,KEY_ALL_ACCESS,&hKeyResult);//получение параметров данного данного ключа
 
 if (rc == ERROR_SUCCESS)
 {
    for(dwIndex = 0;;dwIndex++)
    {
      dwSizeName = 80;
      if(RegEnumValue(hKeyResult,dwIndex,sParamName,&dwSizeName,NULL,NULL,NULL,NULL)!=ERROR_SUCCESS)
      {
       break;
      }
       if(AnsiString(sParamName)==name)
       {
         Run_for_Windows->Checked = true;
       }
    }
 
  RegCloseKey(hKeyResult);
 }
 TrayIcon1->Visible = true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Run_for_WindowsClick(TObject *Sender)
{
   TCHAR *sVarName1 = name.w_str();
   TCHAR *sKey = L"Software\\Microsoft\\Windows\\CurrentVersion\\Run";
   UnicodeString text = ExtractFilePath(Application->ExeName)+ExtractFileName(Application->ExeName);
   TCHAR *sVal = text.c_str();
   HKEY hKeyResult = NULL;
   LONG rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE,sKey,0,KEY_ALL_ACCESS,&hKeyResult);
   if (rc == ERROR_SUCCESS)
     {
        if (Run_for_Windows->Checked)
       {
            if(RegSetValueEx(hKeyResult,sVarName1,0,REG_SZ,(BYTE*)sVal,lstrlen(sVal)*sizeof(TCHAR))!=ERROR_SUCCESS)
           {
            RegCloseKey(hKeyResult);
           }
       }
        else
       {
          RegDeleteValue(hKeyResult, sVarName1);
          RegCloseKey(hKeyResult);
       }
     }
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::N1Click(TObject *Sender)
{
 Form1->Show();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Form1->Hide();
}
//---------------------------------------------------------------------------
0
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
02.10.2014, 22:55 13
Как минимум, на момент выполнения FormCreate сообщение WM_CREATE уже получено.
Собственно оно и вызывает FormCreate.

Добавлено через 4 минуты
Да и где гарантия того, что на момент создания формы событие TaskbarCreated уже не свершилось?

Добавлено через 1 час 44 минуты
Так у меня работает:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
UINT TBC;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WndProc(Winapi::Messages::TMessage &Message)
{
    TForm::WndProc(Message);
    if (Message.Msg == TBC)
    {
        ShowMessage("TaskbarCreated");
    }
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    TBC = RegisterWindowMessage(TEXT("TaskbarCreated"));
}
//---------------------------------------------------------------------------
1
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
03.10.2014, 15:00  [ТС] 14
FIL, Хм... странно сделал код как У вас и ничего больше. Знаю на 100%, что моя программа стоит в автозагрузке и перезагружаю компьютер. Компьютер загружается и я жду в надежде ShowMessage c надписью TaskbarCreated, но почему-то это сообщение не появляется, а открывается сразу моя форма. Что это означает? Это наверно означает, что оконное собщение не пришло на форму или как? Работаю в C++ Builder XE 4
0
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
03.10.2014, 15:12 15
Цитата Сообщение от Sasha Посмотреть сообщение
сообщение не появляется
Скорее всего (как я писал выше) на момент запуска приложения событие TaskbarCreated уже произошло.
Для проверки можно выгрузить Эксплорер и запустить его заново.
1
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
03.10.2014, 16:07  [ТС] 16
Цитата Сообщение от FIL Посмотреть сообщение
выгрузить Эксплорер
Всмысле завершиить процес explorer.exe?
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.10.2014, 17:38 17
Да, а после также запустить на выполнение в диспетчере.
1
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
03.10.2014, 18:15  [ТС] 18
Цитата Сообщение от Avazart Посмотреть сообщение
Да, а после также запустить на выполнение в диспетчере.
Да так работает. Так а что же тогда нужно сделать чтобы с автозапуска работало также?
0
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
03.10.2014, 18:20 19
При запуске пытайся отрисовать иконку с обработкой ошибки.
Если получится, то отрисует, если нет, то отрисует при получении события TaskbarCreated.
1
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
03.10.2014, 18:27  [ТС] 20
Цитата Сообщение от FIL Посмотреть сообщение
При запуске пытайся отрисовать иконку с обработкой ошибки.
Я так понял в событии FormCreate необходимо отловить ошибку создания иконки в трее через try и catch()? Верно я понял?
0
03.10.2014, 18:27
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.10.2014, 18:27
Помогаю со студенческими работами здесь

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

При автозагрузке программы, не восстанавливаются настройки из config.ini
Ситуация такая, при обычном запуске программы, все прекрасно работает, все настройки, находящиеся в...

Нежелательное мелькание всех форм программы при автозагрузке
nXIBRY90z5w Этот короткий видеоролик демонстрирует нежелательную (преждевременную) прорисовку всех...

Ошибка при автозагрузке
Добавил в программу дерево каталогов и после этого при автозагрузке программы стала вылазить ошибка...

Как поместить ярлычок программы в Icon Tray при запуске?
Привет всем! Подскажите, а можно ли сделать так, что при наступлении какого-либо события...

Не выполняется часть кода при автозагрузке/запуске из другой программы
Здравствуйте. Столкнулся с такой проблемой: есть программа, прописанная в автозапуск, которая...


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

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

Новые блоги и статьи
Распознавание изображений (компьютерное зрение) на C++
InfoMaster 20.01.2025
Введение в компьютерное зрение и основы работы с изображениями Компьютерное зрение представляет собой одну из наиболее динамично развивающихся областей информационных технологий, позволяющую. . .
Какой язык программировани­я лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru