标签: sendmessage

我可以在另一个应用程序进程中获取任意窗口的位图吗?

我正在尝试自动化第三方 Win32 应用程序,我想在定义的时间间隔捕获特定窗口的图形内容。我处于此的早期阶段,我目前正在尝试通过 C#使用Microsoft UI 自动化API 来完成客户端应用程序和外部应用程序之间的大部分交互。我现在可以让外部应用程序执行我希望它执行的操作,但现在我想从似乎是第三方所有者绘制的控件的特定窗口中捕获图形。我怎样才能做到这一点?我要捕获的窗口是此图像中红色矩形标记的窗口:

我需要红色矩形中的内容

我有一个这样的实现,但它依赖于外部应用程序的 UI 位于顶部,这对我来说并不能保证,所以我更愿意找到更通用的东西。

var p = Process.Start("c:\myapp.exe");
var mainForm = AutomationElement.FromHandle(p.MainWindowHandle);
// "workspace" below is the window whose content I want to capture.
var workspace = mainForm.FindFirst(TreeScope.Descendents,
                    new PropertyCondition(AutomationElement.ClassNameProperty, "AfxFrameOrView70u"));
var rect = (Rect) workspace.GetCurrentPropertyValue(AutomationElement.BoundingRectangleProperty);
using (var bmp = new Bitmap((int)rect.Width, (int)rect.Height))
{
    using (var g = Graphics.FromImage(bmp))
    {
        g.CopyFromScreen((int)rect.Left, (int)rect.Top, 0, 0, new Size((int)rect.Width, (int)rect.Height));
        bmp.Save(@"c:\screenshot.png", ImageFormat.Png);
    }
}
Run Code Online (Sandbox Code Playgroud)

当自动化应用程序在顶部时,上面的工作足够好,但它只是盲目地复制矩形中的屏幕,所以我的代码受机器上运行的任何东西的支配,并可能覆盖我的应用程序的窗口。

我已经阅读了一些将WM_PRINT消息发送到窗口的建议。几个月前的这个问题/答案似乎很有希望,但是当我使用此代码时,我只得到一个白色矩形,其中没有控件的实际内容。

var prop = (int)workspace.GetCurrentPropertyValue(AutomationElement.NativeWindowHandleProperty);
var …
Run Code Online (Sandbox Code Playgroud)

gdi+ sendmessage microsoft-ui-automation

4
推荐指数
1
解决办法
2590
查看次数

Python win32api SendMesage

试图为我澄清win32api.只是举了一个简单的例子.获取记事本窗口,将鼠标移动到位置单击并写入字符串.但它不起作用.什么问题?并且任何人都可以澄清我的lParam参数吗?做了什么?它是哪种类型的?看起来怎么样?:) 提前致谢.

import win32api, win32con, win32gui, win32ui, win32service, os, time



def f_click(pycwnd):
        x=300
        y=300
        lParam = y <<15 | x
        pycwnd.SendMessage(win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lParam);
        pycwnd.SendMessage(win32con.WM_LBUTTONUP, 0, lParam);

def get_whndl():
        whndl = win32gui.FindWindowEx(0, 0, None, 'NB.txt - Notepad')
        return whndl

def make_pycwnd(hwnd):       
        PyCWnd = win32ui.CreateWindowFromHandle(hwnd)
        return PyCWnd

