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

VBA

Войти
Регистрация
Восстановить пароль
 
KISLOROD
0 / 0 / 0
Регистрация: 02.06.2015
Сообщений: 8
#1

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

06.06.2015, 01:21. Просмотров 273. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перечисление окон высшего уровня EnimWindows (VBA):

Перечисление контроллов формы: как изменить их порядок - VBA
Dim ctrl As Control Dim s As string s="" For Each ctrl In forma.Controls s=s & ctrl.name & Chr(10) Next Msgbox s ...

Перечисление всех различных слов, полученных перестановкой - VBA
Хочу сделать без повторений! (с повторениями работает) ошибка в строке B(d) = A(i, j) + A(j, k) + A(k, l) + A(l, m) + A(m, n) + A(n, g) +...

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

Поиск/перечисление окон с панели задач - C++ Builder
Кто нибудь подскажет, как найти все окна на панели задач? Ибо когда используешь какую-нибудь EnumWindows, он тебе пихает все подряд. В том...

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

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

1
SoftIce
comment ca va
10279 / 3794 / 969
Регистрация: 27.07.2011
Сообщений: 9,186
Завершенные тесты: 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 уровня? - PHP
Доброе время суток. Есть массив фруктов, у каждого элемента есть название и цена. $arr = array( array( 'name' =>...

Как отсортировать элементы 1 уровня многомерного массива по значениям 2 уровня? - PHP
Доброе время суток. Есть массив фруктов, у каждого элемента есть название и цена. $arr = array( array( 'name' => 'banana', ...

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

Перенаправление с домена третьего уровня на домен второго уровня - PHP
Здравствуйте. Возможно ли с помощью htaccess перенаправлять адреса от домена третьего уровня, на домен второго уровня? Например чтобы...


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

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

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