Label из чужого окна

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Label из чужого окна

Сообщение Sirik » 12.03.2005 (Сб) 12:19

есть чужое окно (hWnd знаю).

как получить текст из label, над которым находится мышь?

ЗЫ. была программа, которая забирает пароли, так вот надо что-то наподобие.
ЗЫ2. ничего плохого делать и не думаю :D

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 12.03.2005 (Сб) 12:28

FindWindowEx и GetWindowText не подойдет?
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 12.03.2005 (Сб) 12:34

в принципе да, но функция FindWindowEx мне не нужна, я же hWnd окна.

а вот как работать GetWindowText - увы не опыта

ЗЫ. кстати дай сылку на справочник по API, что-то типа APIG... дальше не помню

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 12.03.2005 (Сб) 12:42

Над которым мышь находится? Тогда легче WindowFromPoint.
Ты ведь знаешь hWnd окна, а не labela........

Код: Выделить всё
Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long


Код: Выделить всё
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long


· hWnd
Identifies the window or control containing the text.

· lpString
Points to the buffer that will receive the text.

· nMaxCount
Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the text exceeds this limit, it is truncated.


Да, к слову сказать:
The GetWindowText function copies the text of the specified window’s title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied.

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 12.03.2005 (Сб) 12:53

Тебе тут нужен SendMessage с сообщениями WM_GETTEXTLENGTH и WM_GETTEXT:


An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller.

WM_GETTEXT
wParam = (WPARAM) cchTextMax; // number of characters to copy
lParam = (LPARAM) lpszText; // address of buffer for text


Parameters

cchTextMax

Value of wParam. Specifies the maximum number of characters to be copied, including the terminating null character.

lpszText

Value of lParam. Points to the buffer that is to receive the text.



Return Values

The return value is the number of characters copied.


An application sends a WM_GETTEXTLENGTH message to determine the length, in characters, of the text associated with a window. The length does not include the terminating null character.

WM_GETTEXTLENGTH
wParam = 0; // not used; must be zero
lParam = 0; // not used; must be zero


Parameters

This message has no parameters.

Return Values

The return value is the length, in characters, of the text.

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 12.03.2005 (Сб) 12:54

ВОООТ!!!
Есть форма, на форме text1 с passwordchar=*, форма с caption=ggg
Код: Выделить всё
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const EM_SETPASSWORDCHAR = &HCC

Private Sub Form_Load()
    a = SendMessage(Text1.hwnd, EM_SETPASSWORDCHAR, 0, 0)
End Sub


У меня работает!!!

вот на C++

Код: Выделить всё
#include <iostream.h>
#include <windows.h>

int main()
{
   HWND form,text;
   int a;
   if(form = FindWindow(NULL,"ggg"))
      cout<<"FORM ok! : "<<form<<endl;
   if(text = FindWindowEx(form,0,NULL,NULL))
      cout<<"TEXT ok! : "<<text<<endl;
   
   SendMessage(text, EM_SETPASSWORDCHAR, 0, 0);

   cin>>a;

   return 0;
}


просто лень перевести, если не сможеш, то помогу, хотя тут все понятно!!!....

Если че, пиши!
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 12.03.2005 (Сб) 13:00

Я это из СИшного хелпа скопировал, и уже хотел было спросить - "это ничего, что я на С++ написал?) :lol: :D
Это прям как в анекдоте: "Кофе энд булочка пожалуйста. Ничего, что я с вами по-английски?" :wink:

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Re: Label из чужого окна

Сообщение Ariman » 12.03.2005 (Сб) 13:12

2 -FoRMaT-
ИМХО, когда надо получить текст из окошка, над которым мышь, рациональнее использовать WindowFromPoint.
К тому же, твой код просто меняет PassworChar, а вовсе не получает текст из окна :roll:
А
Sirik писал(а):получить текст из label, над которым находится мышь?

твоим кодом врядли выйдет :D

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Re: Label из чужого окна

Сообщение Jenizix » 12.03.2005 (Сб) 13:32

Ariman писал(а):2 -FoRMaT-
А
Sirik писал(а):получить текст из label, над которым находится мышь?

твоим кодом врядли выйдет :D


да... а кстати у label вообще нет hWnd, т.к это не окно...

вот код, только на дельфях и хуки ставить надо... только с лейблом опять ничего не получиться! ИМХО... посмотрите, может разберетесь... хотя там все понятно... http://jenizix.runethost.com/tmp/hack_pass.rar

и сюда посмотрите: http://bbs.vbstreets.ru/viewtopic.php?t=14409 , а то может не заметили... просто очень надо...
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 12.03.2005 (Сб) 13:56

