C#操作窗口类句柄操作.docx
《C#操作窗口类句柄操作.docx》由会员分享,可在线阅读,更多相关《C#操作窗口类句柄操作.docx(8页珍藏版)》请在冰豆网上搜索。
![C#操作窗口类句柄操作.docx](https://file1.bdocx.com/fileroot1/2022-12/1/2f96fe56-44c7-455e-8bcf-ac2be64ea4fc/2f96fe56-44c7-455e-8bcf-ac2be64ea4fc1.gif)
C#操作窗口类句柄操作
实现过程:
过程一:
找到当前鼠标位置的句柄
您的使用2个WinAPI(俺喜欢自己封装下来用):
ViewCode
[Dlllmport("",EntryPoint="GetCursorPos")]
publicstaticexternboolGetCursorPos(outPointpt);
[DllImport("",EntryPoint="WindowFromPoint")]
publicstaticexternIntPtrWindowFromPoint(Pointpt);
田日田日田EndexOf;
}
publicoverridestringToString()
{
StringBuilderresult=newStringBuilder();
for(WinHWNDwinHandle=this;winHandle!
=null;winHandle=
{
("{0}:
{1};"‘Escape,
if==-1)break;
}
().TrimEnd(';');
privatestaticstring
{
string[]sMarks=(';'returnsMarks[].Split(}
privatestaticstring
{
string[]sMarks=(';'
string[]sChildMarks=
for(inti=0;i<;i++){sChildMarks[i]=sMarks[i];
}
returnsChildMarks;
}
.是不是都匹配
foreach(IntPtrbaseHwnd{
IntPtrhandle=baseHwnd;
for(inti=;i>=0;i--)
{
GetBaseMark(string
);
':
')[0];
[]GetChildMarks(
);
newstring[];
inbaseHwnds)
sMark)
stringsMark)
string[]sChildMark=sChildMarks[i].Split(':
');
try
{
1])];
handle=(handle,UnEscape(sChildMark[O]))[(sChildMark[
}
catch
{
break;
}
if(i==0)returnnewWinHWND(handle);
}
continue;
}
returnnull;
}
#region转义
privatestaticstringEscape(stringarg)
{
(":
","\\:
").Replace(";","\\;");
}
{
("\\:
",":
").Replace("\\;",";");
}
#endregion
publicstaticWinHWNDGetWinHWND()
{
returnnewWinHWND()));
}
}
WinAPI
上全部代码,里面加了窗口的部分属性,扩展其他的属性,自己发挥吧,就是搞
BViewCode
usingSystem;
usingusingnamespaceInformationCollectionDataFill
{
publicclassWinAPI
{
#regionWinodwsAPI
[DllImport("",EntryPoint="FindWindow")]
privatestaticextern
IntPtrFindWindow(
stringIpCIassName,stringIpWindowName);
[Dlllmport("",EntryPoint="FindWindowEx")]
privatestaticexternIntPtrFindWindowEx(IntPtrhwndParent,lntPtrhwndChildAfter,
nglpszWindow);
[DllImport("",EntryPoint="SendMessage")]
privatestaticexternintSendMessage(IntPtrhWnd,intMsg,IntPtrwParam,string
[DllImport("",EntryPoint="GetParent")]
publicstaticexternIntPtrGetParent(lntPtrhWnd);
[DllImport("",EntryPoint="GetCursorPos")]
publicstaticexternboolGetCursorPos(outPointpt);
[DllImport("",EntryPoint="WindowFromPoint",CharSet=,ExactSpelling=true
publicstaticexternIntPtrWindowFromPoint(Pointpt);
[DllImport("",CharSet=]
publicstaticexternintGetClassName(IntPtrhWnd,StringBuilderlpCIassName,
[DllImport("",CharSet=]
publicstaticexternintGetWindowText(lntPtrhWnd,[Out,MarshalAs]StringBuilderlpString,
t);
stringlpszClass,stri
lParam);
)]
intnMaxCount);
intnMaxCoun
[DllImport(
"",CharSet=]
publicstaticexternint
GetWindowRect(lntPtrhwnd.
refRectanglerc);
[DllImport("",CharSet=]
refRectanglerc);
publicstaticexternintGetClientRect(lntPtrhwnd,
[DllImport("",CharSet=]
intx,inty,intnWidth,intnHeight,boolbRepaint);
publicstaticexternintMoveWindow(lntPtrhwnd,
[DllImport("",CharSet=,SetLastError=true,ExactSpelling=true)]
publicstaticexternintScreenToClient(lntPtrhWnd,refRectanglerect);
#endregion
#region圭寸装API方法
ndexOf;
}
privateRectangleGetRect()
{
if==null)returndefault(Rectangle);
RectangleclientSize=;
RectangleclientPoint=
returnnewRectangle,,,;
}
publicstaticWinHWNDGetWinHWND()
{
returnnewWinHWND()));}
publicoverridestring
{
StringBuilderresult=
for(WinHWNDwinHand{
("{0}:
{1};"‘Escape,if==-1)break;
}
().TrimEnd(';');
}
privatestaticstring
{
string[]sMarks=(';'returnsMarks[].Split(}
privatestaticstring
{
string[]sMarks=(';'
string[]sChildMarks=
for(inti=0;i<;i++){
ToString()
newStringBuilder();this;winHandle!
=
GetBaseMark(string
);
':
')[0];
[]GetChildMarks(
);
newstring[];
null;winHandle=
sMark)
stringsMark)
sChildMarks[i]=sMarks[i];
}
returnsChildMarks;
}
.是不是都匹配
foreach(IntPtrbaseHwndinbaseHwnds)
{
IntPtrhandle=baseHwnd;
for(inti=;i>=0;i--)
{
string[]sChildMark=sChildMarks[i].Split(':
');
try
{
1])];
handle=(handle,UnEscape(sChildMark[0]))[(sChildMark[
}
catch
{
break;
}
if(i==0)returnnewWinHWND(handle);
}
continue;
}
returnnull
}
#region转义
privatestaticstring
{
(":
","\\:
").Replace(
}
privatestaticstring
{
("\\:
",":
").Replace(
}
#endregion
}
}
Escape(stringarg)
"\\;"
);
UnEscape(stringarg)
"\\;"
);
效果: