[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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. }
复制代码

回复 2# Five66


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

TOP

回复 4# Five66


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

TOP

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

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

TOP

回复 9# Five66


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

TOP

返回列表