Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
Заблокирован

Передать значение переменной из одной программы в другую

24.03.2014, 23:12. Показов 3249. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый вечер.
Появилась такая задача:передать значение переменной из одной программы в другую ( в моём случае это переменная int a=10).

Реализовать это нужно через обработку сообщения WM_COPYDATA.
Появились проблемы с заполнением структуры COPYDATASTRUCT ( пишет , что IpData не является членом структуры ) .
Перечитал уже многое , но выход так и не нашёл .

Вот код первой программы ( отправителя ):
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
#include <windows.h>
#include <windowsx.h>
#include <vector>  
 
int a=10;   //число , которое нужно передать в 2-ю программму
COPYDATASTRUCT p;  //экземпляр структуры
 
LRESULT CALLBACK HelloWorldWndProc(HWND,UINT,UINT,LONG);
 
HWND hw;  //дескриптор для поиска 2-ой программы 
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{ 
    WNDCLASS WndClass;
    WndClass.style=0;
    WndClass.lpfnWndProc=HelloWorldWndProc;
    WndClass.cbClsExtra=0;
    WndClass.cbWndExtra=0;
    WndClass.hInstance=hInstance;
    WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    WndClass.lpszMenuName=NULL;
    WndClass.lpszClassName=L"Класс1";
 
    if(!RegisterClass(&WndClass))
    {
        MessageBox(NULL,L"Невозможно зарегестрировать класс окна!",L"Ошибка",MB_OK);
        return 0;
    }
 
    HWND hWnd;   //дескриптор окна
    hWnd=CreateWindow(L"Класс1",L"Прога1",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
        CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
    if(!hWnd)
    {
        MessageBox(NULL,L"Невозможно создать окно!",L"Ошибка",MB_OK);
        return 0;
    }
 
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);
 
    MSG Msg;
    while(GetMessage(&Msg,NULL,0,0))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
 
 //заполнение структуры
p.dwData=123;  //любое число
p.cbData=sizeof(a); //размер данных для передачи
p.IpData=&a;  // на первый байт данных
 
return Msg.wParam;
}
 
LRESULT CALLBACK HelloWorldWndProc(HWND hWnd,UINT Message,UINT wParam,LONG lParam)
{
    switch(Message)
    {
    case WM_DESTROY:
        {
        PostQuitMessage(0);
        }break;
 
 
    case WM_COPYDATA:
//отправка сообщения
hw=FindWindow(TEXT("Класс получателя"),TEXT("Получатель"));
if(!hw)MessageBox(NULL, L"Получатель не найден", L"Ошибка", MB_OK);
SendMessage(hw,WM_COPYDATA,(WPARAM)hWnd,(LPARAM)&p);
       break;
   
        return 0;
    }
    return DefWindowProc(hWnd,Message,wParam,lParam);
}
Посмотрите , пожалуйста , что я не так сделал ? Никак ответа не найду . Что-то со структурой не в порядке .

Заранее спасибо за помощь!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2014, 23:12
Ответы с готовыми решениями:

Из одной программы передать значение переменной в другую программу (WM_COPYDATA)
Господа пытаюсь из одной программы передать значение переменной в другую , но , что то в принимающей программе как было значение - 0 так и...

