View Full Version : Generate click of mouse at the specified point ???
Camelot
Feb 12, 2002, 18:55
hi All
i want to generate mouse click at the specified point in the window, but i don't know exactly on which contol i'm clicking.
i mean i don't know is it a button or panel, or menu items. i only know window's handle, clicked point and that's all.
waiting for U, Great All <img src="smooch-1.gif" border="0">
es lav chgitem c/c++, bayc kporcem qez tetev orinak cuyc tal te inchpes stanal cankacac pahin mouse-i taki exac objekti handle(classname ev windowpoc)-@...
MOUSEHOOK_:MOUSEHOOKSTRUCT
WM_MOUSEHOOK=WM_USER+6
hHook,handle <img src="biggrin2.gif" border="0"> WORD;
procedure MouseHook(nCode,wParam,lParam);
begin
CallNextHookEx(hHook,nCode,wParam,lParam);
handle:=WindowFromPoint(MOUSEHOOK_.pt.x,MOUSEHOOK_ .pt.y);
PostMessage(hWnd,WM_MOUSEHOOK,handle,0);
procedure InstallHook (hwnd <img src="biggrin2.gif" border="0"> WORD);
begin
hHook:=SetWindowsHookEx(WH_MOUSE,addr MouseProc, hInstance, NULL);
end;
procedure UninstallHook;
begin
UnhookWindowsHookEx(hHook);
end;
classname ev windowproc-@ karox es gtnel
GetClassName, GetClassLong funkcianerov <img src="smooch-1.gif" border="0">
husov em orinak@ qez kogni...
Camelot
Feb 12, 2002, 19:52
thx for reply. i know about hooks.
but in my case, i have to do another thing, i don't want to know on which contol, i'm clicking on. i want only one thing, to generate a click and want the window to handle that message, ok.
the purpose is to do something like this;
send to the window or system such message
SendMessage(hWnd, WM_/**, POINT clickedPoint,...,.. );
, but this function wants to the contol which i haven't, had don't want to know <img src="smooch-1.gif" border="0">
the window have to handle this message.
Talex
hi, Talex.
Please clarify your question - it's not evident for me:
Talex, post#1:
i want to generate mouse click at the specified point in the window, but i don't know exactly on which contol i'm clicking.
i mean i don't know is it a button or panel, or menu items. i only know window's handle, clicked point and that's all.
Talex, post#2:
...
i don't want to know on which contol, i'm clicking on. i want only one thing, to generate a click and want the window to handle that message, ok.
..
Actually the "button" control is a window, too.
I think that was a reason why OS called "Windows"
Though, "Buttons 2000" name seems to be funny.
<img src="wink-5.gif" border="0">
Aram Hambardzumyan
Feb 13, 2002, 17:57
<blockquote><font size="1" face="MS Sans Serif, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Talex:
i want to generate mouse click at the specified point in the window, but i don't know exactly on which contol i'm clicking.
i mean i don't know is it a button or panel, or menu items. i only know window's handle, clicked point and that's all.
<hr></blockquote>
just send a message to it: SendMessage(...) (see parameters in msdn, first one is the window handle you send msg to, others for mouse click are: WM_LBUTTONDOWN or smth. like that, click point and some flags)
Camelot
Feb 13, 2002, 23:00
Poyasnyayu:
est' handle glavnogo okna prilozheniya, i escho spisok tochek(list of POINTs).
Pust' prilozhenie obrabotaet "isskustvennio" sozdannie clicki ili double clicki v dannix tochkax ekrana esli ezvesten handle tolko glavnogo okna prilozheniya.
t.e. neodxodimo sozdat' v systeme "isskustvenno" clicki, t.e. soobscheniya sgenerirovannie ne userom, a programmno.
Vopros v tom chto kak sozdat' takie clicki???
esli ne ponyatno mogu snova skazat'.
//////////////
ne pomogaet SendMessage s dannimi parametrami
POINT lp = {100, 200};
::SendMessage(hwndBtn, WM_LBUTTONDOWN, MK_LBUTTON, lp);
::SendMessage(hwndBtn, WM_LBUTTONUP, MK_LBUTTON, lp);
navernoe nuzhno chto to vrode
LPARAM commLP = MAKELPARAM( ID_Of_Control , BN_CLICKED);
WPARAM commWP = MAKEWPARAM(handleOfControl);
::SendMessage(main_hWnd, WM_COMMAND, commLP , commWP);
thx.
kratkost' - sestra talanta:
HANDLE hw, parentHW;
hw = HANDLE_OF_SOME_CHILD_WINDOW;
while (1)
{
parentHW = hw;
hw = ::GetParent( hw );
if ( !hw )
break;
}
::SendMessage( parentHW, WM_LBUTTONDOWN, 0, 0);
pojasnju kod:
1. ishesh' predka dannogo kontrolja
2. posylaesh' ego...emu.. nu v obshem sam razbirajsja.
<img src="smooch-1.gif" border="0">
Camelot
Feb 15, 2002, 01:33
pipl ya mashel, sam! <img src="smooch-1.gif" border="0">
mouse_event() - i vi polzuites' na zdorov'e <img src="smooch-1.gif" border="0">
dobavlju, chto:
Windows NT/2000 (or later): This function has been superseded. Use SendInput instead.
preimushestvo etoj funkcii v tom, chto pozvoljaet sozdavat' POTOK EVENT-ov.
v rekomendacii M$ govoritsa, chto novaja funkcija pozvoljaet sozdavat' event-y ne narushaja ocherednosti eventov (mouse and kb) v sisteme, kak eto delaet mouse_event.
Eto znachit, chto esli ran'she user mog najimat' klavishi v to je samoe vremja, kak vyzyvaetsa mouse_event, i eto privodilo by k rezkim skachkam (naprimer) kursora, to teper' vse budet imenno tak, kak i zadumal programmer. Blagodarja vyzovu SendInput budet obrabatyvat'sja POSLEDOVATEL'NOST' event-ov.
<img src="wink-5.gif" border="0">
b/r
Camelot
Feb 16, 2002, 23:30
Da ya sperva vishen na SendInput(), a potom tolko na mouse_event(). Prosto SentInput() u menya ne zarabotal <img src="sad-2.gif" border="0">
So strukturoi INPUT tozhe problemi kompilyator vidaet takie oshibki....
error C2065: 'INPUT' : undeclared identifier
error C2039: 'SendInput' : is not a member of '`global namespace''
?????
I think you have to install Platform SDK first to use it.
Camelot
Feb 18, 2002, 23:46
2 acid:
razve SDK ne insatlliruetsya vmeste c MSDN i VC. togda kak? Na kakom diske Visual Studio naxoditsya Platform SDK ?
thx
MS Platform SDK installiruetsja s Visual Studio no on ochen' staryi. Est' mnogo veshei kotorye prishli s novym SDK - Microsoft Platform SDK, February 2001 Edition.
Dumau mozhesh ego skachat' s Microsoftovskogo FTP.
Camelot
Feb 19, 2002, 01:27
thx acid:
a na diskax VS 2000 netu???
traffic hzalko <img src="smooch-1.gif" border="0"> ili na .Net-e netu. u menya poslednii .Net est'?
thx
dumau na .NET budet, ne zrja zhe 7 diskov vpixnuli v paket.
A voobshe sovetuu na 100% byt' uverenym chto ty nichego ne propustil kogda ispol'zoval etu funkciu, mozhet okazatsja chto prichina ne v otsutsvii SDK <img src="smooch-1.gif" border="0">
Esli xochesh prishli project posmotru.
Camelot
Feb 19, 2002, 01:44
esli ne trudno link dai ya na site microsoft, i tam mnogo raznix sdk, kakoi immeno ne znayu ... <img src="sad-2.gif" border="0">
A vot 1 fevralya 2001 ne bilo, tolko 1fevralya 2002 goda da i to WMI kakoito.
Esli ne trudno podskazhi ili dai konkretnii link.
thx u in advance.
zdes' primernii kod:
mog bi pointer na INPUT massiv sdelat' i vse kk, v nego...no eto potom...
void CMesSendWndDlg: <img src="embarrassed.gif" border="0"> nSendmessageBtn()
{
HWND hWnd = ::FindWindow("FROMDLL_CLASS_NAME", "FROMDLL_CLASS_NAME");
INPUT kkDown, kkUp;
DWORD flagsDown = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN;
DWORD flagsUP = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP;
kkDown.type = INPUT_MOUSE;
kkDown.mi.dwExtraInfo = 0;
kkDown.mi.dx = 20;
kkDown.mi.dy = 20;
kkDown.mi.dwFlags = flagsDown;
kkDown.mi.mouseData = flagsDown;
kkDown.mi.time = GetTickCount();
kkUp.type = INPUT_MOUSE;
kkUp.mi.dwExtraInfo = 0;
kkUp.mi.dx = 20;
kkUp.mi.dy = 20;
kkUp.mi.dwFlags = flagsUP;
kkUp.mi.mouseData = flagsUP;
kkUp.mi.time = GetTickCount();
SetCursorPos(20,20);
::SendInput(1, &kkDown, sizeof(kkDown);
::SendInput(1, &kkUp, sizeof(kkUp);
}
vBulletin® v3.7.4, Copyright ©2000-2009, Jelsoft Enterprises Ltd.