блин... чет меня переклинило.... мне почемуто показалось, что Sirik'у нужно взять текст за звездочками.... меня слово пароль смутило.... =)
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 12.03.2005 (Сб) 21:43

Ну, я так понял, что под словом "лейбл" он имел в виду текстбокс...
Так что вполне подойдет и WM_GETTEXT.
Да, к слову.
Если даже использовать дельфийский код, а
с лейблом опять ничего не получиться!

То зачем тогда это вообще нужно? Из текстбока вполне можно взять и WM_GETTEXT'ом, для лейбла он непригоден.......

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 12.03.2005 (Сб) 23:34

Да, но если под словом лейбл он имел ввиду не текстбокс, а лейбл, то ИМХО никак не получиться...
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 12.03.2005 (Сб) 23:39

Из лабел'а текст не вытащить... Это lightweight-контрол. Не зная hwnd, текст вытащить трудненько ;)

Cryonyx
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 292
Зарегистрирован: 12.11.2004 (Пт) 15:40
Откуда: Net_SubStream

Сообщение Cryonyx » 13.03.2005 (Вс) 14:17

2 Amed
А что такое lightweight? :oops:
Если тебе не по сердцу мой путь,
Выбери сам или выбери с кем,
А мне по барабану вся эта муть -
Я не червонец, чтобы нравиться всем!
© К.Кинчев
--
Мой блог: щёлкай сюда

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.03.2005 (Вс) 14:34

это значит "без окна".
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 13.03.2005 (Вс) 16:10

Amed писал(а):Из лабел'а текст не вытащить... Это lightweight-контрол. Не зная hwnd, текст вытащить трудненько ;)

Можно вытащить.
Зная hWnd окна, через EnumChildWindow перебираем все дочерние окна (лабелы тоже перебираются). После получения очередного дочернего окна проверяем находится ли курсор мыши над ним. Если да, тогда через GetDlgCtrlID получаем идентификатор контрола. После этого уже можно получить текст.

Вот моя утилитка, с помощью которой я получаю все данные (которые мне нужны для работы с чужими окнами) чужого окна.

Вот пример вывода в окне программы натравленной на окно "Свойства системы"

-------------------------------
Hwnd окна: 1CE03A2
Класс окна: #32770
ID контрола: 0
Длина текста: 6
Text: Общие
-------------------------------
Hwnd окна: 1B20376
Класс окна: Static
ID контрола: 33
Длина текста: 1
Text:
-------------------------------
Hwnd окна: 1FE0350
Класс окна: Static
ID контрола: A
Длина текста: 9
Text: Система:
-------------------------------
Hwnd окна: 19D03BC
Класс окна: Static
ID контрола: 34
Длина текста: 21
Text: Microsoft Windows XP
-------------------------------
Hwnd окна: 1B603AE
Класс окна: Static
ID контрола: 35
Длина текста: 13
Text: Professional
-------------------------------
Hwnd окна: 1E0033E
Класс окна: Static
ID контрола: 36
Длина текста: 12
Text: версия 2002
-------------------------------
Hwnd окна: 1E90366
Класс окна: Static
ID контрола: 37
Длина текста: 15
Text: Service Pack 1
-------------------------------
Hwnd окна: 1B4036C
Класс окна: Static
ID контрола: C
Длина текста: 14
Text: Пользователь:
-------------------------------
Hwnd окна: 1E203F4
Класс окна: Edit
ID контрола: 38
Длина текста: 4
Text:
-------------------------------
Hwnd окна: 20202FC
Класс окна: Edit
ID контрола: 39
Длина текста: 4
Text:
-------------------------------
Hwnd окна: 1E003D6
Класс окна: Edit
ID контрола: 3A
Длина текста: 24
Text:
-------------------------------
Hwnd окна: 19D02C8
Класс окна: Edit
ID контрола: 3B
Длина текста: 1
Text:
-------------------------------
Hwnd окна: 1CE03A8
Класс окна: Static
ID контрола: 3C
Длина текста: 26
Text: Производство и поддержка:
-------------------------------
Hwnd окна: 1DE02EC
Класс окна: Static
ID контрола: 3D
Длина текста: 11
Text: Компьютер:
-------------------------------
Hwnd окна: 1F50336
Класс окна: Static
ID контрола: 3E
Длина текста: 1
Text:
-------------------------------
Hwnd окна: 1EE02DA
Класс окна: Link Window
ID контрола: 3F
Длина текста: 30
Text: Intel(R) Celeron(TM) CPU
-------------------------------
Hwnd окна: 1E80342
Класс окна: Link Window
ID контрола: 40
Длина текста: 18
Text: 1000MHz
-------------------------------
Hwnd окна: 1E6036A
Класс окна: Link Window
ID контрола: 41
Длина текста: 8
Text: 998 МГц
-------------------------------
Hwnd окна: 1CB034C
Класс окна: Link Window
ID контрола: 42
Длина текста: 11
Text: 512 МБ ОЗУ
-------------------------------
Hwnd окна: 1DD03FA
Класс окна: Link Window
ID контрола: 43
Длина текста: 1
Text:
-------------------------------
Hwnd окна: 20A0328
Класс окна: Link Window
ID контрола: 44
Длина текста: 1
Text:
-------------------------------
Hwnd окна: 19802BC
Класс окна: Link Window
ID контрола: 46
Длина текста: 1
Text:
-------------------------------
Hwnd окна: 19F033C
Класс окна: Link Window
ID контрола: 47
Длина текста: 1
Text:
-------------------------------
Hwnd окна: 1D60382
Класс окна: Link Window
ID контрола: 48
Длина текста: 1
Text:
-------------------------------
Hwnd окна: 1C90302
Класс окна: Button
ID контрола: 45
Длина текста: 22
Text: &Сведения о поддержке
-------------------------------
Hwnd окна: 1F702B4
Класс окна: Button
ID контрола: 1
Длина текста: 3
Text: ОК
-------------------------------
Hwnd окна: 213030A
Класс окна: Button
ID контрола: 2
Длина текста: 7
Text: Отмена
-------------------------------
Hwnd окна: 1B202E2
Класс окна: Button
ID контрола: 3021
Длина текста: 11
Text: При&менить
-------------------------------
Hwnd окна: 1FE032A
Класс окна: Button
ID контрола: 9
Длина текста: 8
Text: Справка
-------------------------------
Hwnd окна: 1D3031A
Класс окна: SysTabControl32
ID контрола: 3020
Длина текста: 1
Text:
Вложения
GetCtrlId.zip
(9.79 Кб) Скачиваний: 331
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 13.03.2005 (Вс) 16:19

