我有一些代码来捕获Windows桌面应用程序内容并保存到.NET中的Bitmap对象.它使用User32.dll和Gdi32.dll(BitBlt)并且工作得很好.但是,当我为代码提供一个包含Windows应用商店应用程序的窗口的句柄时,代码会生成全黑位图.我不确定这是安全功能还是什么.我不能使用ScreenCapture api作为窗口的内容,在调整大小后,几乎总是比屏幕更高/更大.对于Windows应用商店应用,有没有人有幸获取窗口内容,即使它们比屏幕大?
编辑:就像一个笔记我试图捕捉不同的程序的窗口,而不是我自己的程序.我的程序可以假定为.NET 4.6.1/C#中的Windows控制台应用程序
此外,我知道在Windows API中必须以某种方式实现这一点,因为Aero Peek功能,如果您将鼠标悬停在正在运行的程序图标上的任务栏上,则会显示窗口的完整高度,包括屏幕外组件.(见右边的高窗,设置为比我的显示器高出6000px)
我正在使用VMWare Player和Blackberry 10模拟器图像; 我需要自动进行一些单元/集成测试.我知道我可以使用VIX api来启动一个新的模拟器并加载Blackberry图像.
我希望能够做的是发送'按键',启动特定的应用程序,也许发送手势.在Android上有monkeyrunner和其他类似的应用程序.但是我对BB10没有太多了解,我知道它是新的,但我不能成为唯一有这个要求的人.
此外,telnet选项有多强大?我可以telnet到模拟器并将目录更改为apps目录,但我无法列出其内容,SUDO或运行任何东西.
*****UPDATE*******
我已经取得了一些进展,但并不多.您似乎可以使用Windows API将mouse_evt消息发送到VMWare模拟器; 它不是100%可靠,但足以打开应用程序.我现在拥有的一个大洞就是能够在执行动作/滑动/触摸后检测状态,也就是"刷卡我刚刚执行工作?我们是否在正确的应用中?".查询设备的进程列表非常有用,但telnet示例中给出的"devuser"帐户实际上无法执行任何操作.
这个要点有基于我的经验触摸和滑动屏幕的基础知识. https://gist.github.com/edgiardina/6188074
我正在使用EF Code First项目,一切都很顺利.我有一个简单的类,客户.在我的客户类中,我有一个我想要加密的字段(是的,我知道我可以在数据库级别进行加密,但要求我在域/代码级别加密),所以我希望我可以执行以下操作:
public class Customer
{
public int CustomerID { get; set; }
public string FieldToEncrypt { get; set { _FieldToEncrypt = MyEncryptionFunction.Encrypt(); } }
}
Run Code Online (Sandbox Code Playgroud)
但是,我假设如果setter有一个定义,实体框架代码首先可能在生成模式时忽略该属性.所以我的问题是,有没有办法用提供的getter/setter来做EF Code First,还是应该将这个功能转移到构造函数中?我应该覆盖上下文保存时发生的一个方法/事件吗?
编辑********************
请注意,我使用DataService通过OData协议服务传输数据.这会自动生成插入/更新/选择方法.一些建议需要创建第二个属性,但DataService类似乎没有通过NotMapped属性.这引起我先前问题的一些纠结.
我是ASP.NET MVC的新手,如果这比它看起来更容易,那么道歉.我一直在谷歌搜索,我有一个这样的课:
public class Search : IAuditable
{
[Key]
public int SearchID { get; set; }
public int UserID { get; set; }
...
public ICollection<SearchTerm> SearchTerms { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在Create.cshtml中,我有以下内容
<div class="editor-label">
@Html.LabelFor(model => model.Search.SearchTerms)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Search.SearchTerms, "SearchTerm")
@Html.ValidationMessageFor(model => model.Search.SearchTerms)
</div>
Run Code Online (Sandbox Code Playgroud)
SearchTerm EditorTemplate是一个简单的表单,如下所示:
@model Core.Search.Parameters.SearchTerm
@Html.HiddenFor(n => n.SearchTermID)
<div class="editor-label">
@Html.LabelFor(n => n.Text, "Term")
</div>
<div class="editor-field">
@Html.EditorFor(n => n.Text)
@Html.ValidationMessageFor(n => n.Text)
</div>
Run Code Online (Sandbox Code Playgroud)
它似乎工作,我在创建时看到一个文本框(默认模型为空时).不过,我想要做的是能够添加/删除SearchTerms与 …
我编写了一个小型.NET控制台程序,它将启动Windows 8模拟器.很简单:
using Microsoft.SmartDevice.Connectivity;
using Microsoft.SmartDevice.Connectivity.Interface;
using Microsoft.SmartDevice.MultiTargeting.Connectivity;
MultiTargetingConnectivity connectivity = new MultiTargetingConnectivity(CultureInfo.CurrentUICulture.LCID);
var devices = connectivity.GetConnectableDevices();
ConnectableDevice connectableDevice = devices[2];
Console.WriteLine("Found Connectable Device \'" + connectableDevice.Name + "\' for Device id {" + connectableDevice.Id + "}.");
Run Code Online (Sandbox Code Playgroud)
非常直截了当.但是,我现在要做的是以编程方式与设备进行交互.我知道我可以使用iDevice.installApplication启动我自己的应用程序,但我真正想做的是运行模拟器附带的内置应用程序(邮件应用程序).我可以使用SmartDevice.Connectivitylibs发送触摸,还是启动未显示在GetInstalledApplications()方法中的"隐藏"应用程序?API很稀疏,似乎没有大量开发人员使用它.
我正在尝试使用bb:system :: screenshot
request.setTarget("sys.pim.uib.email.previewer");
// Set the action that the target app should execute
request.setAction("bb.action.VIEW");
// Set the MIME type of the data
request.setMimeType("message/rfc822");
// Specify the location of the data
request.setUri(QUrl("pim:message/rfc822:" + QString::number(accountId) +":" + QString::number(messageId)));
InvokeTargetReply *reply = invokeManager.invoke(request);
sleep( 2 );
//Screenshot
bb::system::Screenshot screenshot;
QString filename = screenshot.captureDisplay();
if (filename.isEmpty()) {
// Something went wrong
bb::system::ScreenshotError::Type error = screenshot.error();
}
//Close Email
invokeManager.closeChildCard();
Run Code Online (Sandbox Code Playgroud)
问题是文件名始终为空,screenshot.error()始终具有错误值.以下是调试器在"出错"行中所说的内容:
screenshot.error()错误:报告了多个错误.\无法执行MI命令:-var-create - *screenshot.error()来自调试器后端的错误消息:无法找到方法bb :: system :: screenshot ::错误\无法创建变量对象
不确定这意味着什么?
编辑:我在if语句之外移动了屏幕截图变量定义并看到此错误:
Name : error …Run Code Online (Sandbox Code Playgroud) 以前我已经能够在另一个应用程序中找到一个Word文档
[DllImport("Oleacc.dll")]
private static extern long AccessibleObjectFromWindow(int windowHandle, int objectID, Guid refID, ref IntPtr accessibleObject);
Run Code Online (Sandbox Code Playgroud)
并将结果对象返回到一个
Microsoft.Office.Interop.Word.Window
Run Code Online (Sandbox Code Playgroud)
这非常有效,因为我可以在Microsoft Outlook中检查有关Word的不同属性,因为MS Outlook使用Word窗口来呈现其电子邮件内容.
但是,它在XAML/Windows Store应用程序中有点棘手,因为看起来Word文档是在没有直接窗口句柄的情况下嵌入的.下面是Window的inspector.exe输出.选定的"消息"项是我的Word实例.但是,根据辅助功能检查器,具有NativeWindowHandles的树中的唯一项目是"邮件"窗口和标题窗口.
有谁知道如何将外部XAML /商店应用程序中的Word控件编组到C#对象中?
我正在使用蛋糕构建并尝试将蛋糕单元测试结果上传到AppVeyor,但是当我在本地运行时,Cake/Nunit3正在生成空结果,我认为这是导致我在AppVeyor上出错的原因.在下面的块中,生成NUnitResults.xml但始终为空.
Task("UnitTest")
.IsDependentOn("Build")
.IsDependentOn("Setup")
.Does(() => {
var resultsFile = artifactsDirectory + "/NUnitResults.xml";
NUnit3("./StatusPageIo/StatusPageIo.UnitTests/bin/Release/StatusPageIo.UnitTests.dll", new NUnit3Settings()
{
OutputFile = resultsFile,
});
if(AppVeyor.IsRunningOnAppVeyor)
{
AppVeyor.UploadTestResults(resultsFile, AppVeyorTestResultsType.NUnit3);
}
});
Run Code Online (Sandbox Code Playgroud)
我知道测试运行是因为当我在本地运行build.ps1时,我看到测试输出,但无论出于何种原因,我的特定输出文件的测试输出都是空的.如果我明确地将NoResults设置为false,我会得到一个TestResults.xml文件,但是在项目的根目录中,而不是在resultsFile路径中.
我正在BB10模拟器上编写一个简单的应用程序来捕获调用预览窗口的内容(其中包含电子邮件的可滚动视图).我想要捕获调用的窗口/电子邮件的整个滚动视图,而不仅仅是屏幕上的内容.在下面的代码中,我可以获取整个应用程序的窗口句柄和screen_read_window其内容,但是如何迭代调用窗口的控件并找到scrollview的句柄,并捕获它?
InvokeRequest request;
// Set the target app
request.setTarget("sys.pim.uib.email.previewer");
// Set the action that the target app should execute
request.setAction("bb.action.VIEW");
// Set the MIME type of the data
request.setMimeType("message/rfc822");
// Specify the location of the data
request.setUri(QUrl("pim:message/rfc822:" + QString::number(accountId) + ":" + QString::number(messageId)));
//InvokeTargetReply *reply =
invokeManager->invoke(request);
sleep(2);
screen_context_t screenshot_ctx = 0;
if (screen_create_context(&screenshot_ctx,
SCREEN_APPLICATION_CONTEXT) != 0) {
return;
}
screen_pixmap_t screen_pix;
screen_buffer_t screenshot_buf;
char *screenshot_ptr = NULL;
int screenshot_stride = 0;
int usage, format;
int size[2];
screen_create_pixmap(&screen_pix, screenshot_ctx);
usage …Run Code Online (Sandbox Code Playgroud) 所以我知道如何让apple mail 9始终加载远程内容,但我需要以编程方式设置该首选项.我正在浏览apple mail plist文件,但似乎无法找到它的价值.有没有人知道这个设置可能在哪里?
尝试将我的单声道控制台应用程序迁移到最新的MacOS(Mojave,10.14).不幸的是,似乎读取或更改〜/ Library中的文件的操作被锁定.
我知道你可以在安全/隐私设置中添加特定的应用程序"完全磁盘访问",但是在那里添加了单声道可执行文件,它仍然给我一个System.UnauthorizedAccessException我的应用程序运行时它试图调用File.Exists和File.Delete.我已经通过Visual Studio for Mac Debug模式尝试了这一点,并通过手动运行终端的调试输出.
使用以下Powershell代码,我试图找到根目录中不包含robots.txt的文件夹.通常情况下,我可以递归地执行此操作,但是它需要FOREVER来递归这个庞大的文件夹结构.我真正需要的只是第一级,AKA只搜索C:\ Projects中找到的文件夹.
基本上我需要从每组孩子中获取孩子,然后只返回没有robots.txt文件的父母.我在这里遇到的问题是我在嵌套for循环中的$ _给了我CWD,而不是我正在搜索的目录的子代.我知道我可能不得不使用 - 在这里,但我有点过头了,对PowerShell很新.任何帮助表示赞赏!
$drv = gci C:\Projects | %{
$parent = $_; gci -exclude "robots.txt" | %{$_.parent}} | gu
Run Code Online (Sandbox Code Playgroud) c# ×3
blackberry ×2
apple-mail ×1
asp.net-mvc ×1
binding ×1
build ×1
c++ ×1
cakebuild ×1
macos-mojave ×1
mono ×1
ms-word ×1
nunit ×1
plist ×1
powershell ×1
screenshot ×1
simulator ×1