Передать значение переменной в из одной функции в другую
День добрый. Подскажите, имеется код. function time_two(status) { var timeend = new Date(&lt;?php echo $end_date; ?&gt;); ...

Передать значение переменной из одной функции в другую
Добрый день, подскажите как передать значение t из одной функции в другую. из этой void settingrec::interval(QString...

15
19 / 14 / 2
Регистрация: 08.11.2009
Сообщений: 79
24.03.2014, 23:23
Обычно указатели именуются lp (l которая л), а не Ip
0
Заблокирован
24.03.2014, 23:31  [ТС]
Что Вы имеете в виду ? Не пойму)
0
19 / 14 / 2
Регистрация: 08.11.2009
Сообщений: 79
24.03.2014, 23:32
p.IpData=&a; // на первый байт данных

Если компилятор говорит, что IpData не член структуры, то надо посмотреть внимательно и понять, что там lpData
0
Заблокирован
24.03.2014, 23:40  [ТС]
Я вот сижу и читаю , что IpData - это указатель на первый байт данных( Указывает на данные, которые будут переданы в принимающую прикладную программу) .
Может я что-то не так понял ? Вроде ж верно пишу ( я ж переменную a собираюсь передавать ) .
Подскажите что не так , пожалуйста
Уже не первый день мучаюсь да не пойму никак
0
19 / 14 / 2
Регистрация: 08.11.2009
Сообщений: 79
24.03.2014, 23:41
название переменной неправильное. IpData это неправильно. Правильно lpData
Разницу видите?
0
Заблокирован
25.03.2014, 00:03  [ТС]
Аа, вот я даю , два дня мучился . Спасибо !

Добавлено через 17 минут
Извините , можно у Вас ещё кое-что спросить?
Не могу сообразить , как принять значение переменной во 2-ом приложении. Делаю так:
C++
1
2
int a; //переменная, которую должны знаполнить 
COPYDATASTRUCT *pc;  //структура
.........

//получение данных

C++
1
2
3
    case WM_COPYDATA:
        pc=(COPYDATASTRUCT*)lParam;
        a=(pc->lpData);
не могу записать в а значение
подскажите , пожалуйста , как это должно выглядеть?
0
19 / 14 / 2
Регистрация: 08.11.2009
Сообщений: 79
25.03.2014, 00:36
http://msdn.microsoft.com/en-u... s.85).aspx

Сам никогда таким не пользовался, поэтому куска кода попроще нету
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
25.03.2014, 01:25
Цитата Сообщение от Misha_cpp Посмотреть сообщение
как это должно выглядеть?
Из одной программы передать значение переменной в другую программу (WM_COPYDATA) посмотри. И пост №4, там же...
1
Заблокирован
25.03.2014, 11:06  [ТС]
Да я читал это . Всё равно запутался , что и куда . Там почему -то ещё через case делается всё это дело

Добавлено через 38 секунд
Да я как раз по этому примеру и учился ) Но там как-то написано непонятно для меня:
C++
1
2
3
4
5
 switch(pcds->dwData) // Проверяем, те ли данные получаем?
            {
                case MY_ID: // Да, те, которые выслал отправитель
                    value = ((COPYREC*)(pcds->lpData))->value; // Вот оно, 778
            }
можно же как-то без switch обойтись ? и что такое MY_ID?
да и дальше не совсем понятно , что и куда .. там же в примере через структуру переменная объявляется ,а у меня просто

Добавлено через 43 минуты
Можете , пожалуйста , помочь ? Я уже не знаю, что делать . При запуске 2-я программа выводит постоянно ноль , а не 10.
Вот код отправителя:
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
#include <windows.h>
#include <windowsx.h>
#include <vector>  
 
int a=10;   //число , которое нужно передать в 2-ю программму
COPYDATASTRUCT p;  //экземпляр структуры
 
LRESULT CALLBACK HelloWorldWndProc(HWND,UINT,UINT,LONG);
 
HWND hw;  //дескриптор для поиска 2-ой программы 
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{ 
    WNDCLASS WndClass;
    WndClass.style=0;
    WndClass.lpfnWndProc=HelloWorldWndProc;
    WndClass.cbClsExtra=0;
    WndClass.cbWndExtra=0;
    WndClass.hInstance=hInstance;
    WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    WndClass.lpszMenuName=NULL;
    WndClass.lpszClassName=L"Класс1";
 
    if(!RegisterClass(&WndClass))
    {
        MessageBox(NULL,L"Невозможно зарегестрировать класс окна!",L"Ошибка",MB_OK);
        return 0;
    }
 
    HWND hWnd;   //дескриптор окна
    hWnd=CreateWindow(L"Класс1",L"Прога1",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
        CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
    if(!hWnd)
    {
        MessageBox(NULL,L"Невозможно создать окно!",L"Ошибка",MB_OK);
        return 0;
    }
 
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);
 
    MSG Msg;
    while(GetMessage(&Msg,NULL,0,0))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
 
 //заполнение структуры
p.dwData=123;  //любое число
p.cbData=sizeof(a); //размер данных для передачи
p.lpData=&a;  // на первый байт данных
 
return Msg.wParam;
}
 
