在powershell脚本中执行c#代码的正确方法是什么?

在powershell脚本中执行c#代码的正确方法是什么?,c#,winforms,powershell,C#,Winforms,Powershell,我正在尝试播放/暂停媒体,我发现了一些c代码,但当我尝试在powershell脚本中实现它时,什么都没有发生。。。这就是我所尝试的: Add-Type @' using System; using System.Windows; using System.Runtime.InteropServices; namespace UniversalSandbox { public partial class Form1 { public const int KEYEV

我正在尝试播放/暂停媒体,我发现了一些c代码,但当我尝试在powershell脚本中实现它时,什么都没有发生。。。这就是我所尝试的:

Add-Type @'
using System;
using System.Windows;
using System.Runtime.InteropServices;

namespace UniversalSandbox
{
    public partial class Form1
    {
        public const int KEYEVENTF_EXTENTEDKEY = 1;
        public const int KEYEVENTF_KEYUP = 0;
        public const int VK_MEDIA_NEXT_TRACK = 0xB0;
        public const int VK_MEDIA_PLAY_PAUSE = 0xB3;
        public const int VK_MEDIA_PREV_TRACK = 0xB1;

        [DllImport("user32.dll")]
        public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo);





        private void button1_Click(object sender, EventArgs e)
        {
            keybd_event(VK_MEDIA_PLAY_PAUSE, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            keybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
        }
    }
}
'@

[UniversalSandbox.Form1]::button1_Click;
我使用[UniversalSandbox.Form1]调用播放/暂停事件:按钮1\u单击;但是什么都没发生。。。我的语法错了吗

(我发现c代码)

显示了一种有效的解决方案,可以添加代码中缺失的许多部分

至于你在语法方面做了哪些尝试

[UniversalSandbox.Form1]::按钮1\u单击

尝试访问名为
按钮1\u单击
的静态(
)公共成员


如果有这样一个方法(没有,因为(a)您已将其设置为实例方法,并且(b)您已将其设置为私有),在不使用括号的情况下访问它(包括必需的参数),将打印该方法的签名(其返回类型、名称、参数名称和类型)您的示例是一个Windows窗体应用程序。您需要添加一些额外的按钮,创建表单实例(GUI),然后单击按钮对其进行操作。button1\u click是您需要分配给button控件的事件(您不能直接调用它)。下面是更新的示例

添加类型@'
使用制度;
使用System.Windows.Forms;
使用系统图;
使用System.Runtime.InteropServices;
命名空间UniversalSandbox
{
公共部分类Form1:Form
{
public const int keyevent f_extendedkey=1;
public const int keyevent fu KEYUP=0;
公共常数int VK_MEDIA_NEXT_TRACK=0xB0;
公共const int VK_MEDIA_PLAY_PAUSE=0xB3;
公共const int VK_MEDIA_PREV_TRACK=0xB1;
[DllImport(“user32.dll”)]
公共静态外部void keybd_事件(字节virtualKey、字节扫描码、uint标志、IntPtr extraInfo);
公共表格1()
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
}
私有void InitializeComponent(){
var button1=新按钮();
var button2=新按钮();
var button3=新按钮();
按钮1.Text=“播放”;
按钮1.位置=新点(20,100);
button1.Click+=新建事件处理程序(button1\u Click);
按钮2.Text=“Prev”;
按钮2.位置=新点(110100);
button2.Click+=新建事件处理程序(button2\u Click);
按钮3.Text=“下一步”;
按钮3.位置=新点(200100);
button3.Click+=新建事件处理程序(button3\u Click);
this.Controls.Add(按钮1);
此.Controls.Add(按钮2);
此.Controls.Add(按钮3);
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
keybd_事件(VK_媒体_播放_暂停,0,KEYEVENTF_扩展键,IntPtr.0);
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{
keybd_事件(VK_MEDIA_PREV_TRACK,0,KEYEVENTF_extendedkey,IntPtr.0);
}
私有无效按钮3\u单击(对象发送者,事件参数e)
{
keybd_事件(VK_MEDIA_NEXT_TRACK,0,KEYEVENTF_extendedkey,IntPtr.Zero);
}
}
}
'@-ReferencedAssemblys System.Windows.Forms,System.Drawing
$player=[UniversalSandbox.Form1]::new()
$player.ShowDialog()