关于#c++#的问题:编写了一个模拟键盘输入的简单C++程序,在服务器本地直接点击运行可以,在shell用地址运行也可以.然而在网页里用php打开C++程序运行却不可以(操作系统-windows)

编写了一个模拟键盘输入的简单C++程序,在服务器本地直接点击运行可以,在shell用地址运行也可以.然而在网页里用php打开C++程序运行却不可以。在服务器本地没有如何的操作。
这是C++程序根本没有运行还是程序运行了却执行不了模拟键盘的输入?

#include <windows.h>
#include <iostream>

using namespace std;

void SimulateKeyPress(BYTE key) {
    keybd_event(key, 0, 0, 0);
    keybd_event(key, 0, KEYEVENTF_KEYUP, 0);
    Sleep(200);
}
void SimulateKeyLong(wstring text) {
    for (wchar_t ch : text) {
        SimulateKeyPress(ch);
    }
}

int main() {
    wstring command1 = L"ABCD";
    SimulateKeyLong(command1);
    SimulateKeyPress(0x0D);
    return 0;
}

代码大概是这样

参考ChatGPT的回答
在网页中无法直接模拟键盘输入的原因主要与浏览器的安全策略有关。浏览器为了确保用户安全和防止恶意行为,对于网页上的JavaScript代码有一定的限制和沙盒环境。

以下是一些主要原因:

  1. 安全性考虑:模拟键盘输入可以被滥用来执行恶意操作,如自动化攻击或盗取用户敏感信息。为了保护用户免受潜在的威胁,浏览器限制了网页中对系统级功能(如键盘输入)的访问。

  2. 隐私问题:模拟键盘输入可能涉及到用户的个人信息,如密码等,这种操作未经用户许可就直接在网页中执行可能导致隐私泄露问题。

  3. 平台限制:不同操作系统和浏览器可能有不同的实现和安全策略,导致统一的方式在所有环境下无法实现。

尽管有这些限制,现代浏览器为了支持用户友好的功能和交互,提供了一些API和权限来实现一些受限的操作,但是模拟键盘输入通常不在这些允许范围内。

如果您需要在网页中实现键盘模拟输入功能,可以考虑以下替代方案:

  1. 使用表单和事件触发:通过HTML表单元素和JavaScript的事件触发来模拟用户输入。

  2. 自定义交互:设计更加友好的用户交互方式,不依赖于模拟键盘输入,例如自定义按钮、拖拽等。

  3. 借助浏览器插件:某些浏览器插件可能提供更多的权限,但用户需要安装这些插件并授予相应权限。

需要强调的是,任何涉及模拟键盘输入或其他系统级功能的操作都应该谨慎对待,并且需要用户明确的许可。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    首先,C++程序无法直接在网页中运行,因为C++是一种编译型语言,需要通过编译和链接生成可执行文件后才能运行。在网页中使用PHP调用C++程序时,实际上是通过PHP运行C++可执行文件来实现的。

    由于你的C++程序涉及到模拟键盘输入操作,这可能是导致在网页中无法正常运行的原因之一。因为在网页中无法直接访问用户的键盘。

    要解决这个问题,我建议将C++程序改写为使用后端技术来实现模拟键盘输入操作,并将该后端程序与前端网页进行集成。以下是一种可能的解决方案:

    1. 在服务器上创建一个后端API,用于接收从前端网页发送的请求,并执行模拟键盘输入操作。
    2. 在后端API中使用C++编写程序来实现模拟键盘输入操作。可以使用第三方库,如"robotjs"来帮助实现这一功能。你可以使用C++的包管理器,如"vcpkg"来安装该库。
    3. 在后端API中调用模拟键盘输入的C++函数,并将前端网页发送的需要模拟的键盘操作作为参数传递给该函数。
    4. 将后端API部署到服务器上,并确保可以被前端网页访问到。你可以使用Apache、Nginx等Web服务器来实现。
    5. 在前端网页中使用Ajax或其他技术,向后端API发送模拟键盘输入的请求,并处理后端API的响应。

    下面是一个简单的示例代码,演示如何使用PHP调用后端API来实现模拟键盘输入操作:

    <?php
    $command = "ABCD";
    
    // 调用后端API
    $response = file_get_contents("http://your-backend-api.com/simulate-keyboard-input?command=" . urlencode($command));
    
    // 处理后端API的响应
    if ($response === false) {
        // 发生错误,处理错误逻辑
    } else {
        // 成功,处理成功逻辑
    }
    ?>
    

    在上述示例中,你需要将"your-backend-api.com"替换为你部署后端API的服务器地址。

    需要注意的是,此解决方案需要你对后端开发有一定的了解,并且需要在服务器上进行额外的操作。如果你不具备相关的后端开发能力,或者不具备在服务器上进行操作的权限,你可以考虑咨询专业的后端开发人员或运维人员来获得更准确和详细的解决方案。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^