Как управлять окнами других приложений в Delphi
Как управлять окнами других приложений в Delphi
Чэнь Цзяньбин, Гуандунский кадровый колледж сельскохозяйственного менеджмента
Написание приложений Delphi часто включает операции с другими приложениями Windows. Например, в системе управления базами данных, если финансовому персоналу необходимо использовать калькулятор, он может вызвать функцию калькулятора, включенную в Windows. Каждый раз, когда он ее использует, он должен открывать калькулятор через «Пуск/Программы/Стандартные/Калькулятор». Очевидно, это очень громоздко. Конечно, вы можете создать ярлык «Калькулятора» на рабочем столе и определить горячую клавишу. Когда вам нужно использовать калькулятор, нажмите эту горячую клавишу, чтобы открыть «Калькулятор». Однако, поскольку «Калькулятор» является «немодальной» оконной программой, то есть при каждом запуске калькулятора будет открываться окно «Калькулятора», в результате на рабочем столе появляются не десятки «калькуляторов». только большое их количество увеличивает нагрузку на системную память и неудобно для пользователей в работе. Им можно легко управлять в Delphi, и эффект идеален. Ниже предложены методы реализации по двум основным вопросам.
1. Как контролировать дизайн?
Создайте новую форму, поместите в нее две кнопки с заголовками «Открыть» (то есть запустить «калькулятор») и «Закрыть» (выход и завершение) и добавьте для них обработку событий Click соответственно. Подробности см. в форме Form1 и файле Unit1.
Среди них наиболее важными являются следующие утверждения:
fwnd:=FindWindow('SciCalc','Калькулятор');
Прототип функции (подробнее см. в справке Delphi):
HWND FindWindow(
LPCTSTR lpClassName, // указатель на имя класса
LPCTSTR lpWindowName // указатель на имя окна
);
Здесь «SciCalc» — это имя класса калькулятора, а «Калькулятор» — заголовок окна калькулятора}
setWindowPos(fwnd,HWND_NOTOPMOST,0,0,0,0,SWP_SHOWWINDOW или SWP_NOSIZE или SWP_NOMOVE);
Прототип функции:
BOOL SetWindowPos(
HWND hWnd, // дескриптор окна
HWND hWndInsertAfter, // дескриптор порядка размещения
int X, // горизонтальное положение
int Y, // вертикальное положение
int cx, // ширина
int cy, // высота
UINT uFlags // флаги позиционирования окна
);
ShowWindow(fwnd,SW_RESTORE); //Показать открытый "калькулятор"
Прототип функции:
BOOL ShowWindow(
HWND hWnd, // дескриптор окна
int nCmdShow // показываем состояние окна
);
Ret:=WinExec('c:windowscalc.exe',SW_SHOWNORMAL); //Запускаем калькулятор.
Прототип функции:
UINT WinExec(
LPCSTR lpCmdLine, // адрес командной строки
UINT uCmdShow // стиль окна для нового приложения
);
Запустите программу «Калькулятор» и проверьте возвращаемое значение (тем самым используя возвращаемое значение для определения возможных ошибок).
2. Как уточнить «имя класса» приложения?
Чтобы управлять приложением, необходимо сначала уточнить «имя класса» приложения. Концепция «класса» уже очень ясна в программах Delphi. Например, создайте новую форму Form1, а «имя класса» формы — TForm1. Так как же определить «имя класса» других программ Windows?
К счастью, Delphi предоставляет практичный инструмент под названием Winsight, который подобен зеркалу, которое показывает «имена классов» монстров, где бы они ни находились.
Как использовать Winsight следующим образом:
⑴ Запустите Winsight (имя программы ws32.exe, в том же каталоге, что и основной файл delphi32.exe), см. рисунок ①;
⑵ Выберите «Следовать за фокусом» в «Шпионе» в меню Winsight, как показано на рисунке ②;
⑶Запустите программу «калькулятор»;
⑷Цель отображается в Winsight, как показано на рисунке ③.
Программная среда: китайская Win98/китайская Delphi5.0.