1 / 1 / 0
Регистрация: 09.12.2012
Сообщений: 7
1

ListView рабочего стола (x32 и x64 системы)

20.01.2013, 18:17. Показов 4264. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую, форумчане.
Мне необходимо получить информацию об иконках рабочего стола. Поискал в инете информацию.
В итоге написал небольшой код. Он получает текст иконки с рабочего стола, только одной иконки, не стал сюда писать цикл.
В начале не работало, все время nRes получался равным 0. Так вот, система у меня 64 битная, а приложение было 32 битное изначально. Сработало, когда скомпилировал как 64 битное. И возникло у меня два вопроса:
1. Как вывести текст иконки в консоль (по идее текст иконки в unicode и как его дальше выводить)?
2. Как из 32 битного приложения получить иконки в 64 битной системе. Или мне нужно будет скомпилировать две проги?

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
#include "stdafx.h"
#include <conio.h>
#include <Windows.h>
#include <CommCtrl.h>
 
HWND hListView;
BOOL CALLBACK enumWin(HWND hWnd, LPARAM lParam) {
    HWND hShellDLL;
    wchar_t cnShellDLL[] = L"SHELLDLL_DefView";
    wchar_t cnListView[] = L"SysListView32";
    
    hShellDLL = FindWindowEx(hWnd, NULL, cnShellDLL, NULL);
    if(hShellDLL) {
        hListView = FindWindowEx(hShellDLL, NULL, cnListView, NULL);
        if (hListView) {
            return false;
        }
    }
    return true;
}
 
