gpt4 book ai didi

c# - 如何在 powershell 中添加和使用 c# 结构

转载 作者:行者123 更新时间:2023-12-05 01:06:28 27 4
gpt4 key购买 nike

我正在尝试将 POINT 结构添加到 powershell 以在 winapi GetCursorPos 函数中使用。这是我尝试过的:

$MethodDefinition=@'
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int X;
public int Y;

public POINT(int x, int y)
{
this.X = x;
this.Y = y;
}
}
[DllImport("user32.dll")]public static extern Int32 GetCursorPos(out POINT lpPoint);
'@;Add-Type -MemberDefinition $MethodDefinition -Name 'Win32' -NameSpace '' -PassThru

当我删除 GetCursorPos 定义时,它给我一个黄色:警告:生成的类型没有定义公共(public)方法或属性。
我不知道如何在 powershell 中使用结构,我只找到有关如何创建结构的信息。
见:
https://www.pinvoke.net/default.aspx/Structures/POINT.html
How do I create a custom type in PowerShell for my scripts to use?
https://learn.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.layoutkind?view=net-5.0

编辑:
我已经添加了一个结构,但仍然不知道如何构造它:

$StructDefinition=@'
public struct POINT{public int X;public int Y;public POINT(int x, int y){this.X=x;this.Y=y;}}
'@;Add-Type -TypeDefinition $StructDefinition -PassThru

最佳答案

我解决了问题,成员(member)定义:

$MethodDefinition = @'
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public Int32 x;
public Int32 y;

public POINT(Int32 X, Int32 Y)
{
this.x = X;
this.y = Y;
}
}

[DllImport("user32.dll")]
public static extern Int32 GetCursorPos(out POINT lpPoint);
'@

$WinApiVariable = Add-Type -MemberDefinition $MethodDefinition -Name 'Win32' -NameSpace '' -PassThru

显示光标位置:

$cursorPos = New-Object -TypeName 'Win32+POINT' -ArgumentList 0,0
[Win32]::GetCursorPos([ref]$cursorPos)
Write-Host "$($cursorPos.x),$($cursorPos.y)"

使用这种奇怪的 + 符号语法 Win32+POINT,我可以访问成员定义中的结构定义,New-Object 创建一个结构,[ref ] 是引用一个结构体。

关于c# - 如何在 powershell 中添加和使用 c# 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69192954/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com