Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2005-03-20

Re[5]: Delphi чтение текста WINAPI

Хаю ду ю ду Емельянов Алексей?

Смотрю и вижу, как ты печатаешь умные вещи и дай-ка, думаю,
тоже что-нибудь напечатаю:

ЕА> окнам других процессов. Функция SendMessage сама обеспечит
ЕА> передачу данных между процессами. Правда, если
ЕА> процесс завис, Вашему потоку тоже каюк :(

PostMessage

   2005-03-20 21:42:30 (#336807)

Re: "засыпание" ноутбука и Delphi 3

Glad to greet, Oleg!

You seem to have written (Saturday, March 19, 2005):

OP> Есть ноутбук, любящий постоянно "засыпать", WinXP и прога на Delphi 3.
OP> Каким образом в проге сделать какие-либо действия перед тем, как чудо

В случае ноута по идее должно приходить WM_POWER или даже
WM_POWERBROADCAST (в wParam истинная причина).

OP> техники "заснет"? Если можно кусочек кода :).

Полагаю, на дельфе пишешь с VCL. Тогда обработчик этих сообщений
пишется так (давно было, и я по другому делал, но двигаться надо в
этом направлении):

...
protected myMessageHandler(var message:TMessage);message WM_POWER;
...

В теле из message вытаскиваешь wParam, lParam и делаешь, что тебе
надо.

ЗЫ Ещё может прийти WM_SYSCOMMAND wParam=SC_MONITORPOWER (монитор в
спящем режиме).

Alles Gute!

...In Code We Trust...

   2005-03-20 20:36:36 (#336791)

Re[4]: Delphi чтение текста WINAPI

>> Я тестирую прогу на Блокноте! И не работает!
>>
> Есть твоя прога. Так ? Ты открываешь блокнот. Да?
> Получаешь дескриптор одного из его окон (того, в котором текст),
> подсовываешь его в _своей_ проге в SendMessage(Handle, WM_GETTEXTLENGTH, ...
>
> Просто, если процессы разные (если до меня правильно дошло... что
> ты не из окна своего процесса пытаешься взять текст),
> то да - тебе текст не вернется.
>
Занятно. Читаю это обсуждение, вроде бы все сказано, даже цитаты
из документации приведены, а все не разберемся :)

Во-первых, согласно MSDN, если бы использовались функции
GetWindowText/GetWindowTextLength, текст окна из другого
процесса действительно не удалось бы взять. Для окна своего
процесса они используют WM_GETTEXT*, а для окон
других процессов явно дают заголовок, если он есть.

Во-вторых, несколько сообщений, имеющих в качестве параметра
буфер, включая WM_GETTEXT, все-таки можно посылать
окнам других процессов. Функция SendMessage сама обеспечит
передачу данных между процессами. Правда, если
процесс завис, Вашему потоку тоже каюк :(

Не сработало WM_GETTEXT для Блокнота скорее всего
потому, что приведенный код нашел не окно
редактора, а какое-то другое:

> h := GetNextWindow(h, GW_CHILD);
> i := GetWindowTextLength(h);
>
Надо бы устроить цикл с вызовом GetClassName.

Упоминания об ограничениях на размер буфера сообщения
при вызове между процессами что-то не нашел...

Номер выпуска : 4157
Возраст листа : 546 (дней)
Количество подписчиков : 528
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/336579
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-03-20 12:24:45 (#336579)

Re[4]: Delphi координаты ярлыка

Здравствуйте, Victor.

Вы писали 20 марта 2005 г., 3:48:43:

VVV> З.Ы. Только эта функция тоже не будет работать из твоей проги
VVV> для рабочего стола (т.к. тоже - между процессами).
VVV> Если вкратце - то тут как видно, надо передать указатель на
VVV> структуру. Память выделена под структуру в твоем процессе,
VVV> другой процесс до нее не доберется.
VVV> Если надо - поясню как такие фишки делать (там надо в другой процесс
VVV> внедряться и через что то (способов много) взаимодействовать,
VVV> передавать
VVV> данные).

Если Вас не затруднит.

   2005-03-20 06:07:51 (#336492)

Re[4]: Delphi чтение текста WINAPI

Здравствуйте, Victor.

Вы писали 20 марта 2005 г., 2:13:16:

VVV> Просто, если процессы разные (если до меня правильно дошло... что
VVV> ты не из окна своего процесса пытаешься взять текст), то да - тебе
VVV> текст не вернется.

VVV> Так, все таки, все так как выше описано ?

Да, именно так... Процессы разные

   2005-03-20 06:07:21 (#336491)

Re[3]: Delphi координаты ярлыка

Здравствуйте !

> Это у меня есть, как узнать координаты нужного значка?

Есть

BOOL ListView_GetItemPosition(
HWND hwnd,
int i,
POINT FAR *ppt
);

и сообщение

LVM_GETITEMPOSITION

wParam = (WPARAM) (int) i;
lParam = (LPARAM) (POINT FAR *) ppt;

З.Ы. Только эта функция тоже не будет работать из твоей проги
для рабочего стола (т.к. тоже - между процессами).
Если вкратце - то тут как видно, надо передать указатель на
структуру. Память выделена под структуру в твоем процессе,
другой процесс до нее не доберется.
Если надо - поясню как такие фишки делать (там надо в другой процесс
внедряться и через что то (способов много) взаимодействовать,
передавать
данные).

--
С уважением, Вахтуров Виктор.

Номер выпуска : 4154
Возраст листа : 546 (дней)
Количество подписчиков : 525
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/336426
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-03-20 00:49:31 (#336426)