递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 1560|回复: 5
打印 上一主题 下一主题

[视窗] 火山视窗怎么控制PowerShell 运行命令

[复制链接]

61

主题

167

帖子

1676

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1676
跳转到指定楼层
楼主
发表于 2024-12-27 13:25:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
火山视窗怎么控制PowerShell 运行命令 查看本机ip
回复

使用道具 举报

23

主题

91

帖子

772

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
772
沙发
发表于 2024-12-27 15:17:28 | 只看该作者
本帖最后由 aeszyl 于 2024-12-28 10:46 编辑
  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 包 火山.程序

  3. 类 启动类 <公开 基础类 = 程序类>
  4. {
  5.     方法 启动方法 <公开 类型 = 整数>
  6.     {
  7.         变量 网址 <类型 = 文本型>
  8.         运行 ("powershell -Command $ip = (Test-Connection -ComputerName (hostname) -Count 1).IPv4Address.IPAddressToString; $ip | Clip", , 程序窗口显示方式.隐藏窗口)
  9.         网址 = 取剪辑板文本 ()
  10.         @ MessageBox(NULL, @<网址>, L"信息:", MB_OK | MB_ICONINFORMATION); return 0;
  11.         返回 (1)
  12.     }
  13. }
复制代码

回复

使用道具 举报

23

主题

91

帖子

772

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
772
板凳
发表于 2024-12-27 15:19:29 | 只看该作者

查看IP地址返回信息,置于剪辑板中了。
回复

使用道具 举报

23

主题

91

帖子

772

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
772
地板
发表于 2024-12-27 15:35:55 | 只看该作者
本帖最后由 aeszyl 于 2024-12-28 10:49 编辑

用代码嵌入版本

  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 包 火山.程序 <
  3.         @视窗.外部头文件 = "<winsock2.h>\r\n<ws2tcpip.h>\r\n<iphlpapi.h>\r\n<iostream>\r\n<string>\r\n<windows.h>\r\n<cstdlib>\r\n<locale>\r\n<codecvt>"
  4.         @视窗.外部库 = "Ws2_32.lib\r\nIphlpapi.lib" @视窗.附加编译参数 = "cpp: /std:c++17">

  5. 类 嵌入文本 <公开 @强制输出 = 真>
  6. {

  7.     # @begin
  8.     # std::string getLocalIPAddress() {
  9.     #     WSADATA wsaData;
  10.     #     if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
  11.     #         throw std::runtime_error("WSAStartup failed");
  12.     #     }
  13.     #     ULONG flags = GAA_FLAG_INCLUDE_PREFIX;
  14.     #     ULONG outBufLen = 0;
  15.     #     PIP_ADAPTER_ADDRESSES pAdapterAddrs = nullptr;
  16.     #     ULONG retval = GetAdaptersAddresses(AF_UNSPEC, flags, nullptr, pAdapterAddrs, &outBufLen);
  17.     #     if (retval == ERROR_BUFFER_OVERFLOW) {
  18.     #         pAdapterAddrs = (PIP_ADAPTER_ADDRESSES)malloc(outBufLen);
  19.     #         if (pAdapterAddrs == nullptr) {
  20.     #             WSACleanup();
  21.     #             throw std::bad_alloc();
  22.     #         }
  23.     #         retval = GetAdaptersAddresses(AF_UNSPEC, flags, nullptr, pAdapterAddrs, &outBufLen);
  24.     #     }
  25.     #     if (retval != NO_ERROR) {
  26.     #         if (pAdapterAddrs != nullptr) {
  27.     #             free(pAdapterAddrs);
  28.     #         }
  29.     #         WSACleanup();
  30.     #         throw std::runtime_error("GetAdaptersAddresses failed");
  31.     #     }
  32.     #     std::wstring ipAddressW;
  33.     #     for (PIP_ADAPTER_ADDRESSES pAdapterAddr = pAdapterAddrs; pAdapterAddr != nullptr; pAdapterAddr = pAdapterAddr->Next) {
  34.     #         for (PIP_ADAPTER_UNICAST_ADDRESS pUnicastAddr = pAdapterAddr->FirstUnicastAddress; pUnicastAddr != nullptr; pUnicastAddr = pUnicastAddr->Next) {
  35.     #             sockaddr_in* pSockaddrIn = reinterpret_cast<sockaddr_in*>(pUnicastAddr->Address.lpSockaddr);
  36.     #             if (pSockaddrIn->sin_family == AF_INET) {
  37.     #                 wchar_t ac[INET_ADDRSTRLEN];
  38.     #                 DWORD dwAddressLength = sizeof(ac) / sizeof(wchar_t);
  39.     #                 if (WSAAddressToString(reinterpret_cast<LPSOCKADDR>(pSockaddrIn), sizeof(sockaddr_in), nullptr, ac, &dwAddressLength) == 0) {
  40.     #                     ipAddressW = ac;
  41.     #                     break;
  42.     #                 }
  43.     #             }
  44.     #         }
  45.     #         if (!ipAddressW.empty()) {
  46.     #             break;
  47.     #         }
  48.     #     }
  49.     #     if (pAdapterAddrs != nullptr) {
  50.     #         free(pAdapterAddrs);
  51.     #     }
  52.     #     WSACleanup();
  53.     #     std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> converter;
  54.     #     std::string ipAddress = converter.to_bytes(ipAddressW);
  55.     #     return ipAddress;}
  56.     # @end
  57. }

  58. 类 启动类 <公开 基础类 = 程序类>
  59. {
  60.     方法 启动方法 <公开 类型 = 整数 @禁止流程检查 = 真>
  61.     {
  62.         @ MessageBox(nullptr, reinterpret_cast<LPCWSTR>(std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>>().from_bytes(getLocalIPAddress()).c_str()), L"本机IP地址:", MB_OK | MB_ICONINFORMATION);return 0;
  63.         返回 (1)
  64.     }
  65. }
复制代码



回复

使用道具 举报

23

主题

91

帖子

772

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
772
5#
发表于 2024-12-27 19:51:54 | 只看该作者
本帖最后由 aeszyl 于 2024-12-28 10:47 编辑
  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 包 火山.程序

  3. 类 启动类 <公开 基础类 = 程序类>
  4. {
  5.     方法 启动方法 <公开 类型 = 整数>
  6.     {
  7.         变量 网址 <类型 = 文本型>
  8.         运行 ("powershell -Command $ip = (Test-Connection -ComputerName (hostname) -Count 1).IPv4Address.IPAddressToString; $ip | Clip", , 程序窗口显示方式.隐藏窗口)
  9.         网址 = 取剪辑板文本 ()
  10.         @ MessageBox(NULL, @<网址>, L"信息:", MB_OK | MB_ICONINFORMATION); return 0;
  11.         返回 (1)
  12.     }
  13. }
复制代码

回复

使用道具 举报

9

主题

546

帖子

2605

积分

核心用户

我站在编程的路口往回望,再也看不到那个快乐的代码郎

Rank: 9Rank: 9Rank: 9

积分
2605
6#
发表于 2024-12-27 23:30:16 | 只看该作者
本帖最后由 kingsoft 于 2024-12-27 23:31 编辑

楼上代码可用,但是直接复制运行的那个引号会出问题,用下面这个替换即可!

运行 ("powershell -Command $ip = (Test-Connection -ComputerName (hostname) -Count 1).IPv4Address.IPAddressToString; $ip | Clip", , 程序窗口显示方式.隐藏窗口)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2025-4-5 17:01 , Processed in 0.087896 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表