Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93

Получить текст из чужого статусбара

04.05.2010, 13:57. Показов 2449. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочется получить текст из нулевой панели статусбара другого приложения. Хэндл на статусбар получить могу. Но с посылкой сообщения SB_GETTEXT полный затык. Хоть режьте меня. Реально горю короче, вся работа стоит.
Во-первых, непонятно чему равен сам код сообщения. Этого нигде нет.
Во-вторых, непонятно как описывать прототип SendMessage для данного случая. Ведь там надо передавать указатель на строку.
В-третьих, как надо описывать строку, которая туда передаётся.

Помогите, люди добрые, пожалуйста, работающим примером или куском исходника.
Если чего, то мыло zerg2003@yandex.ru
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2010, 13:57
Ответы с готовыми решениями:

Получить текст из Edit чужого приложения
Дорогие Друзья. Помогите пожалуйста . В чем различия GetWindowText и WM_Gettext. И можноли вообше программно выташить текст из чужого едит...

Кнопка: получить текст из эдит чужого окна
Нужно нажать кнопку и взять текст едита чужого окна. С кнопкой я допустим разобрался HWND wnd, cwnd; wnd = FindWindow(NULL,...

считать текст с чужого окна
Доброго времени суток! Пишу тут одну программку шпору, но в ходе написания столкнулся со след. проблемами: //---------------- { ...

21
Messir
04.05.2010, 14:38
Короче, так: проблема стара как мир. Ничего у тебя не получается только потому, что твоя переменная, в которую ты хочешь передать текст, и исходный текст содержатся в разных адресных пространствах. Как преодолеть границы адресного пространства уже было сказано - поищи по форуму, тред там про чужое дерево был. Единственное, это не будет работать под 9х, только под NT.
Messir
04.05.2010, 14:40
или, если хочешь, отпишись мне на мыло - кину пример...
1 / 1 / 0
Регистрация: 03.02.2010
Сообщений: 43
04.05.2010, 14:40
у передаваемой строки надо заранее определить размер:
buf = Space$(255), а потом уже передавать в SendMessage
0
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93
04.05.2010, 17:17  [ТС]
строку я проспейсивал и так - не помогает.

Мессир, мыло тебе с просьбой примера сбросил.
Но трэд который ты упомянул, так и не нашёл...
0
Messir
04.05.2010, 18:48
2 Zerg1:
Проверяй мыло! Там лежит пример под твою задачу...

2 mahaon_m:
Это, безусловно, нужно, но этого недостаточно по причине, указанной мною выше.
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
11.05.2023, 21:28
Никто не ответил! И НИКТО не приложил код для этой задачи. Даже НИКТО не сказал что надо выделять страницу памяти в адресном пространстве другого процесса через VirtualAllocEx. Ну прям никто не написал код, что за люди... Зачем тогда тему было создавать...

Добавлено через 2 минуты
Вообще не понимаю зачем тогда тему создавать, если на неё нету ответов по 10-15 лет аж...

Добавлено через 52 минуты
Код должен быть примерно таким, но у меня почему-то не работает:

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
Option Explicit
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As Long, lpAddress As Any, ByRef dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32.dll" (ByVal hProcess As Long, ByVal lpAddress As Long, ByRef dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function SendMessageW Lib "user32" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
Private Const WM_USER = &H400
Private Const SB_GETTEXT As Long = (WM_USER + 2)
Private Const SB_GETTEXTLENGTH = (WM_USER + 3)
Private Const PROCESS_VM_OPERATION = &H8
Private Const PROCESS_VM_READ = 16
Private Const PROCESS_VM_WRITE = &H20
Private Const MEM_COMMIT = &H1000&
Private Const PAGE_READWRITE = 4&
Private Const MEM_RELEASE = &H8000&
 
Public Function GetStatusBarText(ByVal hwnd As Long) As String
    Dim strBuff As String
    Dim pid As Long
    Dim pMemStr As Long
    Dim hProc As Long
    Dim GETTEXTLENGTH As Long
    
    strBuff = Space$(65535)
    
    GetWindowThreadProcessId hwnd, pid
    hProc = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, 0, pid)  ' Открываем процесс
    pMemStr = VirtualAllocEx(hProc, ByVal 0&, 0, MEM_COMMIT, PAGE_READWRITE)
    
    GETTEXTLENGTH = SendMessageW(hwnd, SB_GETTEXTLENGTH, 0, 0)
    MsgBox GETTEXTLENGTH
    Debug.Print "SendMessageW: " & SendMessageW(hwnd, SB_GETTEXT, GETTEXTLENGTH, pMemStr)
    MsgBox "", vbInformation
    'ReadProcessMemory hProc, pMemStr, ByVal strBuff, 65535, 0&
    
    strBuff = Replace(strBuff, vbNullChar, vbNullString)
    
    GetStatusBarText = strBuff
    
    VirtualFreeEx hProc, pMemStr, ByVal 0&, MEM_RELEASE
    CloseHandle hProc