def send_input_hax(pycwnd, msg):
    f_click(pycwnd)
    for c in msg:
        if c == "\n":
            pycwnd.SendMessage(win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
            pycwnd.SendMessage(win32con.WM_KEYUP, win32con.VK_RETURN, 0)
        else:
            pycwnd.SendMessage(win32con.WM_CHAR, ord(c), 0)
    pycwnd.UpdateWindow()

whndl = get_whndl()
pycwnd = make_pycwnd(whndl)
msg = "It works !\n"
send_input_hax(pycwnd,msg)
Run Code Online (Sandbox Code Playgroud)

python winapi pywin32 sendmessage

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

如何使用Python中的Skype4Py向群组对话发送消息

我一直试图让我的脚本使用Skype4Py库向Skype中的群组对话发送消息,我目前能够发送消息的唯一方法是特定用户.

import Skype4Py
Skype = Skype4Py.Skype()
Skype.Attach()
Skype.SendMessage('namehere','testmessage')
Run Code Online (Sandbox Code Playgroud)

有谁知道如何更改我的代码以向群组对话发送消息?

python sendmessage python-2.7 skype4py

4
推荐指数
1
解决办法
6089
查看次数

将文本添加到另一个程序文本框 C++

我已经设法将文本发送到我使用 C++ 创建的自定义文本框,以及使用 1 个窗口和 1 个文本框的记事本、计算和其他程序。但是,我想将文本发送到另一个具有多个文本框并且也在选项卡中的程序。它的结构如下:

  1. 打开程序
  2. 从 2 个选项卡中进行选择:统计 B. 配置(其中包含文本框)
  3. 将 4 个文本框填入所需的值

我尝试过 winspy++,但没有成功,这是我一直在使用的简单代码。

#include <windows.h>

int main()
{ 
HWND hNote;
HWND hChild;

if (!(hNote=FindWindow("windowname",NULL)))
    exit(1);

if (!(hChild=FindWindowEx(hNote,NULL,"EDIT",NULL)))
    exit(2);

SendMessage(hChild,WM_SETTEXT,NULL,(LPARAM)"texttoadd");

return 0;
}
Run Code Online (Sandbox Code Playgroud)

谁能帮我解决这个问题?

c++ sendmessage

4
推荐指数
1
解决办法
1804
查看次数

在线程中更改 GUI

我有一个大约 20 秒后结束的操作。为了避免冻结,我想创建一个线程并每秒更新其中的标签文本。我查了很多,因为每个人都有不同的意见,我无法决定使用哪种方法。

我试过 SendMessage 并且它有效,但有些人认为使用 SendMessage 不安全,我应该改用 PostMessage。但 PostMessage 失败ERROR_MESSAGE_SYNC_ONLY(1159)。

char text[20] = "test text";
SendMessage(label_hwnd, WM_SETTEXT, NULL, text);
Run Code Online (Sandbox Code Playgroud)

我搜索了这个,我认为这是因为在 PostMessage 中使用了不允许的指针。这就是它失败的原因。

所以我该怎么做?我糊涂了。你有什么建议?此方法是否适用于更改其他线程中的 UI 元素?

谢谢

c++ mfc multithreading sendmessage thread-safety

4
推荐指数
1
解决办法
1432
查看次数

如何在单独的进程中使用SendMessage(..)发送数据记录

我用来发送两个独立进程的数据,但它失败了.它只在相同的过程下工作......这是概念.

// ------------------------------------------------ -----------------------------------
MainApps
// ------------ -------------------------------------------------- ---------------------

Type
   PMyrec = ^TMyrec; 
   TMyrec = Record
   name : string;
   add : string;
   age : integer;
end;

:OnButtonSend
var aData : PMyrec;
begin
   new(aData);
   aData.Name := 'MyName';
   aData.Add := 'My Address';
   aData.Age : 18;
   SendMessage(FindWindow('SubApps'),WM_MyMessage,0,Integer(@aData));
end;
Run Code Online (Sandbox Code Playgroud)

// ------------------------------------------------ -----------------------------------
SubApps
// ------------ -------------------------------------------------- ---------------------

Type
   PMyrec = ^TMyrec; 
   TMyrec = Record
   name : string;
   add : string;
   age : integer;
end;
Run Code Online (Sandbox Code Playgroud)

:OnCaptureMessage

var
  aData : PMyrec;
begin
  aData := PMyrec(Msg.LParam);
  showmessage(aData^.Name); …
Run Code Online (Sandbox Code Playgroud)

delphi process sendmessage windows-messages

3
推荐指数
1
解决办法
5889
查看次数

发送来自Spy ++的消息

嘿伙计们,我正在尝试向游戏发送消息(自动化文本命令),问题是我无法弄清楚如何使用spy ++中的信息来编写C#sendmessage函数.
我能够使用spy ++来获取 00220540 S WM_SETCURSOR hwnd:0024052C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
任何人都可以提供这意味着什么的细分,以及如何在c#中将消息发送到游戏中?

编辑:我发现我正在查看错误的过程.我没有看javaw.exe,而是看着实际的游戏.这是按t的代码:

<00919> 0038062A WM_INPUT nInputCode:RIM_INPUT hRawInput:189E0973
<00920> 0024052 P WM_KEYUP nVirtKey:'T' cRepeat:1 ScanCode:14fExtended:0fAltDown:0fRepeat:1fUp:1
Run Code Online (Sandbox Code Playgroud)

谢谢,
马克斯

c# pinvoke sendmessage spy++

3
推荐指数
1
解决办法
4737
查看次数

Windows API SendMessage + WM_SETTEXT 导致崩溃

我遇到了 SendMessageA(handle,WM_SETTEXT,0,(LPARAM)text); 如果在构造函数之外的任何其他地方使用它会导致崩溃。

MWC.h

#include <Windows.h>
#include <iostream>
#include <string>

class MWC{
private:
    MSG msg;
public:
    MWC();
    ~MWC();
    int mLoop();
    int mClose(UINT);
    class System{
    public:
        System(){ }
        ~System(){ }
        class Form{
        public:
            HWND handle; // Need to access it in order to create other controls
            Form(char*,int,int,int,int);
            Form(char*,int,int);
            ~Form(){ }
            bool Show();
            HWND ReturnHandle();
        };
        class TextBox{
        protected:
            HWND handle;
        private:
            int ID;
        public:
            TextBox(char* text,int width,int height,int x,int y,int id,Form* p);
            TextBox(int width,int height,int x,int y,int id,Form* p);
            ~TextBox(){ } …
Run Code Online (Sandbox Code Playgroud)

c++ crash winapi sendmessage

3
推荐指数
1
解决办法
7651
查看次数

找不到Java JNA sendMessage()

我正在尝试使用JNA (概述)在最小化时将消息发送到应用程序或不在顶部(例如鼠标单击),并且我发现人们正在使用com.sun.jna.platform.win32.User32.SendMessage A(hW,0x0201,0,0);

但我在这堂课中找不到这个功能.

如果我做错了,有人可以给我一个如何实现它的例子吗?

码:

User32 user32;
Pointer hW = user32.GetForegroundWindow().getPointer();
user32.SendMessageA( hW, 0x0201, 0, 0 );
Run Code Online (Sandbox Code Playgroud)

java user32 jna sendmessage

3
推荐指数
1
解决办法
3176
查看次数

如何从网站向Telegram APP发送消息

我在我的网站上有一个分享按钮,我想向Telegram APP联系人发送特定消息(当我在Mobile中打开网站时)

问题是我没有找到完整的代码,它只是在移动设备中打开APP

我的代码是:

<a href="tg://" id="telegram_share" class="mobileShare" title="inviteFriends" alt="telegram_share"></a>
Run Code Online (Sandbox Code Playgroud)

如你所见,我没有找到在href属性中发送消息的正确命令

例如,我找到了类似于添加贴纸的类似物:

<a class="tgme_action_button" href="tg://addstickers?set=Saber2">Add Stickers</a>
Run Code Online (Sandbox Code Playgroud)

html javascript mobile sendmessage telegram

3
推荐指数
1
解决办法
8937
查看次数