关于window匿名通道的使用以及所遇到的问题
2024-09-05 06:34:49
前言
学习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控件编辑框中的文本进行追加写都是先将原文本读出保存起来,在与新文本连接之后在重新写到文本编辑框中。(这样做效率太低了)
在网上搜以一下,发现可以用设置文本编辑光标到文本末,然后进行文本替换的方法。
最新文章
- 51Nod 1766 树上的最远点对
- USACO Section 3.3: Riding the Fences
- css div居中显示的4种写法
- Oracle外部表的使用
- 【AngularJS入门】用ng-repeat指令实现循环输出
- 四种简单的排序算法的php实现
- openstack中dashboard页面RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable.
- Navicat for MySQL11--使用经验
- 跟我一起用node-express搭建一个小项目(node连接mongodb)[三]
- iOS:给标签栏控制器的UITabbarItem添加点击动效
- SWUST OJ(957)
- 应用脚手架创建一个React项目
- MySql安装与使用(linux)
- day10 前向引用
- Linux 常用命令随笔(二)
- Servlet基础知识点整理
- ios TextField限制输入两位小数
- [转] React 最佳实践——那些 React 没告诉你但很重要的事
- 微信小程序支付前端源码
- SpringBoot日记——登录与拦截器篇