已知一个窗口的句柄,如何修改该窗口内的资源

lyl_rabbit 2004-10-08 04:43:05
如上
...全文
259 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jingxijun 2004-10-11
  • 打赏
  • 举报
回复
hwnd_win = FindWindow(null, "用户登录 - 中心营业部");
if (hwnd_win == IntPtr.Zero)
{
MessageBox.Show("警告:找不到目标窗口");
return;
}
SetWindowText(hwnd_win,"my test");//改标题
ShowWindow(hwnd_win,SW_HIDE); //使窗口不显示
jingxijun 2004-10-11
  • 打赏
  • 举报
回复
函数原型:BOOL ShowWindow(HWND hWnd,int nCmdShow);
函数功能:该函数设置指定窗口的显示状态。
参数:
hWnd:窗口句柄。

nCmdShow:指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。在随后的调用中,该参数可以为下列值之一:

SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。

SW_MIOE:隐藏窗口并激活其他窗口。

SW_MAXIMIZE:最大化指定的窗口。

SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。

SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。

SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。

SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。

SW_SHOWMAXIMIZED:激活窗口并将其最大化。

SW_SHOWMINIMIZED:激活窗口并将其最小化。

SW_SHOWMINNOACTIVATE:窗口最小化,激活窗口仍然维持激活状态。

SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。

SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。

SW_SHOWNOMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。

返回值:如果窗口以前可见,则返回值为非零。如果窗口以前被隐藏,则返回值为零。

备注:应用程序第一次调用ShowWindow时,应该使用WinMain函数的nCmdshow参数作为它的nCmdShow参数。在随后调用ShowWindow函数时,必须使用列表中的一个给定值,而不是由WinMain函数的nCmdSHow参数指定的值。

正如在nCmdShow参数中声明的,如果调用应用程序的程序使用了在STARTUPINFO结构中指定的信息来显示窗口,则在第一次调用ShowWindow函数时nCmdShow参数就被忽略。在这种情况下,ShowWindow函数使用STARTUPINFO结构中的信息来显示窗口。在随后的调用中,应用程序必须调用ShowWindow 函数(将其中nCmdShow参数设为SW_SHOWDEFAULT)来使用由程序调用该应用程序时提供的启动信息。这个处理在下列情况下发生:

应用程序通过调用带WS_VISIBLE标志的函数来创建它们的主窗口函数;

应用程序通过调用清除了WS_VISIBLE标志的CteateWindow函数来创建主窗口函数,并且随后调用带SW_SHOW标志的ShowWindow函数来显示窗口;
jingxijun 2004-10-11
  • 打赏
  • 举报
回复
调用WIN32 API
using System.Runtime.InteropServices;
DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
  
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,string lpszClass,string lpszWindow);

函数型:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);
函数功能:该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。
参数:
IpClassName :指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobafAddAtom函数产生的全局成员。该成员为16位,必须位于IpClassName的低 16位,高位必须为 0。
IpWindowName:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为空,则为所有窗口全匹配。
返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄;如果函数失败,返回值为NULL。

函数原型:HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow);
函数功能:该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。
参数;

hwndParent:要查找子窗口的父窗口句柄。
如果hwnjParent为NULL,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。
Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。
hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndPareRt窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。
lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。
lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。如果函数失败,返回值为NULL。


函数原型:BOOL SetWindowText(HWND hwnd,LPCTSTR lpStrjng);
函数功能:该函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏)。如果指定窗口是一个控制,则改变控制的文本内容。然而,SetWindowText函数不改变其他应用程序中的控制的文本内容。
参数:
hWnd:要改变文本内容的窗口或控制的句柄。
lpString:指向一个空结束的字符串的指针,该字符串将作为窗口或控制的新文本。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:如果目标窗口属于当前进程,SetWindowText函数会使WM_SETTEXT消息发送给指定的窗口或控制。然而,如果控制是以WS_CAPTION风格创建的列表框控制,SetWindowText函数将为控制设置文本,而不是为列表项设置文本。
SetWindowText函数不扩展tab字符(ASCII代码0×09),Tab字符以字符‘}’来显示。


lyl_rabbit 2004-10-09
  • 打赏
  • 举报
回复
也就是修改指定窗口的一些属性,如标题、使之不可见等等

我对C++不熟,请写个例子示范一下使指定窗口不可见怎么写啊,谢谢
linming20002000 2004-10-08
  • 打赏
  • 举报
回复
问一下 如何留言提问
那为仁兄能告诉我?
BlankFoxCat 2004-10-08
  • 打赏
  • 举报
回复
up
jamesfay 2004-10-08
  • 打赏
  • 举报
回复
无非也就是createwindow什么的去创建一些控件,或者拿到hdc去画点东西。楼主要什么资源被修改啊?
BearRui 2004-10-08
  • 打赏
  • 举报
回复
修改该窗口内的资源。

不是很懂这句话!!!
jingxijun 2004-10-08
  • 打赏
  • 举报
回复
我也类似需求,但做的不理想,参考代码如下
using System.Runtime.InteropServices;
...
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,string lpszClass,string lpszWindow);

[DllImport("user32.dll",CharSet=CharSet.Unicode)]
public static extern IntPtr PostMessage(IntPtr hwnd,int wMsg,IntPtr wParam,IntPtr lParam);

[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

运用这些API来操作
...
hwnd_win = FindWindow(null, "用户登录");
if (hwnd_win == IntPtr.Zero)
{
MessageBox.Show("警告:找不到目标窗口");
return;
}
...

public void input(IntPtr mptr, string mstr)
{
Message msg;
UnicodeEncoding encode = new UnicodeEncoding();
char[] chars = encode.GetChars(encode.GetBytes(mstr));
foreach (char c in chars)
{
msg = Message.Create(mptr, WM_CHAR, new IntPtr(c), new IntPtr(0));
PostMessage(msg.HWnd, msg.Msg, msg.WParam, msg.LParam);
}
}
lyl_rabbit 2004-10-08
  • 打赏
  • 举报
回复
在线等

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