End Function
Добавлено через 47 секунд
GETTEXTLENGTH только правильно определяет, и для 64-битных процессов кстати тоже, а вот дальше в страницу памяти ничего не записывается, разочаровало... Не получилось почему-то...

Добавлено через 2 минуты
Цитата Сообщение от Zerg1 Посмотреть сообщение
zerg2003@yandex.ru
Чего на мыло кода скидываете? Дайте людям здесь на форуме! Эгоисты...

Добавлено через 30 секунд
А люди должны мучаться по два часа голову ломать над кодом... А у вас уже написан! Бессовестные...

Добавлено через 1 минуту
Поделиться кодом жалко уже!
0
sleep
 Аватар для I can
4924 / 4573 / 840
Регистрация: 13.04.2015
Сообщений: 9,721
11.05.2023, 21:34
Цитата Сообщение от HackerVlad Посмотреть сообщение
Чего на мыло кода скидываете?
13 лет назад были другие правила. Сейчас является нарушением приглашение к общению где-то помимо форума.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
11.05.2023, 23:44
Да кого эти правила интересуют вообще? Дело не в этом, сами между собой там что-то договорились скинули себе код на мыло потихой и всё на этом, а тему нахера было создавать, ну

Добавлено через 34 секунды
И гадай вот после этого как этот код написать

Добавлено через 3 минуты
Эгоисты они такие...
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
12.05.2023, 11:30
15 лет никто не мог написать код! я искал так же по другим форумам, тоже ничего нет, весь интерент обшарил ничего нет

была создана тема, на неё заходили много-много человек за эти 10-15 лет и все люди кому эта тема была интересна, плакали горькими слезами, что нет ответа на вопрос... ну неужели так сложно было поделиться кодом...

Добавлено через 1 минуту
Моя единственная ошибка в коде в том, что я пытался передать длину там где этого совсем не надо, вместо
Цитата Сообщение от HackerVlad Посмотреть сообщение
SendMessageW(hwnd, SB_GETTEXT, GETTEXTLENGTH, pMemStr)
нужно написать SendMessageW(hwnd, SB_GETTEXT, 0, pMemStr) и всё работает сразу

Добавлено через 22 минуты
даже с 64-битными процессами работает правильно, повезло)

Добавлено через 3 минуты
Цитата Сообщение от Zerg1 Посмотреть сообщение
Но с посылкой сообщения SB_GETTEXT полный затык. Хоть режьте меня.
У меня был тоже затык, но я за один день решил эту задачу, резать тебя не буду, код написал уже полностью рабочий))) Пользуйся)))

Добавлено через 1 минуту
Цитата Сообщение от Zerg1 Посмотреть сообщение
Во-первых, непонятно чему равен сам код сообщения.
Visual Basic
1
2
3
Private Const WM_USER = &H400
Private Const SB_GETTEXT As Long = (WM_USER + 2)
Private Const SB_GETTEXTLENGTH = (WM_USER + 3)
Добавлено через 56 секунд
Цитата Сообщение от Zerg1 Посмотреть сообщение
Во-вторых, непонятно как описывать прототип SendMessage для данного случая. Ведь там надо передавать указатель на строку.
Строка должна находится внутри другого процесса, а этого можно достичь только через VirtualAllocEx.

Добавлено через 43 секунды
Цитата Сообщение от Zerg1 Посмотреть сообщение
Помогите, люди добрые, пожалуйста, работающим примером или куском исходника.
Помог, я добрый и не жадный
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
12.05.2023, 12:39
Лучший ответ Сообщение было отмечено Zerg1 как решение

Решение

А вот и решение этого сложного вопроса:

Модуль:

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
Option Explicit
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As Long, lpAddress As Any, ByRef dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32.dll" (ByVal hProcess As Long, ByVal lpAddress As Long, ByRef dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function SendMessageW Lib "user32" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
Private Const WM_USER = &H400
Private Const SB_GETTEXT As Long = (WM_USER + 2)
Private Const PROCESS_VM_OPERATION = &H8
Private Const PROCESS_VM_READ = 16
Private Const MEM_COMMIT = &H1000&
Private Const PAGE_READWRITE = 4&
Private Const MEM_RELEASE = &H8000&
 