LRESULT CALLBACK HelloWorldWndProc(HWND hWnd,UINT Message,UINT wParam,LONG lParam)
{
    switch(Message)
    {
    case WM_DESTROY:
        {
        PostQuitMessage(0);
        }break;
 
 
    case WM_COPYDATA:
//отправка сообщения
hw=FindWindow(TEXT("Класс получателя"),TEXT("Получатель"));
if(hw){MessageBox(NULL, L"Получатель найден", L"Ошибка", MB_OK);}
if(!hw){MessageBox(NULL, L"Получатель не найден", L"Ошибка", MB_OK);}
SendMessage(hw,WM_COPYDATA,(WPARAM)hWnd,(LPARAM)&p);
       break;
case WM_LBUTTONDOWN:
hw=FindWindow(TEXT("Класс получателя"),TEXT("Получатель"));
if(hw){MessageBox(NULL, L"Получатель найден", L"Нету ошибки", MB_OK);}
if(!hw){MessageBox(NULL, L"Получатель не найден", L"Ошибка", MB_OK);}
break;
   
        return 0;
    }
    return DefWindowProc(hWnd,Message,wParam,lParam);
}
А вот код получателя:
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
#include <windows.h> 
#include <iostream>
#include <tchar.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int a; //переменная, которую должны знаполнить 
COPYDATASTRUCT *pc;  //структура
 
// Главная функция:
int WINAPI WinMain(HINSTANCE hInst, 
                   HINSTANCE hPrevInst, 
                   LPSTR lpCmdLine,
                   int nCmdShow) 
{
    
    HWND hMainWnd; // создаём дескриптор будущего окошка
    MSG msg;
    WNDCLASSEX wc; // создаём экземпляр, для обращения к членам класса WNDCLASSEX
    wc.cbSize        = sizeof(wc); 
    wc.style         = CS_HREDRAW | CS_VREDRAW|CS_DBLCLKS; 
    wc.lpfnWndProc   = WndProc;
    wc.lpszMenuName  =  0; 
    wc.lpszClassName = L"Класс получателя"; 
    wc.cbWndExtra    = NULL; 
    wc.cbClsExtra    = NULL; 
    wc.hIcon         = LoadIcon(NULL, IDI_WINLOGO); 
    wc.hIconSm       = LoadIcon(NULL, IDI_WINLOGO); 
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW); 
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 
    wc.hInstance     = hInst; 
    if(!RegisterClassEx(&wc)){
       
        MessageBox(NULL, L"Не получилось зарегистрировать класс!", L"Ошибка", MB_OK);
        return NULL; 
    }
    // Функция, создающая окошко:
    hMainWnd = CreateWindow(L"Класс получателя",L"Получатель",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
        CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInst,NULL);
    if(!hMainWnd){
   
        MessageBox(NULL, L"Не получилось создать окно!", L"Ошибка", MB_OK);
        return NULL;
    }
    ShowWindow(hMainWnd, nCmdShow);
    UpdateWindow(hMainWnd);
 
    while(GetMessage(&msg, NULL, NULL, NULL)){ 
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam; 
}
 //обратотка сообщений
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 TCHAR buf[10] = {0};
   switch(uMsg){
    case WM_DESTROY: 
            PostQuitMessage(NULL); 
    break;
    //получение данных
    case WM_COPYDATA:
        pc=(COPYDATASTRUCT*)lParam;
        a=int(pc->lpData);
    break;
    case WM_LBUTTONDOWN:
        _stprintf(buf, TEXT("%d"), a);
         ::MessageBox(NULL, buf, TEXT("Результат"), MB_OK);
         break;
            
    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam); 
    }
return NULL; 
}
Что не так? Скорее всего проблема в получателе(

Добавлено через 8 часов 53 минуты
посмотрите , пожалуйста
очень нужно)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
25.03.2014, 11:29
Во-первых, не там инициализируется COPYDATASTRUCT, то есть, отправитель должен выглядеть так:
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
#include <windows.h>
#include <windowsx.h>
#include <vector>
 
int a=10;   //число , которое нужно передать в 2-ю программму
COPYDATASTRUCT p;  //экземпляр структуры
 
LRESULT CALLBACK HelloWorldWndProc(HWND,UINT,UINT,LONG);
 
HWND hw;  //дескриптор для поиска 2-ой программы
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
    WNDCLASS WndClass;
    WndClass.style=0;
    WndClass.lpfnWndProc=HelloWorldWndProc;
    WndClass.cbClsExtra=0;
    WndClass.cbWndExtra=0;
    WndClass.hInstance=hInstance;
    WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    WndClass.lpszMenuName=NULL;
    WndClass.lpszClassName=L"Класс1";
 
    if(!RegisterClass(&WndClass))
    {
        MessageBox(NULL,L"Невозможно зарегестрировать класс окна!",L"Ошибка",MB_OK);
        return 0;
    }
 
    HWND hWnd;   //дескриптор окна
    hWnd=CreateWindow(L"Класс1",L"Прога1",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
                      CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
    if(!hWnd)
    {
        MessageBox(NULL,L"Невозможно создать окно!",L"Ошибка",MB_OK);
        return 0;
    }
 
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);
 
    // это нужно сделать перед циклом обработки сообщений
 
    p.dwData=123;  //любое число
    p.cbData=sizeof(a); //размер данных для передачи
    p.lpData=&a;  // на первый байт данных
 
    MSG Msg;
    while(GetMessage(&Msg,NULL,0,0))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
 
