ClickEvent
10 отговора
249 прегледа
ClickEvent
Някой знае ли как с SendMessage функцията на Windows, мога да пратя съобщение къде точно е кликнато с мишката.Тоест все едно моята програма е прозрачна, аз прихващам координатите на кликването и го пращам на Windows-a.Някой знае ли как става.
Re: ClickEvent
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK
същото има и за другите бутони
[линк]
WM_LBUTTONUP
WM_LBUTTONDBLCLK
същото има и за другите бутони
[линк]
Re: ClickEvent
А да знаеш как да прихвана Desktop-а. Тоест как да сендна Message на Desktop-а. И къде трябва да подам координатите на клика, на wParam или lParam. И как то4но се изчисляват, тоест как от две координати правя един параметър и го подавам
Re: ClickEvent
за какво съм ти дал тоя линк към MSDN-а виж си там параметрите
за десктопа що не пробваш GetDesktopWindow :-)
за десктопа що не пробваш GetDesktopWindow :-)
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-издяланата ОС...
[линк]
Та, така:
GetDesktopWindow връща хендъл на прозорец със активния десктоп, сиреч нужния параметър за случая с препращане на съобщението.
Преобразуването на параметрите, свързани с координатите, е следното:
Dx=LOWORD(lParam);
Dy=HIWORD(lParam);
В крайна сметка е нещо като следното:
PostMessage(GetDesktopWindow(),WM_LBUTTONDOWN,wParam,lParam/*that HAS been right now filled-in above*/);
Има и вариант за хендъл да се подава HWND_BROADCAST: все пак това е най-denial-издяланата ОС...
[линк]
Благодаря
Благодаря ви много, питам тези глупави въпроси защото тази материя ми е нова и сега навлизам в нея та опит нямам въобще и всяка помощ на роден език е много по лесно разбираема, надявам се да не дразня хората с тези въпроси, и се надявам скоро да мога да се оправям сам :)
Re: ClickEvent
не може на всеки въпрос да се отговаря по този начин, защото ще стана безкрайна поредица от въпроси и отговори.
в конкретния случай е подобре да се посочи източника на информацията, защото очевидно питащия ще имаоще много въпроси и е по-добре да знае къде и как да търси отговорите.
в конкретния случай е подобре да се посочи източника на информацията, защото очевидно питащия ще имаоще много въпроси и е по-добре да знае къде и как да търси отговорите.
Проблем
Имам проблем отново и вече два дни му се мъча и не мога да го оправя.
Ситуацията е следната. Правя програма която стои отгоре на десктопа и симулира 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 не за десктопа а за старт бутона.
Старт бутона подпрозорец ли се води на десктопа или незнам.
Ако някой знае защо става така ще съм му благодарен.
Ситуацията е следната. Правя програма която стои отгоре на десктопа и симулира 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 не за десктопа а за старт бутона.
Старт бутона подпрозорец ли се води на десктопа или незнам.
Ако някой знае защо става така ще съм му благодарен.
Re: Проблем
ами той десктопа целия е покрит с контроли.
потърси child прозорец на десктопа със следните характеристики:
class SysListView32
caption "FolderView"
а ти тоя дъжд само на десктопа ли го държиш или ще бъде отгоре и върху notepad-а като го пуснеш него?
потърси child прозорец на десктопа със следните характеристики:
class SysListView32
caption "FolderView"
а ти тоя дъжд само на десктопа ли го държиш или ще бъде отгоре и върху notepad-а като го пуснеш него?
Re: Проблем
Ами четох на няколко места че десктопа е първия child на program manager и мога да му get-на handle-а с
GetWindow(FindWindow("progman","program manager"),5)
ама пак нищо не става, или не го гетва или незнам.
А функцията SendMessage ми връща 0, дори когато ми се отваря Start бутона.
Направо се изнервих вече, навсякъде пише едно и също и пак не става.
GetWindow(FindWindow("progman","program manager"),5)
ама пак нищо не става, или не го гетва или незнам.
А функцията SendMessage ми връща 0, дори когато ми се отваря Start бутона.
Направо се изнервих вече, навсякъде пише едно и също и пак не става.