-
> 2Дмитрий Белькевич, я вас понял, спасибо. Кнопка в фокусе > и она нажмется, но сперва надо найти Handle "текстового > окна", чтобы туда имя файла послать или оно тоже без handle > можно, если оно в фокусе стоит?
Если фокус в edit'е, то можно просто keybd_event'ами в нем что-то набрать, без handl'ов, насколько я помню.
-
Программа стоит :) Сообщение к ней не доходит, пока не обработается хууком (функцией фильтром). Если использовать procret то хук стартует полсле закрытия диалогового окна и вводить уже некуда :)
-
чета какаято нездоровая тенденция пошла,писать программы для нажимания кнопок в других программах
-
Учиться то никто не запрещает :) Почему вы считаете что нажимание кнопок в чужих программах "нездорово". Вот с чего то надо начинать, вот начинаю с этого? Или другие сразу со "здоровыми" идеями рождаются? :)
-
> > чета какаято нездоровая тенденция пошла,писать программы > для нажимания кнопок в других программах
ну я, например, для автотестов пользую. благо, что софт свой же, то с ним немного проще договориться. еще как-то из сторонней либы (дллки на билдере) приходилось недостающие данные прямо из формы из TEdit забирать. в саппорт стучали, программисты отказались нужные данные передавать, то сам забрал :)
-
> Сообщение к ней не доходит, пока не обработается хууком > (функцией фильтром).
зачем хук? синхронизация?
-
Это примерно как?? не умею :)
-
Зачем тут хук? Всё проще: var
hW, hEdit, hBtn: HWND;
path: AnsiString;
idBtn: integer;
begin
hW := FindWindow(nil, 'Открыть);
if hW <> 0 then
begin
hEdit := FindWindowEx(hW, 0, 'ComboBoxEx32', '');
if hEdit <> 0 then
begin
path := 'C:\base\MyUserDataBase.udb';
SendMessage(hEdit, WM_SETTEXT, 0, integer(path));
hBtn := FindWindowEx(hW, 0, 'Button', '&Открыть');
if hBtn <> 0 then
begin
IdBtn:=GetDlgCtrlID(hBtn);
SendMessage(hW, WM_COMMAND, MakeWParam(IdBtn, BN_CLICKED), hBtn);
end;
end;
end;
end;
-
> Это примерно как?? не умею :)
В смысле - зачем тебе вообще тут хук?
Пробуй [27]...
-
Подскажите что за прикол: функция обработки EnumWindow function FindDialog(Wd: HWnd; Param: LongInt): Boolean; stdcall;
var
ClassName: array [0..254] of Char;
begin
FindDialog:=True;
GetClassName(Wd, ClassName, SizeOf(ClassName));
if ClassName='#32770' then
if GetWindowThreadProcessId(Wd,nil) = idFrm then
begin
FindDialog:=False;
showmessage('íàøåë');
end;
end; функция вызова EnumWindows(@FindDialog,0); Прикол в том, что через некоторое время (около секунды) переменная hDialog становится равной нулю. hDialog в глобальных переменных. Больше её никто не использует и не меняет
-
блин, hDialog:=Wd; конечно же не закомментирована, просто скопировал так :)
-
ммм.... действительно я туплю, нашел ошибку в другом месте. Вопрос снят :)
|