[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 把C#代码转为powershell遇到的问题

本帖最后由 小白龙 于 2025-3-25 12:02 编辑

下面的C#代码是gpt从python代码转换过来的, 可以在老版(5.X或6.X)的剪映导航窗口自动打开指定的草稿,
但是有个问题, 有时不知道为啥对象e就报错了, 然后重启剪映导航窗口就可以了, 后面我又用gpt转成powershell, 但是死活就是无法执行, 总是报错, 求路过精通C#和powershell的大佬指导, 多谢
  1. using FlaUI.UIA3;
  2. using FlaUI.Core.Conditions;
  3. var apps = Process.GetProcessesByName("JianyingPro")
  4.    .Where(p => p.MainWindowHandle != IntPtr.Zero);
  5. using var automation = new UIA3Automation();
  6. IntPtr mainWindowHandle = apps.First().MainWindowHandle;
  7. var mainWindow = automation.FromHandle((nint)mainWindowHandle);
  8. var condition = new PropertyCondition(automation.PropertyLibrary.Element.FullDescription, "HomePageDraftTitle:3月22日");
  9. var e = mainWindow.FindFirstDescendant(condition);
  10. e.Parent.Click();
复制代码
Powershell代码:
  1. Add-Type -Path ".\FlaUI.UIA3.dll"
  2. try {
  3.     $apps = Get-Process "JianyingPro" | ? { $_.MainWindowHandle -ne 0 }
  4.     $automation = New-Object "FlaUI.UIA3.UIA3Automation"
  5.     $mainWindowHandle = $apps[0].MainWindowHandle
  6.     $mainWindow = $automation.FromHandle($mainWindowHandle);
  7.     $condition = New-Object "PropertyCondition" `
  8.         @($automation.PropertyLibrary.Element.FullDescription, "HomePageDraftTitle:3月22日")
  9.     $e = $mainWindow.FindFirstDescendant($condition)
  10.     $e.Parent.Click()
  11. }
  12. catch {
  13.     Write-Error "发生错误: $_"
  14. }
  15. finally {
  16.     # 确保释放资源
  17.     if ($automation) { $automation.Dispose() }
  18. }
复制代码

既然这么多csharp要转成ps 不如写个脚本直接编译cs 运行exe呢 ps慢的不得了
你好

TOP

回复 9# Five66


    没有最小化, 但是没有在最顶层, 但是不在最顶层时, 大多是可以的

TOP

还有一点 ,如果程序已经最小化或者没显示在任务栏或者隐藏了 ,MainWindowHandle属性有可能为0

TOP

回复 7# 小白龙


    同一进程实例确实只有一个 ,不同进程实例不止一个

TOP

回复 6# Five66
下面这个执行后, 其实就1个了

    var apps = Process.GetProcessesByName("JianyingPro")
                                                           .Where(p => p.MainWindowHandle != IntPtr.Zero);

TOP

回复 5# 小白龙


    是 IntPtr mainWindowHandle = apps.First().MainWindowHandle; 中的 apps.First() ,只取了apps 数组中的第1个

TOP

回复 4# Five66


    这个代码应该没错的, gpt问了好多次
Get-Process "JianyingPro" | ? { $_.MainWindowHandle -ne 0 }

TOP

回复 3# 小白龙


    枚举 ,全部进程都查找一下 ,哪个找到哪个符合就哪个

TOP

回复 2# Five66


    感谢大佬, 我发现不是powershell转换的代码的问题, 是C#的代码的问题, 在powershell上仍然存在, 就是不知道回复, e对象就报错了, 只能重启剪遇才能OK, 剪映运行后有4个进程, 可能问题在这里, 怎么解决呢

TOP

Powershell代码的话应该是第9行那个类型名字吧 ,得用全名称 FlaUI.Core.Conditions.PropertyCondition
C#代码的话 ,如果安装了winsdk或者Visual Studio ,可以用windows kids文件夹下的inspect.exe自己研究看看  ,运行剪映 ,然后运行inspect.exe ,看看是怎样的 , 点击窗口时是怎样的 ,关闭窗口时是怎样的 ,出错时又是怎样的

TOP

返回列表