PDA

View Full Version : سوال: گرفتن Screenshot از Desktop



mahdi bg
سه شنبه 30 خرداد 1396, 09:01 صبح
سلام
من کد زیر رو برای گرفتن Screenshot از Desktop پیدا کردم
//Create a new bitmap.
var bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height,
PixelFormat.Format32bppArgb);

// Create a graphics object from the bitmap.
var gfxScreenshot = Graphics.FromImage(bmpScreenshot);

// Take the screenshot from the upper left corner to the right bottom corner.
gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen. Bounds.X,
Screen.PrimaryScreen.Bounds.Y,
0,
0,
Screen.PrimaryScreen.Bounds.Size,
CopyPixelOperation.SourceCopy);

// Save the screenshot to the specified path that the user has chosen.
bmpScreenshot.Save("Screenshot" + x.ToString() + ".png", ImageFormat.Png);
کد بالا خوب کار میکنه فقط یک جا به مشکل می خوره
اونم زمانی است که نیاز است که یک برنامه run as administrator اجرا بشه

در این حالت Exception رخ میده، "The handle is invalid" و تصویری نمی گیره، مشکل رو باید چطوری رفع کنم؟

ممنون

ebrahim.rayatparvar
سه شنبه 30 خرداد 1396, 14:25 عصر
من تو یکی از برنامه هام مجبور شدم برای مدیریت خطاها برای بخش شبکه که کارشناس شبکه ببینه از مانیتور جدا از مشخصاتی که میدم عکس هم بگیرم و این کد رو زدم و خوب کار میکنه :

public static Bitmap PrintScreen()
{
Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics graphics = Graphics.FromImage(printscreen);
graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size - (new Size()));
return printscreen;
}

mahdi bg
چهارشنبه 31 خرداد 1396, 08:07 صبح
کد ارائه شده بازم همون مشکل رو داره
وقتی صفحه run as administrator میاد تصویر رو مشکلی ذخیره می کنه

مهرداد صفا
چهارشنبه 31 خرداد 1396, 14:19 عصر
کد ارائه شده بازم همون مشکل رو داره
وقتی صفحه run as administrator میاد تصویر رو مشکلی ذخیره می کنه
سلام.
اگر منظورتون پنجره های امنیتی مثل صفحه درخواست دسترسی UAC یا صفحه Sign in screen باشه که باید بگم این صفحات خارج از میط دسکتاپ هستند و به نوعی در یک session جداگانه از برنامه های دسکتاپ اجرا میشن و فکر می کنم فقط سرویس هایی که تحت سشن System اجرا میشن (مثل ویروس کش ها و ...) می تونن به این پنجره ها دسترسی داشته باشن.
ولی اگر کلا وقتی نرم افزار run as admin میشه به پنجره های user دسترسی نداره، میتونید اون قسمت که وظیفه گرفتن screenshot رو داره توی یک برنامه کنسول جداگانه بنویسید و تحت User اجراش کنید.