前言

学习windows通道时,用他去完成自己的cmd小工具时遇到了一些问题总结一下。

关于STARTUPINFO结构:因为为了在cmd程序中通过通道与我们的程序交互,我们需要把cmd的输入输出变为匿名通道的输入输出。这就需要改变STARTUPINFO结构。

注意在把输入输出句柄改变时不要忘记改变STARTUPINFO.dwFlags = START_USESTDHANDLES,意思是使输入输出句柄能被更改。

②关于匿名管道的输入输出句柄

因为为了让cmd.exe能过使用管道,所以需要使在程序中建立的管道句柄能够被子进程继承,除了在CreateProcess使让继承句柄表开关打开外,还需在创建管道时设置参数使其句柄能够继承。并且注意SECURITY_ATTRIBUTES结构要要进行初始化(我这里设置的是static所以其会自动进行初始化)



③关于管道缓冲区

因为在往 “自己的程序 -> cmd” 这条管道通过WriteFile写数据,让cmd通过ReadFile接受数据当作输入的中间需要一定的时间,所以在WriteFile往管道入口输入数据后需要Sleep()等待一会,否则数据将会丢失。

④关于ReadFile()函数的返回

对于管道而言用ReadFile()读数据,如果没有读到数据则会处于阻塞状态。ReadFile()不返回一直等到有数据可读才返回。

⑤关于Edit控件文本编辑(追加写)

以前在对Edit控件编辑框中的文本进行追加写都是先将原文本读出保存起来,在与新文本连接之后在重新写到文本编辑框中。(这样做效率太低了)

在网上搜以一下,发现可以用设置文本编辑光标到文本末,然后进行文本替换的方法。

最新文章

  1. 51Nod 1766 树上的最远点对
  2. USACO Section 3.3: Riding the Fences
  3. css div居中显示的4种写法
  4. Oracle外部表的使用
  5. 【AngularJS入门】用ng-repeat指令实现循环输出
  6. 四种简单的排序算法的php实现
  7. openstack中dashboard页面RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable.
  8. Navicat for MySQL11--使用经验
  9. 跟我一起用node-express搭建一个小项目(node连接mongodb)[三]
  10. iOS:给标签栏控制器的UITabbarItem添加点击动效
  11. SWUST OJ(957)
  12. 应用脚手架创建一个React项目
  13. MySql安装与使用(linux)
  14. day10 前向引用
  15. Linux 常用命令随笔(二)
  16. Servlet基础知识点整理
  17. ios TextField限制输入两位小数
  18. [转] React 最佳实践——那些 React 没告诉你但很重要的事
  19. 微信小程序支付前端源码
  20. SpringBoot日记——登录与拦截器篇

热门文章

  1. 20个最有用的Python数据科学库
  2. Hexagon HDU - 6862
  3. 在vscode中go编码发生的问题整理
  4. 搞懂 ZooKeeper 集群的数据同步
  5. Github Actions 还能做这些事
  6. 对接快递100&聚水潭API
  7. 如何在CMDB中落地应用的概念?
  8. [BFS]细胞问题
  9. Dynamics CRM字段安全配置文件
  10. LeetCode剑指Offer刷题总结(一)