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

Функция EnumWindows()

22.03.2014, 13:45. Показов 8553. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
У меня возникла такая проблема: нужна разработать две программы , одна с которых получает перечень всех заголовков окон в системе и передаёт его второй программе.
Не могу разобраться , как это сделать . Это как лучше реализовывать - через консоль и формы ? Прочитал о функции EnumWindows(), которая перечисляет все окна верхнего уровня на экране, передавая дескриптор каждого окна, в свою очередь, в определяемую программой функцию повторного вызова.

BOOL EnumWindows
(
WNDENUMPROC lpEnumFunc, // указатель на функцию обратного вызова
LPARAM 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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <windows.h> // заголовочный файл, содержащий WINAPI
PCOPYDATASTRUCT p;
    char szAppName[] = "Мой класс"; 
    char  szWinCaption[]="Программа-приёмник";
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
//просмотреть окна всех процессов системы
 
BOOL CALLBACK EnumWndProc ( HWND hWnd, LPARAM lParam)
{char szWindowName [71];
 char szClassName [31];
//получаем заголовок и класс окна
GetWindowText (hWnd,(LPWSTR)szWindowName, 70);
GetClassName (hWnd ,(LPWSTR)szClassName, 30);
//проверяем полученные заголовок и имя класса с szWinCaption и szAppName 
if((strcmp (szWindowName,szWinCaption )==0) && (strcmp (szClassName, szAppName==0))
{
//...
}
return (TRUE);
}
 
// Главная функция:
int WINAPI WinMain(HINSTANCE hInst, // дескриптор экземпляра приложения
                   HINSTANCE hPrevInst, // не используем
                   LPSTR lpCmdLine, // не используем
                   int nCmdShow) // режим отображения окошка
{
    HWND hwnd; // создаём дескриптор будущего окошка
    MSG 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 = (LPCWSTR)szAppName; // указатель на имя класса
    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; // возвращаем, следовательно, выходим из WinMain
    }
    // Функция, создающая окошко:
    hwnd = CreateWindow(
        (LPWSTR)szAppName, // имя класса
        (LPWSTR)szWinCaption, // имя окошка 
        WS_OVERLAPPEDWINDOW | WS_VSCROLL, 
        CW_USEDEFAULT, 
        NULL, 
        CW_USEDEFAULT, 
        NULL, 
        (HWND)NULL,
        NULL, 
        HINSTANCE(hInst), 
        NULL); 
    if(!hwnd){
        // в случае некорректного создания окошка (неверные параметры и тп):
        MessageBox(NULL, L"Не получилось создать окно!", L"Ошибка", MB_OK);
        return NULL;
    }
    ShowWindow(hwnd, nCmdShow); // отображаем окошко
    UpdateWindow(hwnd); // обновляем окошко
 
    while(GetMessage(&msg, NULL, NULL, NULL)){ // извлекаем сообщения из очереди, посылаемые фу-циями, ОС
        TranslateMessage(&msg); // интерпретируем сообщения
        DispatchMessage(&msg); // передаём сообщения обратно ОС
    }
    EnumWindows((WNDENUMPROC) EnumWndProc, NULL);
    return msg.wParam; // возвращаем код выхода из приложения
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
 
 
 
    switch(uMsg){
    case WM_DESTROY: // если окошко закрылось, то:
        PostQuitMessage(NULL); // отправляем WinMain() сообщение WM_QUIT
        break;
    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam); // если закрыли окошко
    }
    return NULL; // возвращаем значение
}
Не совсем получается с функцией BOOL CALLBACK EnumWndProc ( HWND hWnd, LPARAM lParam).

Посмотрите , пожалуйста , как это можно решить ?
Заранее спасибо за помощь.

Добавлено через 9 минут
что-то я запутался уже :
C++
1
2
3
4
5
BOOL CALLBACK EnumWindowsProc
(
    HWND hwnd,  // дескриптор родительского окна
    LPARAM lParam   // определяемое программой значение
)
hwnd- это дескриптор какого окна? какой-то определённой программы что-ли ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.03.2014, 13:45
Ответы с готовыми решениями:

EnumWindows
Мне нужно получить дескриптор окна в dll. я использую функцию EnumWindows, в которой меняю обработчик событий приложения на свой MyWndProc....

EnumWindows - ошибка в коде
Нашел вот интернете такой код, немного подправил его, а то куча ошибок сыпалось: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE...

Как корректно вызвать EnumWindows в классе?
собственно, сам вопрос уже описан в теме, но вот к примеру, есть у меня заголовочный файл в котором я описал класс ...

6
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
22.03.2014, 16:44
Цитата Сообщение от VASYA_A Посмотреть сообщение
это дескриптор какого окна?
Это и есть тот дескриптор (окна верхнего уровня), который был найден функцией. Вот в 13 и 14 строках ты и получаешь класс и текст этого окна. И так для каждого окна верхнего уровня, пока EnumWindowsProc не вернет FALSE...
1
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
22.03.2014, 18:51  [ТС]
Я вот попытался сделать как-то так, чтобы заголовки передавались в LISTBOX , но выдаёт ошибку по поводу типов. Вот код:
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
#include <windows.h>
#include <windowsx.h>
#include <vector>
 
 
LRESULT CALLBACK HelloWorldWndProc(HWND,UINT,UINT,LONG);
BOOL CALLBACK MyEnum(HWND hWnd,LPARAM lParam);
HWND ListBox1;
 
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"MyWindow";
 
    if(!RegisterClass(&WndClass))
    {
        MessageBox(NULL,L"Невозможно зарегестрировать класс окна!",L"Ошибка",MB_OK);
        return 0;
    }
 
    HWND hWnd;
    hWnd=CreateWindow(L"MyWindow",L"MyWindow",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);
    }
 
    return Msg.wParam;
}
 
BOOL CALLBACK MyEnum(HWND hWnd,LPARAM lParam)
{
    LPTSTR  WindowText = " ", str = " ";
    GetWindowText(hWnd, WindowText, 255);
    GetClassName(hWnd,str,255);
    SendMessageA(ListBox1,LB_ADDSTRING,0,(WPARAM)str);
    SendMessageA(ListBox1,LB_ADDSTRING,0,(WPARAM)WindowText);
    return true;
 }
 
LRESULT CALLBACK HelloWorldWndProc(HWND hWnd,UINT Message,UINT wParam,LONG lParam)
{
    switch(Message)
    {
    case WM_DESTROY:
        {
        PostQuitMessage(0);
        }break;\
    case WM_LBUTTONDOWN:
        EnumWindows(MyEnum, 0);
       break;
      case WM_CREATE:
        {
 
ListBox1=CreateWindowEx(0,L"listbox",0,WS_VISIBLE|WS_CHILD|WS_VSCROLL|WS_BORDER|WS_HSCROLL,50,50,650,300,hWnd,0,0,0);
        }break;
        return 0;
    }
    return DefWindowProc(hWnd,Message,wParam,lParam);
}
Проблема кроется вот здесь :
C++
1
2
3
LPTSTR WindowText = " ", str = " ";
    GetWindowText(hWnd, WindowText, 255);
    GetClassName(hWnd,str,255);
пишет:
:error C2440: 'initializing' : cannot convert from 'const char [2]' to 'LPTSTR'

Помогиите, пожалуйста , я уже и не знаю, что делать дальше
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
24.03.2014, 19:52
Цитата Сообщение от VASYA_A Посмотреть сообщение
я уже и не знаю, что делать дальше
VS не держу, использую GCC, сделал так:
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
#define UNICODE
 
