imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 09.09.2005, 12:32     # 1
delphist
Guest
 
Сообщения: n/a

Delphi: sendmessage не работает

Код
h:=findwindow(nil, pchar(edit1.text));
sendmessage(h, wm_close, 0, 0);
пашет нормально, но другие сообщения
sendmessage(h, WM_NEXTDLGCTL, 0, 0);
sendmessage(h, WM_PASTE, 0, 0);
не оказывают влияния на получателя.

Что я делаю неправильно?
 
Старый 09.09.2005, 14:29     # 2
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
первое ты шлеш не тому контролу -- нужно его родителю.
насчет второго... у тебя формат данных какой? должен быть CF_TEXT
dyr_farot вне форума  
Старый 09.09.2005, 16:02     # 3
delphist
Guest
 
Сообщения: n/a

то есть родителю? я получаю дескриптор окна и пытаюсь вставить в активный компонент. нифига не вставляется не в формате дело. Может нада дописать wm_paste, x, y?
 
Старый 09.09.2005, 16:11     # 4
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
Цитата:
The WM_NEXTDLGCTL message is sent to a dialog box procedure to set the keyboard focus to a different control in the dialog box.
т.е. это сообщение нужно слать не едит-у а его родителю

Цитата:
WM_PASTE
wParam = 0; // not used; must be zero
lParam = 0; // not used; must be zero
так что координаты слать не нужно
dyr_farot вне форума  
Старый 09.09.2005, 21:28     # 5
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
А можно вопрос? Нафига такие извраты?
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
/7y3uK вне форума  
Старый 20.09.2005, 18:40     # 6
delphist
Guest
 
Сообщения: n/a

Цитата:
dyr_farot:
это сообщение нужно слать не едит-у а его родителю
так я родителю и шлю
Цитата:
dyr_farot:
координаты слать не нужно
я имел в виду не координаты, а какие-либо параметры, которые я итак выставляю в ноль.
Так че делать?
 
Старый 20.09.2005, 18:44     # 7
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
у тебя что в sendmessage(h, WM_NEXTDLGCTL, 0, 0) что в sendmessage(h, WM_PASTE, 0, 0) одинаковые хэндлы ( по приведенному коду )
получается что ты или и текст шлеш родителю или пытаешся заставить edit сменить контрол
dyr_farot вне форума  
Старый 21.09.2005, 13:49     # 8
delphist
Guest
 
Сообщения: n/a

Так я сначала меняю контрол на текстовый (т.к. знаю, что следующий будит текстовым типа TMemo), а потом пытаюсь вставить в него текст.
 
Старый 21.09.2005, 13:56     # 9
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
"сначала" это когда? и как ты его меняеш?
давай по-порядку: ты нашел окно. что потом?
dyr_farot вне форума  
Старый 21.09.2005, 18:17     # 10
delphist
Guest
 
Сообщения: n/a

Цитата:
dyr_farot:
по-порядку:
1. копирую необходимый текст (простой)
2. запускаю свою прогу, и ту, в которую нужно вставить текст
3. нажимаю в своей проге "Поехали!" с кодом:

h:=findwindow(nil, pchar(edWindowHeader.text)); //ищу по тексту из едита
sendmessage(h, WM_NEXTDLGCTL, 0, 0);
sendmessage(h, WM_NEXTDLGCTL, 0, 0); (*знаю, что текстовый компонент третий по порядку*)
sendmessage(h, WM_PASTE, 0, 0); //вставка из буфера

Прикол в том, что ничего не происходит, но если в этой же проге (чужой) нажать два раза TAB, то активным будет текстовый компонент
 
Старый 21.09.2005, 18:25     # 11
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
в коде куча ошибок.
первая:
Цитата:
The FindWindow function retrieves the handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows.
т.е. edit ты в принципе найти не можеш. сначала нужно найти окно, в котором лежит этот edit, а уже потом искать в его дочерних окнах этот edit.
вторая:
h:=findwindow(nil, pchar(edWindowHeader.text));
sendmessage(h, WM_NEXTDLGCTL, 0, 0);
эти кодом ( если предположить что он работает и h -- HANDLE edit' a ) ты просиш edit переключить фокус на следующий из своих контролов ( о чем я и говорил ) что не правильно -- нет у него никаких контролов.
dyr_farot вне форума  
Старый 21.09.2005, 18:47     # 12
delphist
Guest
 
Сообщения: n/a

Цитата:
dyr_farot:
искать в его дочерних окнах
edit не в дочернем окне, а в главном
Цитата:
dyr_farot:
ты просиш edit переключить фокус на следующий из своих контролов
поясню строчку
Цитата:
dyr_farot:
h:=findwindow(nil, pchar(edWindowHeader.text));
я не знаю имя класса окна (и оно мне не нада), поэтому ставлю его в nil,
в этом случае поиск чужого окна произвожу по имени окна, которое для гибкости беру из своего edit.text, в итоге получаю что-то вроде:
h:=findwindow(nil, 'Безымянный - Блокнот');
причем h<>0 (при выполнении проги).
 
Старый 21.09.2005, 18:53     # 13
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
Цитата:
edit не в дочернем окне, а в главном
никто и не спорит. но edit не является top-level window. edit -- дочеренее окно другого окна ( формы )

Цитата:
я не знаю имя класса окна (и оно мне не нада), поэтому ставлю его в nil,
в этом случае поиск чужого окна произвожу по имени окна, которое для гибкости беру из своего edit.text, в итоге получаю что-то вроде:
h:=findwindow(nil, 'Безымянный - Блокнот');
причем h<>0 (при выполнении проги).
т.е. ты ищеш не edit, а окно, его содержащее?
тогда этой:
sendmessage(h, WM_PASTE, 0, 0);
строкой ты вставляеш текст в найденное тобой окно ( а не в edit )
dyr_farot вне форума  
Старый 21.09.2005, 18:58     # 14
delphist
Guest
 
Сообщения: n/a

Цитата:
dyr_farot:
строкой ты вставляеш текст в найденное тобой окно ( а не в edit )
а в этом случае не происходит вставки в активный компонент?
а как сделать?
 
Старый 21.09.2005, 19:03     # 15
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
нет. сообщение идет по адресу, а адрес -- handle окна.

что делать?..
можеш юзать:
Код:
HWND FindWindowEx(
    HWND hwndParent,	// handle to parent window
    HWND hwndChildAfter,	// handle to a child window 
    LPCTSTR lpszClass,	// pointer to class name
    LPCTSTR lpszWindow	// pointer to window name
   );
передав первым параметром h, а вторым NULL.
dyr_farot вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 21:55.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.