IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Правильный WM_LButtonClick
Unconnected
сообщение 19.06.2011 15:13
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Как правильно отправить кнопке клик мыши? Делал традиционно так:
Procedure clickng(w:THandle);
begin
SendMessage(w, WM_LButtonDown, 1, 1);
SendMessage(w, WM_LButtonUP, 1, 1);
end;


за 1-3 параметры уверен, а вот 4й - в msdn написано, что там должна быть структура с координатами курсора, а везде в сети там тупо 0 или 1, но я подозреваю, что это очередной ГК.. хотя раньше всегда так же делал, ну вот сейчас опять работает как-то непонятно и через раз.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Unconnected
сообщение 20.06.2011 11:53
Сообщение #2


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Ну, надо кнопку нажать.. или ещё как-то можно её нажать, не щелчком? Он как-то нестабильно работает. У меня на машине всегда, а на других иногда вообще не кликает, хотя тоже XP.. посмотрите, может не так делаю чего..


const kname='PrivatCom';
var kh,but1h:THandle;
Procedure clickng(w:THandle);
var r:TRect;
p:TPoint;
begin
getwindowrect(w,r);
p:=r.TopLeft;
ScreenToClient(w, p);
sendMessage(w, WM_LBUTTONDOWN, MK_LBUTTON, MakeLong(p.x, p.y));
sendMessage(w, WM_LBUTTONUP, MK_LBUTTON, MakeLong(p.x, p.y));
end;

function GetText(wnd:THandle):string;stdcall;
var p:array [0..pred(MAX_PATH)] of char;
begin
GetWindowText(wnd,p,max_path);
result:=strpas(p);
end;

var res:THandle;
fn:string;

function ChildTree(Han:THandle; Info: lparam):BOOL;stdcall;
var sp:string;
begin
sp:=ansiuppercase(gettext(han));
if pos(fn,sp)>0 then begin
res:=han;
result:=false;
end else result:=true;
end;

function findbut(h:THandle;fnk:string):THandle; //ищет дочерние окна h, в именах которых есть fnk
begin
res:=0;fn:=fnk;
enumChildWindows(h,@ChildTree, 0);
result:=res;
end;

function findnewk(k:THandle):THandle; //может быть несколько окон с одним caption-ом, ищет новое,
var d:integer; //если его нет, ждет пока оно появится 50 с.
begin
d:=0;result:=0;
repeat
result:=findbut(0,kname);
sleep(1);inc(d);
until ((result<>k) and (result<>0)) or (d=50000);
end;

Procedure kdown;
var k:THandle;
begin
kh:=findnewk(0);
sleep(3000); //надо ли?
if kh<>0 then but1h:=findbut(kh,'ПОДКЛЮЧЕНИЕ') else exit;
clickng(but1h);
end;


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Unconnected   Правильный WM_LButtonClick   19.06.2011 15:13
IUnknown   Опять "магические числа"? SendMessage(w...   19.06.2011 15:22
Unconnected   Проще, ну это для краткости) А xPos-yPos это искат...   19.06.2011 15:25
IUnknown   xPos и yPos - это координаты мыши (относительно кл...   19.06.2011 15:31
Unconnected   Проще, ну это для краткости) А xPos-yPos это искат...   19.06.2011 15:32
IUnknown   Это? The coordinate is relative to the upper-left ...   19.06.2011 15:34
Unconnected   Procedure clickng(w:THandle); var r,r2:TRect; ...   19.06.2011 16:00
IUnknown   Следи за руками: p:=r.TopLeft; ScreenToClient...   19.06.2011 16:17
Unconnected   O_o нажалось... я сначала примерно так же пробовал...   19.06.2011 16:33
Unconnected   deleted   20.06.2011 0:10
TarasBer   А тебе для чего посылать щелчок? Я когда таким обр...   20.06.2011 9:31
Unconnected   Ну, надо кнопку нажать.. или ещё как-то можно её н...   20.06.2011 11:53
TarasBer   Чтобы нажать кнопку, надо просто вызвать ту же про...   20.06.2011 12:07
Unconnected   Что-то новое.. и как её вызвать, тоже sendmessage ...   20.06.2011 12:15
IUnknown   Угу... Все не так... Не надо делать этот ужасный ц...   20.06.2011 12:29
Unconnected   Ооо нет, опять эти dll, мэппинг, затыки на пустом ...   20.06.2011 12:36
IUnknown   Да мне-то все равно, хоть вручную проверяй (показы...   20.06.2011 12:43
Unconnected   Хочу нормально, а с дллками связываться не хочу......   20.06.2011 12:58
TarasBer   > Что-то новое.. и как её вызвать, тоже sendmes...   20.06.2011 13:22
Unconnected   Если бы своего, то понятное дело не кликал бы так)...   20.06.2011 13:27
TarasBer   http://msdn.microsoft.com/en-us/library/ms645478(V...   20.06.2011 14:11
IUnknown   2 Unconnected: :) [code=pas]const sCaptionToF...   20.06.2011 16:43
Unconnected   Procedure clickng(w:THandle); begin postmessage(...   20.06.2011 16:45
IUnknown   Да ладно... Control window - это оно и есть, окно ...   20.06.2011 17:44
Unconnected   Ок, разделяю и властвую) То есть, Uppercase далеко...   21.06.2011 1:50
IUnknown   Это зависит от версии компилятора. По крайней мере...   21.06.2011 8:39
Unconnected   Ого, а у меня D7.. короче решил не заморачиваться,...   22.06.2011 1:13
skyjumping   так то оно так..   1.10.2012 19:17


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 10.07.2025 9:27
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"