Public Function GetStatusBarText(ByVal hwnd As Long) As String
    Dim strBuff As String
    Dim pid As Long
    Dim pMemStr As Long
    Dim hProc As Long
    Dim GetTextLength As Long
    
    strBuff = Space$(65535)
    
    GetWindowThreadProcessId hwnd, pid
    hProc = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ, 0, pid)  ' Открываем процесс
    pMemStr = VirtualAllocEx(hProc, ByVal 0&, 0, MEM_COMMIT, PAGE_READWRITE)
    GetTextLength = SendMessageW(hwnd, SB_GETTEXT, 0, pMemStr)
    
    If GetTextLength > 0 Then
        ReadProcessMemory hProc, pMemStr, ByVal strBuff, GetTextLength, 0&
        GetStatusBarText = Left$(strBuff, GetTextLength)
    End If
    
    VirtualFreeEx hProc, pMemStr, ByVal 0&, MEM_RELEASE
    CloseHandle hProc
End Function
Форма... (не обязательно, просто пример для запуска редактора реестра и считывания его StatusBar'а)
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
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShellExecute Lib "shell32" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WaitForInputIdle Lib "user32" (ByVal hProc As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) As Long
 
Private Const PROCESS_QUERY_INFORMATION = 1024
Private Const INFINITE = -1
 
Private Sub Command1_Click()
    Dim hRegEdit As Long
    Dim hStatusBar As Long
    Dim hProc As Long
    Dim pid As Long
    
    ' Найти окно редактора реестра
    hRegEdit = FindWindow("RegEdit_RegEdit", vbNullString)
    
    If hRegEdit = 0 Then ' Если редактор реестра не запущен, то запустить его
        ' Функция ShellExecute, в отличии от CreateProcess, позволяет запускать программы которые
        ' находятся в пропатченых каталогах (из всех каталогов переменной окружения среды PATH),
        ' таким образом, нам даже не надо вычислять каталог Windows и где лежит этот regedit.exe
        ShellExecute 0, "Open", "regedit.exe", vbNullString, vbNullString, vbNormalFocus
        
        Do ' Ожидаем появления окна
            hRegEdit = FindWindow("RegEdit_RegEdit", vbNullString)
        Loop While hRegEdit = 0 ' Выполнять цикл до тех пор пока не будет найдено искомое окно
        
        GetWindowThreadProcessId hRegEdit, pid ' Вычисляем PID процесса regedit
        hProc = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pid) ' Открыть процесс
        WaitForInputIdle hProc, INFINITE ' Ожидаем окончательной загрузки программы regedit
        Sleep 50
        WaitForInputIdle hProc, INFINITE
        CloseHandle hProc
    End If
    
    ' Найти статусбар regedit'а
    hStatusBar = FindWindowEx(hRegEdit, ByVal 0&, "msctls_statusbar32", vbNullString)
    
    Label1.Caption = Chr(34) & GetStatusBarText(hStatusBar) & Chr(34)
End Sub
Вложения
Тип файла: zip GetStatusBarText.zip (7.5 Кб, 18 просмотров)
2
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93
13.05.2023, 02:18  [ТС]
Правда на GetStatusBarText.zip мой 360Total ругается про троян
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
13.05.2023, 03:53
Цитата Сообщение от Zerg1 Посмотреть сообщение
Правда на GetStatusBarText.zip мой 360Total ругается про троян
Извини, пожалуйста, ну ты же видишь исходный код программы, никакого трояна нету, сейчас многие VB6 программы антивирусы подозревают в вирусной активности почему-то.

Добавлено через 5 минут
Как пишут другие люди тотал вообще на всё ругается, им лучше не проверять.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
15.05.2023, 17:19
Лучший ответ Сообщение было отмечено HackerVlad как решение

Решение

Вот более правильный код, с исправленными ошибками в декларациях и вызовах:
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
Option Explicit
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32.dll" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function SendMessageW Lib "user32" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
Private Const WM_USER = &H400
Private Const SB_GETTEXT As Long = (WM_USER + 2)
Private Const PROCESS_VM_OPERATION = &H8
Private Const PROCESS_VM_READ = 16
Private Const MEM_COMMIT = &H1000&
Private Const PAGE_READWRITE = 4&
Private Const MEM_RELEASE = &H8000&
 