Это в сишных программах label'ы - Static. В VB, имхо, такие контролы не находятся...

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 13.03.2005 (Вс) 17:48

Amed писал(а):Это в сишных программах label'ы - Static. В VB, имхо, такие контролы не находятся...

Ну да. Это правда. Если программа сишная - тогда можно вытащить. Если VB - то скорей всего нет. Хотя...
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

IIIypuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 10.06.2006 (Сб) 12:39

Сообщение IIIypuk » 13.08.2006 (Вс) 15:29

Скажите, а как в таком случае получить текст из Статусбара? hwnd у него я нашел, classname тоже, всё нашел а вот текст выдрать никак. Возвращается пустая строка. :?:

Заранее спасибо.
Есть 10 типов людей. Те, кто понимает двоичную систему исчисления, и те, кто не понимает...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.08.2006 (Вс) 15:32

SB_GETTEXT, маршаллер в Кирпичах.
Изображение

IIIypuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 10.06.2006 (Сб) 12:39

Сообщение IIIypuk » 15.08.2006 (Вт) 20:34

Поиск по форуму по SB_GETTEXT выдаёт тока этот топик. В кирпичах ничего похожего не нашел.

Пытался найти через google. Нашел только один и тот же кусок кода на С++ на нескольких сайтах, который немного не по теме.

Единственное полезное, что нашел:
Const SB_GETTEXT = &H40D

Потому обращаюсь опять к вам. Не могли бы вы помочь решить эту проблеммку (если дадите кусок коду, то вообще хорошо. :cheers: :D )

Заранее спасибо.
Есть 10 типов людей. Те, кто понимает двоичную систему исчисления, и те, кто не понимает...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.08.2006 (Вт) 20:37

Изображение

IIIypuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 10.06.2006 (Сб) 12:39

Сообщение IIIypuk » 15.08.2006 (Вт) 21:07

:oops: Сор, проморгал. Но через Search её было не найти. Еще раз спасибо.
Есть 10 типов людей. Те, кто понимает двоичную систему исчисления, и те, кто не понимает...

IIIypuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 10.06.2006 (Сб) 12:39

Сообщение IIIypuk » 15.08.2006 (Вт) 21:53

Нет, никак :oops: Очевидно в этот раз я без более подробной помощи не обойдусь. :oops: :( Не могу найти нигде ни одной константы дополнительной, ничего... Как я понимаю, имена у них не стандартные стоят.

Вот напр., рисуем на форме StatusBar. В одном его окне вставляем текст. Дальше, зная его hWnd, как этот текст оттуда выдернуть? Натолкните на мысль хоть... (ток не предлагайте StatusBar1.Panels(i).Text =)
Есть 10 типов людей. Те, кто понимает двоичную систему исчисления, и те, кто не понимает...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

    TopList