我们正在尝试模拟POS键盘,以便将应用程序与现有的销售点应用程序集成.
我们遇到了这个软件:虚拟串行端口套件
它基本上创建了一个虚拟串行端口对,以便发送到COM1的数据可以来自COM4,反之亦然.这允许我们的应用程序通过COM4发送数据,以显示它正在与COM1上的键盘通信的POS应用程序.
非常巧妙,但似乎有某种信号发生,我们无法使用.Net System.IO.Ports.SerialPort类复制...
从我们从串口监控程序中可以看出,这是启动序列的工作原理:
使用我们的虚拟串口时,我们无法弄清楚如何复制键盘发送的信号.我们可以正确地看到所有数据,因此我们认为我们的SerialPort对象上的设置是正确的.以下是我们的SerialPort设置的片段:
_port.BaudRate= 9600;
_port.Parity = Parity.None;
_port.DataBits = 8;
_port.StopBits = StopBits.One;
_port.DtrEnable = true;
_port.RtsEnable = true;
Run Code Online (Sandbox Code Playgroud)
我们还注意到,在使用portmon时,我们看到了一个GET_MODEM_STATUS请求,这是POS应用程序在发送第二个命令之前所等待的.
关于如何诊断的任何想法?由于我们使用的是.NET,因此整个情况比我们习惯的要低一些.
更新:我还想注意,我们在这里尝试了SDK:Franson Serial Tools,但是在使用这个SDK时我们甚至无法获得数据.
更新:我们已经抛弃使用任何类型的虚拟串行端口.我们已经有一条从POS PC运行到另一台PC的电缆,可以看到数据来模拟键盘.现在我们的问题是,我们无法弄清楚如何发出键盘已准备好接收数据的信号,正如最佳答案所提到的那样.似乎POS应用程序发出命令以发出蜂鸣声,等待信号等待最多3秒.所以它在与我们的应用程序交谈时会超时,但在与真正的键盘交谈时则不会
我们如何使用SerialPort类做到这一点?我们已经将DtrEnable和RtsEnable设置为true,我们是否需要设置其他内容?或者我们是否必须使用较低级别的串口p/invoke来完成此任务?
解:
_port.RtsEnabled = false;
Thread.Sleep(1000);
_port.RtsEnabled = true;
Run Code Online (Sandbox Code Playgroud)
这使得POS应用程序认为键盘已插入,这是有道理的.我将#1答案标记为答案,因为它极大地帮助我们找到了解决方案.
我们必须从Windows服务运行一个进程并从中获取屏幕截图.
我们尝试了BitBlt和PrintWindow Win32调用,但都给出了空白(黑色)位图.
如果我们从普通用户进程运行我们的代码,它就可以正常运行.
这有可能吗?或者可以尝试另一种方法吗?
我们尝试的事情:
我们还注意到PrintWindow对我们的情况更好,如果窗口在另一个窗口后面,它可以工作.
对于其他要求,父进程和子进程必须位于同一用户下.我们无法真正使用从一个进程到另一个进程的模拟.
有人知道从Xaml创建这个对象的好方法吗?当在其他控件之上分层时,它还必须以.5 Opacity工作.
它还必须通过水平或垂直对齐来调整大小.
形状http://monitor.utopiaselfscan.com/test.bmp
我遇到了一些困难.我得到的最接近的是2个边框,其中一个具有负边距 - 但是当应用不透明度时它不起作用.
有效的代码:
<Path Fill="Black">
<Path.Data>
<CombinedGeometry GeometryCombineMode="Exclude">
<CombinedGeometry.Geometry1>
<RectangleGeometry RadiusX="5" RadiusY="5" Rect="0,0,200,100" />
</CombinedGeometry.Geometry1>
<CombinedGeometry.Geometry2>
<RectangleGeometry RadiusX="5" RadiusY="5" Rect="105,5,90,90" />
</CombinedGeometry.Geometry2>
</CombinedGeometry>
</Path.Data>
</Path>
Run Code Online (Sandbox Code Playgroud) 在Linq to Entities上使用System.Transactions.TransactionScope是否值得?
在MS文档中,它表示ObjectContext.SaveChanges()中的SQL调用都在内部集成到一个事务中.
我们有1个数据库连接,即文件系统上的本地SQLite数据库.我们只是想确保我们对数据库的所有操作都是原子的,我们需要TransactionScope吗? IE当我们调用一些删除,更新,插入等时,我们希望它们全部发生或根本不发生.
我遇到了一个共同的困境.
很多时候,我们公司依赖于使用开源库来完成工作,但有时我们必须修改它们以使其在不同平台上运行,修复错误等.
我们使用颠覆的组合:TortoiseSVN和AnkhSVN.
以下方案是否有办法与SVN一起使用:
如果SVN无法做到这一点,我们有更好的源控制选项吗?如果可能的话,我们更喜欢使用Visual Studio集成.
我设置了一个像这样的快速Mojolicious服务器:
use Mojolicious::Lite;
get '/' => sub {
my $self = shift;
sleep 5; #sleep here, I'm testing multiple connections at once
$self->render_text('Hello World!');
};
app->start;
Run Code Online (Sandbox Code Playgroud)
然后我开始: perl Mojolicious.pl daemon --listen=https://127.0.0.1:3000
问题是,如果我同时运行此命令:
time curl https://127.0.0.1:3000/ -k
它似乎只使用1个线程用于请求,因为如果我一次发出多个请求,它们可能需要超过5秒.好像他们都排队了.
我在这里错过了什么吗?我想要使用Mojolicous,但前提是它一次只能处理多个客户端.
我正在尝试在 MonoTouch 中使用如下 Objective-C 代码:
if (NSClassFromString(@"ADBannerView"))
C# 中的等价物是什么?
基本上我想使用 iAd,但我需要检查 和 是否存在ADBannerView,ADInterstitialAd因为它们并非在所有版本的操作系统上都可用。(而且我宁愿进行功能检查而不是 iOS 版本检查)
我认为这在其他情况下也可能有帮助。
Game Center API是否在MonoMac中实现?
如果没有,是否有建议的路径为它们创建C#绑定?
我有一个UIActivityViewController我用来分享视频,我正在传递一个NSString文本和一个NSUrl指向本地mp4视频文件.
共享已经适用于电子邮件,消息,相册等.我如何将视频上传到Youtube?
如果您在那里尝试,Apple会在默认的照片和相机应用程序中执行此操作.我也可以在我的应用程序中执行此操作吗?
我有一个实体表,例如"故事".它将包含一大堆人们可以投票的"故事".
我的应用程序的主要功能是用户阅读"顶级"故事,这些故事的投票率最高(最终可能还有其他算法).
我对Azure表结构的第一个想法是:
如何有效地查询被认为是"顶级"故事的故事?大部分流量都将用于查询热门故事,否则不需要提取各种故事.我想要的是一种索引顶级故事的方法,但索引不是表存储的功能.我想保留第二张桌子,但如果用户在另一张桌子上更新故事,那可能会变得毛茸茸.
这是我第一次使用Azure Table Storage进行挂断,应用程序的其余部分将运行良好.由于这个问题,我讨厌升级到使用完整的SQL Azure.
PS - 我愿意将"顶级"故事存放在除Azure表之外的其他地方,如果它有意义的话.我的服务器将运行C#web api,但可能没什么区别.
.net ×6
c# ×6
ios ×2
objective-c ×2
xamarin.ios ×2
azure ×1
cgi ×1
game-center ×1
keyboard ×1
mojolicious ×1
mono ×1
monomac ×1
open-source ×1
pathgeometry ×1
perl ×1
process ×1
screenshot ×1
serial-port ×1
svn ×1
transactions ×1
websocket ×1
wpf ×1
xaml ×1
youtube ×1