Помогите. Какой ф-ией можно найти хендл дочернего окна класса edit без caption'a ?
» Хэндл дочернего окна
на чем пишешь?
Цитата:
Помогите. Какой ф-ией можно найти хендл дочернего окна класса edit без caption'a ?
Ты вообще хоть понимаешь что пишешь. Как класс едит может породить дочернее окно? Оно само является дочерним для основной формы, а уж тем более у него никакого caption сроду не было. Максимум свойство Text в Дельфи. Тем более, что если окно дочернее, то его хэндл всегда знает его родитель если только все правильно порождается. Или правильнее сформулируй вопрос или скажи для чего тебе это надо, чтобы можно было понять задачу.
Дочернее окно и имет класс едит ! А родительское окно то тут при чем ... пишу на делфи
Цитата:
А родительское окно то тут при чем ...
При том что оно порождает дочернее окно и всё о нём знает.
Editbox1.handle - не устраивает?
Цитата:
Editbox1.handle - не устраивает
Скорее всего Edit1.Handle .
Странно парень программит на ООП а не знает в чем прикол родителей и потомков. Причем если быть все же точнее, то едит это все таки контрол, а не окно. Хотя создается как окно (при помощи CreateWindow(EX) или в ResEditore). Но блин если всякие баттоны едиты называть окнами, то запаришся понимать что человек хочет сказать. . И все равно вопрос остается, какой у едита caption?
Все равно фиг поймешь, что надо то. Чего-то с формулировкой колбасня
Если подразумевается что-то типа
TEdit1 = class(TEdit)
...
var Edit1: TEdit;
...
Edit1 := TEdit1.Create;
...
То разумеется
Цитата:
Цитата:
Ну, окно и в Африке окно, что поделать ...
Если подразумевается что-то типа
TEdit1 = class(TEdit)
...
var Edit1: TEdit;
...
Edit1 := TEdit1.Create;
...
То разумеется
Цитата:
Edit1.Handle
Цитата:
если всякие баттоны едиты называть окнами
Ну, окно и в Африке окно, что поделать ...
Цитата:
Цитата:Editbox1.handle - не устраивает
Скорее всего Edit1.Handle
Эдит то принадлежит не кону моей программы а другой !
Добавлено
ой ... =) хотел сказать короче что эдит не в моей проге а в другой
Если отойти от споров о том "окно Edit или не окно" и указывать на вещи, которые прямо отрицаются в начальном посте - то совет такой:
Используешь API функцию EnumChildWindows, передаешь хендл родительского окна и указатель на callback-функцию, которая будет вызываться EnumChildWindows.
Дальше в этой функции можешь уже проанализировать класс окна и проверить - то ли это окно, что тебе надо.
Если копать глубже - функция поиска нужного чайлд окна может быть рекурсивной - в таком случае сможешь найти child-окно если у тебя несколько уровней вложенности (например property pages и т.д.)
Сорри, пример могу наваять только на C++ - с Делфи очень давно не работал
Используешь API функцию EnumChildWindows, передаешь хендл родительского окна и указатель на callback-функцию, которая будет вызываться EnumChildWindows.
Дальше в этой функции можешь уже проанализировать класс окна и проверить - то ли это окно, что тебе надо.
Если копать глубже - функция поиска нужного чайлд окна может быть рекурсивной - в таком случае сможешь найти child-окно если у тебя несколько уровней вложенности (например property pages и т.д.)
Сорри, пример могу наваять только на C++ - с Делфи очень давно не работал
ОК. спасибо я посмотрю эту апи в справке мб разберусь
Andrey aka Master
Цитата:
Если бы ты сформулировал вопрос как вести текст в чужой едит, то тебе давно бы дали ответ. Это FAQ причем такой древний, как сама Винда. Есть куча решений. Во 99 года
Есть у меня окно, на нем edit1, edit2, memo1. Я пытаюсь в это окно вписать
из
другой программы слова и не получается.
Вот установуи того окна в которое я пытаю вписать слова: edit1:= 'Документ';
edit2:= ''; memo1.Clear; Caption:= 'Hовый документ'....
!!! Почему не работает???
А можно ли узнать, зная хендл окна, все хендлы его компонентов???
=== Cut ===
Var wh,bh:integer; st1,st2,st3:string; st:PChar;
begin
Caption:= '';
st:= 'ku-ku'; st1:= '1111'; st2:= '2222'; st3:= '3333';
wh:= FindWindow(nil, 'Hовый документ'); // Hазвание окна...
Caption:= inttostr(wh);
if wh <> 0 then // Окно нашлось?
begin
// ищем edit1 и находим...
bh:= FindWindowEx(wh, 0, nil, 'Документ');
if bh <> 0 then SendMessage(bh, WM_SETTEXT, 0, LParam(st1));
Caption:= Caption + ' ' + inttostr(bh); // высвечиваем его хендл
bh:= FindWindowEx(wh, 0, nil, '');
if bh <> 0 then SendMessage(bh, WM_SETTEXT, 0, LParam(st3));
Caption:= Caption + ' ' + inttostr(bh);
end;
Цитата:
хотел сказать короче что эдит не в моей проге а в другой
Если бы ты сформулировал вопрос как вести текст в чужой едит, то тебе давно бы дали ответ. Это FAQ причем такой древний, как сама Винда. Есть куча решений. Во 99 года
Есть у меня окно, на нем edit1, edit2, memo1. Я пытаюсь в это окно вписать
из
другой программы слова и не получается.
Вот установуи того окна в которое я пытаю вписать слова: edit1:= 'Документ';
edit2:= ''; memo1.Clear; Caption:= 'Hовый документ'....
!!! Почему не работает???
А можно ли узнать, зная хендл окна, все хендлы его компонентов???
=== Cut ===
Var wh,bh:integer; st1,st2,st3:string; st:PChar;
begin
Caption:= '';
st:= 'ku-ku'; st1:= '1111'; st2:= '2222'; st3:= '3333';
wh:= FindWindow(nil, 'Hовый документ'); // Hазвание окна...
Caption:= inttostr(wh);
if wh <> 0 then // Окно нашлось?
begin
// ищем edit1 и находим...
bh:= FindWindowEx(wh, 0, nil, 'Документ');
if bh <> 0 then SendMessage(bh, WM_SETTEXT, 0, LParam(st1));
Caption:= Caption + ' ' + inttostr(bh); // высвечиваем его хендл
bh:= FindWindowEx(wh, 0, nil, '');
if bh <> 0 then SendMessage(bh, WM_SETTEXT, 0, LParam(st3));
Caption:= Caption + ' ' + inttostr(bh);
end;
ShIvADeSt
wh:= FindWindow(nil, 'Загаловок главного окна програссы'); // хендл главного ока
h:=FindWindowEx(wh, 0, nil, '') //хендл эдита
Я так понимаю что эта искомая функция.
Ну чтож спасибо.
wh:= FindWindow(nil, 'Загаловок главного окна програссы'); // хендл главного ока
h:=FindWindowEx(wh, 0, nil, '') //хендл эдита
Я так понимаю что эта искомая функция.
Ну чтож спасибо.
Andrey aka Master
Цитата:
Или любого другого компонента с пустым Caption
Если нужен именно Edit - нужно специфицировать класс (не помню точно, но вроде 'TEdit' должно канать).
Т.е. меняем nil на 'TEdit' (опять же - возможно необходимо привести к PChar)
Цитата:
h:=FindWindowEx(wh, 0, nil, '') //хендл эдита
Или любого другого компонента с пустым Caption
Если нужен именно Edit - нужно специфицировать класс (не помню точно, но вроде 'TEdit' должно канать).
Т.е. меняем nil на 'TEdit' (опять же - возможно необходимо привести к PChar)
вместо нила вставил edit, вместо '' поставил nil все работает норм.
Терь ее этому же контролу нужно послать нажатие клавиша, те сэмулировать нажатие клавиши F12.
Я пробовал посылать сообошение wm_keydown чет не работает. Подскажите как сделать
Терь ее этому же контролу нужно послать нажатие клавиша, те сэмулировать нажатие клавиши F12.
Я пробовал посылать сообошение wm_keydown чет не работает. Подскажите как сделать
Цитата:
Я пробовал посылать сообошение wm_keydown чет не работает.
Ты куски кода, которые не работают давай. А то не изветсно, каким путем ты идешь. И вообще по моему в MSDK все популярно объяснено. . Так что давай код, будем вместе прапвитьэ.
ShIvADeSt
Цитата:
Вообще-то наверное имелся ввиду MSDN
Цитата:
И вообще по моему в MSDK все популярно объяснено.
Вообще-то наверное имелся ввиду MSDN
Цитата:
Вообще-то наверное имелся ввиду MSDN
Нет вообщето я имел MS SDK но так как я ленивый то писать лишние буквы меня обламывает. (Просто обычно я хэлпом пользуюсь его мне хватает)
ShIvADeSt
Вообще то да - было желание туда же тправить человека. Но ведь вспомни - начало программирования под WinAPI - когда первый раз увидел MSDN (не говоря уже про MS SDK) лет 5 назад - перепугался
Тем не менее - по существу - надобно точно знать, что диалог (то-бишь форма) не перехватывает енти сообщения.
Andrey aka Master
Попробуй поставить обработчик нажатия клавиши на всех уровнях вложенности форм/панелей и следи - может кто и цапает перед тобой
Понятно, что поскольку окно не твое - так мониторить не выйдет, но попробую тестовую форму. А если работает (перехват Ф12) - значить обработчик там завернутый.
Тогда попробуй дать фокус окну (эдиту) и пошли последовательность нажатия. Так же будь уверен, что посылаешь информацию, что нажата системная клавиша
Вообще то да - было желание туда же тправить человека. Но ведь вспомни - начало программирования под WinAPI - когда первый раз увидел MSDN (не говоря уже про MS SDK) лет 5 назад - перепугался
Тем не менее - по существу - надобно точно знать, что диалог (то-бишь форма) не перехватывает енти сообщения.
Andrey aka Master
Попробуй поставить обработчик нажатия клавиши на всех уровнях вложенности форм/панелей и следи - может кто и цапает перед тобой
Понятно, что поскольку окно не твое - так мониторить не выйдет, но попробую тестовую форму. А если работает (перехват Ф12) - значить обработчик там завернутый.
Тогда попробуй дать фокус окну (эдиту) и пошли последовательность нажатия. Так же будь уверен, что посылаешь информацию, что нажата системная клавиша
Страницы: 1
Предыдущая тема: Перехват закрытия приложения
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.