0

C# で、マウスの左クリックを sopcast ミュート ボタンに送信しようとしていますが、結果はありません。これが私がしたことです:

  const int BN_CLICKED = 245;  
public static void mute_sopcast() 
{ 

    IntPtr hwnd = FindWindow("#32770", null); 
    IntPtr chwnd1 = FindWindowEx(hwnd, IntPtr.Zero, "AfxOleControl70su", null); 
    IntPtr chwnd2 = FindWindowEx(chwnd1, IntPtr.Zero, "#32770", null); 
    IntPtr chwnd3 = FindWindowEx(chwnd2, IntPtr.Zero, "Button", "Mute"); 

    PostMessage(chwnd3, BN_CLICKED, 0, (int)IntPtr.Zero); 

    //The code bellow I made it to see if chwnd… is zero or not.

    if (chwnd3 == new IntPtr(0)) 
    { 
        MessageBox.Show("IntPtr(0)"); 
    } 
    else if (chwnd3 == IntPtr.Zero) 
    { 
        MessageBox.Show("IntPtr.Zero"); 
    } 
    else 
    { 
        MessageBox.Show("IntPtr.Zero not empty"); 
    } 


} 

Winspector Spy は私にこれを与えます:

000E036E: #32770
    …
    00070406: AfxOleControl70su
        002C06A2: #32770
            …
            000F03A4: ボタン「ミュート」

誰かが私が間違っている場所を教えてもらえますか? どうもありがとうございました。

4

3 に答える 3

1

やってみました:

SendMessage(chwnd4, WM_LBUTTONDOWN, IntPtr.Zero, IntPtr.Zero);
SendMessage(chwnd4, WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero); 
于 2012-07-08T11:54:54.743 に答える
1

BN_CLICKEDWPARAMはウィンドウ メッセージではなく、WM_COMMAND メッセージの一部として送信される通知コードです。WM_COMMAND メッセージには、外部からは利用できないコントロール ID も必要です。また、WM_COMMAND メッセージは、コントロール自体ではなく、コントロールの親ウィンドウに送信されます。

これを送信する正しい方法は次のとおりです。

const int WM_COMMAND = 0x111;
const int BN_CLICKED = 245; 

int controlID = ??; // Something you don't know
int wParam = BN_CLICKED >> 16 | controlID;

PostMessage(chwnd3, WM_COMMAND, wParam , (int)chwnd4);

もちろん、これはコードが WM_COMMAND メッセージを使用しており、ボタンのアップ/ダウン メッセージを直接リッスンしていないことを前提としています。

より良い方法は、ボタンにフォーカスを設定し、SendKeysを使用してスペースバーを押してボタン クリックを実行することです。

于 2012-07-08T12:04:12.810 に答える
0

システムを使用して;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace automouse
{
    public partial class Form1 : Form
    {
        public const int WM_LBUTTONDOWN = 0x0201;
        public const int WM_LBUTTONUP = 0x0202;

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SendMessage(button2.Handle, WM_LBUTTONDOWN, IntPtr.Zero, IntPtr.Zero);
            SendMessage(button2.Handle, WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Button2 clicked!");
        }
    }
}
于 2012-07-21T21:50:25.553 に答える