![]() |
|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
![]() Цитата:
Здесь вообще несколько причин почему кнопка не была найдена:
![]() Код:
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
|
|||
|
|||
![]() Для практики я попробую программу с вашими замечаниями.
Спасибо |