所以我正在构建一个使用win32的SendMessage作为IPC的应用程序.
我正在使用FindWindow来获取基于className和windowName的hWnd.这一切都很好,花花公子,直到我想与一个根(如桌面的孩子)交谈,窗口与其他根Windows具有相同的名称/类名.
有没有FindWindow的替代品我可以用来选择我想要的hWnd?
目标应用程序是用Delphi(win32而不是.NET)编写的,并且是封闭源代码.
我想调用的操作称为复制,但没有明显的键盘快捷键.(Ctrl + Insert做错了,Ctrl + C什么都不做)
我可以找到我的目标HWND并说服它打开上下文菜单(它WM_RBUTTONDOWN/UP不响应WM_CONTEXTMENU).从菜单中HWND我甚至可以获得菜单句柄,MN_GETHMENU并找到我想要的菜单项.我只是不知道如何"选择"该项目的细节.菜单是"无模式"的,即无效.它HWND不是拥有的,所以我不知道许多隐藏的TPUtilWindow窗户中哪一个是真正的拥有者 - 否则我可能只是发送它WM_COMMAND而不是弹出菜单,这将是更好的选择.
虽然我确信它有助于各种各样的黑客攻击,但我宁愿不将代码注入目标进程.
以任何语言接受的答案.
如何使用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) 是否可以从另一个窗口与非活动窗口进行交互?我想将一个文本框聚焦在窗口中而不使其处于活动状态,然后向其发送击键和鼠标事件.似乎可以使用SendMessage将消息发送到非活动窗口,但是是否可以将文本框聚焦在窗口中并向其发送按键,而不会使窗口处于活动状态?
我想制作一个小应用程序来更改 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) 我有一个带有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.
为什么这不起作用,是否可以修复它?
我有一个项目涉及打开多个窗口客户端,然后在每个进程中模拟鼠标点击.我已经能够使用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) 如何打开窗口的上下文菜单(窗口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) 作为来自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.
我实现这个的方式有错误吗?我正在打开一个新选项卡,然后向该选项卡发送消息,但是所有其他具有侦听器的选项卡也会收到该消息。
在 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
sendmessage ×10
c# ×5
winapi ×4
.net ×2
contextmenu ×2
android ×1
c ×1
c++ ×1
delphi ×1
forms ×1
javascript ×1
listviewitem ×1
marshalling ×1
messages ×1
pinvoke ×1
sendkeys ×1
tabs ×1
user32 ×1
windows ×1
wpf ×1