Импорт ДЛЛ из User32 и gdi32 — я тут не пишу..
В итоге — получается синий экран... (не синий экран смерти, а БМП-шка которая покрашена в синий цвет. при созднии — она белая)
0x0317 — это WM_PRINT
0x00041540 — это Window Handle который я получил с окна нужного Spy.(для простоты прям в исходник решил забить, что бы мнеьше кода было.)
1152, 864 — размер окна, с которого надо сделать снимок.
Кто тебе сказал, что HWND окна все время постоянный ?
L>0x00041540 — это Window Handle который я получил с окна нужного Spy.(для простоты прям в исходник решил забить, что бы мнеьше кода было.)
Здравствуйте, MazurD, Вы писали:
MD>Здравствуйте, Lazyman, Вы писали:
MD>Кто тебе сказал, что HWND окна все время постоянный ?
L>>0x00041540 — это Window Handle который я получил с окна нужного Spy.(для простоты прям в исходник решил забить, что бы мнеьше кода было.)
Ну ептыть... Ну понятно, что я просто это окно на время работы программы не закрывал... А если закрывал и открывал по новой снова смотрел, какой у него хендл и в исходнике его переписывал..
Здравствуйте, Lazyman, Вы писали:
L>Ну ептыть... Ну понятно, что я просто это окно на время работы программы не закрывал... А если закрывал и открывал по новой снова смотрел, какой у него хендл и в исходнике его переписывал..
Не проще ли его было туда записывать через свойство Handle?
Здравствуйте, jenyavb, Вы писали:
J>Здравствуйте, Lazyman, Вы писали:
L>>Ну ептыть... Ну понятно, что я просто это окно на время работы программы не закрывал... А если закрывал и открывал по новой снова смотрел, какой у него хендл и в исходнике его переписывал..
J>Не проще ли его было туда записывать через свойство Handle?
Да просто что бы строчек было меньше в коде.. Понятно, что если бы только что-то заработало бы я бы написал получение хендла. Вы не сбивайтесь на второстепенные вопросы...
L>Импорт ДЛЛ из User32 и gdi32 — я тут не пишу.. L>В итоге — получается синий экран... (не синий экран смерти, а БМП-шка которая покрашена в синий цвет. при созднии — она белая)
L>0x0317 — это WM_PRINT L>0x00041540 — это Window Handle который я получил с окна нужного Spy.(для простоты прям в исходник решил забить, что бы мнеьше кода было.) L>1152, 864 — размер окна, с которого надо сделать снимок.
L>Пожалуйста, подскажите, что не так?
Я делаю это так:
Application.DoEvents();
Rectangle rect = GetWindowRectangle(hwnd);
Bitmap ret = null;
Bitmap bitmap = new Bitmap(rect.Width, rect.Height, PixelFormat.Format24bppRgb);
Graphics graphics = Graphics.FromImage(bitmap);
IntPtr memdc = graphics.GetHdc();
IntPtr hbitmap = bitmap.GetHbitmap();
SelectObject(memdc, hbitmap);
try
{
PRF flag = PRF.CLIENT | PRF.NONCLIENT;
if(includeChildren)
{
flag |= PRF.CHILDREN;
}
Application.DoEvents();
Thread.Sleep(500);
SendMessage(hwnd, WM_PRINT, (uint)memdc, (uint)flag);
Application.DoEvents();
Thread.Sleep(500);
// For index charts necessary to send message twice!!!
SendMessage(hwnd, WM_PRINT, (uint)memdc, (uint)flag);
Application.DoEvents();
Thread.Sleep(500);
ret = Bitmap.FromHbitmap(hbitmap);
}
finally
{
// Cleanup
DeleteObject(hbitmap);
graphics.ReleaseHdc(memdc);
graphics.Dispose();
bitmap.Dispose();
}