int _tmain(int argc, _TCHAR* argv[]) {
    // Поиск ListView рабочего стола. Указатель в hListView.
    EnumWindows(enumWin, 0);
    
    // Получение кол-ва иконок рабочего стола.
    int count = SendMessage(hListView, LVM_GETITEMCOUNT, 0, 0);
    printf("Count items: %d\n", count);
 
    // Открытие процесса и выделение памяти.
    DWORD processId;
    GetWindowThreadProcessId(hListView, &processId);
 
    HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, false, processId);
    LVITEM *pLvItem = (LVITEM*) VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
    LPTSTR pText = (LPTSTR) VirtualAllocEx(hProcess, NULL, sizeof(wchar_t)*256, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
 
    wchar_t Text[256] = {0};
 
    LVITEM LvItem = {0};
    LvItem.mask = LVIF_TEXT;
    LvItem.iSubItem = 0;
    LvItem.pszText = pText;
    LvItem.cchTextMax = 256; 
    // Номер иконки.
    LvItem.iItem = 0; 
 
    WriteProcessMemory(hProcess, pLvItem, &LvItem, sizeof(LVITEM), NULL);
 
    int nRes = (int) SendMessage(hListView, LVM_GETITEMTEXT, 0, (LPARAM) pLvItem);
    if (nRes > 0) {
        ReadProcessMemory(hProcess, pText, &Text[0], sizeof(TCHAR)*256, NULL);
        // Перевод в oem-кодировку.
        //CharToOemBuff(Text, (LPSTR) Text, 256);
        wprintf(L"%d - %s", nRes, Text);
    }
 
    VirtualFreeEx(hProcess, pLvItem, 0, MEM_RELEASE);
    VirtualFreeEx(hProcess, pText, 0, MEM_RELEASE);
    CloseHandle(hProcess);
 
    _getch();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2013, 18:17
Ответы с готовыми решениями:

listview рабочего стола
Необходимо получить названия элементов рабочего стола, код на собственно сделанном listview...

Пропадают с рабочего стола созданные мной из панели управления ярлыки, Windows 7 Ultimate SP 1 x64
Здравствуйте ! После заставки (выхода из режима ожидания) пропадают ярлыки созданные мной из панели...

Как запустить GNU-fortran x32 на комп x32 c Win10 x64?
приходится переходить с COMPACK на gfortran. Кто-нибудь подскажет где найти сборку для gfortran...

Торможение системы, нет рабочего стола
Доброго времени суток. Начал тормозить комп, пропал рабочий стол (при нажатии на кнопку...

15
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
20.01.2013, 18:52 2
ну в консоль можно обычным
std::wcout << L"unicode text" << std::endl;
либо заморочится с конверсией, локалями и т.п. возможно в любом случае придется заморочится.
0
1 / 1 / 0
Регистрация: 09.12.2012
Сообщений: 7
22.01.2013, 10:12  [ТС] 3
Цитата Сообщение от DU Посмотреть сообщение
ну в консоль можно обычным
std::wcout << L"unicode text" << std::endl;
либо заморочится с конверсией, локалями и т.п. возможно в любом случае придется заморочится.
Да, решил сделать конверсией. Завел отдельную переменную, в нее с помощью функции CharToOemBuff конвертирую текст, затем вывожу.

По второму вопросу. Что-то мне кажется, что причина в структуре LVITEM, для 64 битных приложений она имеет другой размер (пока не проверял). Попробую сделать так: приложение соберу как 32-битное, но в самом приложении буду определять какая ОС (32 или 64), если 64, то подсуну 64 битную структуру.
1
1 / 1 / 0
Регистрация: 09.12.2012
Сообщений: 7
25.01.2013, 21:23  [ТС] 4
Разобрался, решил отписаться, может кому будет необходимо.
Задача: получить названия иконок и их позиции с рабочего стола.
Программа будет 32-битной. Чтобы она работала с 32/64 битными приложениями, в данном
случае explorer'ом, можно сделать так:
1. Определяем тип системы. Можно определить через вызов IsWow64Process. Для нашей программы он вернет
TRUE в том случае, если программа запущена в 64-битной Windows.
2. Ищем ListView рабочего стола (можно любой другой программы).
3. Определяем битность процесса с ListView (на тот случай, если нужен не рабочий стол, а что-то иное) через вызов IsWow64Process (при этом учитываем вызов IsWow64Process для нашей программы)
4. Если процесс 64-битный, то используем модифицированную структуру MY_LVITEM, иначе LVITEM
5. А далее открываем процесс на чтение/запись и посылаем сообщения ListView с целью получения данных и в цикле их выводим.
Далее код с комментариями (за не оптимальность прошу не ругать)). Тестировал только на Windows 7 x64, на других еще не проверял.
Ссылка на desktop2.exe .Если кто потестит на других версиях, отпишитесь.

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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
// Программа 32-битная.
 
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <Windows.h>
#include <CommCtrl.h>
 
// Структура для 64-битного приложения.
// В структуру добавлены поля place для выравнивания данных в 64-битном режиме.
struct MY_LVITEM {
    UINT mask;
    int iItem;
    int iSubItem;
    UINT state;
    UINT stateMask;
    DWORD place1;
    LPWSTR pszText;
    DWORD place2;
    int cchTextMax;
    int iImage;
    LPARAM lParam;
    DWORD place3;
#if (_WIN32_IE >= 0x0300)
    int iIndent;
#endif
#if (_WIN32_WINNT >= 0x0501)
    int iGroupId;
    UINT cColumns; // tile view columns
    DWORD place4;
    PUINT puColumns;
    DWORD place5;
#endif
#if _WIN32_WINNT >= 0x0600
    int* piColFmt;
    DWORD place6;
    int iGroup; // readonly. only valid for owner data.
    DWORD place7;
#endif
};
 
// Из MSDN. Определение, запущен ли 32-битный процесс под 64-битной системой.
// Возвращает TRUE только в том случае, если процесс 32-битный и запущен в 64-битном режиме.
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
 
BOOL IsWow64(HANDLE hProcess) {
    BOOL bIsWow64 = FALSE;
    // Проверка наличия функции IsWow64Process
    fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
 
    if (NULL != fnIsWow64Process) {
        if (!fnIsWow64Process(hProcess, &bIsWow64)) {
            // Ошибки не обрабатываем(
        }
    }
    return bIsWow64;
}
 
// Указатель на ListView рабочего стола.
HWND hListView;
// Функция перечисления окон.
BOOL CALLBACK enumWin(HWND hWnd, LPARAM lParam) {
    HWND hShellDLL;
    wchar_t cnShellDLL[] = L"SHELLDLL_DefView";
    wchar_t cnListView[] = L"SysListView32";
    
    hShellDLL = FindWindowEx(hWnd, NULL, cnShellDLL, NULL);
    if(hShellDLL) {
        hListView = FindWindowEx(hShellDLL, NULL, cnListView, NULL);
        if (hListView) {
            return false;
        }
    }
    return true;
}
 
int _tmain(int argc, _TCHAR* argv[]) {
    // Проверка, в какой среде мы запущены?
    BOOL win64 = IsWow64(GetCurrentProcess());
    // Поиск ListView рабочего стола. Указатель в hListView.
    EnumWindows(enumWin, 0);
    // Открытие процесса и выделение памяти.
    DWORD processId;
    GetWindowThreadProcessId(hListView, &processId);
    // Указатель на процесс.
    HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, false, processId);
    // Проверка, какую структуру использовать.
    BOOL useMyLVITEM = FALSE;
    BOOL win64Proc = IsWow64(hProcess);
    if (win64 && !win64Proc) useMyLVITEM = TRUE;
 
    // Выделение памяти под структуры.
    MY_LVITEM MyLvItem = {0};
    MY_LVITEM *pMyLvItem = (MY_LVITEM *) VirtualAllocEx(hProcess, NULL, sizeof(MY_LVITEM), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
    LVITEM LvItem = {0};
    LVITEM *pLvItem = (LVITEM *) VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
    LPTSTR iTextP = (LPTSTR) VirtualAllocEx(hProcess, NULL, 256, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
    // Позиция значков.
    POINT itemPos = {0};
    POINT *pItemPos = (POINT *) VirtualAllocEx(hProcess, NULL, sizeof(POINT), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
    // Для хранения названия значков.
    wchar_t iText[256] = {0};
    char iTextOEM[256] = {0};
    
    // Кол-во иконок рабочего стола.
    int count = SendMessage(hListView, LVM_GETITEMCOUNT, 0, 0);
    printf("Count icons: %d\n", count);
 
    // Перечисление значков и вывод информации о них.
    int iPos = SendMessage(hListView, LVM_GETNEXTITEM, -1, LVNI_ALL);
    int nRes = 0;
    while (iPos != -1) {
        if (useMyLVITEM) {
            MyLvItem.mask = LVIF_PARAM | LVIF_IMAGE | LVIF_TEXT | LVIF_STATE;
            MyLvItem.iSubItem = 0;
            MyLvItem.pszText = iTextP;
            MyLvItem.cchTextMax = 256; 
            MyLvItem.iItem = iPos; 
            WriteProcessMemory(hProcess, pMyLvItem, &MyLvItem, sizeof(MY_LVITEM), NULL);
            nRes = (int) SendMessage(hListView, LVM_GETITEM, iPos, (LPARAM) pMyLvItem);
        } else {
            LvItem.mask = LVIF_PARAM | LVIF_IMAGE | LVIF_TEXT | LVIF_STATE;
            LvItem.iSubItem = 0;
            LvItem.pszText = iTextP;
            LvItem.cchTextMax = 256; 
            LvItem.iItem = iPos; 
            WriteProcessMemory(hProcess, pLvItem, &LvItem, sizeof(LVITEM), NULL);
            nRes = (int) SendMessage(hListView, LVM_GETITEM, iPos, (LPARAM) pLvItem);
        }
        
        if (nRes > 0) {
            ReadProcessMemory(hProcess, iTextP, &iText, 256, NULL);
            // Перевод в oem-кодировку.
            CharToOemBuff(iText, iTextOEM, 256);
            printf("%d - %s\n", iPos, iTextOEM);
        }
 
        // Получаем координаты иконки.
        if (SendMessage(hListView, LVM_GETITEMPOSITION, iPos, (LPARAM) pItemPos)) {
            ReadProcessMemory(hProcess, pItemPos, &itemPos, sizeof(POINT), NULL);
            printf("  x: %d, y: %d\n", itemPos.x, itemPos.y);
        }
        iPos = SendMessage(hListView, LVM_GETNEXTITEM, iPos, LVNI_ALL);
    }
    
    // Освобождаем память.
    VirtualFreeEx(hProcess, pMyLvItem, 0, MEM_RELEASE);
    VirtualFreeEx(hProcess, pLvItem, 0, MEM_RELEASE);
    VirtualFreeEx(hProcess, iTextP, 0, MEM_RELEASE);
    VirtualFreeEx(hProcess, pItemPos, 0, MEM_RELEASE);
    CloseHandle(hProcess);
    // Задержка вывода.
    _getch();
    return 0;
}
0
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
26.01.2013, 02:26 5
статическую линковку сделай , а то говорит нужно dll от микрософта
0
1 / 1 / 0
Регистрация: 09.12.2012
Сообщений: 7
28.01.2013, 11:07  [ТС] 6
Цитата Сообщение от Игорь с++ Посмотреть сообщение
статическую линковку сделай , а то говорит нужно dll от микрософта
Загрузил https://www.dropbox.com/s/egm9... sktop2.exe
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
28.01.2013, 23:50 7
Цитата Сообщение от IvanNovator Посмотреть сообщение
Задача: получить названия иконок и их позиции с рабочего стола.
первый раз сработало с рабочим столом, все остальные разы выдавало перечень иконок разных открытых папок.
XP Home 32 SP3
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
29.01.2013, 13:41 8
IvanNovator, по-моему ты свой первый код не забраковал. Тогда позволю себе некоторую критику.
Итак, начать с
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
HWND hListView;
BOOL CALLBACK enumWin(HWND hWnd, LPARAM lParam) {
    HWND hShellDLL;
    char cnShellDLL[] = "SHELLDLL_DefView";
    char cnListView[] = "SysListView32";
    
    hShellDLL = FindWindowEx(hWnd, NULL, cnShellDLL, NULL);
    if(hShellDLL) {
        hListView = FindWindowEx(hShellDLL, NULL, cnListView, NULL);
        if (hListView) {
            return false;
        }
    }
    return true;
}
 
int main(int argc, _TCHAR* argv[]) {
    // Поиск ListView рабочего стола. Указатель в hListView.
    EnumWindows(enumWin, 0);
я правильно понимаю, что ты перечисляешь все окна верхнего уровня, для каждого из найденных находишь дочернее окно hShellDLL класса "SHELLDLL_DefView" (если есть) и потом ищешь дочернее уже для этого окна hListView класса "SysListView32" (если есть) и потом объявляешь hListView- рабочим столом?

Это неправильно. У меня, например, есть окно верхнего уровня- просто открытая папка "Новая папка 2". И в ней некоторый файлы, 4 штуки. И enumWin перечисляет окна, находит "Новую папку 2" находит в ней "SHELLDLL_DefView", потом "SysListView32" и объявляет последнее рабочим столом.

Вот два рисунка я прилагаю, первое это рабочий стол, второе "Новая папка 2", как видим в обоих есть одинаковые поддеревья и поэтому прога может выдать "Новую папку 2" за рабочий стол (не всегда, а если на неё первую наткнётся в перечислении)

Как ПРАВИЛЬНО идентифицировать рабочий стол я не знаю, но буду думать
Миниатюры
ListView рабочего стола (x32 и x64 системы)   ListView рабочего стола (x32 и x64 системы)  
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
29.01.2013, 13:57 9
Вот по рабочему столу, такая иерархия окон у меня (Spy++)

#32769 (Desktop) (если чё, #32769 это имя класса)
_"Program Manager" Progman
__"SHELLDLL_DefView" (отсутствует имя окна)
___"SysListView32" FolderView

Ты начал плясать от второго окна и наткнулся на "Новую папку 2"; а надо бы от первого, оно бесспорно. С третьим и четвёртым тоже всё более или менее понятно. Но второе окно _"Program Manager" Progman непонятный аппендицит! Да чёрт с ним, с аппендицитом, главное, чтобы он на всех осях был одинаков! Ты бы посмотрел у себя, как на твоей оси эта картинка выглядит, а?
0
836 / 343 / 67
Регистрация: 20.11.2012
Сообщений: 795
29.01.2013, 14:17 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <windows.h>
 
int main()
{
    HWND hProgMan = FindWindowW(L"Progman", NULL);
 
    if(!hProgMan)
    {
        std::cout<<"HWND not found\n";
        return -1;
    }
 
 
    HWND hLview = GetWindow(hProgMan, GW_CHILD);
    hLview = GetWindow(hLview, GW_CHILD);
 
    std::cout<<"I'm desktop listview window! My HWND is "<<std::hex<<hLview<<std::endl;
 
 
    return 0;
}
Progman есть на всех виндовсах. Чаще всего так и ищут Desktop ListView...
1
1 / 1 / 0
Регистрация: 09.12.2012
Сообщений: 7
29.01.2013, 17:34  [ТС] 11
kravam, WhiteP

Код с поиском через Progman уже устарел, не пашет в windows 7, потому что рабочий стол там не относится к нему.
У процесса Progman нет дочерних окон. Поэтому я решил делать поиск по окнам, считая, что будет работать везде.
Прикладываю скриншот spy для win7.
Миниатюры
ListView рабочего стола (x32 и x64 системы)  
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
29.01.2013, 19:24 12
Цитата Сообщение от IvanNovator Посмотреть сообщение
Поэтому я решил делать поиск по окнам, считая, что будет работать везде.
так он и работает, просто другое находит. А, может привязаться к окну #32769? Или у тебя его нет?
0
1 / 1 / 0
Регистрация: 09.12.2012
Сообщений: 7
30.01.2013, 09:12  [ТС] 13
Цитата Сообщение от kravam Посмотреть сообщение
так он и работает, просто другое находит.
Под "работает" я имею ввиду, чтобы находил значки рабочего стола.)
Цитата Сообщение от kravam Посмотреть сообщение
А, может привязаться к окну #32769? Или у тебя его нет?
Так это окно рабочего стола, разве нет? Оно же является корневым, это ничего не даст.
Изображения
 
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
30.01.2013, 14:53 14
Цитата Сообщение от IvanNovator Посмотреть сообщение
Под "работает" я имею ввиду, чтобы находил значки рабочего стола.)
под "работает" в данной теме я имею ввиду чтобы он находил значки рабочего стола на всех осях. Разве не вы дали понять, что для вас это важно?

Цитата Сообщение от IvanNovator Посмотреть сообщение
Если кто потестит на других версиях, отпишитесь.
кстати, код, который вы просили потестить, тоже не сработал у меня, и я написал об этом.
Цитата Сообщение от kravam Посмотреть сообщение
первый раз сработало с рабочим столом, все остальные разы выдавало перечень иконок разных открытых папок.
Поэтому мы либо разбираемся с самого начала либо не разбираемся вовсе.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Цитата Сообщение от IvanNovator Посмотреть сообщение
Так это окно рабочего стола, разве нет? Оно же является корневым, это ничего не даст.
ещё как даст.
Берём окно #32769, ищем все дочерние окна этого окна.
У всех дочерних окон ищем такое окно:
__"SHELLDLL_DefView" (отсутствует имя окна)
потом такое:
___"SysListView32" FolderView

Ну то есть воспроизводим цепочку, которая у меня да и у вас и у всех:

#32769 (Desktop) (если чё, #32769 это имя класса)
_Тут как я понял вообще не понять чё, у всех по разному.
__"SHELLDLL_DefView" (отсутствует имя окна)
___"SysListView32" FolderView
и объявляем последнее найденное окно искомым.

+++++++++++++++++++++++++++++++++++++++++++++++++++

Тут тонкое место- второе звено. Можно углубиться в это всё.


1) А тогда либо смотрим, какое именно окно на этом месте присутствует в каждой оси (у меня, например _"Program Manager" Progman), у вас какое-то другое, как я понял. И составить перечень таких окон, штук 8 наверное (сколько версий Windows) и в поиске подставлять поочерёдно имя каждого окна. Ну или узнать название оси сперва а потом в зависимости от этого подставит имя окна.

2) А можно и ещё углубиться и попытаться воспроизвести подобную цепочку для какого-либо авторского окна; ну то есть реально самому такое окно сделать, с такой иерархией:

