标签: sendmessage

使用具有多个根窗口的FindWindow

所以我正在构建一个使用win32的SendMessage作为IPC的应用程序.

我正在使用FindWindow来获取基于className和windowName的hWnd.这一切都很好,花花公子,直到我想与一个根(如桌面的孩子)交谈,窗口与其他根Windows具有相同的名称/类名.

有没有FindWindow的替代品我可以用来选择我想要的hWnd?

c winapi sendmessage

5
推荐指数
1
解决办法
2303
查看次数

如何以编程方式选择另一个应用程序中的上下文菜单项?

目标应用程序是用Delphi(win32而不是.NET)编写的,并且是封闭源代码.

我想调用的操作称为复制,但没有明显的键盘快捷键.(Ctrl + Insert做错了,Ctrl + C什么都不做)

我可以找到我的目标HWND并说服它打开上下文菜单(它WM_RBUTTONDOWN/UP不响应WM_CONTEXTMENU).从菜单中HWND我甚至可以获得菜单句柄,MN_GETHMENU并找到我想要的菜单项.我只是不知道如何"选择"该项目的细节.菜单是"无模式"的,即无效.它HWND不是拥有的,所以我不知道许多隐藏的TPUtilWindow窗户中哪一个是真正的拥有者 - 否则我可能只是发送它WM_COMMAND而不是弹出菜单,这将是更好的选择.

虽然我确信它有助于各种各样的黑客攻击,但我宁愿不将代码注入目标进程.

以任何语言接受的答案.

delphi winapi contextmenu messages sendmessage

5
推荐指数
1
解决办法
1729
查看次数

使用C#从任何窗口捕获突出显示的文本

如何使用c#从任何窗口中读取突出显示/选定的文本.

我尝试了两种方法.

  1. 每当用户选择一些东西时发送"^ c".但在这种情况下,我的剪贴板充斥着大量不必要的数据.有时它也会复制密码.

所以我把我的方法改为第二种方法,发送消息方法.

请参阅此示例代码

 [DllImport("user32.dll")]
    static extern int GetFocus();

    [DllImport("user32.dll")]
    static extern bool AttachThreadInput(uint idAttach, uint idAttachTo, bool fAttach);

    [DllImport("kernel32.dll")]
    static extern uint GetCurrentThreadId();

    [DllImport("user32.dll")]
    static extern uint GetWindowThreadProcessId(int hWnd, int ProcessId);    

    [DllImport("user32.dll") ]
    static extern int GetForegroundWindow();

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
    static extern int SendMessage(int hWnd, int Msg, int wParam, StringBuilder lParam);     

   // second overload of SendMessage

    [DllImport("user32.dll")]
    private static extern int SendMessage(IntPtr hWnd, uint Msg, out int wParam, out int lParam);

    const int …
Run Code Online (Sandbox Code Playgroud)

c# forms user32 sendmessage

5
推荐指数
1
解决办法
5539
查看次数

WPF:如何与非活动窗口进行交互?

是否可以从另一个窗口与非活动窗口进行交互?我想将一个文本框聚焦在窗口中而不使其处于活动状态,然后向其发送击键和鼠标事件.似乎可以使用SendMessage将消息发送到非活动窗口,但是是否可以将文本框聚焦在窗口中并向其发送按键,而不会使窗口处于活动状态?

.net c# wpf sendmessage

5
推荐指数
1
解决办法
1811
查看次数

从其他窗口获取 ListView 项目文本

我想制作一个小应用程序来更改 Windows 7 中的默认播放设备。唯一的解决方案是与声音小程序交互。我成功获取了包含设备名称的 SysListView32 窗口的句柄,但无法从 ListView 获取文本。

这是使用的代码:

IntPtr sListView = (window handle received from another function)
LVITEM lvi = new LVITEM();
lvi.mask = LVIF_TEXT;
lvi.cchTextMax = 1024;
lvi.iItem = 0; // i tried with a loop trought all the items
lvi.iSubItem = 0;
lvi.pszText = Marshal.AllocHGlobal(1024);

IntPtr ptrLvi = Marshal.AllocHGlobal(Marshal.SizeOf(lvi));
Marshal.StructureToPtr(lvi, ptrLvi, false);

SendMessage(sListView, (int)WinMesages.LVM_GETITEMW, IntPtr.Zero, ptrLvi);

string strLvi = Marshal.PtrToStringAuto(lvi.pszText);
Run Code Online (Sandbox Code Playgroud)

结果(strLvi)是一些中文字母。脚本中有什么问题?

更新: LVITEM 结构是这样的:

