C#如何通过进程名称获取指定窗口的句柄,通过该句柄获取该窗口的标题

C#如何通过进程名称获取指定窗口的句柄,通过该句柄获取该窗口的标题,第1张

The

GetProcessHandleFromHwnd

function

retrieves

a

process

handle

from

a

window

handle

HANDLE

WINAPI

GetProcessHandleFromHwnd(

HWND

hwnd,

);

这个函数通过窗口句柄获得进程句柄。有了进程句柄,PID是不是就知道怎么获得了?什么?不知道?那我告诉你,GetProcessId可以通过进程句柄获得进程ID:

DWORD

WINAPI

GetProcessId(

__in

HANDLE

Process

);

你是想模拟按键么

首先要获得窗口的句柄 用下面的函数应该能找到:

FindWindow根据类名\窗口标题寻找窗口

遍历顶层窗口EnumWindows

遍历窗口回调函数EnumWindowProc

遍历父窗口的所有子窗口EnumChildWindows

返回父窗口Point处的子窗口ChildWindowFromPoint

ChildWindowFromPointEx多一个参数UINT来忽略不可见无效透明的子窗口

获取与指定窗口具有莫种关系的窗口GetWindow

获取父窗口的子窗口中Z序最大的子窗口GetTopWindow

获取指定窗口相同层次Z序差1的窗口GetNextWindow

获取桌面窗口句柄GetDesktopWindow

用SendMessage函数不需要窗口标题的,只要句柄

LRESULT SendMessage(

HWND hWnd, // handle of destination window

UINT Msg, // message to send

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

);

或者用keybd_event函数,要先用SetForegroundWindow函数把目标窗口设置成前台窗口

VOID keybd_event(

BYTE bVk, // virtual-key code

BYTE bScan, // hardware scan code

DWORD dwFlags, // flags specifying various function options

DWORD dwExtraInfo // additional data associated with keystroke

);

补充:

第一个:我进入某个游戏,用CE查到内存地址后,退出游戏,再查内存地址,两个内存地址是不一样的,有什么办法可以让每次的内存地址都一样?或者说下别的解决方法?

不让每次的内存地址都一样应该是做不到的,游戏每次运行由系统分配内存,哪能让你控制啊。

第二个:我想让鼠标在内存数值到某一个数值时,鼠标移动到某点进行鼠标 *** 作,该怎么写源代码?

定义一个指针变量p,类型根据你需要的数值而定

p=该内存地址

if(p==该数值)

{

//mousemove

}

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

public static extern int GetWindowText (

int hwnd,

string lpString,

int cch

);

调用的时候这样:

StringBuilder s = new StringBuilder(512);

int i = GetWindowText(句柄, s, sCapacity);

MessageBoxShow(sToString());

'创建一个列表框和一个按钮

'api函数定义

private

declare

function

getwindowtext

lib

"user32"

alias

"getwindowtexta"

(byval

hwnd

as

long,

byval

lpstring

as

string,

byval

cch

as

long)

as

long

private

declare

function

showwindow

lib

"user32"

(byval

hwnd

as

long,

byval

ncmdshow

as

long)

as

long

private

declare

function

getwindow

lib

"user32"

(byval

hwnd

as

long,

byval

wcmd

as

long)

as

long

private

declare

function

getclassname

lib

"user32"

alias

"getclassnamea"

(byval

hwnd

as

long,

byval

lpclassname

as

string,

byval

nmaxcount

as

long)

as

long

const

gw_hwndfirst

=

0

const

gw_hwndnext

=

2

private

sub

command1_click()

dim

s

as

long

dim

a

as

string

a

=

space(255)

s

=

getwindow(mehwnd,

gw_hwndfirst)

'获得句柄

getwindowtext

s,

a,

255

'获得标题

dim

ab

as

string

255

getclassname

s,

ab,

255

'获得类名

dim

classname

as

string

classname

=

stripterflag(ab)

'stripterflag是一个自定义函数,后面有代码,用于去处结束符

if

ucase(classname)

=

"notepad"

then

list1additem

a

list1itemdata(list1listcount

-

1)

=

s

end

if

do

while

s

doevents

s

=

getwindow(s,

gw_hwndnext)

'获得句柄

getwindowtext

s,

a,

255

'获得标题

getclassname

s,

ab,

255

'获得类名

classname

=

stripterflag(ab)

if

ucase(classname)

=

"notepad"

then

list1additem

a

list1itemdata(list1listcount

-

1)

=

s

end

if

loop

end

sub

private

sub

list1_click()

msgbox

list1itemdata(list1listindex)

'单击列表框获得句柄

end

sub

代码:(直接复制粘贴到易语言即可调试)

版本 2

支持库 eAPI

程序集 窗口程序集_启动窗口

子程序 _按钮1_被单击

隐藏目标窗口 (“《鹿鼎记》”)

子程序 隐藏目标窗口, 整数型, , 隐藏所有存在指定标题的窗口,返回窗口数

参数 窗口模糊标题, 文本型

局部变量 窗口句柄数组, 文本型, , "0"

局部变量 i, 整数型

局部变量 窗口数量, 整数型

局部变量 窗口标题, 文本型

窗口句柄数组 = 取所有窗口列表 ()

计次循环首 (取数组成员数 (窗口句柄数组), i)

    窗口标题 = 取窗口标题 (到数值 (窗口句柄数组 [i]))

    如果真 (寻找文本 (窗口标题, 窗口模糊标题, , 假) > 0)

        窗口数量 = 窗口数量 + 1

        隐藏窗口 (到数值 (窗口句柄数组 [i]), 0)

    如果真结束

计次循环尾 ()

返回 (窗口数量)

把每个相同类名的子窗口改不同窗口标题,下次查找时,可以直接找你编辑的标题

其实有用的就三句:

Hwnd = PluginWindowFind(0, "无标题 - 记事本")

//找到父窗口

HwndEx = PluginWindowFindEx(Hwnd, 0, "Button", 0)

//根据子窗口类名找到子窗口

Call PluginWindowSetText(HwndEx,"AJJL")

//把这个子窗口名字改为AJJL

第二行代码有错,最后少了个数字0,修改如下

但是执行的时候必须保证目标窗口条件都符合,否则将返回空值,是输不出信息来的

Plugin Hwnd5 = WindowFind(0, "验证")

Plugin HwndEx = WindowFindEx(Hwnd5, 0, "Static", 0)

//得到窗口句柄的标题

Plugin Text = WindowGetText(HwndEx)

SayString Text

以上就是关于C#如何通过进程名称获取指定窗口的句柄,通过该句柄获取该窗口的标题全部的内容,包括:C#如何通过进程名称获取指定窗口的句柄,通过该句柄获取该窗口的标题、按键精灵8,获取句柄有些只有窗口类名,没有窗口标题,该怎么办、C#怎么获取句柄窗口标题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存