PrintScreen 源代码/模拟
我想为全屏Direct3D游戏拍照.我知道我需要创建一个"覆盖",该覆盖层在C#中更难,并且发现使用PrintScreen(并且在Mspaint中粘贴它)确实捕获了游戏窗口. 我最终得到了这个不稳定的代码: try { SendKeys.SendWait("{PRTSC}"); Thread.Sleep(100); if (Clipboard.ContainsImage()) return Clipboard.GetImage(); } catch (Exception) { throw; } Bitmap bitmap = new Bitmap
12 2024-04-26
编程技术问答社区
C# 控制台应用程序屏幕捕捉鼠标周围的一个矩形
我正在尝试根据鼠标的x,y位置筛选矩形.我的代码有几个问题: 1.)我希望鼠标光标位于矩形的中心(我不需要屏幕截图中的光标). 2.)屏幕截图在第一个监视器上看起来还不错,但是在第二个显示器上,屏幕截图似乎被抵消了.其偏移的原因是因为Monitor#2的规模和布局设置为125%. 对此的任何帮助将不胜感激. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Windows; using System.Drawing; using System.Drawing.Imaging; name
2 2024-04-26
编程技术问答社区
选择屏幕区域的最简单方法
我正在在C# + WPF中编写一个简单的程序,该程序记录/序列化用户鼠标和键盘活动,然后他可以播放它. 它的某些功能要求用户指定屏幕中小区域的坐标.将左上角和右下角的坐标到文本框不是很舒适,因此我想以类似的方式选择它,例如Windows剪切工具,Zscreen/sharex等. 类似的东西,也许简化 最简单的实施方法是什么? 我已经搜索了很多东西,但没有找到任何简单而清晰的东西. 解决方案 您可以尝试使用此静态类CaptureScreen和Capture method static public class CaptureScreen { public static BitmapSource Capture(Rect area) { IntPtr screenDC = GetDC(IntPtr.Zero); IntPtr memDC = CreateCompatibleDC(screenDC);
12 2024-04-25
编程技术问答社区
C# 捕获屏幕为8位(256色)位图
我正在使用此代码捕获屏幕: public Bitmap CaptureWindow(IntPtr handle) { // get te hDC of the target window IntPtr hdcSrc = User32.GetWindowDC(handle); // get the size User32.RECT windowRect = new User32.RECT(); User32.GetWindowRect(handle, ref windowRect); int width = windowRect.right - windowRect.left; int height = windowRect.bottom - windowRect.top; // create a device context we can copy to IntPtr hdcDest = GDI32.Creat
2 2024-04-23
编程技术问答社区
防止截屏
我正在开发一个视频播放器I Silverlight 我想防止录制或屏幕捕获 我考虑过黑客攻击Windows API,并阻止我的程序运行,如果有任何捕获软件要求用户首先关闭它,但是我没有如何做 有其他解决方案吗?!!!! 解决方案 您可以使用键钩系统,停止按键盘上的打印屏幕键的用户,这将是一个开始.没有太多的系统可以使用户专门使用印刷筛选视频.您可能想尝试将视频水印?至少那时人们知道该视频最初是来自您的. 其他解决方案 这很简单.如果您尝试一下,您只会惹恼别人. 甚至"黑客入侵Windows API"也无法使用,因为OS本身可以在VM内运行. 其他解决方案 我讨厌成为一个沮丧,但任务是不可能完全完成的. 如果您能够以某种方式连接键盘(从Silverlight应用程序中毫无疑问),我肯定希望用户运行的任何AV都会抛出一些危险信号. 另外,如果用户不使用标准(ALT)+PRTSCR怎么办?第三方工具可能会使用不同的键盘.另外,我已经写了一个带有G
24 2024-04-22
编程技术问答社区
使用directshow录制桌面上的翻转光标图标
使用DirectShow.net我已经开发了一个应用程序,该应用程序将记录桌面屏幕,以获取鼠标指针,我们需要自己绘制鼠标指针.因此,我在BufferCB中添加了SampleGrabber adn,我已经写了以下代码: public const Int32 CURSOR_SHOWING = 0x00000001; [StructLayout(LayoutKind.Sequential)] public struct ICONINFO { public bool fIcon; public Int32 xHotspot; public Int32 yHotspot; public IntPtr hbmMask; public IntPtr hbmColor; } [StructLayout(LayoutKind.Sequential)] publi
10 2024-04-21
编程技术问答社区
如何在C#中捕获Windows Store应用程序的窗口内容
我有一些代码来捕获Windows桌面应用程序内容,然后保存到.NET中的位图对象.它使用user32.dll和gdi32.dll(bitblt),工作正常.但是,当我将代码作为保存Windows Store应用程序的窗口的句柄时,代码会产生全黑位图.我不确定这是安全功能还是什么.我无法将屏幕包API用作窗口的内容,在调整大小后,几乎总是比屏幕高/大.对于Windows Store应用程序,即使有人比屏幕大,有人捕获了窗口内容吗? ? 编辑:作为注意,我正在尝试捕获另一个程序的窗口,而不是我自己的程序.我的程序可以假定为.NET 4.6.1/c# 中的Windows Console应用程序 另外,我知道这在Windows API中必须以某种方式可能是可能的,因为Aero Peek功能,如果您在运行程序的图标上悬停在任务栏上,则显示窗口的完整高度,包括屏幕外部组件,包括窗口. (请参阅右上的高窗口,设置为6000px比我的显示高得多) 解决方案 在Windows 8.1开始时
4 2024-04-17
编程技术问答社区
无活动窗口的屏幕捕捉
我正在尝试使用Winform或WPF Windows编写放大镜应用程序.这个想法是将窗口拖到屏幕上的位置并放大.我知道它存在于商业上,但需要构建自定义版本.我面临的挑战是捕获活动应用程序背后的屏幕图像. 我找到了代码以捕获下面的屏幕图像.但它包括活动窗口 { Rectangle bounds = new Rectangle(this.Location, this.Size); Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height); Graphics g = Graphics.FromImage(bitmap); g.CopyFromScreen(this.Location, Point.Empty, bounds.Size); Bitmap bp2 = new Bitmap(bitmap); // local copy of image
0 2024-04-17
编程技术问答社区
C# 捕获直接3D屏幕
我已经欺骗了屏幕捕获已有一段时间了,我设法捕获了整个屏幕,屏幕上的某些区域等... 但是,当我进入游戏并尝试捕获屏幕时,它完全忽略了游戏,而是捕获桌面(或游戏窗口后面的任何内容). 另一个有趣的事实是,PRTSCN按钮也会发生同一件事. 关于如何捕获游戏屏幕的任何想法? 解决方案 您使用的屏幕捕获技术很好地捕获了不加速的事物.我怀疑您会在Windows Media Player中捕获电影框架遇到同样的问题. 解决方案是使用DirectX从硬件本身中进行屏幕捕获. 编辑 如果Slim DX对您不起作用,那么您只需要在Direct X周围找到另一个托管包装器.我认为您将不在硬件级别上工作而可以进行屏幕截图,而DirectX是在Windows平台上这样做的方法.
18 2024-04-15
编程技术问答社区
通过手柄捕捉窗口的屏幕
我正在尝试在桌面中捕获一个特定的窗口,但我得到了一个混合图像,窗口的一部分和部分桌面区域. 我缺少什么? 这是我的代码: RECT rect = new RECT(); if (!SetForegroundWindow(handle)) throw new Win32Exception(Marshal.GetLastWin32Error()); if (!GetWindowRect(handle, out rect)) throw new Win32Exception(Marshal.GetLastWin32Error()); Thread.Sleep(500); Rectangle windowSize = rect.ToRectangle(); Bitmap target = new Bitmap(windowSize.Width, windowSize.Height); using (Graphics g = Graphics.FromIm
6 2024-04-12
编程技术问答社区
从windows服务中获取屏幕信息
我有基于直接节目的屏幕捕获软件.它在内部调用copyscreentobitmap函数以获取屏幕.然后,图片被ffdshow压缩. 它作为桌面应用程序正常工作,但是作为窗口服务,在某些计算机上它不起作用(黑色图片).我设置了"允许服务与桌面交互",并在当前用户帐户上运行该服务. 有什么想法可能是什么问题? 我在Windows XP上测试它,但预计它也可以在Vista和7上工作. 是的,它可以用作所有计算机上的桌面应用程序,但是在其中一些计算机(大多数)上,它失败了. 解决方案 除了允许访问桌面外,请尝试此操作: 枚举所有窗口站:/strong> 找到用户登录的窗口站,并将其作为您的过程'窗口站: setProcessWindowStation - 请参见示例 在此线程中 Then set the desktop for your current thread to the default desktop of the window station 也在这里
4 2024-04-12
编程技术问答社区
C语言的GLUT屏幕截图
我正在尝试在Glut中进行屏幕截图,并且有一些问题. GlreadPixels()似乎用 崩溃了我的程序 Access violoation writing location 0x00000000 很奇怪的是文件是在项目根部创建的,显然是空的.我快速设置了一些printf命令,看来代码每次在glreadpixels()方法中崩溃. 我觉得这个问题可能是变量"像素".我在找出正确的定义方法时遇到了麻烦,以便将RGB值写入其中. 任何提示都将不胜感激. void savePPM(char ppmFileName[]){ int width = glutGet(GLUT_WINDOW_WIDTH); int height = glutGet(GLUT_WINDOW_HEIGHT); char *pixels = NULL; glReadPixels(0,0, width, height, GL_RGB, GL_UNSIGNED_BYT
8 2024-04-07
编程技术问答社区
在屏幕捕捉中包括鼠标光标
我使用CreateC/bitblt/getDibits等来捕获屏幕,但没有捕获光标.是否有一些简单的论点或包含在内的内容? 解决方案 #include #include #include void scrshot() { HWND hwnd = GetDesktopWindow(); HDC hdc = GetWindowDC(hwnd); HDC hdcMem = CreateCompatibleDC(hdc); int cx = GetDeviceCaps(hdc, HORZRES); int cy = GetDeviceCaps(hdc, VERTRES); HBITMAP hbitmap(NULL); hbitmap = CreateCompatibleBitmap(hdc, cx, cy); SelectObject(hdcMem, hbi
24 2024-04-06
编程技术问答社区
如何捕捉屏幕的一部分并将其保存为BMP?
可能的重复: 如何使用C ++中的win32在C ++中制作屏幕截图? 我当前正在尝试创建一个将屏幕的一部分保存到BMP的应用程序.我找到了所以,基本上我想要这个功能: bool capturePartScreen(int x, int y, int w int, h, string dest){ //Capture part of screen according to coordinates, width and height. //Save that captured image as a bmp to dest. //Return true if success, false if failure } bitblt: BOOL BitBlt( __in HDC hdcDest, __in int nXDest, __in int nYDest, //The three above are the
6 2024-04-01
编程技术问答社区
黑莓手机屏幕拍摄工具--从台式电脑上拍摄
我正在寻找一个可以用来捕获BlackBerry Tourch 9850的屏幕的屏幕截图工具.我尝试使用随附的Javaloader实用程序与SDK一起使用,但我会收到"Retrieving screen data ... Error: buffer too small"错误.我还尝试使用bbscreenshooter v1.67(我认为这是最新版本),但它无法捕获屏幕,然后崩溃. 我需要该工具来为我们为BlackBerrys开发的某些软件创建用户手册,正如他们所说,"图片值得一千个字." 如果没有别的,也许有人知道如何解决Javaloader的小缓冲问题? 解决方案 在Mark Sohm的帮助下(感谢Mark ...您的帮助非常多))发现了解决方案:您必须在具有较高屏幕分辨率的设备上使用v7.0 SDK的Javaloader ... Tourch 9850是800 x480.版本6和lows没有实现的实现,该实现将支持抓住添加字节所需的较大缓冲区 -
4 2024-03-31
编程技术问答社区
捕捉比屏幕更大的整个滚动视图
主要问题是将整个滚动视图保存为位图映像,而不仅仅是屏幕上显示的内容.有没有办法保存整个滚动视图,如果是的话? 解决方案 在您的scrollview中制作relativelayout或linearlayout,以从布局获取位图. 这样组织: public class ActivityA extends Activity { LinearLayout PP_Ll; Button btn_capture; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); PP_Ll = (RelativeLayout) findViewById(R.id.PP_Ll); Button btn_capture= (Button) findViewById(R.id.btn_ca
10 2024-03-31
编程技术问答社区
使用任务调度器自动捕捉屏幕获得空白(黑色)的屏幕截图
我正在尝试对软件错误进行故障排除,在该错误中,我们认为每次调用应用程序可能不会启动一个应用程序.为了测试这一点,我创建了一系列计划的任务来启动该应用程序,进行屏幕截图,然后关闭应用程序.这些任务全部通过.bat文件运行. 除了屏幕截图外,一切正常.当作为计划任务运行时,屏幕捕获中的.jpg总是显示一个黑匣子.如果我正常执行.bat文件,则屏幕截图看起来不错. 我正在使用nircmd发送屏幕捕获命令并将其保存到文件夹中.我使用的命令如下: nircmd.exe savescreenshot "C:\File Path\"~$currdate.MMddyyyy$-~$currtime.HHmmss$.jpg 我正在使用Windows 7. 解决方案 创建的任务可能在其自己的登录会话中运行,即使它作为同一用户运行. 当前登录用户时,您计划的任务运行. 基思·布朗(Keith Brown)写了旧但仍然有效的logon会话解释/a>.相关部分位于" htt
4 2024-03-29
编程技术问答社区
使用终端的VLC屏幕捕捉
我正在尝试将我的屏幕捕获为视频,并发现VLC可能是最好的解决方案.我要做的就是使用终端捕获特定的应用程序,然后也停止捕获.现在,我可以使用以下命令使用终端捕获: /Applications/VLC.app/Contents/MacOS/VLC -I dummy screen:// --screen-fps=25 --quiet --sout "#transcode{vcodec=h264,vb072}:standard{access=file,mux=mp4,dst="Desktop/vlc-output-terminal.mp4"}" 太好了,它有效.问题是,如何使用终端退出录音?现在,我必须在终端上进行控制+ c 才能退出.我在网上看过vlc://quit,但我不确定如何使用该命令. 另外,有人知道是否可以使用VLC捕获特定的应用程序,还是整个屏幕是唯一的选项? 解决方案 如何 记录时退出 ctrl + c 杀死过程(在这种情况下为vlc),带有信号SI
14 2024-03-28
编程技术问答社区
注意到DPI的屏幕捕捉
我在没有任何麻烦之前使用了自动_ScreenCapture_Capture().但是在Windows 10上,我使用的是200%的DPI缩放屏幕. _ScreenCapture_capture()现在得到了2倍放大的东西,而我要的位置则是一半. 例如: _ScreenCapture_Capture("c:\a.bmp", 100, 100, 200, 200) ; Path, X1, Y1, X2, Y2 不会返回屏幕的100x100像素平方(100,100 200,200).它返回100x100像素平方(50,50 50,50 100,100). 我确实找到了一个解决方案: DllCall("User32.dll", "bool", "SetProcessDPIAware") 但是,这使GUI看起来很搞砸.因此,我然后找到了GUISetFont(8.5 * _GDIPlus_Graphic
2 2024-03-20
编程技术问答社区
xuggler视频编码的替代品,不需要安装?
我正在创建屏幕列表Java Web启动应用程序. 使用Xuggler编码视频需要: 在客户端系统上安装Xuggler - 这很乏味. (或) 使用Xuggle -Xuggler.jar版本5.2或更高版本的大小约为35 MB Plus. - 这增加了应用程序加载所需的时间. 还有其他选择,不需要安装,罐子并不那么巨大. 解决方案 我尚未使用Xuggler进行视频编码/解码,而仅使用音频.但是,我记得还看到警告"必须安装Xuggler"等.我发现事实并非如此.您可以很容易地将罐子和本机库将其复制到您的应用中,并在类Path/Library Path中设置它们,以便Xuggler在不安装的情况下工作正常. 也就是说,我正在使用"标准"安装程序.使用Java Web启动可能会有所不同,因为沙箱更严格.例如,加载本机库. 包装的大小很难摆脱... cdn上的主机?
8 2024-03-02
编程技术问答社区