我有一些旧的LED板,你可以发送一些文本并将其挂在某处...它是在1994/95制造的,它通过串行端口进行通信,使用16位MS-DOS应用程序,你可以在其中输入一些文字.
所以,因为你可能无法在任何地方运行它,除非使用DOSBox或类似的技巧,我决定用C#重写它.
在对原始的dos-exe进行端口监视之后,我发现它对你重建它真的不感兴趣 - 必须回答请求,变化的字节,预先发送的"ping"消息等等......
也许你知道类似我的dos-exe使用的校验和例程/模式,或者你可以提供任何关于尝试逆向工程的技巧...另外,因为我只熟悉编程而且没有花太多时间在反转方法上和/或分析协议,如果这个主题有点愚蠢的想法,请不要判断我 - 我会很高兴得到任何帮助......
真正包含应该显示的文本的消息是143个字节长(只是那么长,因为如果你没有用尽你的文本的所有空间它会填充填充字节),并且在那个消息中我注意到以下模式:
第四个字节(仍属于msg标头)与6或7个重复值的列表不同(在我的示例中,该字节始终为0F).
最后两个字节用作校验和
一些例子:
到目前为止,我完全确定校验和确实依赖于标头中的第四个字节,因为如果它发生变化,则校验和将完全不同,以便显示相同的文本.
这是一个显示"123"的完整143字节字符串的示例,仅用于为您提供更好的方向:
02 86 04 0F 05 03 01 03 01 03 01 03 00 01 03 00 ...............
00 31 00 32 00 33 …Run Code Online (Sandbox Code Playgroud) 我已经尝试通过设置一个带有和作为属性的网格来将 aListView和 an 的子项ItemsControl放在行和列中。RowDefinitionsColumnDefinitionsItemsPanel
但是,当我放置时,子控件始终与第 1 行和第 1 列对齐
<ItemsControl>
<ItemsControl.ItemsPanel>
<!-- Grid with rows & columns ... -->
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Grid.Row="4" Grid.Column="2" ... />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
我怎样才能使这项工作?谢谢你。
我是 WPF 新手,但我已经使用 C# 有一段时间了,目前正在开发一个简单的窗口(Windows 桌面),该窗口应该可视化目录中的所有照片。应用程序还应该了解 EXIF 数据,例如 ISO、光圈等,我为此使用了 DLL。
我定义了一个Photo类:
public class Photo {
public string FileName { get; set; }
public int ISO { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
我想List<Photo>在运行时存储在 a 中。
然后我声明了一个PhotoItem(XAML 用户控件),其中包含一个图像控件和一个 TextBlock。对于每一个Photo创建的对象,都会有一个PhotoItem创建对象将相应的Photo属性保存为:
public partial class PhotoItem : UserControl {
...
public Photo Photo { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
从这个Photo属性PhotoItem中,知道在哪里寻找图像以及要显示什么 ISO 等。
现在我的问题。因为如果用户选择目录,加载图像本身以及元数据会花费太长时间,所以我想首先将所有 s 添加PhotoItem到窗口(仍然为空),然后运行元数据查找和图像缩略图加载对于他们每个人来说。当然,如果这些操作不阻塞 UI 线程那就最好了,因此我目前使用一个 …