![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
lollollollol |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Здравствуйте.
Есть задача - Сделать скриншот экрана. Условие - Текстовое значение буфера обмена должно остаться неизменным. Я решил сделать так:
Если добавить uses clipbrd, то решение задачи не занимает больше пяти минут. Но необходимо сделать это использую лишь uses windows. Пытался получить текст так:
Прошу помочь с вопросом, спасибо Добавлено @ 10:45 Заглянул в USES, выдрал оттуда код
Но к моему удивлению Data=0. Видимо нельзя передавать GetCurrentProcess. А как можно получить хендл процесса, без формы? Это сообщение отредактировал(а) lollollollol - 27.3.2013, 10:45 |
||||||
|
|||||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: нет Всего: 329 |
Нужно обязательно через winapi?
|
|||
|
||||
Evjeny |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2006 Репутация: нет Всего: 5 |
CF_TEXT - кодировка ANSI, каждая строка заканчивается CRLF, в конце буфера 0
по поводу OpenClipboard - исходя из документации надо передавать 0:
|
|||
|
||||
lollollollol |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Обязательно без использования любых uses кроме windows
Да, вот это я стормозил. Передал ноль, и смог получить текст из буфера Посмотрев повнимательней Clipbrd, удалось и записать текст в буфер Остался финальный вопрос, как записать скриншот, который находится в буфере в переменные buff: array[0..20971520] of byte; //Массив байт buff_size:integer; //Размер изображения Может получить указатель на адрес памяти, а потом просто скопировать, но для этого нужно размер знать, да и как быть с типом данных? Это сообщение отредактировал(а) lollollollol - 27.3.2013, 20:12 |
||||
|
|||||
Evjeny |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2006 Репутация: нет Всего: 5 |
Я в делфи не силен - CopyScreenToClipboard это функция делфи или самописаная?
как вариант узнать формат содержимого буфера обмена (GetClipboardFormatName), и уже от этого отталкиваться - найти описание формата и т.д. |
|||
|
||||
lollollollol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Должно быть изображение BitMap, всё что есть для этого типа расчитано что я загружу его в TBitmap, но мне нельзя использовать это. |
|||
|
||||
Evjeny |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2006 Репутация: нет Всего: 5 |
да это HBITMAP, соответственно и работать с ним можно через win api...
здесь пример (правда на с++), как сохранить это все в файл.... |
|||
|
||||
lollollollol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
А если за основу взять функцию которая копирует текст:
Я верно мыслю? Указываю необходимый тип, теперь осталось получить информацию. Но не пойму как в массив записать BitMap, который сейчас в буфере Это сообщение отредактировал(а) lollollollol - 27.3.2013, 21:49 |
|||
|
||||
Evjeny |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2006 Репутация: нет Всего: 5 |
нет так не получится...картинка хранится в буфере в определенном формате (bmp в данном случае), т.е. чтобы вычислить тот же размер, необходимо обращаться к полям заголовка файла...
думаю в сети можно найти примеры работы с bmp форматом, на делфи в том числе...на крайний случай можно почитать описание формата и написать самому... я бы помог кодом, но с делфи давно не общался, да и иде самой нету... |
|||
|
||||
lollollollol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
В любом случае это просто набор байт, нужно знать лишь начало, и размер. Так что думаю получится.
BMP это ведь просто формат где каждый пиксель это цвет, в формате RGP и занимает он 3 байта. Значит размер изображения должен быть Длина*Ширина*3. Хотя сомневаюсь, ведь в начале .bmp файла есть ряд символов которые уникальны для каждого формата |
|||
|
||||
lollollollol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Это сообщение отредактировал(а) lollollollol - 28.3.2013, 10:06 |
|||
|
||||
lollollollol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
После res:=GlobalLock(Data); показало Неверный дескриптор окна, непойму что ему не нравится, остальные функции без ошибок отработали, проверил этим же кодом |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |