![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Помогите разрешить такой вопрос:
В моей программе пользователь загружает презентации PowerPoint, но они должны открываться для него только для чтения. При запуске выходит пароль за запуск презентации ![]() Программа должна эмулировала вставку известного пароля. Затем появляется второе активное окно "Пароль" с курсором в поле ввода пароля ![]() Необходимо не вводить пароль, а нажать кнопку "Только для чтения". Вот тестовый фрагмент программы: Код:
var
Form1: TForm1;
h1,h2,h3,h4,h5,h6:HWND;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
{ищем 1-е окно с именем "Пароль"}
1. h1 := FindWindow(nil, 'Пароль'); //Находим первое окно "Пароль"
2. h2 := FindWindowEx(h1,0,'Edit',nil);//находим дескриптор поля Edit
3. SendMessage(h2, WM_SETTEXT, 0, lparam(pchar('testor')));
4. h3:=findwindowex(h1,0,nil,'ОК'); //жмем кнопку
5. sendmessage(h3,BM_CLICK,0,0);
{ищем 2-е окно с именем "Пароль" }
6. h4 := FindWindow(nil, 'Пароль'); // Находим второе окно "Пароль"
7. h5 := FindWindowEx(h4,0,'Только для чтения',nil); //находим дескриптор кнопки
8. SetForegroundWindow(h5); //устанавливаем на ней фокус
9. sendmessage(h5,BM_CLICK,0,0); //жмем кнопку
end;
end.До строки 8 все работает нормально. Дальше ни как не могу перевести фокус на кнопку "Только для чтения". Может посоветуете, что мне нужно сделать. Спасибо . Последний раз редактировалось M.A.D.M.A.N., 13.05.2014 в 11:27. |
|
#2
|
||||
|
||||
|
Цитата:
Здесь вообще несколько причин почему кнопка не была найдена:
) вместо строк 6 и 7:Код:
h4 := 0;
h5 := 0;
while True do
begin
h4 := FindWindow(nil, 'Пароль'); // Находим второе окно "Пароль"
if h4 <> 0 then h5 := FindWindowEx(h4, 0, nil, '&Только для чтения');
if h5 <> 0 then Break;
Sleep(100);
Application.ProcessMessages;
end;Цитата:
|
|
#3
|
|||
|
|||
|
Спасибо за сообщение. Я решил этот вопрос до этого сообщения.
Действительно без значка "&Только для чтения" программа не работала. Если бы я увидел ваше сообщение раньше, то естествено решил бы этот вопрос раньше. А так пришлось эксперементировать. Еще я добавил sleep(500) и установку фокуса на кнопку: Код:
if (h5<>0) then
begin
//установка фокуса на кнопку и её активация
SetForegroundWindow(h5);
SendMessage(h5, WM_ACTIVATE, 1, 0);
SendMessage(h5, WM_ENABLE, 1, 0);
SendMessage(h5, WM_SETFOCUS, 1, 0);
end;
sendmessage(h5,BM_CLICK,0,0); // запуск.Теперь все работает нормально. Буду проверять стабильность работы. Вам еще рас большое спасибо. Без таких как вы нам юзерам тяжело. Последний раз редактировалось Admin, 13.05.2014 в 19:19. |
|
#4
|
|||
|
|||
|
Для практики я попробую программу с вашими замечаниями.
Спасибо |