Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ и WinAPI

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Игорь с++
440 / 463 / 16
Регистрация: 26.01.2011
Сообщений: 2,033
#1

Из одной программы передать значение переменной в другую программу (WM_COPYDATA) - C++ WinAPI

20.05.2012, 00:59. Просмотров 1215. Ответов 4
Метки нет (Все метки)

Господа пытаюсь из одной программы передать значение переменной в другую , но , что то в принимающей программе как было значение - 0 так и остаётся.Вот код как пытаюсь передать-
C++
1
2
3
4
5
6
7
8
9
10
 static int a=1;
        COPYDATASTRUCT cd;
cd.dwData=a;
        HWND hw=0;
   switch (message)                  /* handle the messages */
    {
           case WM_CHAR:
   hw=FindWindow(NULL,"z");
SendMessage(hw,WM_COPYDATA,0,(LPARAM) &cd);
                break;
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2012, 00:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Из одной программы передать значение переменной в другую программу (WM_COPYDATA) (C++ WinAPI):

Передать значение переменной из одной программы в другую - C++ WinAPI
Всем добрый вечер. Появилась такая задача:передать значение переменной из одной программы в другую ( в моём случае это переменная int...

Как передать сообщение из одной программы в другую? - C++ WinAPI
Например , у меня есть такой кусок кода: BOOL CALLBACK fnEnumWindowProc(HWND hwnd,LPARAM lParam){ fprintf(stdout,"%8.8x\n",...

Передать процессу значение переменной из другого процесса - C++ WinAPI
Здравствуйте. У меня программа состоит из окна с кнопкой и двух процессов. При нажатии на кнопку создаю процессы через CreateProcess но мне...

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

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

Как передать значение переменной из одной формы в другую - C#
Здравствуйте! Подскажите, пожалуйста: string h = this.textBox1.text; другая форма string a= h; как так сделать:)

4
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25295 / 16943 / 5350
Регистрация: 22.10.2011
Сообщений: 29,979
Записей в блоге: 6
20.05.2012, 02:49 #2
Проверил. Высылаю так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
                    COPYDATASTRUCT cd;
                    typedef struct tagCOPYREC // Эту структуру будешь передавать
                    {
                        int value;
                    } COPYREC;
 
                    COPYREC cr;
                    cr.value = 778; // Вот то число, которое надо передать !!!
 
                    cd.dwData = 123; // А это - просто опознавательный знак твоей WM_COPYDATA
                    cd.cbData = sizeof(COPYREC);
                    cd.lpData = &cr;
 
                    HWND hw = 0;
                    hw = FindWindow(NULL, _T("TheForm"));
                    SendMessage(hw, WM_COPYDATA, 0,(LPARAM) &cd);
, получаю в программе на Билдере - вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::WMCopyData(TMessage &Message)
{
    PCOPYDATASTRUCT pcds =
        reinterpret_cast<PCOPYDATASTRUCT>(Message.LParam);
    if(pcds->dwData == MY_ID)
    {
        int i = static_cast<COPYREC*>(pcds->lpData)->value;
        Memo1->Lines->Add(IntToStr(i));
    }
    else TForm::Dispatch(&Message);
}
, в результате в мемо пишется 778
1
Игорь с++
440 / 463 / 16
Регистрация: 26.01.2011
Сообщений: 2,033
20.05.2012, 12:25  [ТС] #3
Извеняюсь,но передаётся у меня какая то ерунда число - 2292912 вместо числа - 778
вот код отправителя-
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
COPYDATASTRUCT cd;
typedef struct tagCOPYREC // ГќГІГі ñòðóêòóðó áóäåøü ïåðåäГ*ГўГ*ГІГј
                    {
                        int value;
                    } COPYREC;
 
                    COPYREC cr;
                    cr.value = 778; // Âîò ГІГ® ÷èñëî, êîòîðîå Г*Г*äî ïåðåäГ*ГІГј !!!
 
                    cd.dwData = 123; // ГЂ ГЅГІГ® - ïðîñòî îïîçГ*Г*ГўГ*òåëüГ*ûé Г§Г*Г*ГЄ òâîåé WM_COPYDATA
                    cd.cbData = sizeof(COPYREC);
                    cd.lpData = &cr;
 
        HWND hw=0;
 static int r;
   switch (message)                  /* handle the messages */
    {
           case WM_CHAR:
   hw=FindWindow(NULL,"z");
r=SendMessage(hw,WM_COPYDATA,0,(LPARAM) &cd);
  if(r!=0){Beep(500,500);}
                break;
Вот получатель-
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
PCOPYDATASTRUCT pcds ;
typedef struct tagCOPYREC 
                    {
                        int value;
                    } COPYREC;
 
COPYREC cr;
                    cr.value ;
                    
        static char a2[10]={0};
        HDC hdc;
        PAINTSTRUCT ps;
    switch (message)                  /* handle the messages */
    {
           case WM_CREATE:
           SetTimer(hwnd,1,60,0);
                break;
                
                case WM_TIMER:
           itoa(cr.value,a2,10);
           InvalidateRect(hwnd,NULL,TRUE);
                     break;
                
                
                case WM_PAINT:
                     hdc=BeginPaint(hwnd,&ps);
                TextOut(hdc,0,0,a2,strlen(a2));
                     EndPaint(hwnd,&ps);
                     break;
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25295 / 16943 / 5350
Регистрация: 22.10.2011
Сообщений: 29,979
Записей в блоге: 6
20.05.2012, 12:48 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Где именно в получателе обработка WM_COPYDATA?

Добавлено через 13 минут
Вот получатель, отправитель - тот же, что и выше:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#define MY_ID 123
 
typedef struct tagCOPYREC
{
    int value;
} COPYREC;
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int value;
    COPYDATASTRUCT *pcds;
 
    switch (message)
    {
        case WM_COPYDATA:
            pcds = (COPYDATASTRUCT*) lParam;
            switch(pcds->dwData) // Проверяем, те ли данные получаем?
            {
                case MY_ID: // Да, те, которые выслал отправитель
                    value = ((COPYREC*)(pcds->lpData))->value; // Вот оно, 778
            }
            break;
    // ...
1
Игорь с++
440 / 463 / 16
Регистрация: 26.01.2011
Сообщений: 2,033
20.05.2012, 19:47  [ТС] #5
UI, Спасибо огромное всё работает как надо!!!!!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2012, 19:47
Привет! Вот еще темы с ответами:

Как передать значение переменной из одной формы в другую? - C#
Здравствуйте! я пробую передать значение через отдельный статический класс, но оно попадает туда не сразу, а только после повторного...

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

Как передать значение переменной из одной функции в другую функцию - C++
нужно передать значение sum1 , sum2 , sum3 из каждой функции в главную . помогите , пожалуйста . #include &quot;stdafx.h&quot; #include...

Передать значение переменной в другую форму - C#
При запуске программы, главной точкой программы остается главная форма, вот при инициализации, я сразу же запускаю другую форму...


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

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

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