#include <windows.h>
#include <windowsx.h>
#include <vector>
 
 
LRESULT CALLBACK HelloWorldWndProc(HWND,UINT,UINT,LONG);
BOOL CALLBACK MyEnum(HWND hWnd,LPARAM lParam);
HWND ListBox1;
 
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"MyWindow";
 
    if(!RegisterClass(&WndClass))
    {
        MessageBox(NULL,L"Невозможно зарегестрировать класс окна!",L"Ошибка",MB_OK);
        return 0;
    }
 
    HWND hWnd;
    hWnd=CreateWindow(L"MyWindow",L"MyWindow",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);
    }
 
    return Msg.wParam;
}
 
BOOL CALLBACK MyEnum(HWND hWnd,LPARAM lParam)
{
    TCHAR WindowText[255] = {0};
    TCHAR str[255] = {0};
    GetWindowText(hWnd, WindowText, 255);
    GetClassName(hWnd,str,255);
    SendMessage(ListBox1,LB_ADDSTRING,0,(LPARAM)str);
    SendMessage(ListBox1,LB_ADDSTRING,0,(LPARAM)WindowText);
    return true;
}
 
LRESULT CALLBACK HelloWorldWndProc(HWND hWnd,UINT Message,UINT wParam,LONG lParam)
{
    switch(Message)
    {
        case WM_DESTROY:
        {
            PostQuitMessage(0);
        }
        break;
    case WM_LBUTTONDOWN:
        EnumWindows(MyEnum, 0);
        break;
    case WM_CREATE:
        {
            ListBox1=CreateWindowEx(0,L"listbox",0,WS_VISIBLE|WS_CHILD|WS_VSCROLL|WS_BORDER|WS_HSCROLL,50,50,650,300,hWnd,0,0,0);
            SendMessage(ListBox1, WM_SETFONT, WPARAM(GetStockObject(DEFAULT_GUI_FONT)), 1);
        }
        break;
    default:
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}
- прекрасно заполняется LISTBOX...
1
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
26.03.2014, 12:14  [ТС]
Ещё раз здравствуйте )
Я вот пару дней думал над этой задачей и вроде что-то написал , но ListBox в получателе всё равно не хочет заполняться . Не знаю, что делать .
Вот 1-я программа:
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
#include <windows.h>
#include <windowsx.h>
#include <vector>  
 
using namespace std;
vector<TCHAR*> data;   //для переобразования
 
COPYDATASTRUCT p;  //экземпляр структуры
 
LRESULT CALLBACK HelloWorldWndProc(HWND,UINT,UINT,LONG);
BOOL CALLBACK MyEnum(HWND hWnd,LPARAM lParam);
HWND ListBox1;
HWND hw;
 
 
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"Класс отправителя";
 
    if(!RegisterClass(&WndClass))
    {
        MessageBox(NULL,L"Невозможно зарегестрировать класс окна!",L"Ошибка",MB_OK);
        return 0;
    }
 
    HWND hWnd;
    hWnd=CreateWindow(L"Класс отправителя",L"Отправитель",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(data);
p.lpData=&data;
 
 
    MSG Msg;
    while(GetMessage(&Msg,NULL,0,0))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
 
 
 
    return Msg.wParam;
}
 
BOOL CALLBACK MyEnum(HWND hWnd,LPARAM lParam)
{
    TCHAR  WindowText [255]; TCHAR str [255] ;
    GetWindowText(hWnd, (LPWSTR)WindowText, 255);
    GetClassName(hWnd,(LPWSTR)str,255);
    SendMessage(ListBox1,LB_ADDSTRING,0,(LPARAM)str);
    SendMessage(ListBox1,LB_ADDSTRING,0,(LPARAM)WindowText);
 
    // добавление str в массив
    data.push_back(str);
    // добавление  WindowText в массив
    data.push_back(WindowText);
    return true;
 }
 
