易语言,取窗口句柄并 *** 作

易语言,取窗口句柄并 *** 作,第1张

解决这个问题的方法如下:

1、首先新建一个程序。

2、在程序里面画一个“按钮”、两个编辑框、两个标签,然后改成相应的名字好辨认。

3、依次左键点击下图的:

一、个作夹(没有点击的情况下才需要点击)

二、程序

三、模块应用。

4、在浏览窗口找到下载存放的超级模块位置,点击打开“超级模块”。

5、在模块下面便会多出一个“超级模块”。

6、双击按钮1,在子程序“_按钮1_被单击”下面新建一个名为“i”的整数型变量,然后编写代码如下:i = 取句柄2 (“notepadexe”)编辑框1内容 = 到文本 (i)。

7、编写以上代码后,就能取到“notepadexe”的窗口句柄了,然后,再来取窗口标题!继续编写代码如下:编辑框2内容 = 取窗口标题 (取句柄2 (“notepadexe”))。

8、最后调试运行一下该程序,这样就完成了。

从使用角度来说,句柄一般是用来引用不透明数据的。

比如C++里写了一个类A,如果你把一个A 类型的指针传递给其他代码,我们会说这是一个A对象的指针。如果把它强制转换成void 甚至intptr_t,其他代码没办法再直接通过这个指针使用A的逻辑了,也就是它指向的数据对其他代码已经不可见了,那习惯就叫这种东西为句柄了——具体的东西不知道,只给个把(handle)先帮忙拎着,这正用数据的时候还得交还给别人处理。

在Windows环境中,句柄是用来标识项目的,这些项目包括:

模块(module)

任务(task)

实例(instance)

文件(file)

内存块(block of memory)

菜单(menu)

控制(control)

字体(font)

资源(resource),包括图标(icon),光标(cursor),字符串(string)等

GDI对象(GDI object),包括位图(bitmap),画刷(brush),元文件(metafile),调色板(palette),画笔(pen),区域(region),以及设备描述表(device context)。

WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行 *** 作。

在<<WINDOWS编程短平快>>(南京大学出版社)一书中是这么说的:句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。

从上面的2个定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。在WINDOWS编程中会用到大量的句柄,比如:HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC(设备描述表句柄),HICON(图标句柄)

const int WM_PASTE = 0x302;

[DllImport("user32dll", EntryPoint = "SendMessageA")]

private static extern int SendMessage(SystemIntPtr ptr, int wMsg, int wParam, int lParam);

以上为C#下SendMessage的函数调用,你可以看到第一个参数SystemIntPtr ptr,

在WIN32中,其实是一个窗口句柄,即光标所在窗口的窗口句柄。

问题:你无法获取所有光标所在窗口句柄!

所以必须使用sendkey;

命令行的光标(ConsoleCursor)其实就是一个另类的插入符(Caret)。插入符是什么呢?当你在记事本打字的时候,那个一闪一闪的竖线就叫做插入符。插入符的作用有多大呢?没有了插入符,假如你正在输入第二十个字,突然发现第一个字打错了,那么你得把正确的十九个字和错误的第一个字全删了,再把所有东西重新打一遍。然而,系统没有给任何命令是可以 *** 作命令行光标的,光标的存在实在是名存实亡,完全不能发挥光标的真正用途。本教程的目的,就是让大家学会在命令行程序中控制光标。

一、CONSOLE_CURSOR_INFO 结构体

CONSOLE_CURSOR_INFO 结构体中包含了关于命令行光标的一些信息,是否显示和光标大小两个信息。通过更改这个结构体,再赋给命令行,就可以实现想要的一些效果了。

基本思路:

首先先读取命令行现在的 CONSOLE_CURSOR_INFO 结构体信息,需要用到API函数GetConsoleCursorInfo。GetConsoleCursorInfo 需要用到输出句柄,可以通过API函数GetStdHandle获得。

然后改变结构体信息,再使用API函数SetConsoleCursorInfo

例:

隐藏光标:

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_CURSOR_INFO cci;

GetConsoleCursorInfo(hOut,&cci);

ccibVisible=false;

SetConsoleCursorInfo(hOut,&cci);

二、控制台光标的位置

现在能够控制光标的样式了,但对于批处理来说还远远不够。大部分强大的第三方工具都有设置和获得光标位置的功能,这节我们就来讨论如何实现。

设置光标位置需要用到API函数SetConsoleCursorPosition,需要的参数还是输出句柄,和欲设置的坐标。坐标用COORD结构体就可以了。

例:

将光标移动到(5,3):

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

COORD pos;

posX=5;

posY=3;

SetConsoleCursorPosition(hOut,pos);

获取光标的位置,没有专用的API函数。我们需要通过另一个API函数GetConsoleScreenBufferInfo来获取。其中,GetConsoleScreenBufferInfo的参数分别为输出句柄以及CONSOLE_SCREEN_BUFFER_INFO结构体的指针。CONSOLE_SCREEN_BUFFER_INFO结构体中包含了许多控制台缓冲区的属性,其中我们需要的是一个名为dwCursorPosition的COORD结构体,包含了光标的位置。

例:

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_SCREEN_BUFFER_INFO bInfo;

GetConsoleScreenBufferInfo(hOut, &bInfo);

上面的例子,bInfodwCursorPosition就是当前的坐标

以上就是关于易语言,取窗口句柄并 *** 作全部的内容,包括:易语言,取窗口句柄并 *** 作、我用VC C++: handle句柄起什么作用了、C#中句柄的含义等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9489838.html

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

发表评论

登录后才能评论

评论列表(0条)

保存