Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2008, 21:59   #1
Comer_Jus
Подтвердите свой е-майл
 
Регистрация: 16.05.2008
Сообщений: 54
По умолчанию FindWindow

как с помощью FindWindow
найти рабочий стол
функция ищет окно с заданным именем
а Desktop ?
Comer_Jus вне форума Ответить с цитированием
Старый 03.07.2008, 22:21   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Как это не удивительно, взято совсем из не известного источника MSDN:

GetDesktopWindow
BOBAH13 вне форума Ответить с цитированием
Старый 03.07.2008, 22:38   #3
Comer_Jus
Подтвердите свой е-майл
 
Регистрация: 16.05.2008
Сообщений: 54
По умолчанию

ещё один вопросик (для чего собственно и задавался первый вопрос)

как с помощью PrintWindow получить снимок рабочего стола

Код:
var hSrcWnd:HWND;
     hDC1:HDC; 
     hSrcDC:HDC;
     hBmp:HBITMAP ;
    SW,SH:Integer;
    Bitmap:TBitmap;
begin
  SW:=Screen.Width;
  SH:=Screen.Height;
  Bitmap:=TBitmap.Create;

  hSrcWnd := FindWindow(nil, PChAR('Form1'));
  hDC1:= GetDC(hSrcWnd);

  hSrcDC:=CreateCompatibleDC(hDC1);
  hBmp := CreateCompatibleBitmap( hDC1, SW, SH );

  SelectObject(hSrcDC, hBmp);
  PrintWindow(hSrcWnd, hSrcDC, 0);
  //BitBlt(hDC1,0,0,SW,SH,hSrcDC,0,0,SRCCOPY);

  Bitmap.Handle:=hbmp;
  Bitmap.SaveToFile('ScreenShot.bmp');

  DeleteObject(hBmp);
  DeleteDC(hSrcDC);
  ReleaseDC(hSrcWnd, hDC1);

  Bitmap.Free
размер Bitmap'a я сразу забил как у Decktop'a ну да это мелочи
а суть в том что окно он фоткает
а когда подставляю hSrcWnd := GetDesktopWindow;
то получаю квадрат малевича
где я ошибся подскажите?

так не работает
Код:
hSrcWnd := GetDesktopWindow;
hDC1      := GetDC( GetDesktopWindow );
и так тоже
Код:
hSrcWnd := Hwnd_Desktop ;
hDC1      := GetDC( Hwnd_Desktop );
в обоих вариантах получаю пустой Bitmap

такое чувство что функция PrintWindow работает только с окнами
(что как бы и понятно из её названия)

знаю что получить копию экрана легко можно и другими способами
но в данном случае интересна PrintWindow

Последний раз редактировалось Stilet; 04.07.2008 в 08:03.
Comer_Jus вне форума Ответить с цитированием
Старый 04.07.2008, 08:13   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Comer_Jus
Я может и не в тему, но лично я предпочитаю делать снимки так:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var    dc:HDC;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin

if not BitBlt(Canvas.Handle,0,0,Width,Height,dc,Mouse.CursorPos.X,
 Mouse.CursorPos.Y,SRCCOPY) then RaiseLastWin32Error;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
dc:=GetDC(GetDesktopWindow);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ReleaseDC(GetDesktopWindow,dc);
end;

end.
При этом коже поводи мышой по экрану, форма будет получить его снимок
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.07.2008, 08:59   #5
Comer_Jus
Подтвердите свой е-майл
 
Регистрация: 16.05.2008
Сообщений: 54
По умолчанию

это всем извесный способ
интересует имеено получение скриншота
с помощью функции PrintWindow
(возможно или нет)
Comer_Jus вне форума Ответить с цитированием
Старый 04.07.2008, 09:03   #6
N!ckeL
Форумчанин
 
Регистрация: 29.03.2008
Сообщений: 300
По умолчанию

Это не с помощью PrintWindow, пока писал появилось верхнее сообщение. Но в результате всё равно получится canvas...

Код:
var
 c:tcanvas;
 dc:hdc;
begin
 dc:=getdc(0);
 c:=tcanvas.create;
 c.handle:=dc;
 image1.Canvas.CopyRect(rect(0, 0, image1.Width, image1.Height), c, rect(0, 0, screen.Width, screen.Height));
 releasedc(0, dc);
 c.Free;
end;
Карп преодолевший водопад становится драконом.
N!ckeL вне форума Ответить с цитированием
Старый 04.07.2008, 10:14   #7
Comer_Jus
Подтвердите свой е-майл
 
Регистрация: 16.05.2008
Сообщений: 54
По умолчанию

интересует реализация задачи средством функции PrintWindow
и ни как иначе
Comer_Jus вне форума Ответить с цитированием
Старый 29.11.2008, 10:17   #8
Рамиль
 
Аватар для Рамиль
 
Регистрация: 19.10.2008
Сообщений: 4
По умолчанию

Помогите пожалуйста! Кто-нибудь знает как получить доступ к Экрану(отбражение рабочего стола) чтобы можно было получать цвета попиксельно?
DoctorW
Рамиль вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FindWindow не нашел окна, а ShellExecute возвращает ERROR_PATH_NOT_FOUND malor Win Api 2 19.07.2007 15:15
Вопрос про функцию FindWindow Dromok Общие вопросы Delphi 3 12.02.2007 23:00