|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
Работа в чужом окне
Для практики я попробую программу с вашими замечаниями.
Спасибо |