private struct LVITEM
{
    public uint mask;
    public int iItem;
    public int …
Run Code Online (Sandbox Code Playgroud)

c# marshalling sendmessage cross-process listviewitem

5
推荐指数
1
解决办法
2225
查看次数

如何将击键发送到其他进程(来自记事本)?

我有一个带有PID的记事本:2860

#include <iostream>
#include <windows.h>
#include <psapi.h>
using namespace std;
HWND SendIt (DWORD dwProcessID){
    HWND hwnd = NULL;
    do {
         hwnd = FindWindowEx(NULL, hwnd, NULL, NULL);
         DWORD dwPID = 0;
         GetWindowThreadProcessId(hwnd, &dwPID);
         if (dwPID == dwProcessID) {
            cout<<"yay:"<<hwnd<<":pid:"<<dwPID<<endl;//debug
            PostMessage(hwnd,WM_KEYDOWN,'A',1); //send
         }
    } while (hwnd != 0);
    return hwnd; //Ignore that

}
int main()
{
    SendIt(2680); //notepad ID
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

和记事本应该写信A但没有任何反应.
我尝试WM_DESTROY了它的消息,它正在工作,但WM_KEYDOWN没有工作.
我也做了GetLastError(),它打印错误2 ERROR_FILE_NOT_FOUND.

为什么这不起作用,是否可以修复它?

c++ windows winapi sendmessage sendkeys

5
推荐指数
1
解决办法
1万
查看次数

Web Automation鼠标单击

我有一个项目涉及打开多个窗口客户端,然后在每个进程中模拟鼠标点击.我已经能够使用Win32 API和SendMessage成功地向记事本的多个实例发送消息.适合我的代码如下:

Process[] notepads = Process.GetProcessesByName("notepad");
            foreach (Process proc in notepads)
            {
                    IntPtr handle = proc.Handle;
                    IntPtr child = FindWindowEx(proc.MainWindowHandle, new IntPtr(0), "Edit", null);
                    if (child != null)
                    {
                        MessageBox.Show("Child was found, sending text");
                        SendMessage(child, 0x000C, 0, "test");
                    }
                }
            }
Run Code Online (Sandbox Code Playgroud)

这会向我打开记事本的每个实例发送"测试",无论多少.正如您所看到的,我正在遍历流程的每个实例,并简单地循环消息.一点都不难......

最终目标不是记事本,而是Microsoft扩展Awesomium.我检索了窗口句柄,然后是子(Awesomium)类名,即Chrome_RenderWidgetHostHWND.从那里,我尝试通过重构Sendmessage中的变量类型来发送鼠标事件,以便汇编和lParam可由系统读取.这是代码:

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
        static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
Run Code Online (Sandbox Code Playgroud)

使用一些例子我发现我通过这个组装了lParam:

int x = 834;
int y = 493;
IntPtr lParam = (IntPtr)((y << 16) | x);
IntPtr wParam …
Run Code Online (Sandbox Code Playgroud)

.net c# pinvoke winapi sendmessage

5
推荐指数
1
解决办法
630
查看次数

如何打开任何窗口的上下文菜单?

如何打开窗口的上下文菜单(窗口Right-Click标题栏时显示的正常Windows上下文).

我试过的东西(按一下按钮)

ReleaseCapture();
SendMessage(this.Handle, WM_NCRBUTTONDOWN, 0, 0);
SendMessage(this.Handle, WM_RBUTTONUP, 0, 0);
SendMessage(this.Handle, WM_CONTEXTMENU, 0, 0);
Run Code Online (Sandbox Code Playgroud)

还有这个:

ReleaseCapture();
SendMessage(this.Handle, WM_NCRBUTTONDOWN, HT_CAPTION, 0);
SendMessage(this.Handle, WM_RBUTTONUP, HT_CAPTION, 0);
SendMessage(this.Handle, WM_CONTEXTMENU, HT_CAPTION, 0);
Run Code Online (Sandbox Code Playgroud)

c# contextmenu sendmessage

5
推荐指数
1
解决办法
591
查看次数

Android系统.通过Facebook SDK 4.X将文本发送到Facebook Messenger

作为来自facebook的文档,我们可以将图像从android app发送到facebook messenger,如下所示.

String metadata = "{ \"image\" : \"trees\" }";
ShareToMessengerParams shareToMessengerParams =
    ShareToMessengerParams.newBuilder(contentUri, "image/jpeg")
            .setMetaData(metadata)
            .build();

// Sharing from an Activity
MessengerUtils.shareToMessenger(this, 0, shareToMessengerParams);
Run Code Online (Sandbox Code Playgroud)

但我想发送文字.所以我在下面尝试过.

ShareToMessengerParams shareToMessengerParams =
    ShareToMessengerParams.newBuilder(null, "text/plain")
            .setMetaData("text to send")
            .build();

// Sharing from an Activity
MessengerUtils.shareToMessenger(this, 0, shareToMessengerParams);
Run Code Online (Sandbox Code Playgroud)

当我测试这个时,java.lang.NullPointerException:必须提供非null uri异常.

如何向facebook messenger发送消息..?使用Intent现在不可用,所以我需要使用facebook sdk 4.X.

android sendmessage facebook-messenger facebook-sdk-4.0

5
推荐指数
1
解决办法
1684
查看次数

chrome 扩展: chrome.tabs.sendmessage 正在向所有选项卡发送消息,即使指定了 tabId

我实现这个的方式有错误吗?我正在打开一个新选项卡,然后向该选项卡发送消息,但是所有其他具有侦听器的选项卡也会收到该消息。

在 background.js 中:

chrome.tabs.create({url:chrome.extension.getURL("placement.html")},function(tab){
    chrome.tabs.sendMessage(tab.id, {
        "name":"name",
        "payload":payload
    });
});
Run Code Online (Sandbox Code Playgroud)

在placement.js 中(在加载placement.html 时运行):

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.name == "name") {
        payload = request.payload;
    }
});
Run Code Online (Sandbox Code Playgroud)

我看到每当创建一个新选项卡时,有效负载都会发送到所有具有此 onMessage 侦听器的选项卡。这段代码相对较旧,所以我不确定最近是否有什么变化影响了 chrome.tabs.sendMessage 解释“tab.id”的方式。任何帮助表示赞赏!

javascript tabs google-chrome sendmessage google-chrome-extension

5
推荐指数
1
解决办法
6524
查看次数