- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试向 cmd.exe
的输入发送命令应用程序使用低级读/写控制台功能。我使用 ReadConsole...()
阅读文本(抓取)没有问题和 WriteConsole()
附加到流程控制台后的功能,但我还没有想出如何编写例如 "dir"
并让控制台将其解释为发送的命令。
这是我的一些代码:
CreateProcess(NULL, "cmd.exe", NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
AttachConsole(pi.dwProcessId);
strcpy(buffer, "dir");
WriteConsole(GetStdHandle(STD_INPUT_HANDLE), buffer, strlen(buffer), &charRead, NULL);
STARTUPINFO
进程的所有属性都设置为零,当然,
.cb
除外。属性。
Error 6: Invalid Handle
从
WriteConsole
返回至
STD_INPUT_HANDLE
.如果我写信给
(STD_OUTPUT_HANDLE)
我确实得到了我的
dir
写在屏幕上,但当然什么也没发生。我猜
SetConsoleMode()
可能会有所帮助,但我尝试了多种模式组合,但没有任何帮助。我还创建了一个快速控制台应用程序,它等待输入(
scanf()
)并回显输入的任何内容,但不起作用。
scanf()
提示然后使用
PeekConsoleInput()
查看输入缓冲区, 返回 0,但
INPUT_RECORD
数组为空。
WriteConsoleInput()
来解决这个问题。将 INPUT_RECORD 结构化事件直接注入(inject)控制台,但这太长了,我必须将每个按键都发送到其中。
cmd
使用
WriteConsoleInput()
处理与
INPUT_RECORD
然而,结构体是
AttachConsole
有时会抛出
ERROR_GEN_FAILURE #31: A device attached to the system is not functioning.
,因此
INPUT_RECORD
未发送 (
Error 6: Invalid Handle
)。
Sleep(1000)
后
CreateProcess()
之前
AttachConsole()
解决这个问题。人物
dir
是自动输入的,但我不知道如何发送
RETURN
key :
ir[0].EventType = KEY_EVENT;
ir[0].Event.KeyEvent.bKeyDown = TRUE;
ir[0].Event.KeyEvent.dwControlKeyState = 0;
ir[0].Event.KeyEvent.uChar.UnicodeChar = '\n';
ir[0].Event.KeyEvent.wRepeatCount = 1;
ir[0].Event.KeyEvent.wVirtualKeyCode = VK_RETURN;
ir[0].Event.KeyEvent.wVirtualScanCode = MapVirtualKey(VK_RETURN, MAPVK_VK_TO_VSC);
ir[1].EventType = KEY_EVENT;
ir[1].Event.KeyEvent.bKeyDown = FALSE;
ir[1].Event.KeyEvent.dwControlKeyState = 0;
ir[1].Event.KeyEvent.uChar.UnicodeChar = '\n';
ir[1].Event.KeyEvent.wRepeatCount = 1;
ir[1].Event.KeyEvent.wVirtualKeyCode = VK_RETURN;
ir[1].Event.KeyEvent.wVirtualScanCode = MapVirtualKey(VK_RETURN, MAPVK_VK_TO_VSC);
WriteConsoleInput(GetStdHandle(STD_INPUT_HANDLE), ir, 2, &charRead);
WriteConsoleInput
返回
0
,但控制台没有任何 react ,我试过设置
SetConsoleMode()
至
ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT
以及它们的组合,但没有结果。但是,如果我从键盘上按 Enter 键,则会自动输入
dir
命令执行(不像我只是
WriteConsole()
的时候),所以我想我是在正确的轨道上。
ir[1].Event.KeyEvent.uChar.AsciiChar = '\r';
即
\r
而不是
\n
, super 简单。
WriteConsole()
要输入命令,应该通过发送
WriteConsoleInput()
来获得。 INPUT_RECORDs 或通过创建管道(这并不总是完美的,但对于大多数直接应用程序非常有用)。使用
WriteConsoleInput()
的一大优势是你一个可以发
VK_UP
和
VK_DOWN
, 访问控制台历史记录,(如果我们在 CMD 中)和
VK_TAB
对于自动完成,所有 CTRL+_ 序列、ESC 和 FUNCTION 键,甚至鼠标单击。
最佳答案
现在您正在尝试写入您自己的 stdin 句柄,而不是 cmd.exe 进程的句柄。您将不得不做更多的工作来重定向那个输入句柄。它需要一个管道。这是一个 KB article显示样板代码。
顺便说一句:总是检查 API 函数的返回值。
关于c - 低级控制台输入和重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4711471/
如何在页面内容对象流内的 PDF 页面上居中对齐文本。 从这个开始: q 0 Tr /Helv 12 Tf BT 1 0 0 1 10 10 Tm (Hello)Tj
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我正在尝试用简单的工具编写自己的 printf。 这是 printf.c 的代码: #include "printf.h" uint8 pos_x=0, pos_y=0; void printf(ch
我正在尝试在 PDF 中呈现文本。我可以渲染基于矢量的图形,但我也想用文本来陪伴它。 在下面提供的测试代码中,文件(保存为 .pdf 时)将通过矢量图形绘制在左上角显示“测试”。 我想使用以下基于文本
有没有办法在比标准的“lua_pcall”函数调用更细粒度的级别上从 C/C++ 程序运行 Lua 代码?理想情况下,我希望能够遍历一系列低级字节码指令(假设它有这样的东西)并一个一个地运行它们,这样
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
这个问题在这里已经有了答案: Is short-circuiting logical operators mandated? And evaluation order? (7 个答案) 关闭 9 年
我想在 C# 中的单独线程上运行低级键钩来检测某些热键。我该怎么做? 最佳答案 如果你只需要这个键盘钩子(Hook)来检测热键,那么你不应该使用钩子(Hook)。 Windows 通过 Registe
我的应用程序索引最终用户计算机上所有硬盘驱动器的内容。我正在使用 Directory.GetFiles 和 Directory.GetDirectories 递归处理整个文件夹结构。我仅索引了几种选定
我们正在尝试通过多部分文件上传过程上传文件。通过使用下面给出的代码: while (!feof($file)) { $result = $s3->uploadPart(array( 'Buck
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在使用 STM32CubeMX 为 STM32F103 微 Controller 创建一个空白项目。使用 HAL 驱动程序(默认),我得到了一个运行速度非常快的闪烁示例,但我想尝试 LL(低级)驱
如何使用 GoogleAppEngine Low Level API 自动将实体 (com.google.appengine.api.datastore.Entity) 读取到对象中? 有没有什么神奇
我正在寻找在 Tensorflow 中使用 LSTM 单元的 RNN 的低级实现。我已经实现了几个使用低级 API 的前馈网络。这对我理解 ANN 的内部工作原理有很大帮助。我可以对 RNN 做同样的
更新:如果代码:我刚刚成功击败了自己的 32: void test(char *file_char, unsigned int size) { char* file_ = file_char;
作为一个小型(大型)业余爱好项目,我着手用 C# 制作一个(非常原始的)ssh-2.0 客户端。这是为了探索和更好地理解 DH 并帮助提高我对加密的熟悉度:) 根据 RFC 4253,我已经开始这样的
我正在尝试使用 Fuse 低级 API 实现基本文件系统。用于基本的读/写/mknod 操作。如果有人能指出一些示例,将不胜感激,没有关于 fuse 低级 api 的文档。 任何帮助将不胜感激! 最佳
我所拥有的是直接访问 Atmel CPU 上的四个 JTAG 接口(interface)引脚。 我需要的是低级 C 代码来调整这些引脚并实现两个功能: ReadMemoryWord(address)
我正在开发一个由多个部分组成的程序,这些部分相互构建。第一个程序必须从文件中读取内容并将由空格分隔的内容写入新文件。程序二应该采用这个单词,并根据它是以元音还是辅音开头的规则添加pig latin,并
我想对 yml 文件中的值进行一些处理。有人建议我使用snakeYAML的low-level API以此目的。因此,我使用它编写了一些代码,但由于以下原因,我几乎陷入困境。 这是我编写的代码: pub
我是一名优秀的程序员,十分优秀!