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#怎么获取句柄窗口标题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)