用例子说明FindWindow的用法
- 格式:doc
- 大小:38.00 KB
- 文档页数:1
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与FindWindowEx的使⽤⽰例昨天在做⼀个⽹页测试时,它会弹出⼀个对话框(如下图)对⽤户进⾏⼀个认证。
使⽤Spy++侦测这个对话框的结构如下,我们看到两个Edit就在最后两个节点上。
我们现在就可以利⽤FindWindow以及FindWindowEx这两个函数来帮我们找到这个窗体及窗体上所有的控件,然后帮我们完成⾃动化测试。
下⾯这个程序就是帮我们⾃动输⼊⽤户名与密码。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;using System.Threading;namespace ConsoleApplication79{class Program{[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]private extern static IntPtr FindWindow(string classname, string captionName);[DllImport("user32.dll", EntryPoint = "FindWindowEx", CharSet = CharSet.Auto)]private extern static IntPtr FindWindowEx(IntPtr parent,IntPtr child,string classname, string captionName);[DllImport("user32.dll")]static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam);[DllImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]static extern bool SetForegroundWindow(IntPtr hWnd);static void Main(string[] args){IntPtr mwh1 = IntPtr.Zero;while (mwh1 == IntPtr.Zero){Thread.Sleep(1000);mwh1 = FindWindow(null, "Windows Security");}IntPtr panel = FindWindowEx(mwh1, IntPtr.Zero, "DirectUIHWND", null);IntPtr CtrlNotifySink = IntPtr.Zero;CtrlNotifySink = FindWindowEx(panel, IntPtr.Zero, "CtrlNotifySink", null);for (int i = 1; i < 7; i++){CtrlNotifySink = FindWindowEx(panel, CtrlNotifySink, "CtrlNotifySink", null);}IntPtr editor = FindWindowEx(CtrlNotifySink, IntPtr.Zero, null, null);uint WM_SETTEXT = 0xC;SendMessage(editor, WM_SETTEXT, IntPtr.Zero, "username");CtrlNotifySink = FindWindowEx(panel, CtrlNotifySink, "CtrlNotifySink", null);editor = FindWindowEx(CtrlNotifySink, IntPtr.Zero, null, null);SendMessage(editor, WM_SETTEXT, IntPtr.Zero, "password");}}}主要注意的⼀点就是代码⾥使⽤FindWindowEx循环查找⼦控件,因为这些控件都是具有相同类名的。
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"的窗口。
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置顶函数用法在Windows操作系统中,FindWindow函数是一种用于查找窗口句柄的函数。
它在指定的桌面上具有指定类名和窗口名称的顶级窗口。
FindWindow函数的定义如下:HWND FindWindowLPCTSTR lpClassName,LPCTSTR lpWindowName参数说明:- lpClassName:指定目标窗口的类名,可以为窗口类的类名或者子窗口类的类名。
如果该参数为NULL,则表示忽略类名进行。
- lpWindowName:指定目标窗口的窗口名称。
如果该参数为NULL,则表示忽略窗口名称进行。
返回值:成功时返回窗口句柄,失败时返回NULL。
下面是一些FindWindow函数的常见用法:1.查找指定类名和窗口名的顶级窗口:HWND hWnd = FindWindow(L"ClassName", L"WindowName");这里的L"ClassName"表示目标窗口的类名,L"WindowName"表示目标窗口的窗口名称。
2.查找指定类名的顶级窗口:HWND hWnd = FindWindow(L"ClassName", NULL);这里的L"ClassName"表示目标窗口的类名,NULL表示不关心窗口名称。
3.查找指定窗口名称的顶级窗口:HWND hWnd = FindWindow(NULL, L"WindowName");NULL表示不关心类名,L"WindowName"表示目标窗口的窗口名称。
4.查找第一个匹配类名的顶级窗口:HWND hWnd = FindWindowEx(NULL, NULL, L"ClassName", NULL);NULL表示从桌面开始,NULL表示查找第一个匹配的窗口,L"ClassName"表示指定的类名。
1、对于一个窗口如何进行操作呢,首先要得到其使用句柄,我们可以用FindWindow()函数来获取当前窗口句柄,具体使用如下:HWND hFig = ::FindWindow(NULL,HWND);如果得到找到,则返回窗口的句柄,否则返回NULL。
当然我们可以使用SetWindowPos(HWND hWnd, HWND hWndIsertAfter, int X, int Y, int cx, int cy , UINT Uflags) 改变窗口的大小和位置,Uflags是标志窗口的显示属性,具体值可以是SWP_NOMOVE 、SWP_NOZORDER 、SWP_N OACTIVATE 、SWP_FRAMECHANGED等。
具体的调用实例如下:HWND hFig = ::FindWindow(NULL,"Fig No. 1"); //找到窗口,并返回窗口句柄if(hFig == NULL) {AfxMessageBox("未能产生Figure窗口,图形绘制失败!");return;} // 获取绘图区域的位置和大小RECT PlotRec;CWnd *PlotArea = GetDlgItem(IDC_PLOTAREA); // 获取绘图区域指针PlotArea->GetWindowRect(&PlotRec); // 将绘图区域矩形赋给定义矩形long Width = PlotRec.right - PlotRec.left; long Height = PlotRec.bottom - PlotRec.to p; // 获得绘图区域的宽和高// 设置Figure窗口为绘图区域窗口的子窗口并调整其位置::SetParent(hFig,PlotArea->GetSafeHwnd()); // 设置绘图区域窗口为Figure窗口的父窗口::SetWindowPos(hFig,NULL,1,1,Width,Height,SWP_NOZORDER | SWP_NOACTIVATE); // 设置绘图窗口的大小和位置// 设置窗口可见SetVisible(h_a,mwArray("ON"));// 进入窗口等待状态bWait = 1; mlfHGWaitForFiguresToDie();2、当然你想改变窗口属性的话,还可以增加以下函数来改变窗口的属性long lStyle. = ::GetWindowLong(hFig,GWL_STYLE);::SetWindowLong(hFig,GWL_STYLE,lStyle. & (~WS_CAPTION) & (~WS_THICKFRAM E));::SetWindowPos(hFig,NULL,0,0,0,0,SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTI VATE | SWP_FRAMECHANGED);就写到这吧,其他的学会了再统一以一个实例的形式给出。
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;}。
VC API常用函数简单例子大全第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄函数的定义:HWND WINAPI FindWindow(LPCSTR lpClassName ,LPCSTR lpWindowName);第一个参数填窗口的类名,第二个填窗口的标题名,其实是不需要同时填两个参数的,也就是说,你只要知道窗口的类名或窗口的标题就可以了,没有的那个就用NULL代替。
比如现在有一个窗口名为"无标题.txt - 记事本"的记事本程序。
那么我就可以用上面的函数获得这个窗口的句柄,那获得了这个窗口的句柄我可以干什么呢?作用可大了,因为很多操作窗口的函数,都需要窗口句柄作参数,如移动、改变窗口大小的MoveWindow函数,在这里举个例子,大家就更能体会到这个FindWindow的用法、用处。
FindWindow例子:已知一个窗口名称,写一个程序关闭该窗口,假设当前电脑正有一个窗口名为"无标题.txt - 记事本"的记事本程序运行1 #include<windows.h> //API函数的头文件2int main()3 {4 HWND wnd; //定义一个窗口句柄变量,用以存储找到的窗口句柄5 wnd=FindWindow(NULL,"无标题.txt - 记事本"); //获得窗口名为"无标题.txt - 记事本"的窗口句柄67 SendMessage(wnd,WM_CLOSE,0,0); //调用SendMessage函数,发送一个WM_CLOSE(关闭)消息给wnd窗口句柄。
89return0;10 }如果要根据窗口类名来获得窗口句柄话,只要给函数的第一个参数填类名,第二个参数窗口名填NULL,即可,用Spy++可查看窗口类名。
第二个:SendMessage根据窗口句柄发送一个消息给窗口函数定义:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);第一个参数是窗口句柄,第二参数个是消息类型,下面的消息表列举了所有消息,第三,四个参数是消息附带信息,解释依赖于消息类型,比如一个字符消息(WM_CHAR),那么第三个参数就储存有一个字符的ASCII码。
CMD命令行的FIND命令的使用方法在 Windows 命令提示符(CMD)中,FIND命令用于在文本文件中搜索指定的字符串或文本模式。
以下是FIND命令的基本使用方法:1. 在文本文件中搜索指定的字符串:find [字符串] [文件路径]其中[字符串]是你想要搜索的文本,[文件路径]是你想要搜索的文件的完整路径。
示例:在名为 "example.txt" 的文件中搜索字符串 "text":find "text" example.txt2. 搜索多个字符串:find [字符串1] [字符串2] [文件路径]你可以同时搜索多个字符串。
示例:在名为 "example.txt" 的文件中同时搜索字符串 "text" 和 "example":find "text" "example" example.txt3. 搜索特定类型的文件:find /v /c [字符串] *.txt/v参数用于反向搜索,/c参数用于计数,而不是显示匹配的行。
示例:计算名为 "example.txt" 文件中不包含字符串 "text" 的行数:find /v /c "text" example.txt请注意,FIND命令区分大小写,并且它搜索的是文本文件,不包括二进制文件。
一个完整的例子:假设你想在名为 "example.txt" 的文件中搜索字符串 "text",你可以使用以下命令:find "text" example.txt这个命令会搜索 "example.txt" 文件中所有包含 "text" 字符串的行,并在命令提示符窗口中显示匹配的行。
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操作本窗口了
.
.
.
}。