明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 589|回复: 5

根据高飞大神函数利用powershell实现多文件选择对话框

  [复制链接]
发表于 2025-3-1 12:22:42 | 显示全部楼层 |阅读模式
本帖最后由 hubeiwdlue 于 2025-3-1 13:19 编辑

     我没有powershell的知识,也不会写命令流,只是借助ai,将高飞鸟大师的函数修改了一点点。增加了3个参数,分别是对话框的名称、初始目录,后缀过滤,并将PowerShell弹窗隐藏了,打开返回地址列表,取消返回nil。但是最初还是会闪一下蓝色的窗口。
    (vlax-invoke wsh 'Run myCommand 0 1)返回的是0,而不是地址,不然用这个方法窗口不会闪。
高飞大神的帖子
http://bbs.mjtd.com/thread-192194-1-1.html


  1. (defun hfb:filesDlg (title initDir filter / lst mycommand mysplit res txt wsh)
  2.   ;;;分割字符串
  3.   (defun mysplit (str delim / lst i len)
  4.     (setq len (strlen delim))
  5.     (setq ch (ascii delim))
  6.     (while (setq i (vl-string-position ch str))  ;(vl-string-search delim str)
  7.       (setq lst (cons (substr str 1 i) lst))
  8.       (setq str (substr str (+ 1 len i)))
  9.     )
  10.     (setq lst (cons str lst))
  11.     (reverse lst)
  12.   )
  13.   (setq myCommand  ;; 构建PowerShell命令字符串
  14.     (strcat
  15.       "powershell.exe -WindowStyle Hidden -Command "  ;; 调用PowerShell解释器
  16.       "Add-Type -AssemblyName System.Windows.Forms; "  ;; 加载Windows窗体组件[4](@ref)
  17.       "$dialog = New-Object System.Windows.Forms.OpenFileDialog; "  ;; 创建文件对话框对象
  18.       "$dialog.Multiselect = $true; "  ;; 启用多选模式[4](@ref)
  19.       (strcat "$dialog.Title = '" title "'; ")  ;; 设置对话框标题(需转义单引号)
  20.       (strcat "$dialog.InitialDirectory = '" initDir "'; ")  ;; 设置初始目录为用户文档[4](@ref)
  21.       (strcat "$dialog.Filter = '文本文件 (*." filter ")|*." filter "|所有文件 (*.*)|*.*'; ")  ;; 文件类型过滤器[4](@ref)
  22.       "$dialogResult = $dialog.ShowDialog(); "  ;; 显示对话框并获取结果
  23.       "if ($dialogResult -eq [System.Windows.Forms.DialogResult]::OK) {"  ;; 判断是否点击确定
  24.       "   $selectedFiles = $dialog.FileNames ; "  ;; 获取所选文件全路径数组
  25.       "   $selectedFiles | ForEach-Object {Write-Host $_}"  ;; 逐行输出文件路径[5](@ref)
  26.       "}"
  27.     )
  28.   )
  29.   (if (and
  30.         (setq wsh (vlax-create-object "wscript.shell"))  ;; 创建WScript.Shell COM对象
  31.         (setq res (vlax-invoke wsh 'exec myCommand))  ;; 执行PowerShell命令
  32.         (setq txt (vlax-invoke (vlax-get res 'stdout) 'readall))  ;; 读取标准输出内容
  33.       )
  34.     (progn
  35.       (setq lst (mysplit txt "\n"))  ;; 自定义函数分割换行(假设mysplit已定义)
  36.       (setq lst (vl-remove "" lst))  ;; 移除空行
  37.     )
  38.   )
  39.   (vlax-release-object wsh)  ;; 释放COM对象
  40.   lst  ;; 返回文件路径列表
  41. )
  42. (hfb:filesDlg "试验" "D:\" "txt")


评分

参与人数 2明经币 +2 收起 理由
自贡黄明儒 + 1 赞一个!
VBALISPER + 1 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2025-3-1 13:12:15 | 显示全部楼层
这句漏了个斜杠(hfb:filesDlg "试验" "D:\" "txt")
(hfb:filesDlg "试验" "D:\\" "txt")
回复 支持 1 反对 0

使用道具 举报

发表于 2025-3-2 00:40:02 | 显示全部楼层
PowerShell弹窗没有隐藏住。WIN11系统
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-3-2 09:31:16 | 显示全部楼层
VBALISPER 发表于 2025-3-2 00:40
PowerShell弹窗没有隐藏住。WIN11系统

我没有win11系统,我是用win10ltsc测试的。
回复 支持 反对

使用道具 举报

发表于 2025-3-2 16:33:15 | 显示全部楼层
我在另一台win10ltsc下测试,确实可以隐藏背景窗口。
回复 支持 反对

使用道具 举报

发表于 2025-3-3 16:30:25 | 显示全部楼层
(hfb:filesDlg "试验" "D:\\" "txt")  你少一反斜扛呀,反回了一个地址表,已证可用  ("D:\\材质设置-0905.txt")
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-3-12 17:46 , Processed in 0.176657 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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