Как получить содержимое Label из другого приложения

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 31.01.2008 (Чт) 19:24

В Делфях я не очень...
Поэтому мне тут друзья подкинули исходный код на Делфи, и саму откомпилированную прогу. Она примерно(!!!) раскрывает суть проблемы.
Скачайте и попробуйте поэкспериментировать... Задача в том, чтобы из другой проги в точности получать значения счетчика.

Код: Выделить всё
unit L_counter;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure Label1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Label1Click(Sender: TObject);
var i:integer;
begin
for i:=1 to 100 do
begin
label1.Caption:=inttostr(i);
label1.Repaint;
sleep(10);
end
end;
end.
Вложения
LC.rar
(364.56 Кб) Скачиваний: 296

vpnacc
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 27.01.2008 (Вс) 1:31

Сообщение vpnacc » 01.02.2008 (Пт) 2:25

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

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 01.02.2008 (Пт) 3:17

awl100Alex писал(а):2) Почему ты напрочь отбросил предложение Lumen’a о том, что можно применить функцию ReadProcessMemory, для того чтобы попробовать прочесть данные прямо из памяти?? Ведь я так понимаю, что все сначала происходит в ОЗУ, затем VCL работает с GDI, который уже использует TextOut.
http://www.netlib.narod.ru/library/book0007/ch02_04.htm
- рис 2.4... (примерно!).
Ведь это можно рассматривать, как вариант???

3) Почему ты решил, что хук нужно делать именно на TextOut, а не, к примеру, на подобную ей DrawText???


TextOut - это последния инстанция, в которой текст еще существует как собственно текст, прежде чем перейти в другое экзестенциальное состояние - в битмап нарисованный на DC. Поэтому, намного проще ждать его в том месте, куда он обязательно прийдет, поставив хук на TextOutW .
Короче говоря, я попробовал выдрать текст из VCL Label`a методом установки хука на TextOutW. Ниже код Native DLL написанной на PB, в аттаче скомпилированный VB проект и дельфийский экзешник предложенный Lumen`ом. Для демонстарции примера, надо запустить VB экзешник и нажать кнопку "Get Text From VCL Label control", после чего запустится дельфийская программа и из нее будет выдран текст.

Ну вобщем, принципиальная возможность извлекать текст из дельфийского VCL Label - продемонстрирована, изучи этот код, доработай напильником и т.д. Главное, что решение твоей задачи - есть :)


Код: Выделить всё
$UniqueName = "My Hook"
#Compile Dll "HookD.Dll"
#Register None
#Dim All
#Include "Win32Api.Inc"

Global  hCallBackProc As Long
Global hInstDLL As Long, MainDll As Long

Declare Function VB_Function( txt As String) As Long
Declare Function GetHw(ByVal txt As String) As Long

Function SetHookProc(Op As Long) As Long
    Static hProc As Long, tProc As String
    Local hLib As Long
    If hProc = 0 Then
    hLib = GetModuleHandle("gdi32.dll")
    hProc = GetProcAddress(hLib, "TextOutW")
    tProc = Peek$(hProc, 7)
    If IsFalse(VirtualProtect (ByVal hProc, 7, ByVal %PAGE_EXECUTE_READWRITE, ByRef hLib)) Then _
    MsgBox "Error in VirtualProtect": hProc = 0: Exit Function
    End If
    If Op = 1 Then Poke$ hProc, Chr$(&HB8) + Mkl$(CodePtr(MyTextOut)) + Chr$(&HFF, &HE0)
    If Op = 2 Then Poke$ hProc, tProc
    FlushInstructionCache GetCurrentProcess, ByVal hProc, ByVal 7
End Function


Function MyTextOut (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As Dword, ByVal nCount As Long) As Long
    Local MyString As String
    Static GetStr As String
    If lpString Then MyString = Peek$(lpString, nCount)
    SetHookProc 2
    MyString=Space$(nCount*2)
    MyString= Peek$(lpString, nCount*2)
    MyString=ACode$(MyString)
    Local gui As GUITHREADINFO
    Local R As Long
    gui.cbSize = SizeOf(GUITHREADINFO)
    GetGUIThreadInfo ThreadID, gui To r
    Local hProcess         As Long
    hProcess = FindWindow("TForm1", ByCopy "Form1")
    If hProcess=GUI.hwndActive And hProcess<>0  Then
           hProcess = FindWindow("", ByCopy "MY HOOK")
           hProcess = FindWindowEx(hProcess,0,"ThunderRT6TextBox","")
           GetStr=GetStr+MyString
           SendMessage hProcess, %WM_SETTEXT, 0, StrPtr(GetStr)
           hProcess=0
    End If
    TextOut hdc, x, y, ByVal StrPtr(MyString), Len(MyString)
    SetHookProc 1
