我正处于为Windows编写的新应用程序的规划阶段(如果可能的话,至少包括Win 7,Vista和Win XP)。此外,如果可以安排,我希望该应用程序可以在OS X(Snow Leopard)上运行,但这不是必需的。
无论如何,关于这个问题。该应用程序需要API功能才能执行以下任务:
.NET是否具有满足这些要求的API功能?如果没有,那么什么是一个好的选择呢?
(注意:根据我的要求,似乎应用程序可能是恶意软件。但是,我向你保证它不是 - 它将是一种用于简化媒体消费的宏记录器/回放机制)。感谢大家! :)
答案 0 :(得分:1)
没有。你可以用P / Invokes做这些。
答案 1 :(得分:1)
自从我完成它已经有一段时间了,但我认为你可以将鼠标光标移动到一个位置:
Cursor.Position = Drawing.Point(x, y)
你可以肯定地捕捉屏幕(假设你的意思是截图)。这有点像复制/粘贴,但是:
public class ScreenCapture : IDisposable
{
private string filePath = "";
private Attachment attachment;
private Bitmap bitmap = new Bitmap(1, 1);
private MemoryStream imageStream = new MemoryStream();
public ScreenCapture() { }
void IDisposable.Dispose()
{
Dispose();
}
public void Dispose()
{
if (bitmap != null)
bitmap.Dispose();
if (imageStream != null)
imageStream.Close();
}
# region Property Methods
public string FilePath
{
get { return filePath; }
}
# endregion // Property Methods
# region Private Methods
/// <summary>
/// Capture the specified region into a bitmap object.
/// </summary>
/// <param name="sourcePoint">The point at the upper-left corner of the source rectangle.</param>
/// <param name="destinationPoint">The point at the upper-left corner of the destination rectangle.</param>
/// <param name="selectionRectangle">The size of the area to be transferred.</param>
private void CaptureRegionToBitmap(Point sourcePoint, Point destinationPoint, Rectangle selectionRectangle)
{
if (bitmap != null)
bitmap.Dispose();
bitmap = new Bitmap(selectionRectangle.Width, selectionRectangle.Height);
using (Graphics g = Graphics.FromImage(bitmap))
g.CopyFromScreen(sourcePoint, destinationPoint, selectionRectangle.Size);
}
# endregion // Private Methods
# region Public Methods
/// <summary>
/// Create an attachment to append to an email message.
/// </summary>
/// <returns>Returns an email attachment.</returns>
public Attachment GenerateAttachment()
{
return GenerateAttachment("");
}
/// <summary>
/// Create an attachment from the generated bitmap to append to an email message.
/// </summary>
/// <param name="imageName">Provide a name for the attachment.</param>
/// <returns>Returns email attachment.</returns>
public Attachment GenerateAttachment(string imageName)
{
if (attachment != null)
attachment.Dispose();
if (imageName == null || imageName.Trim() == "")
imageName = Core.LoginUserName.ToLower() + "_image.png";
bitmap.Save(imageStream, ImageFormat.Png);
imageStream.Position = 0;
attachment = new Attachment(imageStream, imageName, "image/png");
return attachment;
}
/// <summary>
/// Capture the entire screen to a Bitmap object stored in memory.
/// </summary>
public void CaptureFullScreen()
{
CaptureRegionToBitmap(new Point(0, 0), new Point(0, 0), SystemInformation.VirtualScreen);
}
/// <summary>
/// Save the generated bitmap to a physical file on disk.
/// </summary>
/// <param name="filePath"></param>
/// <returns>Returns True if save was successful; otherwise False.</returns>
public bool SaveToDisk(string filePath)
{
bool saveSuccessful = false;
try
{
bitmap.Save(filePath, ImageFormat.Png);
this.filePath = filePath;
saveSuccessful = true;
}
catch { }
return saveSuccessful;
}
# endregion // Public Methods
}
我忘记了该工具的名称,但微软有一个与任何Windows应用程序交互的UI测试/自动化工具,他们可以利用Windows辅助功能(对于残疾人/残障用户)以编程方式与所有内容进行交互。
这也可能是有趣的:UI Automation Fundamentals (MSDN)
答案 2 :(得分:1)
据我所知,没有这样的API。除此之外,拉力赛的回答似乎表明存在。
在我看来,使用Win32的API可能会熟悉这种行为,或者自己开发一个C / C ++库,您可以在其中完成任何您喜欢的任务,因为您不会受到.NET资源访问限制的限制,如果我可以说。
答案 3 :(得分:1)
.NET框架没有此功能的低级包装器。您可以通过一点创造力,pinvoke和directsound实现低级功能。我在过去的C#应用程序中完成了所有这些工作。这些链接可以让你快速到达那里(注意DirectSound第一次通过时有点挑战)......
http://msdn.microsoft.com/en-us/library/ee416960%28v=vs.85%29.aspx