LRESULT CALLBACK HelloWorldWndProc(HWND hWnd,UINT Message,UINT wParam,LONG lParam)
{
    switch(Message)
    {
    case WM_DESTROY:
        {
        PostQuitMessage(0);
        }break;
    case WM_LBUTTONDOWN:
        EnumWindows(MyEnum, 0);
        break;
    case WM_RBUTTONDOWN:
        hw=FindWindow(TEXT("Класс получателя"),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;
    /*case WM_CREATE:
        {
 //создание listbox-a
ListBox1=CreateWindowEx(0,L"listbox",0,WS_VISIBLE|WS_CHILD|WS_VSCROLL|WS_BORDER|WS_HSCROLL,50,50,200,500,hWnd,0,0,0);
        }break;*/
        return 0;
    }
    return DefWindowProc(hWnd,Message,wParam,lParam);
}
Вот 2-я программа:
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
#include <windows.h> 
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
void myFunc(TCHAR* str);
 
vector<TCHAR*>* data;   //данные ,которые будут получены
 
HWND ListBox1; //дескриптор списка
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)
{
 
   switch(uMsg){
    case WM_DESTROY: 
        PostQuitMessage(NULL); 
        break;
    //получение данных
    case WM_COPYDATA:
        pc=(COPYDATASTRUCT*)lParam;
        data=(vector<TCHAR*>*)pc->lpData;  //запись
        for_each(data->begin(), data->end(), myFunc);
        break;
     //создание списка в получателе
     case WM_CREATE:
        {    ListBox1=CreateWindowEx(0,L"listbox",0,WS_VISIBLE|WS_CHILD|WS_VSCROLL|WS_BORDER|WS_HSCROLL,50,50,300,600,hWnd,0,0,0);
        }
        break;
     
 default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam); 
    }
return NULL; 
}
 
void myFunc(TCHAR* str)   //функция для записи в listbox
{
    SendMessage(ListBox1,LB_ADDSTRING,0,(LPARAM)str);
    cout << *str << endl;   
}
Ошибок не выдаёт ничего , но и не хочет работать . 1-я программа 2-ю находит , но ListBox во второй не заполняется всё равно .

Прошу Вас о помощи , так как в тупик зашёл уже . Ещё и то , что ошибок никаких не выдаёт смущает)

Заранее спасибо !

Добавлено через 13 часов 7 минут
Пожаалуйста , посмотрите )

Добавлено через 11 минут
очень Вас прошу) может пропустил я что-то где-то
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
26.03.2014, 14:17
Цитата Сообщение от VASYA_A Посмотреть сообщение
может пропустил я что-то где-то
Может, не надо пытаться передавать через WM_COPYDATA классы? То, что ты передал указатель на std::vector - это еще совсем не значит, что получил доступ к тому, что в этом векторе хранится. Передавай массив TCHAR-ов вместо вектора.
1
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
26.03.2014, 23:02  [ТС]
Спасибо , но можете , пожалуйста , помочь ? Я не знаю, как именно это написать . Очень прошу помоши

Добавлено через 1 час 5 минут
Помогите , пожалуйста , с реализацией
Если честно , я не слишком силен в преобразовании всех этих типов (
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2014, 23:02
Помогаю со студенческими работами здесь

EnumWindows перебор HWND до выполнения условий
Рассмотрим ситуацию на примере блокнота. Как оно должно быть. Запускаем программу. Программа ждет появление блокнота с содержимым...

Поиск окна по частичо изменяющему заголовку. Функция EnumWindows
Создал переменную и присвоил ей указатель на окно используя точный заголовок окна. Если название окна будет частично изменяться то как...

EnumWindows List
Есть вот такой код, но он не работает private static extern int EnumWindows(EnumWindowsCallbackDelegate callback,...

EnumWindows - ошибка
Ловлю окна функцией EnumWindows для дальнейшей обработки Вот код: BOOL CALLBACK MyEnum(HWND hwnd,LPARAM lParam){ return...

Вызов функции EnumWindows для класса
Добрый вечер уважаемые господа программисты. У меня есть цель - создать класс который будет делать определенные вещи. Я попытался...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru