小编jon*_*ers的帖子

C#SerialPort - 模拟pos键盘

我们正在尝试模拟POS键盘,以便将应用程序与现有的销售点应用程序集成.

我们遇到了这个软件:虚拟串行端口套件

它基本上创建了一个虚拟串行端口对,以便发送到COM1的数据可以来自COM4,反之亦然.这允许我们的应用程序通过COM4发送数据,以显示它正在与COM1上的键盘通信的POS应用程序.

非常巧妙,但似乎有某种信号发生,我们无法使用.Net System.IO.Ports.SerialPort类复制...

从我们从串口监控程序中可以看出,这是启动序列的工作原理:

  1. 8字节命令发送到键盘
  2. 键盘发出哔哔声
  3. 从键盘发送某种信号
  4. 第二个8字节命令被发送到键盘,由信号触发
  5. 键盘回复设备和版本信息

使用我们的虚拟串口时,我们无法弄清楚如何复制键盘发送的信号.我们可以正确地看到所有数据,因此我们认为我们的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答案标记为答案,因为它极大地帮助我们找到了解决方案.

.net c# keyboard serial-port point-of-sale

5
推荐指数
1
解决办法
2976
查看次数

Windows服务下的进程截图

我们必须从Windows服务运行一个进程并从中获取屏幕截图.

我们尝试了BitBlt和PrintWindow Win32调用,但都给出了空白(黑色)位图.

如果我们从普通用户进程运行我们的代码,它就可以正常运行.

这有可能吗?或者可以尝试另一种方法吗?

我们尝试的事情:

  1. 作为本地系统运行的Windows服务,以本地系统运行进程 - >屏幕截图失败
  2. 以管理员身份运行的Windows服务以管理员身份运行 - >屏幕截图失败.
  3. 以用户XYZ身份运行的Windows应用程序以XYZ运行流程 - >截图适用于BitBlt或PrintWindow.
  4. 尝试从本地系统检查"允许服务与桌面交互"

我们还注意到PrintWindow对我们的情况更好,如果窗口在另一个窗口后面,它可以工作.

对于其他要求,父进程和子进程必须位于同一用户下.我们无法真正使用从一个进程到另一个进程的模拟.

.net c# windows-services screenshot process

5
推荐指数
3
解决办法
5001
查看次数

WPF - 路径/几何帮助 - 奇怪的形状

有人知道从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)

wpf xaml pathgeometry

5
推荐指数
1
解决办法
3470
查看次数

C#TransactionScope - L2E

在Linq to Entities上使用System.Transactions.TransactionScope是否值得?

MS文档中,它表示ObjectContext.SaveChanges()中的SQL调用都在内部集成到一个事务中.

我们有1个数据库连接,即文件系统上的本地SQLite数据库.我们只是想确保我们对数据库的所有操作都是原子的,我们需要TransactionScope吗? IE当我们调用一些删除,更新,插入等时,我们希望它们全部发生或根本不发生.

.net c# linq-to-entities transactions transactionscope

5
推荐指数
1
解决办法
930
查看次数

源代码管理 - 开源项目

我遇到了一个共同的困境.

很多时候,我们公司依赖于使用开源库来完成工作,但有时我们必须修改它们以使其在不同平台上运行,修复错误等.

我们使用颠覆的组合:TortoiseSVN和AnkhSVN.

以下方案是否有办法与SVN一起使用:

  • Devs将源代码从开源项目添加到我们的subversion中(通常通过导出,取决于他们使用的源控件)
  • Devs对开源代码进行了一些更改
  • 开源项目创建者进行了一些改进和自己的错误修复
  • 我们如何将开源项目的变更合并到我们的颠覆?

如果SVN无法做到这一点,我们有更好的源控制选项吗?如果可能的话,我们更喜欢使用Visual Studio集成.

svn version-control open-source visual-studio

5
推荐指数
2
解决办法
306
查看次数

Perl Mojolicious - 如何让它一次处理多个连接?

我设置了一个像这样的快速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,但前提是它一次只能处理多个客户端.

perl cgi websocket mojolicious

5
推荐指数
1
解决办法
2317
查看次数

MonoTouch NSClassFromString

我正在尝试在 MonoTouch 中使用如下 Objective-C 代码:

if (NSClassFromString(@"ADBannerView"))

C# 中的等价物是什么?

基本上我想使用 iAd,但我需要检查 和 是否存在ADBannerViewADInterstitialAd因为它们并非在所有版本的操作系统上都可用。(而且我宁愿进行功能检查而不是 iOS 版本检查)

我认为这在其他情况下也可能有帮助。

.net c# objective-c xamarin.ios ios

5
推荐指数
1
解决办法
640
查看次数

MonoMac - 游戏中心

Game Center API是否在MonoMac中实现?

如果没有,是否有建议的路径为它们创建C#绑定?

.net c# mono monomac game-center

5
推荐指数
1
解决办法
199
查看次数

UIActivityViewController - 上传Youtube视频

我有一个UIActivityViewController我用来分享视频,我正在传递一个NSString文本和一个NSUrl指向本地mp4视频文件.

共享已经适用于电子邮件,消息,相册等.我如何将视频上传到Youtube?

如果您在那里尝试,Apple会在默认的照片和相机应用程序中执行此操作.我也可以在我的应用程序中执行此操作吗?

youtube objective-c xamarin.ios ios

5
推荐指数
1
解决办法
2103
查看次数

Azure表存储 - 索引?

我有一个实体表,例如"故事".它将包含一大堆人们可以投票的"故事".

我的应用程序的主要功能是用户阅读"顶级"故事,这些故事的投票率最高(最终可能还有其他算法).

我对Azure表结构的第一个想法是:

  • RowKey =唯一ID
  • PartitionKey = ??? (也许是用户ID,因为您可以查看用户的故事列表)
  • 标题
  • 描述
  • 用户身份
  • 网址

如何有效地查询被认为是"顶级"故事的故事?大部分流量都将用于查询热门故事,否则不需要提取各种故事.我想要的是一种索引顶级故事的方法,但索引不是表存储的功能.我想保留第二张桌子,但如果用户在另一张桌子上更新故事,那可能会变得毛茸茸.

这是我第一次使用Azure Table Storage进行挂断,应用程序的其余部分将运行良好.由于这个问题,我讨厌升级到使用完整的SQL Azure.

PS - 我愿意将"顶级"故事存放在除Azure表之外的其他地方,如果它有意义的话.我的服务器将运行C#web api,但可能没什么区别.

.net c# azure azure-storage azure-table-storage

5
推荐指数
2
解决办法
4278
查看次数