Public Function GetStatusBarText(ByVal hwnd As Long) As String
    Dim strBuff As String
    Dim pid As Long
    Dim pMemStr As Long
    Dim hProc As Long
    Dim GetTextLength As Long
    
    strBuff = Space$(65535)
    
    GetWindowThreadProcessId hwnd, pid
    hProc = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ, 0, pid)  ' Открываем процесс
    pMemStr = VirtualAllocEx(hProc, ByVal 0&, 65535, MEM_COMMIT, PAGE_READWRITE)
    GetTextLength = SendMessageW(hwnd, SB_GETTEXT, 0, pMemStr)
    
    If GetTextLength > 0 Then
        ReadProcessMemory hProc, pMemStr, ByVal strBuff, GetTextLength, 0&
        GetStatusBarText = Left$(strBuff, GetTextLength)
    End If
    
    VirtualFreeEx hProc, pMemStr, 0, MEM_RELEASE
    CloseHandle hProc
End Function
1
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93
15.05.2023, 22:26  [ТС]
всё-таки лучше добавить возможность грабить все панели статусбара
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
15.05.2023, 23:27
Цитата Сообщение от Zerg1 Посмотреть сообщение
всё-таки лучше добавить возможность грабить все панели статусбара
Ну ты можешь и свой код сюда написать)
0
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93
16.05.2023, 23:01  [ТС]
Code
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
Attribute VB_Name = "SB_GETTXT"
Option Explicit
Private Declare Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As Long, lpAddress As Any, ByRef dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32.dll" (ByVal hProcess As Long, lpAddress As Any, ByRef dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
 
Private Const PROCESS_VM_OPERATION As Long = (&H8)
Private Const PROCESS_VM_READ As Long = (&H10)
Private Const MEM_RELEASE As Long = &H8000
Private Const MEM_COMMIT As Long = &H1000
Private Const PAGE_READWRITE As Long = &H4
 
Private Const SB_GETTEXT = &H402
 
Public Function GetStatusBarText(ByVal hStatusBar As Long, ByVal nBandNum As Long) As String
Dim hProcess As Long, pMem As Long, pID As Long, tWindow As Long, w As Long
Dim hRet As Long, buffer As String
 
tWindow = GetParent(hStatusBar)
While GetParent(tWindow) <> 0
    tWindow = GetParent(tWindow)
    Wend
GetWindowThreadProcessId tWindow, pID
If pID <> GetCurrentProcessId Then
    hProcess = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ, 0, pID)
    If hProcess = 0 Then Exit Function
    pMem = VirtualAllocEx(hProcess, ByVal 0, ByVal 4096, MEM_COMMIT, PAGE_READWRITE)
    If pMem <> 0 Then
        hRet = SendMessage(hStatusBar, SB_GETTEXT, nBandNum, ByVal pMem)
        buffer = Space(4096)
        ReadProcessMemory hProcess, ByVal pMem, ByVal buffer, 4096, w
        GetStatusBarText = Left(buffer, hRet)
        VirtualFreeEx hProcess, ByVal pMem, 4096, MEM_RELEASE
    Else
        GetStatusBarText = ""
        End If
    CloseHandle hProcess
Else
    GetStatusBarText = "Use this function only with external applications"
    End If
End Function
Добавлено через 1 минуту
Но реально это наследие Великого Messir'a
2
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
16.05.2023, 23:02
Было бы классно если бы ты этот код опубликовал 13 лет назад ещё конечно. Сэкономил бы людям, будущим поколениям, время на поиски решения. Но лучше поздно чем никогда.
0
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93
16.05.2023, 23:09  [ТС]
блин, пойду повешусь...
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
16.05.2023, 23:12
Цитата Сообщение от Zerg1 Посмотреть сообщение
блин, пойду повешусь
Да ладно, ничего страшного, я только часа три лишних потратил чтобы самому всё это написать)

Добавлено через 38 секунд
Самому даже лучше писать, когда полностью понимаешь принцип работы, алгоритм действий и т.д.

Добавлено через 59 секунд
Что касательно чтения второй, третьей, четвёртой части статусбара... Надо бы проверить кстати, я просто не ставил перед собою ещё такую задачу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.05.2023, 23:12
Помогаю со студенческими работами здесь

текст выделенного элемента чужого ListBox
задача следующая, получить текст текущего играющего трека в windows media player. в инете нашел исходник, с помощью которого можно...

Как получить контекст чужого процесса ?
Пробую получить контекст чужого процесса на х64 системе. ...

Не могу получить GetPixel от чужого окна
пытаюсь поймать пиксели из DROID4X это эмулятор android на виртуалке procedure TForm1.Timer3Timer(Sender: TObject); var DC: HDC; ...

Присвоить текст заголовку чужого окна с русским названием (страдает кодировка)
Добрый день. Вот такой код #include &lt;windows.h&gt; int main(int argc) { HWND thehwnd;

MFC-MDI вызов СтатусБара
Пишу приложение на MFC с MDI-интерфейсом. Есть СтатусБар. Как вызвать статус бар из документа, если статус бар член class CMainFrame :...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 17.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru