>

기본적으로 C # MP3 플레이어가 실행 중이고 노래를 변경하거나 명령 줄에서 일부 기능을 호출하려고한다고 가정하겠습니다.

MP3 플레이어의 이름이 mp3.exe 라고 가정 앱 자체가 계속 실행되는 동안 앱 외부에서 노래를 변경하고 싶습니다. 그래서 생각하고 있었는데 mp3call.exe 라는 다른 앱을 만드십시오. 을 실행하여

mp3call -play "<song_here>"

mp3call.exe  그런 다음 Play 메소드를 호출합니다.   Play(<song_here>) 와 같은 mp3 내에서 .

이것은 관리 할 수 ​​있습니까? 그렇다면 어떻게해야합니까?


  • 답변 # 1

    흥미있는 것 같아서 주제에 대해 조금 연구했습니다. Win32를 사용 하여이 작업을 수행 할 수 있다고 생각합니다. 나는 매우 간단한 샘플을 만들었습니다. 이름이 WpfSender이고 이름이 WpfListener 인 두 개의 WPF 응용 프로그램. WpfSender는 WpfListener 프로세스에 메시지를 보냅니다.

    WpfSender에는 한 번 클릭하면 메시지를 보내는 버튼이 하나만 있습니다. WpfListener는 WpfSender에서 메시지를받을 때 메시지 상자를 표시하는 빈 창입니다.

    WpfSender를위한 코드는 다음과 같습니다

    using System;
    using System.Diagnostics;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Windows;
    
    namespace WpfSender
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
            private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
            {
                var process = Process.GetProcessesByName("WpfListener").FirstOrDefault();
                if (process == null)
                {
                    MessageBox.Show("Listener not running");
                }
                else
                {
                    SendMessage(process.MainWindowHandle, RF_TESTMESSAGE, IntPtr.Zero, IntPtr.Zero);
                }
            }
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr SendMessage(IntPtr hwnd, uint Msg, IntPtr wParam, IntPtr lParam);
            private const int RF_TESTMESSAGE = 0xA123;
        }
    }
    
    

    Windows 응용 프로그램간에 메시지를 보내기 위해 Win32 API를 사용합니다

    WpfListener 코드는 다음과 같습니다

    using System;
    using System.Windows;
    using System.Windows.Interop;
    
    namespace WpfListener
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
            private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
            {
                HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
                source.AddHook(WndProc);
            }
            private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
            {
                if (msg == RF_TESTMESSAGE)
                {
                    MessageBox.Show("I receive a msg here a I can call the method");
                    handled = true;
                }
                return IntPtr.Zero;
            }
            private const int RF_TESTMESSAGE = 0xA123;
        }
    }
    
    

    XAML은 매우 간단하기 때문에 여기에 쓰지 않습니다. 다시 이것은 교차 애플리케이션 메시지 전송을 달성하는 방법을 보여주는 매우 간단한 샘플입니다. 한계는 당신의 상상력입니다. 액션을 나타내는 많은 int 상수를 선언 할 수 있으며, switch 문에서 선택한 액션을 호출 할 수 있습니다.

    내 연구에서 찾은 두 가지 기사를 따른다고 말해야합니다.

    Wpf에서 WndProc를 처리하는 방법을 알기 위해

    win32 API를 사용하여 메시지를 보내는 방법을 알기 위해

    이것이 도움이되기를 바랍니다!

관련 자료

  • 이전 javascript - 선택 메뉴 다중의 세션 저장
  • 다음 javascript - nodejs, angularjs 웹 애플리케이션에서 net - : err_connection_refused 리소스를로드하지 못했습니다