FindWindow函数详解
findwindow 置顶函数用法 -回复
findwindow 置顶函数用法-回复标题:破解Windows程序的“置顶”功能——深入探究findwindow置顶函数用法引言:在Windows操作系统中,置顶(topmost)是一个重要的功能,通常被用于将某个窗口置于其他所有窗口的前面,以保持其始终可见。
而findwindow置顶函数则是一种破解置顶功能的方法。
本文将一步一步地探究findwindow置顶函数的用法,帮助读者了解如何实现置顶效果以及相关的安全问题。
第一部分:了解findwindow置顶函数的基础知识1.1 理解findwindow函数findwindow函数是Windows API提供的一种用于搜索窗口的函数,可以通过窗口的类名或标题来查找窗口句柄(handle)。
一旦找到相应的窗口句柄,就可以对窗口进行各种操作,包括将其置顶。
(此处可适当展开关于findwindow函数更多的介绍,如参数的说明等)1.2 了解置顶功能的原理在Windows操作系统中,窗口分为普通窗口和置顶窗口两种类型。
普通窗口是默认的类型,它们根据层次结构来进行显示。
相比之下,置顶窗口则以特殊的方式进行处理,使其始终显示在其他窗口的前面。
为了实现置顶效果,可以通过修改窗口的窗口风格(window style)来将其置顶。
窗口风格是窗口的一些属性,可以通过窗口句柄进行设置或修改。
第二部分:实现findwindow置顶函数的步骤2.1 获取目标窗口句柄首先,需要通过findwindow函数来获取目标窗口的句柄。
句柄是一个唯一标识窗口的值,可以用于后续的操作。
2.2 修改窗口风格通过修改目标窗口的窗口风格,可以将其置顶。
具体来说,可以使用SetWindowLong(窗口句柄, GWL_STYLE, 新窗口风格)函数来实现。
其中,GWL_STYLE表示需要修改的窗口风格,新窗口风格是一个由特定标志位组成的数值。
2.3 设置置顶属性将目标窗口的置顶属性设置为真,即WS_EX_TOPMOST。
FindWindow查找窗口
FindWindow查找窗⼝Declare Function SendMessage Lib "user32" Alias "SendMessageA" _(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, _ByVal lParam As Long) As LongDeclare Function FindWindow Lib "user32" Alias _"FindWindowA" (ByVal lpClassName As String, ByVal _lpWindowName As String) As LongDeclare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As LongPrivate Const WM_SETREDRAW = &HBPrivate Sub tryThis()Dim h As Longh = FindWindow("xlMain", vbNullString)LockWindowUpdate Application.VBE.MainWindow.hwndCall SendMessage(h, WM_SETREDRAW, 0, 0)Application.SendKeys "Range", TrueApplication.SendKeys "~", TrueApplication.Goto Reference:="tryThis"On Error Resume Next 'in case it's not thereWith ThisWorkbook.VBProject.VBComponents("Module2").CodeModule.DeleteLines 1, .CountOfLinesEnd WithCall SendMessage(h, WM_SETREDRAW, 1, 0)Application.VBE.MainWindow.Visible = FalseLockWindowUpdate 0ThisWorkbook.Close TrueEnd SubFindWindow(lpClassName, {窗⼝的类名}lpWindowName: PChar {窗⼝的标题}): HWND; {返回窗⼝的句柄; 失败返回 0}//FindWindowEx ⽐ FindWindow 多出两个句柄参数:FindWindowEx(Parent: HWND; {要查找⼦窗⼝的⽗窗⼝句柄}Child: HWND; {⼦窗⼝句柄}ClassName: PChar; {}WindowName: PChar {}): HWND;{如果 Parent 是 0, 则函数以桌⾯窗⼝为⽗窗⼝, 查找桌⾯窗⼝的所有⼦窗⼝;如果是 HWND_MESSAGE, 函数仅查找所有消息窗⼝;⼦窗⼝必须是 Parent 窗⼝的直接⼦窗⼝;如果 Child 是 0, 查找从 Parent 的第⼀个⼦窗⼝开始;如果 Parent 和 Child 同时是 0, 则函数查找所有的顶层窗⼝及消息窗⼝.}//测试1: 试着找找新建程序主窗⼝的句柄varh: HWND;begin{现在我们知道窗⼝的标题是: Form1、窗⼝的类名是: TForm1}h := FindWindow('TForm1', 'Form1');ShowMessage(IntToStr(h)); {656180; 这是随机, 每次启动窗⼝肯定不⼀样} {假如不知道类名}h := FindWindow(nil, 'Form1');ShowMessage(IntToStr(h)); {656180}{假如不知道标题名}h := FindWindow('TForm1', nil);ShowMessage(IntToStr(h)); {656180}{其实这个窗⼝的句柄不就是 Self.Handle 吗}ShowMessage(IntToStr(Handle)); {656180}end;//测试2: 找计算器窗⼝的句柄(先打开计算器)varh: HWND;begin{如果不是简体中⽂系统, 这样可能不灵}h := FindWindow(nil, '计算器');ShowMessage(IntToStr(h)); {1508334}{最好这样, 但你得提前知道计算器窗⼝的类名是: SciCalc}h := FindWindow('SciCalc', nil);ShowMessage(IntToStr(h)); {1508334}end;。
findwindow 函数的用法
findwindow 函数的用法
`FindWindow`函数是Windows API中的一个函数,用于查找指定窗口的句柄(handle)。
它可以通过窗口的类名或窗口标题来匹配窗口并返回其句柄。
以下是FindWindow函数的使用方法:
```python
import ctypes
# 加载User32.dll库
user32 = er32
# 定义需要查找的窗口类名和窗口标题
class_name = "窗口类名"
window_title = "窗口标题"
# 使用FindWindow函数搜索匹配的窗口
window_handle = user32.FindWindowW(class_name, window_title)
# 检查是否找到了匹配的窗口
if window_handle == 0:
print("未找到匹配的窗口")
else:
print("窗口句柄: ", window_handle)
```
上述代码使用`ctypes`模块加载了`User32.dll`库,并调用了其`FindWindowW`函数来查找指定窗口。
`class_name`参数用于指定窗口的类名,可以通过工具如Spy++来获取窗口的类名。
`window_title`参数用于指定窗口的标题。
如果找到了匹配的窗口,`FindWindow`函数会返回该窗口的句柄(一个整数值),否则返回0表示未找到。
你可以根据需要对找到的窗口句柄进行后续操作,如发送消息、获取窗口位置等。
用例子说明FindWindow的用法
FindWindow
函数原型:
CWnd::FindWindow
static CWnd* PASCAL FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName );
参数表:
IpClassName :指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。
如果该参数为一个成员,则它必须为前次调用theGlobafAddAtom函数产生的全局成员。
该成员为16位,必须位于IpClassName的低16位,高位必须为0。
IpWindowName:指向一个指定了窗口名(窗口标题)的空结束字符串。
如果该参数为空,则为所有窗口全匹配。
返回值:
如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
如果函数执行失败,则返回值为NULL 。
可以通过调用GetLastError函数获得更加详细的错误信息。
例子:
建立基于对话框的应用程序工程名FindWindowFun,系统建立ID为:IDD_FINDWINDOWFUN_DIALOG,标题为:FindWindowFun的对话框窗口。
void CFindWindowFunDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CWnd* phwnd=FindWindow(NULL,"FindWindowfun");
然后就可以用Phwnd操作本窗口了
.
.
.
}。
vb获取句柄的几种方式
vb获取句柄的几种方式获取句柄是在VB中常见的操作之一,句柄可以用于标识和操作窗口、控制界面元素等。
下面将介绍几种常见的获取句柄的方式。
1. 使用FindWindow函数FindWindow函数可以根据窗口类名和窗口标题来查找窗口句柄。
可以使用以下代码获取窗口句柄:```vbDim hwnd As Longhwnd = FindWindow("窗口类名", "窗口标题")```其中,窗口类名是指窗口所属的类的名称,窗口标题是窗口上显示的文本。
2. 使用FindWindowEx函数FindWindowEx函数可以在指定窗口下查找符合条件的子窗口句柄。
可以使用以下代码获取子窗口句柄:```vbDim hwndParent As LongDim hwndChild As LonghwndParent = FindWindow("父窗口类名", "父窗口标题") hwndChild = FindWindowEx(hwndParent, 0, "子窗口类名", "子窗口标题")```其中,hwndParent是父窗口的句柄,hwndChild是子窗口的句柄。
3. 使用GetForegroundWindow函数GetForegroundWindow函数可以获取当前活动窗口的句柄。
可以使用以下代码获取当前活动窗口句柄:```vbDim hwnd As Longhwnd = GetForegroundWindow()```该函数不需要任何参数,直接调用即可。
4. 使用GetDesktopWindow函数GetDesktopWindow函数可以获取桌面窗口的句柄。
可以使用以下代码获取桌面窗口句柄:```vbDim hwnd As Longhwnd = GetDesktopWindow()```该函数不需要任何参数,直接调用即可。
FindWindow函数详解
C#中使用FindWindow函数详解FindWindow 用来根据类名和窗口名来得到窗口句柄的。
但是这个函数不能查找子窗口,也不区分大小写。
如果要从一个窗口的子窗口中查找需要使用FindWindowEX。
1.在C#中使用方法如下:[DllImport("User32.dll", EntryPoint = "FindWindow")]private static extern IntPtr FindWindow(string lpClassName,string lpWindowName);[DllImport("User32.dll", EntryPoint = "FindWindowEx")]private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName); [DllImport("User32.dll", EntryPoint = "FindWindow")]private static extern IntPtr FindWindow(string lpClassName,string lpWindowName);[DllImport("User32.dll", EntryPoint = "FindWindowEx")]private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName);2. 实例参考:IntPtr hWnd = FindWindow(null, "test Demo");这样会查找所有title是"test Demo"的窗口。
FINDWINDOWEX参数详解
StringBuilder stbf_WndStr = new StringBuilder();//定义存储String的Butter stbf_WndStr.Capacity = 60; //1) 该例子一直无法找到Exit按键,因为Name不为null,而是等于"",null和""是有区别的 tbDisplay.Text = tbDisplay.Text + "\r\n\r\n1) 此处寻找不到Exit的按键,因为Name不为null,而是等 于\"\""; ExitWnd = FindWindowEx(ParenthWnd, new IntPtr(0), lpszClass_Submit, ""); if (!ExitWnd.Equals(IntPtr.Zero)) { GetWindowText(ExitWnd, stbf_WndStr, stbf_WndStr.Capacity - 1); tbDisplay.Text = tbDisplay.Text + "\r\n实验内容: ExitWnd.text = " + stbf_WndStr.ToString(); } else { tbDisplay.Text = tbDisplay.Text + "\r\nErr: ExitWnd = null!!!"; } //2) 寻找到Exit的按键,因为Name包含正确的名字"Exit" tbDisplay.Text = tbDisplay.Text + "\r\n\r\n2) 寻找到Exit的按键,因为Name包含正确的名字 \"Exit\""; ExitWnd = FindWindowEx(ParenthWnd, new IntPtr(0), lpszClass_Submit, "Exit"); if (!ExitWnd.Equals(IntPtr.Zero)) { GetWindowText(ExitWnd, stbf_WndStr, stbf_WndStr.Capacity - 1); tbDisplay.Text = tbDisplay.Text + "\r\n实验内容: ExitWnd.text = " + stbf_WndStr.ToString(); } else
C语言windows.h库的常用函数(一)
C语言windows.h库的常用函数(一)1:FindWindow函数该函数可以通过窗口类名或者窗口标题名来查找特定窗口句柄,返回值是窗口的句柄(在Windows中,句柄是一个系统内部数据结构的引用。
例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口最小化等等。
实际上许多Windows API函数把句柄作为它的第一个参数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等,不仅仅局限于窗口函数。
换句话说,句柄是一种内部代码,通过它能引用受系统控制的特殊元素,如窗口、位图、图标、内存块、光标、字体、菜单等。
)函数用法#include 'stdafx.h'#include<windows.h>int main() {HWND window; //定义一个窗口句柄变量,用来储存窗口句柄/*FindWindow('这里填窗口类名','这里填窗口标题名')窗口类名和窗口标题名可以只填一个,不填的用NULL填充*/window = FindWindow(NULL,'文本.txt - 记事本'); //查找标题为'文本.txt - 记事本'的窗口SendMessage(window,WM_CLOSE,0,0); //向窗口发送关闭指令return 0;}2:SendMessage函数刚刚在第一个例子里面已经用到了SendMessage函数,这个函数的功能是向句柄对应窗口发送指令函数用法#include 'stdafx.h'#include<windows.h>int main() {POINT mouse;HWND window;while (1) {GetCursorPos(&mouse);window = WindowFromPoint(mouse);/*SendMessage(窗口句柄,消息类型,消息附带内容,消息附带内容) 比如我这里选定的消息类型是WM_CHAR消息附带内容为WPARAM('a')所以消息附带内容就是模拟键盘向窗口输入a*/SendMessage(window,WM_CHAR,WPARAM('a'),0);Sleep(100);}return 0;}3:WindowFromPoint函数在第二个例子中我们使用了一个叫做WindowFromPoint的函数,这个函数的功能是通过鼠标点击获得被点击窗口的句柄函数用法#include 'stdafx.h'#include<windows.h>int main() {POINT mouse; //定义一个结构体变量储存鼠标位置HWND window;while (1) {GetCursorPos(&mouse); //获取到当前鼠标位置/*WindowFromPoint(鼠标位置变量名)*/ window = WindowFromPoint(mouse); SendMessage(window,WM_CLOSE,0,0); Sleep(100);}return 0;}。
常用的API函数
第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄函数的定义:HWND WINAPI FindWindow(LPCSTR lpClassName ,LPCSTR lpWindowName);第一个参数填窗口的类名,第二个填窗口的标题名,其实是不需要同时填两个参数的,也就是说,你只要知道窗口的类名或窗口的标题就可以了,没有的那个就用NULL代替。
比如现在有一个窗口名为"无标题.txt - 记事本"的记事本程序。
那么我就可以用上面的函数获得这个窗口的句柄,那获得了这个窗口的句柄我可以干什么呢?作用可大了,因为很多操作窗口的函数,都需要窗口句柄作参数,如移动、改变窗口大小的MoveWindow函数,在这里举个例子,大家就更能体会到这个FindWindow的用法、用处。
FindWindow例子:已知一个窗口名称,写一个程序关闭该窗口,假设当前电脑正有一个窗口名为"无标题.txt - 记事本"的记事本程序运行#include<windows.h> //API函数的头文件int main(){HWND wnd; //定义一个窗口句柄变量,用以存储找到的窗口句柄wnd=FindWindow(NULL,"无标题.txt - 记事本"); //获得窗口名为"无标题.txt - 记事本"的窗口句柄SendMessage(wnd,WM_CLOSE,0,0); //调用SendMessage函数,发送一个WM_CLOSE(关闭)消息给wnd窗口句柄。
return0;}如果要根据窗口类名来获得窗口句柄话,只要给函数的第一个参数填类名,第二个参数窗口名填NULL,即可,用Spy++可查看窗口类名。
第二个:SendMessage根据窗口句柄发送一个消息给窗口函数定义:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);第一个参数是窗口句柄,第二参数个是消息类型,下面的消息表列举了所有消息,第三,四个参数是消息附带信息,解释依赖于消息类型,比如一个字符消息(WM_CHAR),那么第三个参数就储存有一个字符的ASCII码。
在VB.NET中使用FindWindow查找窗口和获得句柄
在中使用FindWindow查找窗口和获得句柄
windows窗口句柄是32位,在中,Integer表示32位,Long表示64位。
这是调用API函数时需要注意的地方。
下面是正确的函数声明和设定一个参数为空的例子:
Private Declare Auto Function FindWindow Lib "user32" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Integer
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim hWnd As Integer
hWnd = FindWindow(vbNullString, "收件箱- Outlook Express")
If hWnd Then
MsgBox("找到Outlook Express窗口!")
Else
MsgBox("未找到Outlook Express窗口!")
End If
End Sub
FindWindow函数是比较容易调用的,因为两个参数都是只读的,不会被API修改,所以在VB6和中的差别只在于数据类型的不同。
而对于GetSystemDirectory这样的函数就不同了,因为参数是可修改的,而在中String是不可以修改的,所以必须借助于StringBuilder类才能调用。
findwindow函数用法
findwindow函数用法
FindWindow函数是Windows API函数,它用于搜索主窗口,根据
窗口的类名和窗口名称来确定窗口的句柄。
该函数的主要用法和声明如下:
HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName); lpClassName:指针,指向一个 null结尾的字符串,该字符串指出要
搜索类名。
lpWindowName:指针,指向一个 null结尾的字符串,该字符串指出要
搜索的窗口的标题。
成功:函数返回搜索到的窗口的句柄。
失败:返回NULL。
FindWindow函数主要应用在三个场景中:
1、监控系统:应用程序可以使用FindWindow函数来确定桌面上的其
它应用程序已打开的窗口,并对此窗口进行监控。
2、窗口控制:利用FindWindow可以获得其它应用程序中的窗口句柄,以便对该窗口进行控制,如关闭窗口,改变窗口位置等。
3、模拟按键:利用FindWindow可以获取其它应用程序中的窗口句柄,然后使用SendMessage函数向该句柄发送模拟按键命令。
FindWindow函数是比较重要的系统API函数,能够帮助开发者从
本质上控制操作系统界面,当开发可移植的应用程序的时候特别有用。
Delphi中FindWindow和FindWindowEx的语法和用法
Delphi中FindWindow和FindWindowEx的语法和⽤法FindWindow(lpClassName, {窗⼝的类名}lpWindowName: PChar {窗⼝的标题}): HWND; {返回窗⼝的句柄; 失败返回 0}//FindWindowEx ⽐ FindWindow 多出两个句柄参数:FindWindowEx(Parent: HWND; {要查找⼦窗⼝的⽗窗⼝句柄}Child: HWND; {⼦窗⼝句柄}ClassName: PChar; {}WindowName: PChar {}): HWND;{如果 Parent 是 0, 则函数以桌⾯窗⼝为⽗窗⼝, 查找桌⾯窗⼝的所有⼦窗⼝;如果是 HWND_MESSAGE, 函数仅查找所有消息窗⼝;⼦窗⼝必须是 Parent 窗⼝的直接⼦窗⼝;如果 Child 是 0, 查找从 Parent 的第⼀个⼦窗⼝开始;如果 Parent 和 Child 同时是 0, 则函数查找所有的顶层窗⼝及消息窗⼝.}//测试1: 试着找找新建程序主窗⼝的句柄varh: HWND;begin{现在我们知道窗⼝的标题是: Form1、窗⼝的类名是: TForm1}h := FindWindow('TForm1', 'Form1');ShowMessage(IntToStr(h)); {656180; 这是随机, 每次启动窗⼝肯定不⼀样}{假如不知道类名}h := FindWindow(nil, 'Form1');ShowMessage(IntToStr(h)); {656180}{假如不知道标题名}h := FindWindow('TForm1', nil);ShowMessage(IntToStr(h)); {656180}{其实这个窗⼝的句柄不就是 Self.Handle 吗}ShowMessage(IntToStr(Handle)); {656180}end;//测试2: 找计算器窗⼝的句柄(先打开计算器)varh: HWND;begin{如果不是简体中⽂系统, 这样可能不灵}h := FindWindow(nil, '计算器');ShowMessage(IntToStr(h)); {1508334}{最好这样, 但你得提前知道计算器窗⼝的类名是: SciCalc}h := FindWindow('SciCalc', nil);ShowMessage(IntToStr(h)); {1508334}end;。
c语言findwindow函数
c语言findwindow函数C语言是一门广泛应用于各个领域的高级编程语言,具有高效、灵活、跨平台等优点。
其中,FindWindow函数是C语言中常用的函数之一,它主要用于在Windows操作系统中查找指定窗口的句柄。
首先,需要明确什么是“句柄”。
在Windows操作系统中,每个窗口都有一个唯一标识符,称为窗口句柄。
程序可以通过窗口句柄找到对应的窗口,并对其进行操作。
FindWindow函数可以接受两个参数,分别是窗口类名和窗口标题。
它的函数原型如下:```CHWND FindWindow(LPCSTR lpClassName, // 窗口类名LPCSTR lpWindowName // 窗口标题);```其中,lpClassName和lpWindowName都是指向字符串的指针。
如果需要查找指定类名和标题的窗口,就需要将它们传递给FindWindow 函数。
使用FindWindow函数的过程如下:1. 打开Visual Studio或其他C语言集成环境,创建一个新的控制台应用程序工程。
2. 在程序中引用Windows.h头文件,它包含了大量的Windows API函数和数据类型的定义。
在头文件中添加以下代码:```C#include <Windows.h>```3. 接下来,在主函数中使用FindWindow函数查找指定窗口。
例如,在查找记事本程序窗口时,可以这样编写代码:```Cint main(){HWND hwnd = FindWindow("Notepad", NULL);if(hwnd == NULL){printf("未找到窗口!\n");}else{printf("窗口句柄:%d\n", hwnd);}return 0;}```上述代码中,使用了"Notepad"作为窗口类名,NULL表示窗口标题为空。
C利用句柄操作窗口
C利用句柄操作窗口
在C语言中,可以使用句柄(handle)来操作窗口。
句柄是一个唯一标识符,用来表示窗口或其他资源的引用。
以下是一些常见的句柄操作窗口的函数:
1. GetActiveWindow(:获取当前活动窗口的句柄。
2. FindWindow(lpClassName, lpWindowName):根据类名和窗口名称查找窗口,并返回窗口句柄。
3. SendMessage(hWnd, Msg, wParam, lParam):向指定窗口发送消息。
4. MoveWindow(hWnd, x, y, width, height, repaint):移动指定窗口的位置和大小。
5. ShowWindow(hWnd, nCmdShow):显示或隐藏指定窗口。
以下是一个示例代码,演示如何使用句柄操作窗口:
```c
#include <windows.h>
int mai
HWND hwnd = FindWindow(NULL, "窗口标题"); // 查找窗口句柄
if (hwnd == NULL)
printf("未找到窗口\n");
return 1;
}
//移动窗口的位置和大小
MoveWindow(hwnd, 100, 100, 500, 300, TRUE);
//发送消息给窗口
SendMessage(hwnd, WM_CLOSE, 0, 0);
return 0;
```
注意,上述示例代码是在Windows平台下使用的。
如果你是在其他操作系统下使用C语言,可能需要使用对应的窗口操作函数。
区别FindWindow,Fin...
区别FindWindow,Fin...1. FindWindow()HWND FindWindow(LPCSTR lpClassName, LPCSTR lpWindowName);功能:查找与指定窗口类名和窗口名称相匹配的顶级窗口,这个函数不搜索子窗口。
参数:如果lpClassName为null,将会寻找任何与lpWindowName参数匹配的窗口,如果lpWindowName为NULL,则匹配所有窗口名。
返回值:成功返回窗口句柄。
否则返回NULL。
2.FindWindowEx()HWNDWINAPIFindWindowExW(_In_opt_ HWND hWndParent,_In_opt_ HWND hWndChildAfter,_In_opt_ LPCWSTR lpszClass,_In_opt_ LPCWSTR lpszWindow);功能:在窗口列表中寻找与指定条件相符的第一个子窗口。
该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。
这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。
在查找时不区分大小写。
参数:(1)hwndParent:要查找的子窗口所在的父窗口的句柄如果设置了hwndParent,则表示从这个hwndParent指向的父窗口中搜索子窗口。
如果hwndParent为0 ,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。
如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。
(2)hwndChildAfter :子窗口句柄。
查找从在Z序中的下一个子窗口开始。
子窗口必须为hwndParent窗口的直接子窗口而非后代窗口。
如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。
如果hwndParent 和hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。
(3)lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。
Findwindow函数与FindWindowEx函数用法
Findwindow函数与FindWindowEx函数用法FindWindow(lpClassName, {窗口的类名}lpWindowName: PChar {窗口的标题}): HWND; {返回窗口的句柄; 失败返回0}//FindWindowEx比FindWindow多出两个句柄参数:FindWindowEx(Parent: HWND; {要查找子窗口的父窗口句柄}Child: HWND; {子窗口句柄}ClassName: PChar; {}WindowName: PChar {}): HWND;{如果Parent 是0, 则函数以桌面窗口为父窗口, 查找桌面窗口的所有子窗口; 如果是HWND_MESSAGE, 函数仅查找所有消息窗口;子窗口必须是Parent 窗口的直接子窗口;如果Child 是0, 查找从Parent 的第一个子窗口开始;如果Parent 和Child 同时是0, 则函数查找所有的顶层窗口及消息窗口.}--------------------------------------------------------------------------------//测试1: 试着找找新建程序主窗口的句柄varh: HWND;begin{现在我们知道窗口的标题是: Form1、窗口的类名是: TForm1}h := FindWindow('TForm1', 'Form1');ShowMessage(IntToStr(h)); {656180; 这是随机, 每次启动窗口肯定不一样}{假如不知道类名}h := FindWindow(nil, 'Form1');ShowMessage(IntToStr(h)); {656180}{假如不知道标题名}h := FindWindow('TForm1', nil);ShowMessage(IntToStr(h)); {656180}{其实这个窗口的句柄不就是Self.Handle吗}ShowMessage(IntToStr(Handle)); {656180}end;--------------------------------------------------------------------------------//测试2: 找计算器窗口的句柄(先打开计算器)varh: HWND;begin{如果不是简体中文系统, 这样可能不灵}h := FindWindow(nil, '计算器');ShowMessage(IntToStr(h)); {1508334}{最好这样, 但你得提前知道计算器窗口的类名是: SciCalc} h := FindWindow('SciCalc', nil);ShowMessage(IntToStr(h)); {1508334}end;。
MFC注册窗口类以及FindWindow按窗口类名查询
MFC注册窗口类以及FindWindow按窗口类名查询分类:经验2011-07-14 16:14 2033人阅读评论(2) 收藏举报mfcdialogsearchbuttonclass编译器呵呵,最近在研究SendMessage函数,其中需要用到m_hWnd,之后延伸着又尝试获得窗口的句柄,于是遇到了FindWindow函数,原型如下:HWND FindWindow(LPCSTR lpClassName, //输入窗口的类名,其实需要是注册过的类名才行,否则是要报错或者查找失败的。
LPCSTR lpWindowName, //输入窗口的名称,就是窗口上面蓝色的那行玩意儿写的字。
);对于这个函数,如果按照窗口的名称查找,相信大家都非常简单,因为名称在rc文件里,是已经注册过的了(具体的待会给大家贴代码就能看明白了)。
但如果大家使用我们自己定义的窗口名称查询,则往往会失败,甚至是报错!尤其是在使用SendMessage告知另一个窗口退出时,会导致内存泄露!对于这样的情况,编译器不一定能告诉各位,所以,如果没有亲自注册窗口类的经验的话,建议大家如果要使用FindWindow函数获得窗口句柄的话,尽量通过窗口的名称查询。
言归正传,出现之前的那种严重情况的原因,是在于MFC并没有一个一个帮大家将我们派生的窗口类进行注册,而是使用的默认窗口类的方式,具体渊源似乎俺也说不大清楚(嘿嘿,见笑了。
),咱只能引用这一段话:“在早期的MFC中(MFC 4.0之前的版本)提供了大量的预定以的窗口类,但这些窗口类在默认下已经不再被提供了,因为涉及到多版本的技术问题(多个版本的MFC加载在同一个地址空间),如涉及到的一个实际的问题就是MFC应用程序和OLE控件都会用到MFC 的DLLs。
”而默认的窗口类,一般类名都是“#32770(Dialog)”,这个大家通过Spy++检测窗口的时候就可以看到。
拿我这边的一个小程序为例:默认的类名是#32770(Dialog)而红线之前的,就是“注册”过的窗口的名称,这个是MFC自动做了的。
findwindow 置顶函数用法
findwindow 置顶函数用法摘要:1.FindWindow 函数的定义与功能2.FindWindow 函数的参数3.FindWindow 函数的返回值4.FindWindow 函数的用法示例5.FindWindow 函数的注意事项正文:FindWindow 函数是Windows API 中的一个重要函数,主要用于查找窗口。
在许多编程任务中,如编写桌面工具、游戏辅助等,都需要用到FindWindow 函数来获取或操作窗口。
下面,我们来详细了解一下FindWindow 函数的用法。
一、FindWindow 函数的定义与功能FindWindow 函数是Windows API 中的一个函数,其定义如下:HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName);该函数的作用是查找指定窗口类名和窗口名的窗口,并返回窗口句柄。
二、FindWindow 函数的参数FindWindow 函数接收两个参数,均为字符串指针。
1.lpClassName:指定窗口的类名。
这是一个以空字符结尾的字符串,通常是预定义的窗口类名。
2.lpWindowName:指定窗口的名称。
这是一个以空字符结尾的字符串,通常是自定义的窗口名称。
三、FindWindow 函数的返回值FindWindow 函数的返回值为找到的窗口的句柄。
如果未找到指定的窗口,则返回NULL。
四、FindWindow 函数的用法示例以下是一个简单的FindWindow 函数用法示例:```cpp#include <iostream>#include <Windows.h>int main(){HWND hwnd = FindWindow(L"Notepad", NULL); // 查找名为“记事本”的窗口if (hwnd!= NULL){std::cout << "找到窗口,句柄:" << hwnd << std::endl;}else{std::cout << "未找到窗口" << std::endl;}return 0;}```五、FindWindow 函数的注意事项在使用FindWindow 函数时,需要注意以下几点:1.指定的窗口类名和窗口名应正确无误,否则可能查找不到窗口。
C#关于外挂汉化的一些思考(API函数FindWindow,FindWindowEx,Se。。。
C#关于外挂汉化的⼀些思考(API函数FindWindow,FindWindowEx,Se。
这次我们试着运⽤C#的API函数去修改别的程序的标题⽂本(适⽤范围C#)其实这是FindWindow,FindWindowEx,SendMessage的应⽤举例之⼀也就是所谓的外挂汉化.附:Windows消息⼤全需要⽤到的⼯具是Microsoft Visual C#Spy++ Lite⽽我们今天要尝试修改的程序就是GTA4Center(被搞过很多次了)如图:需要调⽤的函数是:findwindow[DllImport('user32.dll', EntryPoint='FindWindow')]public static extern int FindWindow (string lpClassName,string lpWindowName);FindWindowEx[DllImport('user32.dll', EntryPoint='FindWindowEx')]public static extern int FindWindowEx (int hWnd1,int hWnd2,string lpsz1,string lpsz2);SendMessage[DllImport('user32.dll', EntryPoint='SendMessage')]public static extern int SendMessage (int hwnd,int wMsg,int wParam,ref int lParam);其中Sendmessage中后⾯两个参数我把他修改成string型[DllImport('user32.dll', EntryPoint='SendMessage')]public static extern int SendMessage (int hwnd,int wMsg,string wParam,string lParam);下⾯就正式开始了在程序顶部中加⼊ using System.Runtime.InteropServices;在public partial class Form1 : Form{}中加⼊上⾯的参数以便使⽤API函数新建⼀个Form,然后加⼊⼀个Button如图:从SPY++中获得主程序的标题⽂本findwindow函数的⽤法[DllImport('user32.dll', EntryPoint='FindWindow')]public static extern int FindWindow (string lpClassName,string lpWindowName);int a = FindWindow('要找的类名','窗体名称'); //a就是程序句柄在Button1的代码中填⼊相关语句以便找到程序句柄int handelA;handelA = FindWindow('WindowsForms10.Window.8.app.0.378734a', 'GTA IV Control Centerv1.0 - [Player and Game Data]');使⽤MessageBox来检查handelA是已经获得句柄,若返回值为0,则失败.如图:现在可以看到,GTA4C的窗⼝句柄是722322,成功了.既然有了程序句柄,那么就可以尝试对其进⾏修改了,这时我们运⽤SendMessage函数[DllImport('user32.dll', EntryPoint='SendMessage')]public static extern int SendMessage (int hwnd,int wMsg,string wParam,string lParam);SendMessage的⽤法SendMessage(句柄,消息的标识符,'取决于消息','取决于消息');从CSDN中可以查到消息 WM_SETTEXT =0x000C那么可得SendMessage(handelA, 0x000C, '', '哥要你改标题');运⾏效果如图:有关如何不轻易漏掉其中⼀个关键的⼦窗⼝,这⾥我推荐⽤SPY++的窗⼝选项如图点击'⼦窗⼝列表'便能⼀级⼀级查看下去了接下来我们可以思考⼀下怎么修改⼦窗⼝的名称了.FindWindowEx⽤法int B = FindWindowEx (⽗窗⼝句柄,int hWnd2,类名1,类名名称);以下引⽤解释//hWnd2 ---------- Long,从这个窗⼝后开始查找。
ntuserfindwindowex function
ntuserfindwindowex function ntuserfindwindowex函数是Windows操作系统中的一个API函数,用于在指定程序的顶级窗口中查找符合指定条件的子窗口。
本文将介绍ntuserfindwindowex函数的功能和使用方法,并附带一些常见的应用案例。
第一部分:什么是ntuserfindwindowex函数(150-300字)ntuserfindwindowex函数是Windows操作系统提供的一个强大的窗口查找工具。
它可以在指定程序的顶级窗口中查找符合指定条件的子窗口,并返回找到的子窗口句柄。
这个函数可以帮助开发者快速定位和操作特定的窗口,提高程序的可靠性和用户体验。
第二部分:ntuserfindwindowex函数的使用方法(500-800字)使用ntuserfindwindowex函数的前提是了解函数的参数和返回值。
ntuserfindwindowex函数的原型如下:HWND NTUserFindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCWSTR lpszClass,LPCWSTR lpszWindow);这个函数接受四个参数:hwndParent、hwndChildAfter、lpszClass和lpszWindow。
1. hwndParent是指定程序的顶级窗口句柄,如果想在整个桌面中查找窗口,可以将它设置为NULL。
2. hwndChildAfter是查找起点的子窗口句柄,如果想从顶级窗口开始查找,可以将它设置为NULL。
3. lpszClass是要查找的窗口类名,可以使用通配符*来匹配任意类名。
4. lpszWindow是要查找的窗口标题,可以使用通配符*来匹配任意标题。
ntuserfindwindowex函数的返回值是找到的子窗口句柄,如果未找到,则返回NULL。
可以使用这个句柄进行后续的窗口操作,如发送消息、修改窗口属性等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C#中使用FindWindow函数详解
FindWindow 用来根据类名和窗口名来得到窗口句柄的。
但是这个函数不能查找子窗口,也不区分大小写。
如果要从一个窗口的子窗口中查找需要使用FindWindowEX。
1.在C#中使用方法如下:
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
[DllImport("User32.dll", EntryPoint = "FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName); [DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
[DllImport("User32.dll", EntryPoint = "FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName);
2. 实例参考:
IntPtr hWnd = FindWindow(null, "test Demo");
这样会查找所有title是"test Demo"的窗口。
参考下面的资料解释
3. FindWindow参数详解:
Parameters
lpClassName
[in] Pointer to a null-terminated string that specifies the class name or a class atom created by a previous call to the RegisterClass or RegisterClassEx function. The atom must be in the low-order word of lpClassName; the high-order word must be zero.
If lpClassName points to a string, it specifies the window class name. The class name can be any name registered with RegisterClass or RegisterClassEx, or any of the predefined control-class names.
If lpClassName is NULL, it finds any window whose title matches the lpWindowName parameter.
lpWindowName
[in] Pointer to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match. Return Value
If the function succeeds, the return value is a handle to the window that has the specified class name and window name.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
Remarks
If the lpWindowName parameter is not NULL, FindWindow calls the GetWindowText function to retrieve the window name for comparison. For a description of a potential problem that can arise, see the Remarks for GetWindowText.
To check if the Microsoft IntelliType version 1.x software is running, call FindWindow as follows:
Copy Code
FindWindow("MSITPro::EventQueue",NULL); To check if the IntelliType version 2.0 software is running, call FindWindow as follows:
Copy Code
FindWindow("Type32_Main_Window", NULL); If the IntelliType software is running, it sends WM_APPCOMMAND messages to the application. Otherwise the application must install a hook to receive WM_APPCOMMAND messages.
Microsoft Windows 95 or later: FindWindowW is supported by the Microsoft Layer for Unicode (MSLU). To use this, you must add certain files to your application, as outlined in Microsoft Layer for Unicode on Windows
95/98/Me Systems.
Example
For an example, see Retrieving the Number of Mouse Wheel Scroll Lines.
Function Information
Minimum DLL Version user32.dll
Header Declared in Winuser.h, include Windows.h
Import library User32.lib
Minimum operating systems Windows 95, Windows NT 3.1 Unicode Implemented as ANSI and Unicode versions.。