ClickEvent

10 отговора 249 прегледа
#1

ClickEvent

Някой знае ли как с SendMessage функцията на Windows, мога да пратя съобщение къде точно е кликнато с мишката.Тоест все едно моята програма е прозрачна, аз прихващам координатите на кликването и го пращам на Windows-a.Някой знае ли как става.

Отговор
в отговор на RawSteel #2

Re: ClickEvent

WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK

същото има и за другите бутони


[линк]

Отговор
в отговор на бoc #3

Re: ClickEvent

А да знаеш как да прихвана Desktop-а. Тоест как да сендна Message на Desktop-а. И къде трябва да подам координатите на клика, на wParam или lParam. И как то4но се изчисляват, тоест как от две координати правя един параметър и го подавам

Отговор
в отговор на RawSteel #4

Re: ClickEvent

за какво съм ти дал тоя линк към MSDN-а виж си там параметрите

за десктопа що не пробваш GetDesktopWindow :-)

Отговор
в отговор на бoc #5

Re: ClickEvent

По простата причина, че когато някой човек пита друг от неопитност е по-добре да му се отговори посредством пряка хуманизирано-интерфейсна реч, а не в RTFM! стил....
Та, така:
GetDesktopWindow връща хендъл на прозорец със активния десктоп, сиреч нужния параметър за случая с препращане на съобщението.
Преобразуването на параметрите, свързани с координатите, е следното:
Dx=LOWORD(lParam);
Dy=HIWORD(lParam);

В крайна сметка е нещо като следното:
PostMessage(GetDesktopWindow(),WM_LBUTTONDOWN,wParam,lParam/*that HAS been right now filled-in above*/);


Има и вариант за хендъл да се подава HWND_BROADCAST: все пак това е най-denial-издяланата ОС...

[линк]
Отговор
в отговор на Jc{P}nX #6

Благодаря

Благодаря ви много, питам тези глупави въпроси защото тази материя ми е нова и сега навлизам в нея та опит нямам въобще и всяка помощ на роден език е много по лесно разбираема, надявам се да не дразня хората с тези въпроси, и се надявам скоро да мога да се оправям сам :)

Отговор
в отговор на Jc{P}nX #7

Re: ClickEvent

не може на всеки въпрос да се отговаря по този начин, защото ще стана безкрайна поредица от въпроси и отговори.
в конкретния случай е подобре да се посочи източника на информацията, защото очевидно питащия ще имаоще много въпроси и е по-добре да знае къде и как да търси отговорите.

Отговор
в отговор на Jc{P}nX #8

Проблем

Имам проблем отново и вече два дни му се мъча и не мога да го оправя.
Ситуацията е следната. Правя програма която стои отгоре на десктопа и симулира water effect, капки дъжд. Искам когато се кликне върху програмата ми тя да прихваща клика и да го праща на Windows Desktop-а, тоест да можеш да си отваряш МyComputer или Notepad или квото и да е друго все едно е анимиран wallpaper. Ето ви кода който използвам :

static IntPtr MakeLParam(int LoWord, int HiWord)
{
return (IntPtr) ((HiWord << 16) | (LoWord & 0xffff));
}

[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam,IntPtr lParam);

[DllImport("user32.dll", EntryPoint="GetDesktopWindow")]
public static extern IntPtr GetDesktopWindow();

private void myControl1_MouseDown(object sender, MouseEventArgs e)
{
int result = SendMessage(GetDesktopWindow(), 0x0203,(IntPtr)0,MakeLParam(e.X,e.Y));
}


Проблема е следния - когато кликна където и да е в моята програма ми се отваря Start бутона на Windows-a. Тоест функцията GetDesktopWindow() като че ли ми връща handle не за десктопа а за старт бутона.
Старт бутона подпрозорец ли се води на десктопа или незнам.
Ако някой знае защо става така ще съм му благодарен.

Отговор
в отговор на RawSteel #9

Re: Проблем

ами той десктопа целия е покрит с контроли.

потърси child прозорец на десктопа със следните характеристики:
class SysListView32
caption "FolderView"

а ти тоя дъжд само на десктопа ли го държиш или ще бъде отгоре и върху notepad-а като го пуснеш него?

Отговор
в отговор на бoc #10

Re: Проблем

Ами четох на няколко места че десктопа е първия child на program manager и мога да му get-на handle-а с
GetWindow(FindWindow("progman","program manager"),5)
ама пак нищо не става, или не го гетва или незнам.
А функцията SendMessage ми връща 0, дори когато ми се отваря Start бутона.
Направо се изнервих вече, навсякъде пише едно и също и пак не става.

Отговор
в отговор на RawSteel #11

Re: Проблем

(после искам бири) :)
мисля, че ти трябва WM_NCHITTEST?

Отговор