|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI |
|
Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI
|
Обратный инженер Сообщения: 644 |
Профиль | Отправить PM | Цитировать Итак,вопрос начинающего программиста заключается в следующем - имеется следующий текст кода:
Цитата:
Не мог бы кто-нибудь разъяснить это дело? P.S. Пример кода взят из книги Валерия Фаронова "Система программирования Delphi" . |
||
------- Отправлено: 17:41, 19-11-2004 |
Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Savant
Спасибо,попробую это теперь осмыслить и как-нибудь применить . ...код переварил,и то,что вышло,прикрепил в файле . Вроде работает,но всё равно так и не смог придумать нормальную схему условных операторов в обработчике события OnCloseQuery,поэтому пришлось идти немного обходным путём. Дело в том,что мне необходимо в этом обработчике проверить не только наличие изменений в открытом документе,но и то,сохранил ли пользователь уже этот документ или нет.И с последним пунктом у меня как раз и возникает загвоздка. |
------- Последний раз редактировалось DillerInc, 07-02-2005 в 22:46. Отправлено: 18:52, 07-02-2005 | #41 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать В общем,как можно догадаться - у меня снова вопросы...
...а именно,необходимо получить ссылку на какое-нибудь окно - то бишь т.н. Handle Window (HWND).И не просто получить,а вывести её как-то в виде символов,к примеру,в компоненте TLabel(метка). Значит в чём заключается вопрос...имеется функция WinAPI : function FindWindow(lpClassName, lpWindowName : PChar) : HWND; ...возвращающая "хэндл" искомого окна.А вот как теперь этому значению придать наглядный вид,чтобы отобразить символьно это значение в той же метке? Возможно ли такое вообще,если да,то как?С помощью каких функций? |
------- Отправлено: 23:44, 01-03-2005 | #42 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
Сначала теория: хэндл окна представляет собой просто двойное слово, т.е. 32-битное число. Число можно представить в символьной форме функцией Int2Str. А например с помощью GetWindowText() можно получить заголовок окна. Функций работы с окнами очень много, конкретизируйте цель пожалуйста... |
Отправлено: 19:09, 02-03-2005 | #43 |
Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Savant
Цель - использование этого самого хэндла,32-битного числа,в другой программе,т.е. мне необходимо прописать в другой программе это значение как один из параметров для выполнения определённой команды.Именно поэтому мне необходимо получить символьное представление значения типа HWND. Цитата:
...не так ли?Или... Цитата:
|
||
------- Отправлено: 20:08, 02-03-2005 | #44 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
Цитата:
Цитата:
var S: array[0..999] of Char; // Запас всегда иметь хорошо ;) begin ..... // Записываем по адресу @S заголовок окна формы Form1 // GetWindowText приплёл тут просто для примера, // можно было написать вместо него константу 1000 GetWindowText(Form1.Handle,@S,GetWindowTextLength(Form1.Handle)+1); // Выводим текст в Label1 Label1.Caption:=S; end; |
||
Отправлено: 22:05, 02-03-2005 | #45 |
Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Savant
Спасибо за информацию - будем мотать на ус . |
------- Отправлено: 23:46, 02-03-2005 | #46 |
Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Доброго всем времени суток!
Это называется - сижу, туплю... Как можно грамотно на Delphi организовать оператор выбора case..of..end;, чтобы он был не такой примитивный как обычно его описывают,например: case Ch of 'n', 'N', 'н', 'Н' : lbOutput.Caption := 'Нет'; 'y', 'Y', 'д', 'Д' : lbOutput.Caption := 'Да'; end; Можно сделать,конечно,и так: if dEvent.dwDebugEventCode = LOAD_DLL_DEBUG_EVENT then // Первый вариант константы выбора begin hDllFile := dEvent.LoadDll.hFile; if GetFileNameFromHandle(hDllFile) then begin PPointer(Base) := dEvent.LoadDll.lpBaseOfDll; RestoreCode := InjectCode(EntryPoint, $FFFF); end; end; if dEvent.dwDebugEventCode = EXCEPTION_DEBUG_EVENT then // второй вариант константы выбора if dEvent.Exception.ExceptionRecord.ExceptionCode = EXCEPTION_ILLEGAL_INSTRUCTION then begin RestoreData(EntryPoint, RestoreCode); DecryptStart := SeekBpPlace(Base); SendMessage(hMemo, WM_SETTEXT, 0, lParam(' * Тра-ля-ля '+IntToHex(DecryptStart, 8))); end; Следовательно - как быть ? |
------- Отправлено: 20:26, 18-08-2005 | #47 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
Не совсем понятно, как "каждая константа выбора" может содержать "определённый кусок кода" ))). Да к тому же в общем случае процессорное время будет все равно уходить (но меньше), т.к. программа будет последовательно (хотя и это зависит от компилятора, где-то могут для поиска (при большом кол-ве вариантов) использоваться другие алгоритмы) сравнивать значения, пока не найдёт подходящее. Но если Ваша мысля дошла, то есть два (в принципе одинаковых) решения: 1) внешние операторы if преобразовать к виду if dEvent.dwDebugEventCode = LOAD_DLL_DEBUG_EVENT then begin < .. > end else if dEvent.dwDebugEventCode = EXCEPTION_DEBUG_EVENT then begin < .. > end; case dEvent.dwDebugEventCode of LOAD_DLL_DEBUG_EVENT: begin < .. > end; EXCEPTION_DEBUG_EVENT: begin < .. > end; end; |
Отправлено: 20:56, 18-08-2005 | #48 |
Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Savant
Спасибо за разъяснения насчёт case .. of .. end . Сейчас вот подумал,потом глянул это дело в отладчике - действительно оба решения в принципе одинаковы . |
------- Отправлено: 22:15, 18-08-2005 | #49 |
Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Вот ещё один вопрос возник:
в Delphi есть объект класса TMemo. У его свойтсва Lines имеются методы Add и Append. Так вот как можно с помощью WinAPI организовать процедуру,аналогичную дельфийскому методу Append ? Т.к. если послать сообщение классу STATIC... ...то это будет аналогично дельфийскому Add, т.е. текст целиком заменится на новый,а мне необходимо добавить этот текст... |
------- Отправлено: 14:10, 19-08-2005 | #50 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[флейм] GGK и уголовная ответственность за использование нелицензионного ПО | SPB | Лицензирование продуктов Microsoft | 9 | 20-06-2007 12:38 | |
Delphi - WinApi||C++Builder(Delphi) SplashScreen в отдельном потоке? | XCodeR | Программирование и базы данных | 4 | 12-03-2007 19:51 | |
Delphi - Win32 API | Delphi | Странности с Winapi Timer | Mavlyudov | Программирование и базы данных | 4 | 14-11-2005 10:10 | |
Delphi - Delphi, WinAPI | Корректное завершение программы | fossil | Программирование и базы данных | 6 | 10-08-2005 14:52 | |
Delphi - *Решено* | Использование WinAPI под Delphi | Savant | Программирование и базы данных | 2 | 14-01-2005 21:40 |
|