#32769 (Desktop) (если чё, #32769 это имя класса)
_Тут чё-нибудь лепим
__"SHELLDLL_DefView" (отсутствует имя окна)
___"SysListView32" FolderView
Надо определить: может быть в принципе такую цепочку для авторского окна не построить? Уточнить бы. Если возможно построить- то всё плохо, принимает вариант 1. А если не построить- всё хорошо. Тогда можно вздохнуть спокойно с облегчением, забить на второе окно и просто искать эту цепочку с ЛЮБЫМ вторым именем и объявлять последнее найденное окно искомым, а пунктики его- именно ярлыками рабочего стола, а ничем иным.
0
836 / 343 / 67
Регистрация: 20.11.2012
Сообщений: 795
30.01.2013, 15:49 15
Цитата Сообщение от IvanNovator Посмотреть сообщение
Код с поиском через Progman уже устарел, не пашет в windows 7, потому что рабочий стол там не относится к нему.
Спорить не буду, может это относится к какому-то другому Win 7 (x86 или без SP), но у меня на Windows 7 x64 SP1 при коде, например:

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
#include <iostream>
#include <windows.h>
#include <CommCtrl.h>
 
int main()
{
    HWND hProgMan = FindWindowW(L"Progman", NULL);
 
    if(!hProgMan)
    {
        std::cout<<"HWND not found\n";
        return -1;
    }
 
    std::cout<<"I'm f**ing progman window! My HWND is "<<std::hex<<hProgMan<<std::endl;
    HWND hLview = GetWindow(hProgMan, GW_CHILD);
    hLview = GetWindow(hLview, GW_CHILD);
 
    std::cout<<"I'm desktop listview window! My HWND is "<<std::hex<<hLview<<std::endl;
 
    for (int i=0; i<1850; i++)
        SendMessage(hLview, LVM_SETITEMPOSITION,0, MAKELPARAM(i, i));
 
    return 0;
}
иконка корзины совершает неспешную прогулку из левого верхнего угла рабочего стола в правый нижний угол...
0
1 / 1 / 0
Регистрация: 09.12.2012
Сообщений: 7
31.01.2013, 10:52  [ТС] 16
Цитата Сообщение от WhiteP Посмотреть сообщение
... может это относится к какому-то другому Win 7 (x86 или без SP), но у меня на Windows 7 x64 SP1 ...
У меня Windows 7 x64 Максимальная SP1

Цитата Сообщение от kravam Посмотреть сообщение
ещё как даст.
Берём окно #32769, ищем все дочерние окна этого окна.
А в чем смысл брать это окно если оно и есть родительское для всех окон?
Когда происходит вызов EnumWindows(enumWin, 0) это и есть поиск по всем верхним окнам принадлежащим окну #32769

А во всем остальном я с вами согласен.
0
31.01.2013, 10:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2013, 10:52
Помогаю со студенческими работами здесь

Во время загрузки рабочего стола происходит сбой системы
Здравствуйте. Меня как &quot;тыжпрограммиста&quot; родственники попросили помочь им со старым ноутбуком ASUS...

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

При настройке параметров рабочего стола прервалась установка системы
Проблема такая, в конце установки виндовс при настройке параметров рабочего стола, рабочий стол...

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

Можно ли поменять Windows 7 x64 на Windows 7 x32 без полной переустановки системы?
Можно ли поменять windows 7 64 бита, на windows 7 32 бита, без полной переустановки системы?

Скрипт который будет фильтровать разрядность системы (X32/x64) и в зависимости от этого будет запускать тот или иной файл
Доброго времени суток! Я в скриптах VBS не силён,можно даже сказать нуб :-[ Кроме как написать...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru