Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
KISLOROD
0 / 0 / 0
Регистрация: 02.06.2015
Сообщений: 8
1

Перечисление окон высшего уровня EnimWindows

06.06.2015, 01:21. Просмотров 297. Ответов 1
Метки нет (Все метки)

Здравствуйте.
Я второй раз в жизни вижу бэйсик.
Хочу сделать так.
Пусть программа мне выводит все окна верхнего уровня и для каждого окна заголовок и хэнд окна.

Я код нашел, в нем более менее разобрался. Но он не запускается. Пишет Tipe missmach - несоответствие типов и ругается на (AddressOf EnumWindowsProc).
Ещё я толком не понял как расположить код, что в модулях, что в листе. СкринШот прилагается

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

Visual Basic
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
Public Function EnumWindowsProc(ByVal HandleW As Long, ByVal lParam As Long) As Long
 
 Dim TextW As String
 Dim LenTextW As Long
 Dim Res As Long
 
        'Добавить описатель в коллекцию
        HandleCol.Add HandleW
 
        'Получить заголовок окна.
        TextW = VBA.String$(255, vbNullChar)
        LenTextW = VBA.Len(TextW)
        Res = GetWindowText(HandleW, TextW, LenTextW)
        
        If Res > 0 Then
            'Добавить заголовок в коллекцию
            TextW = VBA.Left(TextW, Res)
            CaptCol.Add TextW
        End If
 
        'Получить класс окна.
        TextW = VBA.String$(255, vbNullChar)
        LenTextW = VBA.Len(TextW)
        Res = GetClassName(HandleW, TextW, LenTextW)
        
        If Res > 0 Then
             'Добавить имя класса в коллекцию
             TextW = VBA.Left(TextW, Res)
             ClassNameCol.Add TextW
        End If
        
    EnumWindowsProc = 1
    
End Function
 
 
'PtrSafe -  перевод в 64-битную систему
Sub GetCaption()
'Вызов Win32 API функции EnumWindows,
        'вызывающей в свою очередь Callback функцию EnumWindowsProc
        Dim item As Variant
        Dim Res As Long
        
        Res = EnumWindows(AddressOf EnumWindowsProc, 0&)
        
        'Обработка глобальных переменных, определенных в
        'результате совместной работы EnumWindows и EnumWindowsProc
        Debug.Print "Число окон = ", HandleCol.Count
        Debug.Print "Описатели окон"
        Res = 0
        For Each item In HandleCol
            Debug.Print item
            Res = Res + 1
            If Res > 10 Then Exit For
        Next item
        
        Debug.Print "Число окон с заголовками= ", CaptCol.Count
        Debug.Print "Заголовки окон"
        Res = 0
        For Each item In CaptCol
            Debug.Print item
            Res = Res + 1
            If Res > 10 Then Exit For
        Next item
            
    Debug.Print "Число окон, возвращающих класс = ", ClassNameCol.Count
        Debug.Print "Имена классов окон"
        Res = 0
        For Each item In ClassNameCol
            Debug.Print item
            Res = Res + 1
            If Res > 10 Then Exit For
        Next item
End Sub
 
 
 
' Раздел объявлений
' Функции
 
Public Declare PtrSafe Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
 
Public Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
 
Public Declare PtrSafe Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
 
'Глобальные переменные
Public HandleCol As New Collection
Public CaptCol As New Collection
0
Миниатюры
Перечисление окон высшего уровня EnimWindows  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2015, 01:21
Ответы с готовыми решениями:

Перечисление перестановок с повторениями
Помогите исправить ошибку. У меня проблема в том, что повторяются комбинации...

Импорт пакетов из директории высшего уровня
грубо говоря: в дирректории проекта папки Globals, Modules и основной файл...

Поиск/перечисление окон с панели задач
Кто нибудь подскажет, как найти все окна на панели задач? Ибо когда используешь...

Реализуйте вычисление заданного выражения как ассемблерную вставку в программе на языке высшего уровня С++
Я запихнул в С++ ассемблерную вставку. Задание было такое: Тема 2. Массивы. ...

Однозначное отделение (классификация) оборудования уровня ядра/аггрегации от уровня доступа
Всем привет. Возник такой вопрос: можно ли по функциям или по железу понять...

1
SoftIce
es geht mir gut
10460 / 3973 / 1014
Регистрация: 27.07.2011
Сообщений: 9,644
Завершенные тесты: 1
06.06.2015, 07:51 2
Да вроде работает, но у меня 2007 Офис и система 32-я , просто убрал PtrSafe из объявлений API и добавил объявление ClassNameCol (у Вас в коде почему-то нет, наверное не все скопипастилось)
Все вставил в один модуль.
0
Миниатюры
Перечисление окон высшего уровня EnimWindows  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2015, 07:51

Как отсортировать элементы 1 уровня многомерного массива по значениям 2 уровня?
Доброе время суток. Есть массив фруктов, у каждого элемента есть название и...

Как выбрать элемент 1 уровня многомерного массива по значениям 2 уровня?
Доброе время суток. Есть массив фруктов, у каждого элемента есть название и...

Как найти элемент 1 уровня многомерного массива по значению его элемента 2 уровня?
Есть многомерный массив типа такого: Array ( => Array ( ...


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

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

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