易语言怎么取到窗口句柄后在那个获得句柄的窗口上模拟鼠标点击和模拟按键

易语言怎么取到窗口句柄后在那个获得句柄的窗口上模拟鼠标点击和模拟按键,第1张

正常:

按键:

鼠标点击:

已经帮你做例子了!例子已经上传到本帖,按键 和 鼠标点击都是后台执行的,全部用的是API做的!自己下载看看吧!

记得采纳!

代码就这么简单,类似于指定组件取窗口句柄似的,比如你在设定标签1按下效果与放开效果,你就必须在鼠标指针命令前加上组件名称。

标签1鼠标指针=到字节集(鼠标ID)

按钮1鼠标指针=到字节集(鼠标ID)

框1鼠标指针=到字节集(鼠标ID)

编辑框1鼠标指针=到字节集(鼠标ID)

这个命令需要加在指定组件的鼠标某键按下或放开的事件下生效。

补充一下:如果你要实现该程序中其他功能,建议你使用精易模块或超级模块,相关代码命令请到模块中查看。

望采纳。

通过Windows API 函数“HWND WindowFromPoint(POINT Point)”可以获取光标所在处的窗口的句柄。需要有一个触发消息来调用这个函数:比如按下键盘上的某个按键来触发这个函数调用。这是个简单的示范,能够模拟鼠标点击其他窗口的关闭按钮行为;要获得更完善的方案,可以给我私信。

具体 *** 作方法:运行程序,让后将鼠标指针移动至其他窗口之上,最好是在标题栏上;然后按下键盘上的任意按键(推荐按字母键)。

在VC++60“文件”菜单中,新建一个空的“Win32 AppLication”工程。然后新建一个cpp源文件,在源文件中写入如下代码:

#include <windowsh>

LRESULT CALLBACK WindowProc(HWND hdl_wnd, UINT msg_code, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)

{

 WNDCLASS wndcls;

 wndclscbClsExtra = 0;

 wndclscbWndExtra = 0;

 wndclshbrBackground = (HBRUSH)COLOR_BTNSHADOW;

 wndclshCursor = ::LoadCursor(NULL, IDC_ARROW);

 wndclshIcon = ::LoadIcon(NULL, IDI_APPLICATION);

 wndclshInstance = hInstance;

 wndclslpfnWndProc = WindowProc;

 wndclslpszClassName = "gethandle";

 wndclslpszMenuName = NULL;

 wndclsstyle = CS_VREDRAW | CS_HREDRAW;

 ::RegisterClass(&wndcls);

 ::CreateWindow("gethandle", "获取窗口句柄", WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE, 200, 120, 400, 300, NULL, NULL, hInstance, 0);

 MSG msg;

 while (::GetMessage(&msg, NULL, 0, 0))

 {

   ::TranslateMessage(&msg);

   ::DispatchMessage(&msg);

 }

 return 1;

}

LRESULT CALLBACK WindowProc(HWND hdl_wnd, UINT msg_code, WPARAM wParam, LPARAM lParam)

{

 LRESULT value = 0;

 switch (msg_code)

 {

   case WM_CLOSE:

     ::PostQuitMessage(WM_QUIT);

   break;

    //注意:必须在本窗口获得键盘输入焦点的时候,WM_KEYDOWN消息才能生效!

    //如果想在本窗口没有焦点的时候都能生效,则需要安装全局的键盘钩子。

   case WM_KEYDOWN:

   {

     POINT pt;

     HWND hdl_other;

     ::GetCursorPos(&pt);  //获取鼠标指针的坐标

     hdl_other = ::WindowFromPoint(pt); //将该坐标传递给获取句柄的函数

     ::PostMessage(hdl_other, WM_CLOSE, 0, 0);  //用获取到的句柄,向目标窗口发送一个WM_CLOSE消息。WM_CLOSE消息相当于用户点击了窗口右上角的关闭按钮。

   }

   break;

   default:

   return ::DefWindowProc(hdl_wnd, msg_code, wParam, lParam);

 }

 return value;

}

Call PluginBkgndRightClick(MyArray, 300, 300)

MyArray是数组名后面要带数组下标才能让机器辨认比如MyArray(0),代表该数组的第一个元素

API:

GetForegroundWindow 可以获取到有焦点的顶层窗口。

获取有焦点的子窗口只能用GetFocus,但是如果当前顶层窗口属于其他线程,GetFocus将返回NULL。没有好的办法解决,除非AttachThreadInput或者用钩子(HOOK)。

原理如下:

前言:DNF有较强保护,找图找色应尽量使用屏幕方式,不要使用游戏窗口句柄的方式!

把窗口进行调整是启动坐标定位的作用,这种方式一般是用于用屏幕坐标来控制流程而做的初始化工作

流程方法大致如下:

1:屏幕找色,找到游戏窗口边框的指定特征!

2:然后控制鼠标移动到特征上,可以加以一些坐标偏差

3:鼠标按下,移动,d起,这个是移动窗口的动作

4:移动鼠标的距离,需要经过自己特征坐标而定,下面给个计算概念:

假设 特征坐标 x=400;y=205; 窗口的边框属性: 左=350;顶=200;高=600;宽=600;

现在控制要求是把窗口的 左=0;顶=0; 那么则如下处理

鼠标在400205处左键按下,然后移动x=400-350;y=200-(205-200); 然后d起左键!

这样,窗口就被移动到左上角了,当然,调整窗口还是有很多方法的!

但是,你说DNF打不开窗口句柄,就只能完全通过模拟鼠标拖动窗口边框的方式来改变窗口的位置了

仔细看看吧,没有忽悠你的!祝你尽快搞定!

Hwnd = PluginWindowMousePoint() //窗口句柄获取方式你可以自己定

sRect = PluginWindowGetClientRect(Hwnd)

//下面这句用于分割字符串,将横坐标和纵坐标分成两个字符串

MyArray = Split(sRect, "|")

//下面这句将字符串转换成数值

L = Clng(MyArray(0)): T = Clng(MyArray(1))

R = Clng(MyArray(2)): B = Clng(MyArray(3))

Msgbox "左" & L & ",右 " & R & ",上" & T & ",下" & B

//左上的数据,就是窗口原点,用屏幕坐标减去原点坐标,就是窗口坐标

//下面这句用于向后台

窗口句柄

(变量:Hwnd)的客户区域(坐标:5, 5)处发送一个鼠标左键单击

Call PluginBkgndLeftClick(Hwnd, 5, 5)

Msgbox "鼠标在后台窗口(坐标:5, 5)处的单击"后台插件里边有模拟鼠标键盘的 *** 作

以上就是关于易语言怎么取到窗口句柄后在那个获得句柄的窗口上模拟鼠标点击和模拟按键全部的内容,包括:易语言怎么取到窗口句柄后在那个获得句柄的窗口上模拟鼠标点击和模拟按键、易语言程序怎样按下鼠标就改变指针样式,松开鼠标后恢复,实现拖拽获取鼠标所在位置窗口句柄功能、C++获取光标所在位置的句柄,并向光标处发送数据,用PostMessage(),要详细代码。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10136330.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存