当前位置:  开发笔记 > 编程语言 > 正文

C# - 从C#应用程序向Google Chrome发送消息

如何解决《C#-从C#应用程序向GoogleChrome发送消息》经验,为你挑选了2个好方法。

我一直在寻找,我还没有找到我将如何从C#中做到这一点.

我想要这样做,所以我可以告诉谷歌Chrome 从我的C#应用​​程序前进,后退,打开新标签,关闭标签,打开新窗口关闭窗口.

我使用WinAmp做了类似的事情

[DllImport("user32", EntryPoint = "SendMessageA")]
private static extern int SendMessage(int Hwnd, int wMsg, int wParam, int lParam);

还有一些其他人.但我不知道要发送什么消息或者如何找到传递给它的窗口,或者其他什么.

那么有人可以告诉我如何从C#向Chrome发送这6个命令吗?谢谢

编辑:好的,我正在投票,所以也许我不够清楚,或者人们假设我没有试图自己解决这个问题.

首先,我对整个DllImport的东西不太满意.我还在学习它是如何运作的.

几年前我在winamp找到了如何做同样的想法,我正在查看我的代码.我做了所以我可以跳过一首歌,回去,播放,暂停,并停止从我的C#代码winamp.我开始导入:

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr FindWindow([MarshalAs(UnmanagedType.LPTStr)] string lpClassName, [MarshalAs(UnmanagedType.LPTStr)] string lpWindowName);
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern int SendMessageA(IntPtr hwnd, int wMsg, int wParam, uint lParam);
    [DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    public static extern int GetWindowText(IntPtr hwnd, string lpString, int cch);
    [DllImport("user32", EntryPoint = "FindWindowExA")]
    private static extern int FindWindowEx(int hWnd1, int hWnd2, string lpsz1, string lpsz2);
    [DllImport("user32", EntryPoint = "SendMessageA")]
    private static extern int SendMessage(int Hwnd, int wMsg, int wParam, int lParam);

然后我发现使用它的代码使用这些常量来发送我发送的消息.

    const int WM_COMMAND = 0x111;
    const int WA_NOTHING = 0;
    const int WA_PREVTRACK = 40044;
    const int WA_PLAY = 40045;
    const int WA_PAUSE = 40046;
    const int WA_STOP = 40047;
    const int WA_NEXTTRACK = 40048;
    const int WA_VOLUMEUP = 40058;
    const int WA_VOLUMEDOWN = 40059;
    const int WINAMP_FFWD5S = 40060;
    const int WINAMP_REW5S = 40061;

我会通过以下方式获得hwnd(发送消息的程序):

IntPtr hwnd = FindWindow(m_windowName, null);

然后我会向该程序发送一条消息:

SendMessageA(hwnd, WM_COMMAND, WA_STOP, WA_NOTHING);

我认为我会为Google Chrome做一些非常类似的事情.但是我不知道这些价值观应该是什么,我在谷歌上试图找到答案,但我不能,这就是我在这里问的原因.所以我的问题是如何获取以下值:

m_windowNameWM_COMMAND

然后,不同命令的值,前进,后退,新选项卡,关闭选项卡,新窗口,关闭窗口



1> VVS..:

从http://dev.chromium.org/developers开始您的研究


编辑:向窗口发送消息只是工作的一半.窗口必须响应该消息并相应地采取行动.如果该窗口不知道消息或根本不关心,则您无法通过发送窗口消息来控制它.

您正在查看有关如何远程控制Winamp的实现细节.发送消息只是实现它的一种方式,而这正是Winamp开发人员选择的方式.您正在使用的那些消息是用户定义的消息,仅对 Winamp 具有特定含义.

你在第一步要做的是找出是否铬支持某种远程控制的以及这些机制.



2> Chris S..:

您可以使用Visual Studio的Spy ++轻松获取窗口名称,然后按CTRL + F,然后找到chrome.我试过了,得到了

用于out窗口的"Chrome_VistaFrame".带有网页的实际窗口是"Chrome_RenderWidgetHostHWND".

就WM_COMMAND而言 - 你需要进行实验.你显然想要发送按钮点击(我头顶的WM_MOUSEDOWN).由于后退,前进按钮不是他们自己的窗口,你需要弄清楚如何通过在某个x,y位置模拟鼠标点击来实现这一点,以便Chrome知道你正在做什么.或者您可以发送等效于后退/前进的键盘快捷键等.

我刚才写的一个例子是trillian和winamp:通过c#和winapi向windows发送消息

还有一些工具可以使用脚本语言来解决这种问题 - autoit是我使用过的:autoit.com

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有