我一直在四处寻找,但我还没有找到如何从 C# 中做到这一点。
我想这样做,这样我就可以告诉 Google Chrome从我的 C# 应用程序中前进、后退、打开新选项卡、关闭选项卡、打开新窗口和关闭窗口。
我使用 WinAmp 做了类似的事情
[DllImport("user32", EntryPoint = "SendMessageA")]
private static extern int SendMessage(int Hwnd, int wMsg, int wParam, int lParam);
和其他一些人。但我不知道要发送什么消息或如何找到将其传递到哪个窗口或任何东西。
那么有人可以告诉我如何将这 6 个命令从 C# 发送到 Chrome 吗?谢谢
编辑:好的,我被否决了,所以也许我不够清楚,或者人们认为我没有试图自己解决这个问题。
首先,我对整个 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_windowName和WM_COMMAND
然后,不同命令的值,前进,后退,新标签,关闭标签,新窗口,关闭窗口?