End Function


Function LibMain(ByVal hInstance As Long, ByVal fwdReason As Long, ByVal lpvReserved As Long) Export As Long
    Select Case fwdReason
        Case %DLL_PROCESS_ATTACH: hInstDLL = hInstance: LibMain = 1: SetHookProc 1
        Case %DLL_PROCESS_DETACH: LibMain = 1: SetHookProc 2
    End Select
End Function

Function HookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) Export As Long
    Static hHook As Long, hDlg As Long
    hDlg = FindWindow("", $UniqueName)
    If hHook = 0 Then If hDlg Then hHook = GetProp(hDlg, ByVal 1)
    If hHook Then Function = CallNextHookEx(ByVal hHook, ByVal nCode, ByVal wParam, ByVal lParam)
    If IsFalse(MainDll) And (IsFalse(hDlg) Or IsFalse(hHook)) Then FreeLibrary hInstDll
End Function


Function SetHook Alias "SetHook" ( hWnd As Long) Export As Long
    Local hHook As Long
    hHook = SetWindowsHookEx (%WH_CBT, CodePtr(HookProc), ByVal hInstDLL, ByVal 0)
    SetProp hWnd, ByVal 1, ByVal hHook
    MainDll = 1
End Function     
Вложения
TextOut Hook.zip
(222.45 Кб) Скачиваний: 771

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 01.02.2008 (Пт) 10:48

Поясняю:
В VCL есть два похожих элемента - TLabel и TStatic<что-то там, не помню уже>. Первый - это надпись на окне, второе - окно. Соответственно, с помощью GetWindowText можно получить надпись только во втором случае. С первым нужно разбираться так, как я это делал с гридом.
Много теории... Пока разбираюсь... Но могу сказать сразу, что классы типа TStringGrid и подобные определения объектов находятся легко, а вот с label, блин!..
Если ты говоришь, что интанс лейбла находится сложнее, чем грида, значит ты даже не пробовал его найти, хотя алгоритм я дал.

И вообще. В последнее время очень часто возникают топики подобного содержания. Неужели сразу не ясно, что универсального решения нет и не будет, все что вы напишете не будет стоить и выеденного яйца.
А я все практикую лечение травами...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 01.02.2008 (Пт) 11:37

Twister писал(а): Неужели сразу не ясно, что универсального решения нет и не будет, все что вы напишете не будет стоить и выеденного яйца.


С какой стати не будет? Универсальное решение, показано в моем предыдущем топике. Текст выдирается в любой случае TLabel и TStatic, есть хендл контрола, или нет хендла.
Вот универсальное правило: Если текст отображается, через вывод на DC - значит его можно перехватить

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 02.02.2008 (Сб) 1:20

jangle – ты ГЕНИЙ!!! :0 :)

ВСЕ ПОЛУЧИЛОСЬ!!! Правда, не сразу...
Настолько оригинально(!) решить эту проблему!.. Я даже не ожидал!.. :)

В твоем примере «TextOut Hook» действительно все получается, но когда я попробовал получить данные счетчика (LC.rar), то My Hook ничего не возвращал, только пустое окно. :( Тогда, по мере изучения твоего кода библиотеки HookD.Dll заметил, что ты сделал жесткую(!) привязку в получении указателя по именам класса и заголовка формы, чей Label нужно перехватить (в подставной функции «MyTextOut»):

hProcess = FindWindow("TForm1", ByCopy "Form1")

Я переименовал заголовок LC.exe с помощью InqSoft Window Scanner, и получил то, что мне нужно! См. рисунок...
Вложения
Result.jpg
Получение значений счетчика!!
Result.jpg (36.25 Кб) Просмотров: 9802

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 02.02.2008 (Сб) 1:20

Я просто в восторге!!!.. :0 :)
Помимо этого форума я участвовал еще в двух(!) – это http://kbyte.ru и http://sql.ru/forum (Тема та же...), но абсолютно безрезультатно, :( пока меня не адресовали сюда... Сейчас я разместил в этих двух форумах ссылки на этот топик. Все, кто интересуется этим вопросом, теперь могут получить его здесь! А это уже сейчас около 700(!) человек, и будет еще больше! :)

Спасибо ВСЕМ(!) участникам данного форума, и ОТДЕЛЬНАЯ(!) благодарность jangle!

Проблема решена, и поэтому можно считать данную тему обсуждения ЗАКРЫТОЙ.

P.S.
jangle, не сочти за наглость... У меня к тебе последняя просьба(!) сугубо на твое личное усмотрение: если для тебя не составит большого труда, в любые удобные для тебя сроки, перепиши, пожалуйста, HookD.Dll на VB. Мне будет намного легче оттрассировать и изучить работу твоего кода более детально. Сделать это мне самому будет сложнова-то, не имея ни компилятора PB, ни навыков работы в нем.
Ну, вот, например: когда-то давно начинал с QuickBasic, и там были эти функции работы с памятью – Poke, Peek, а в VB их нет(!) – я не нашел в Help’e! :( Оказывается эти две функции в VB запретили к использованию! :( Там уже нужно как-то реализовывать через API – GetMem, PutMem. :(
К тому же, не только у меня, но и всех остальных посетителей форума, появится возможность переделать HookD.Dll на VB под свои конкретные нужды. Вообщем, это просьба, помоги, если не сложно. В любом случаи благодарю за помощь!! :)

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 02.02.2008 (Сб) 7:37

jangle
после чего запустится дельфийская программа и из нее будет выдран текст.
А если текст уже выведен и/или нет возможности (по условию задачи) запускать приложение с внедренной в него DLL? Что ты будешь перехватывать и что ловить?
В конце концов - если прога не Дельфовая?
Посему - универсального решения нет и не будет.
А я все практикую лечение травами...

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 02.02.2008 (Сб) 16:00

Twister
Может всё-таки попробовать поискать это значение в памяти процесса? :)
Подпись проходит рефакторинг

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 02.02.2008 (Сб) 20:30

Twister
При всем уважении... но ты не прав!
Не имеет никакого(!) значения выведен текст уже... или буде выведен потом – он все равно пройдет через DC! В любом случаи из приложения, который делает перехват, можно через функцию SendMessage послать перехватываемому окну сообщение типа WM_SETREDRAW – сделать перерисовку... А это значит, что процесс снова вызовет TextOutW и текст будет перехвачен!

Попробуй сам: запусти сначала(!) дельфийский экзешник предложенный Lumen`ом, а затем перехватчик My Hook от jangle. Текстовое окно будет пустым(!). А теперь сымитируй перерисовку окна: сверни и снова разверни Дельфийскую прогу с текстом – он тут же появится в окне My Hook. Проделай это еще раз, сообщение будет снова перехвачено и добавлено в текстовое поле My Hook!

«...если прога не Дельфовая?» - это тоже НЕ важно! Посмотри в библиотеку HookD.Dll... В строке, где определяется указатель перехватываемого окна:
hProcess = FindWindow("TForm1", ByCopy "Form1") – меняешь имя класса Дельфийской проги "TForm1", а также текст заголовка "Form1", на имя класса, скажем, проги на VB – «ThunderRT5Form», соответственно "Form1" (на примере Proba.rar см. выше...), и перехват ставится уже на ее. :)

К тому же через координаты X,Y подставной функции «MyTextOut» можно задавать какой именно Label в стороннем приложении будет перехватываться!

Lumen
Можно попробовать и через память, но давайте оставим эту задачу другим энтузиастам. ;) Лично меня вполне устраивает решение от jangle. :)

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 02.02.2008 (Сб) 23:36

Twister писал(а):А если текст уже выведен и/или нет возможности


Если текст уже введен, то установить хук и перезапустить программу снова

(по условию задачи) запускать приложение с внедренной в него DLL?


В приложение, из которого выдирается текст, никакая DLL не внедряется! Cм. предыдущие посты. Текст выдирается, путем установки хука на виндовую функцию TextOut. Программа из котороый выдирается текст об этом ничего не знает и никогда не узнает

В конце концов - если прога не Дельфовая?


Какая разница? Дельфовая, сишная, бейсиковская.. Любая программа, может вывести текст только одним способом, вызовом Win API функции - TextOut. И больше никак.

Посему - универсального решения нет и не будет


Посему рекомендую учить матчасть :)

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 02.02.2008 (Сб) 23:52

awl100Alex писал(а):В твоем примере «TextOut Hook» действительно все получается, но когда я попробовал получить данные счетчика (LC.rar), то My Hook ничего не возвращал, только пустое окно. :( Тогда, по мере изучения твоего кода библиотеки HookD.Dll заметил, что ты сделал жесткую(!) привязку в получении указателя по именам класса и заголовка формы, чей Label нужно перехватить (в подставной функции «MyTextOut»):


Да там жестко прописан класс формы и ее название. Этоже черновой набросок, просто чтобы показать как ставить хук на TextOutW и определять какая программа/форма/контрол пишет в данный момент на DC. Думаю, изменить код нужным тебе способом будет несложно

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 03.02.2008 (Вс) 0:00

Lumen писал(а):Twister
Может всё-таки попробовать поискать это значение в памяти процесса? :)


IMHO это все равно, что удалять апендицит, через задний проход пациента. Можно конечно попытаться это сделать, но результат негарантирован, тем более, что простой и очевидный способ "операции" уже есть

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 03.02.2008 (Вс) 0:12

awl100Alex писал(а):jangle, не сочти за наглость... У меня к тебе последняя просьба(!) сугубо на твое личное усмотрение: если для тебя не составит большого труда, в любые удобные для тебя сроки, перепиши, пожалуйста, HookD.Dll на VB. Мне будет намного легче оттрассировать и изучить работу твоего кода более детально. Сделать это мне самому будет сложнова-то, не имея ни компилятора PB, ни навыков работы в нем.


Переписать HookD.Dll на VB - нельзя. Т.к. VB, не умеет создавать Native DLL, может только ActiveX DLL, а от них в данном случае никакого проку. Так, что в любом случае HookD.Dll прийдется писать на PB, Дельфи, C++, или любом другом языке, который позваляет создавать полноценные Native DLL

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 03.02.2008 (Вс) 3:49

jangle
Понятно...
Ну, тогда подскажи, где можно скачать PB той версии, которой пользуешься ты??? Начнем изучать...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 04.02.2008 (Пн) 10:23

awl100Alex писал(а):jangle
Понятно...
Ну, тогда подскажи, где можно скачать PB той версии, которой пользуешься ты??? Начнем изучать...


Посмотри в разделе PowerBASIC, там вроде были ссылки на 8 версию

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 04.02.2008 (Пн) 10:33

jangle писал(а):Т.к. VB, не умеет создавать Native DLL, может только ActiveX DLL, а от них в данном случае никакого проку.

Это уже не так. Хакер написал проект для того, чтобы с минимальными сложностями делать именно NativeDLL.
Lasciate ogni speranza, voi ch'entrate.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 04.02.2008 (Пн) 11:29

Не имеет никакого(!) значения выведен текст уже... или буде выведен потом – он все равно пройдет через DC
Нет. Если он уже прошел, то остается только
установить хук и перезапустить программу снова

В приложение, из которого выдирается текст, никакая DLL не внедряется!
Да ну? А как по-твоему работает SetWindowsHookEx?
Посему рекомендую учить матчасть
Не надо кидать в меня такими фразами, когда сам допускаешь грубейшие ошибки (см. предыдущую цитату).

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


jangle
Интересно. А если на форме куча лейблов, которые генерятся динамически, как ты узнаешь, из какого лейбла нужно читать?
Последний раз редактировалось Twister 04.02.2008 (Пн) 12:25, всего редактировалось 1 раз.
А я все практикую лечение травами...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 04.02.2008 (Пн) 12:20

Twister писал(а):
В приложение, из которого выдирается текст, никакая DLL не внедряется!
Да ну? А как по-твоему работает SetWindowsHookEx?


Twister - да посмотри же код, чтоли.. В дельфийский экзешник никакая DLL не внедряется, ни инжектится и т.д. Глобальный хук ставится на функцию TextOutW из GDI32.DLL Cама дельфийскаяя программа об этом ничего не знает.

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


И какая разница? Те же яйца только сбоку :) Все равно, даже если он генерится в ран-тайме, этот лейб отправит в TextOut свои координаты по которым легко определить, какой из контролов выводит текст

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 04.02.2008 (Пн) 12:27

В дельфийский экзешник никакая DLL не внедряется
Да блин. SetWindowsHookEx внедряет твою ДЛЛ во все процессы. Учи матчасть, короче.

Cама дельфийскаяя программа об этом ничего не знает
Все знает и хук снять может...
А я все практикую лечение травами...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 04.02.2008 (Пн) 13:20

Twister писал(а):
В дельфийский экзешник никакая DLL не внедряется
Да блин. SetWindowsHookEx внедряет твою ДЛЛ во все процессы. Учи матчасть, короче.


SetWindowsHookEx - устанавливает цепочку хук-поинтов, а не инжектит DLL. Когда я устанавливаю хук на TextOutW, ядро Windows запоминает адрес моей функции, и перенапрявляет вызов на мою функцию в HOOK.DLL, которая при этом загружена в адресное пространство User32.dll и соответственно есть в каждом процессе использующим User32.dll. А в процессе который не использует User32.dll - моей DLL нет!

А внедрение, инжект DLL во все процессы, можно сделать через _LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs или для конкретного процесса через CreateRemoteThread/OpenProcess/ WriteProcessMemory


Все знает и хук снять может...


Ничего он не снимет, если я перед этим перехвачу UnhookWindowsHookEx :wink:

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 04.02.2008 (Пн) 13:31

Какая ахинея, извени за выражение...
устанавливает цепочку хук-поинтов, а не инжектит DLL
Проверь.
ядро Windows запоминает адрес моей функции, и перенапрявляет вызов на мою функцию в HOOK.DLL, которая при этом загружена в адресное пространство User32.dll и соответственно есть в каждом процессе использующим User32.dll
Ты шутишь. В АП каждого процесса есть свои копии системных ДЛЛ. А фраза "загружена в адресное пространство User32.dll " меня вообще убила.

А внедрение, инжект DLL во все процессы, можно сделать через _LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs или для конкретного процесса через CreateRemoteThread/OpenProcess/ WriteProcessMemory
Ты знаешь далеко не все приемы инжекта. Открою секрет - SetWindowsHookEx один из них... :wink: Кстати, AppInit_DLLs тоже использует SetWindowsHookEx.

Теперь объясняю на пальцах.
SetWindowsHookEx инжектит твою ДЛЛ во все процессы, где загружена User32.dll (если User32.dll нет в АП процесса, например в простеньком консольном приложении без ГУЯ, хук установлен не будет).

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

Ничего он не снимет, если я перед этим перехвачу UnhookWindowsHookEx
Может сразу в ShadowSDT сервис похучишь? Да еще и сплайсом, для пущей надежности? Бред, короче...
А я все практикую лечение травами...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 04.02.2008 (Пн) 14:15

Twister писал(а):Какая ахинея, извени за выражение....


Думаю стоит завязать с флудом в этой теме, здесь человек конкретный вопрос задал.

SetWindowsHookEx инжектит твою ДЛЛ во все процессы, где загружена User32.dll (если User32.dll нет в АП процесса, например в простеньком консольном приложении без ГУЯ, хук установлен не будет).


Ты мне пересказываешь, то что я уже написал? Зачем, мне это и так известно )))

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


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

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 04.02.2008 (Пн) 14:22

Второй вариант - универсальный
Ты хочешь сказать, что перезапуск целевой программы для того, чтоб прочитать значение, которое уже присутствует в памяти процесса - это универсальный метод? Ну-ну...

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

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 04.02.2008 (Пн) 15:01

Twister писал(а):
Второй вариант - универсальный
Ты хочешь сказать, что перезапуск целевой программы для того, чтоб прочитать значение, которое уже присутствует в памяти процесса - это универсальный метод? Ну-ну...


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


Мало того, я могу (правда, писать влом) предоставить тебе пример, где твой супер-универсальный метод обломится.


Будешь рисовать на DC буквы? Или выведешь битмап с текстом?

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 04.02.2008 (Пн) 18:40

jangle
Спасибо! Скачал PowerBASIC 8.04. Буду разбираться... Хорошо бы русский Help еще где-нибудь найти.
Спасибо всем участникам!.. Удачи!.. :)

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 05.02.2008 (Вт) 8:37

Будешь рисовать на DC буквы? Или выведешь битмап с текстом?
А ты сам посмотри. На страничке http://twister.orgfree.com/other возьми файл antiuniversal.rar. Увидишь три надписи - "Обычный Label", "Метод №1" и "Метод №2". Твоя задача вытащить из двух последних текст своим универсальным способом... :)
А я все практикую лечение травами...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 05.02.2008 (Вт) 14:39

Twister писал(а):
Будешь рисовать на DC буквы? Или выведешь битмап с текстом?
А ты сам посмотри. На страничке http://twister.orgfree.com/other возьми файл antiuniversal.rar. Увидишь три надписи - "Обычный Label", "Метод №1" и "Метод №2". Твоя задача вытащить из двух последних текст своим универсальным способом... :)


Twister - исходники надо выкладывать, а не бинарный EXE. Где гарантия, что просто битмап с текстом не скопировал на DC?

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 05.02.2008 (Вт) 14:48

jangle но исходники как правило и недоступны :wink:
собственно поэтому и возникают вопросы :D
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 05.02.2008 (Вт) 16:11

Igor_123 писал(а):jangle но исходники как правило и недоступны :wink:
собственно поэтому и возникают вопросы :D


Ты будешь заносить содержимое в лейбл, путем компирования битмапа на DC, или все таки присвоишь значение обычным способом?

Пред.След.

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

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

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

    TopList