Форум: "Прочее";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];
ВнизКак получить экземпляр класса зная его handle Найти похожие ветки
← →
miklenew (2008-05-31 19:05) [0]Мож кто подскажет.
Есть класс.
Есть экземпляр этого класса.
У экземпляра этого класса есть handle.
Зная его handle можно получить сам экземпляр класса.
← →
Leonid Troyanovsky © (2008-05-31 19:10) [1]
> miklenew (31.05.08 19:05)
> У экземпляра этого класса есть handle.
Что за таинственность?
Какой класс, какой хендл, зачем получать.
--
Regards, LVT.
← →
DVM © (2008-05-31 20:05) [2]В конференции по WinAPI единственный класс, который может быть как то связан с хэндлами - это оконный класс.
← →
miklenew (2008-05-31 20:25) [3]Ну не хотел пугать.
Щас программирую не на delphi.
Система называется Axapta язык X++. Очень похож на C++.
Там практически все классы открыты.
Но есть очень мало (процента 2) закрытых.
Так вот есть один закрытый класс. (Editor)
У него есть handle.
Есть другой класс EditorScript(открытый). Чтобы обратиться к методам EditorScript на входе нужен Editor.
Экзэмпляр класса Editor живёт на всём протяжении работы программы до закрытия. Я могу хитро пересохранить этот Editor. Но это дополнительные телодвижения.
Так вот и хочется по нормальному получить через winApi по handle этот Editor. Но чёто никак не найду нужную api функцию.
← →
Leonid Troyanovsky © (2008-05-31 20:41) [4]
> miklenew (31.05.08 20:25) [3]
Очень быстро, я ничего не понял.
Есть, например, окна - у них есть хендлы.
А, кроме того, есть, например, хуки, объекты GDI и ядра.
Чего тебе надобно, старче?
--
Regards, LVT.
← →
DVM © (2008-05-31 20:52) [5]
> Так вот и хочется по нормальному получить через winApi по
> handle этот Editor
Editor - это окно? Или что еще? Что это?
Если это просто класс (как класс в делфи или си), то WinApi знать не знает ничего о таких классах.
А хэндл окна получить можно очевидно с помощью FindWindow()
← →
miklenew (2008-05-31 21:09) [6]Ну я так понимаю handle есть у любой структуры которая содержиться в памяти. Не зависимо окно это или класс. Потоки это тоже экземпляры классов. Покрайней мере в Axapte handle есть и у класса(handle) и у окна(hwnd). Но не посредственно в Axapt-e winApi мало где используется (мест 50-60).
Класс это всего лиши набор переменных(разного типа). Можно даже до создания экземпляра класса узнать сколько система под него выделит памяти.
Пусть в классе будут три переменных
Точно щас не помню сколько байт под какой тип
integer x;(4 байта)
boolean y;(1 байта)
integer z; (4 байта)
Но в результате класс в памяти будет занимать 9 байт.
В инете нашёл такую статью "Как получить список запущеных процесов"
http://www.rsdn.ru/article/qna/baseserv/enumproc.xml
Но скорее всего это мне не понадобиться так как handle как определить я знаю. Но вот как получить сам объект ни как не найду.
← →
Leonid Troyanovsky © (2008-05-31 21:14) [7]
> miklenew (31.05.08 21:09) [6]
> Ну я так понимаю handle есть у любой структуры которая содержиться
> в памяти.
Заблуждение.
--
Regards, LVT.
← →
miklenew (2008-05-31 21:15) [8]to DVM Editor это класс. Такой же класс как в delphi и си. Просто все классы в Axapt-e по иерархии идут от Object. У object есть handle, ну соответственно он есть и у всех наследников, т.е. у всех классов.
← →
miklenew (2008-05-31 21:18) [9]to Leonid Troyanovsky.
Ну может не у любой. Согласен не точное утверждение.
Более точно не могу. Не готов.
← →
{RASkov} © (2008-05-31 21:24) [10]> [8] miklenew (31.05.08 21:15)
Что для тебя есть Хэндл в виндовс? И что за хэндлы у Axapta"ских Object"ов...
← →
Leonid Troyanovsky © (2008-05-31 21:28) [11]
> miklenew (31.05.08 21:18) [9]
> Более точно не могу. Не готов.
Ну, а что тебе надобно, старче.
--
Regards, LVT.
← →
miklenew (2008-05-31 21:28) [12]handle - для меня идентификатор объекта в памяти.
← →
{RASkov} © (2008-05-31 21:31) [13]> [12] miklenew (31.05.08 21:28)
Точно не готов)
← →
{RASkov} © (2008-05-31 21:35) [14]> [12] miklenew (31.05.08 21:28)
В принципе.... идентификаторы - он все в памяти...
Хэндл - это число(уникальный идентификатор окна) в виндовс.
← →
Leonid Troyanovsky © (2008-05-31 21:37) [15]
> {RASkov} © (31.05.08 21:35) [14]
> Хэндл - это число(уникальный идентификатор окна) в виндовс.
Окно здесь ни причем.
--
Regards, LVT.
← →
{RASkov} © (2008-05-31 21:43) [16]> [15] Leonid Troyanovsky © (31.05.08 21:37)
?
Как это не причем? )
Я ему вопрос в [10] задавал.... в [12] он вроде как ответил.... ну и тут [14])
Может и не причем для егошних хэндлов, но тогда пусть мой пост поймет, как намек, на то, что в винапи другие хэндлы....
:)
← →
miklenew (2008-05-31 21:44) [17]Вот ссылка хорошая для определения
http://www.codenet.ru/progr/bcb/Handle-Types.php
Где-то ещё видел иерархию но щас чё-то не найду
Там было handle вверху.
Далее hwnd - handle window
hdc - handle device context
и ещё помомойму один или два.
← →
{RASkov} © (2008-05-31 21:49) [18]В виндовс - хэндлы, в любом случае, имеют только оконные элементы(классы, типы)... Даже "долбанная" метка STATIC и та считается окном и имеет "ручку"(handle) в системе....
← →
Leonid Troyanovsky © (2008-05-31 21:54) [19]
> {RASkov} © (31.05.08 21:43) [16]
> Как это не причем? )
> Я ему вопрос в [10] задавал.... в [12] он вроде как ответил.
> ... ну и тут [14])
Хз, как он понял. Я этого не понял :)
--
Regards, LVT.
← →
{RASkov} © (2008-05-31 22:01) [20]> [19] Leonid Troyanovsky © (31.05.08 21:54)
:) Ну и ладно...
По моему вопрос автора потерял смысл.... Это если про Хэндл Object"а из Axapta язык X++ with WinAPI. :)
← →
Leonid Troyanovsky © (2008-05-31 22:07) [21]
> {RASkov} © (31.05.08 22:01) [20]
> По моему вопрос автора потерял смысл.... Это если про Хэндл
> Object"а из Axapta язык X++ with WinAPI. :)
Хороший вопрос.
Хотя, непонятно, чего он задан здесь.
--
Regards, LVT.
← →
miklenew (2008-05-31 22:09) [22]to Leonid Troyanovsky ничуть.
Помойму просто это вы на окнах заморочились.
Про окна то литературы много.
У меня есть программа которая может перебрать все открытые окна в Axapt-e(Axapt-a - основана на mdi).
С окнами просто суй hwnd в нужную функцию и действия визуально отобразяться на окне.
А вот с классом сложнее поэтому и спросил. Думал мож кто копался.
Похоже нет.
← →
Умища (2008-06-01 01:52) [23]
> miklenew (31.05.08 22:09) [22]
> to Leonid Troyanovsky ничуть.Помойму просто это вы на окнах
> заморочились.Про окна то литературы много.У меня есть программа
> которая может перебрать все открытые окна в Axapt-e(Axapt-
> a - основана на mdi).С окнами просто суй hwnd в нужную функцию
> и действия визуально отобразяться на окне. А вот с классом
> сложнее поэтому и спросил. Думал мож кто копался.Похоже
> нет.
Как уже сказали Handle (дескриптор) - это просто идентификатор.
Если для какой-либо сущности определены методы определения самой сущности по идентификатору, то тогда эту сущность можно определить. В общем случае - нет.
← →
Kolan © (2008-06-01 11:36) [24]Просто надо сходить на форум мастеров X++ (Хэ плюс плюс), и там, тебе автор, расскажут как сделать сабж.
← →
miklenew (2008-06-01 12:22) [25]Какая разница какой язык. Я программировал и на VС++, VB и на Delphi.
Если ты знаешь как это сделать хоть на одном языке, ты это сможешь сделать на другом. Просто с winApi мне практически не приходилось работать.
Странно мне слышать от мастеров WinApi, что winApi в одном языке чем то отличается от winApi в другом.
Вообщем если у кого-то есть предложения в какую сторону копать буду рат выслушать. А впустую тему засорять не надо. Пусть лучше пустой будет.
← →
{RASkov} © (2008-06-01 13:13) [26]> [25] miklenew (01.06.08 12:22)
> Вообщем если у кого-то есть предложения в какую сторону
> копать буду рат выслушать
Сначало нарой для себя, что есть хэндл в "твоем" супер-пупер хэ языке.....
> Просто с winApi мне практически не приходилось работать.
Вот отсюда и твоя "озлоба" теперяшняя на всех.... :)
← →
miklenew (2008-06-01 13:25) [27]Ещё раз прошу кому нечего сказать не надо.
Raskov просто я человек ответственный и никогда бы не позволел себе написать то что написал в последнем посте.
Я знаю что ты щас будешь искать признаки озлобы в моих постах чтоб что-то кому-то доказать.
Не надо не трудись.
Обидеть я тебя не хочу. Может ты офигенный специалист.
Но просто эту тему ты видно не рыл. Так зачем эту тему переводить в политической русло.
ок.
← →
{RASkov} © (2008-06-01 13:35) [28]> [27] miklenew (01.06.08 13:25)
> Обидеть я тебя не хочу.
Можешь не сомневаться, но у тебя это все равно не выйдет) Маскимум потеряешь от меня помощь...
> Но просто эту тему ты видно не рыл.
Видно...., так же видно, что и другие здесь "роют" другую тему.... форум-то по Дэлфи.... Да, ВинАПИ - оно и в африке ВинАПИ, но.... как твой Хэ смотрит на винапи? кому это известно? Я вот у тебя и интересуюсь, а ты думаешь, что мы тут друг-друга обижаем? ну и думай себе.... Удачи.
> Не надо не трудись.
Не вопрос :)
← →
miklenew (2008-06-01 13:43) [29]пример
client static public HWND getWindow(HWND _hWnd, int _cmd)
{
DLL DLL;
DLLFunction DLLFunction;
HWND hWnd;
;
DLL = new DLL("USER32");
DLLFunction = new DLLFunction(DLL,"GetWindow");
DLLFunction.returns(ExtTypes::DWord);//на выходе
DLLFunction.arg(ExtTypes::DWord,ExtTypes::DWord);//на входе
hWnd = DLLFunction.call(_hWnd,_cmd);//получаем результат
return hWnd;
}
← →
{RASkov} © (2008-06-01 13:53) [30]> [29] miklenew (01.06.08 13:43)
Это пример чего, для чего и на чем? ...на си что ли.... или на Axapta язык X++?
Вот смотри:
type
TObject = class //Класс без винхэндла
....
end;
TMyObject = class //Класс с "хэндлом", но он никакого отношения не имеет к винапи
......
Handle: THANDLE;
end;
TWinControl = class(TControl) //Класс, имеющий хэндл тот, что понимает винапи.
....
property Handle: HWnd read GetHandle; //можно проследить всю цепь получения "ручки" в Win.
....
end;
Так же незабываем поглядывать в [2]
← →
{RASkov} © (2008-06-01 13:57) [31]Более того.... нет никакого смысла этой ветки в "начинающих", раз уж ее убрали из винапи, то только в "прочих" можно еще чего-то обсуждать... ибо Хэ)
← →
sniknik © (2008-06-01 14:10) [32]miklenew (01.06.08 13:43) [29]
> пример
это пример не winapi, а похоже пример использования какойто "местной" dll
> hWnd = DLLFunction.call(_hWnd,_cmd);//получаем результат
функции call в "Win32 API Interface Unit" (описателях функций winapi) нет, и получается это своя "местечковая" функция, такая же dll, и переменная типа хендл просто переменная, ничего общего с winapi не имеющая.
не, оно конечно возможно, что эта функция возвращает хендл какогото окна, но ни один спец по winapi, незнающий что это за библиотека/функция этого не определит. т.что тебя правильно послали, на тот форум... и обижаешься ты совсем не "к месту".
← →
miklenew (2008-06-01 14:23) [33]Это на x++. Я же говорил x++ очень похож на с++.
Это пример использования функций winApi. Легко ведь. Только нужную библиотеку и функцию не найду которая смогла бы мне вернуть что нибудь из чего я смогу получить Object.
Класс в Axapt-е создаётся просто.
Class1 example = new Class1();
После этого можно считывать handle.
example.handle();
Но у него нет hwnd. Логично
А у формы(окно) есть hwnd, но нет handle.
Форма с классом никак не связана.
sniknik да DLLFunction это класс оболочка для удобного обращения с любыми dll-ми. Указывай только к какой dll подключаться. Какая функция нужна.
Создаёшь описатель входных и выходных параметров.
А дальше вызываешь call. Ну что вроде команды фас.
Отдал нужные входные параметры для dll функции call(параметр1, параметр2 и т.д.) и получил выходные.
Кстати не всегда идёт считывание result = call(). Так как есть такие dll функции которые не возращают, а изменяют входные.
Что-то типа call(пар1, пар2) и после этого нужный нам результат находиться в пар1 или пар2. Т.е. dll функция просто изменила входной параметр.
← →
{RASkov} © (2008-06-01 14:29) [34]> [33] miklenew (01.06.08 14:23)
> Это пример использования функций winApi. Легко ведь. Только
> нужную библиотеку и функцию не найду которая смогла бы мне
> вернуть что нибудь из чего я смогу получить Object.
WinAPI - знать не знает ни о каких Object"ах.... [2] читал?
Настырный, ладно посмотри на GetClassХххх вчасности на GetClassName(), только смысла тебе от них? Хотя...может и повезет)
← →
ketmar © (2008-06-01 14:53) [35]верните тему про самолётик, там интересней!
---
All Your Base Are Belong to Us
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.009 c