WM_COPYDATA problem

6 отговора 123 прегледа
#1

WM_COPYDATA problem

Slojil sum kuka na mishkata(LMouseDown) i pri dadeni usloviq si izprashtam WM_COPYDATA na programata mi sus nujnata informaciq. Problema e, che suobshtenieto stiga do glavniq mi prozorec samo, ako LMouseDown e izvursheno vuv moq prozorec. Nqkoi da ima ideq zashto ne se izprashta suobshtenieto?

by Wise Guy
[email protected]
Отговор
в отговор на Wise Guy #2

Re: WM_COPYDATA problem

С какво пращаш съобщението - със SendMessage() ли?
Щото с PostMessage() няма да стигне.

Отговор
в отговор на Гeнчo #3

Re: WM_COPYDATA problem

Izpolzvam SendMessage estestveno... Chetoh MSDN i ne namerih nishto, koeto da opisva takuv problem

Znachi kukata si prihvashta LMouseDown i izprashta WM_COPYDATA vinagi, no moq prozorec go poluchava samo, ako toi e aktiven (mai)



Napravih si otdelno prilojenie za testvane (na Delphi). Kato se click-va v/u komponentite ot moq prozorec vuv Caption-a se izpisva Handle na komponenta. Ako subitieto e izvun nego nqma promqna t.e. ne se poluchava suobshtenieto. Eto go proekta: [линк]

by Wise Guy
[email protected]

Редактирано от Wise Guy на

Отговор
в отговор на Wise Guy #4

Re: WM_COPYDATA problem

Какво значи че "go poluchava samo, ako toi e aktiven (MAI)" ?
Не си ли сигурен? Сложи си некакъв печат (във файл например) на входа на Windows message function, която трябва да получи това съобщение (не знам на Делфи как се прави :()

SendMessage() все пак праща в опашката съобщения за прозореца. Да не би твоят процес да е зает в тоя момент и да не обработва опашката?

Опитай нещо друго. Направи си собствено съобщение, например WM_USER + 2345, и прати от hook-a това съобщение, и провери дали ти идва когато трябва. Ако така стане (при мене става), можеш лесно да симулираш WM_COPYDATA с това като пращаш в цикъл последователно данните като байтове или думи. Преди време имах сходен (не същия) проблем с WM_COPYDATA, и така го реших - грубо, но бачка. А и можеш да пращаш данните и чрез PostMessage().

Отговор
в отговор на Гeнчo #5

Re: WM_COPYDATA problem

Da be vqrno, bqh go zabravil tova. Shte si napravq sobsveno suobshtenie. To na men mi trqbva da izpratq samo edin Handle na prozorec.

No problema si ostava. Sq polzvam PostMessage (WM_SENDHANDLE = WM_USER + 2345). Slojih beep vuv kukata i toi mi kazva che suobshtenieto se izprashta. Obache sq probvah sus MessageBox i mi pokazva che Handle-a za moq prozorec e 0. Qvno neshto sum oburkal i zatova suobshtenieto ne se izprashta na moq prozorec. Sega shte si go opravq.

10x vse pak za WM_USER + 2345 (da ne se mucha sus strukturite)

by Wise Guy
[email protected]
Отговор
в отговор на Wise Guy #6

Re: WM_COPYDATA problem

Все пак 2345 е измислено. Виж дали не конфликтира с некое друго съобщение и си измисли друго. Някъде имаше карта с разрешените съобщения.

Отговор
в отговор на Гeнчo #7

Re: WM_COPYDATA problem

Ne, vurnah se na varianta sus WM_COPYDATA, no pozlvam WParam (koito e za Handle na izprashtashtiq prozorec)

Moje da se napravi i s WM_APP+n

by Wise Guy
[email protected]
Отговор