//заполнение структуры
 
 
    return Msg.wParam;
}
 
LRESULT CALLBACK HelloWorldWndProc(HWND hWnd,UINT Message,UINT wParam,LONG lParam)
{
    switch(Message)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
 
    case WM_LBUTTONDOWN:
        hw=FindWindow(TEXT("UI_CyberForum"),TEXT("Получатель")); // не забудь этот же класс использовать в получателе
        if(hw)
        {
            MessageBox(NULL, L"Получатель найден", L"Нету ошибки", MB_OK);
            SendMessage(hw,WM_COPYDATA,(WPARAM)hWnd,(LPARAM)&p);
        }
        else
        {
            MessageBox(NULL, L"Получатель не найден", L"Ошибка", MB_OK);
        }
        break;
 
        return 0;
    }
    return DefWindowProc(hWnd,Message,wParam,lParam);
}
, а во-вторых, ты же передаешь через COPYDATASTRUCT указатель на int, так и получай его же, соответственно:
C++
1
2
3
4
    case WM_COPYDATA:
        pc=(COPYDATASTRUCT*)lParam;
        a=*((int*)(pc->lpData));
        break;
1
Заблокирован
25.03.2014, 11:48  [ТС]
Спасибо большое, ошибки понял .
А как вывести полученное число через MessageBox ?
Когда вот так пишу выводит ноль :
C++
1
2
3
4
5
6
7
8
9
10
   //получение данных
    case WM_COPYDATA:
        pc=(COPYDATASTRUCT*)lParam;
        a=*((int*)(pc->lpData));
    break;
    //вывод результата
    case WM_LBUTTONDOWN:
        _stprintf(buf, TEXT("%d"), a);
         ::MessageBox(NULL, buf, TEXT("Результат"), MB_OK);
         break;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
25.03.2014, 12:08
У меня выводит число, которое было передано. Если ты перед этим щелкнул мышью на приложении-отправителе, чтобы отослать данные. Без этого естественно будет 0, глобальные переменные инициализируются нулем.
0
Заблокирован
25.03.2014, 12:19  [ТС]
Так я также вроде делаю. Сначала запускаю программу - получатель ( чтобы 1-я прога смогла её найти ) , потом запускаю программу-отправитель , нажимаю в ней левую клавишу мыши ( пишет , что получатель найден ) , потом нажимаю левую кнопку мыши во 2-ой программе и мне выводит ноль .

Я же правильно вывожу ?
C++
1
2
3
4
5
case WM_LBUTTONDOWN:
        {_stprintf(buf, TEXT("%d"), a);
         ::MessageBox(NULL, buf, TEXT("Результат"), MB_OK);
         break;
        }
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
25.03.2014, 12:52
Правильно выводишь. Но после того, как тебе будет показано сообщение, что все в порядке - надо этот MessageBox закрыть, и только потом пытаться выводить полученную информацию, если сообщение "Получатель найден" останется открытым - будет 0...
1
Заблокирован
25.03.2014, 12:58  [ТС]
Спасибо Вам большое за помощь! Вы правильно подметили ) Всё верно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.03.2014, 12:58
Помогаю со студенческими работами здесь

Передать значение переменной из одной функции в другую
Доброго времени суток. Мне нужно передать значение переменных из одной функции в другую. Простой вызов функции с аргументами не подходи,...

Как передать значение переменной из одной формы в другую
Помогите пжлста!Не могу передать значение переменной из одной формы в другую.Пробовал так: В первой форме откуда передаю переменную. ...

Как передать значение переменной из одной формы в другую?
Доброго времени суток! Требуется переменную типа IXMLNode, создаваемую в одной форме использовать в другой... Пробовал способ: extern...

Как передать значение переменной из одной страницы в другую?
Помогите, пожалуйста. У меня имеются две страницы index.php (динамическая) и page.php. В index.php есть переменная, которая определяет...

Как передать значение переменной из одной формы в другую?
У меня есть две формы. на Form1 есть textbox1, на form2 есть label1. Подскажите, пожалуйста, как из textbox1 перенести текст в label1?


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru