代码如下 [DllImport("user32.dll", EntryPoint="SendMessageA")]
public static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
public const int WM_CLOSE = 0x10; [DllImport("user32.dll", EntryPoint="FindWindowA")]
public static extern int FindWindow (string lpClassName, string lpWindowName);int hwnd = FindWindow(null,"窗口名");
int a = SendMessage(hwnd, WM_CLOSE, 0, 0);其中hwnd得到了句柄(值不为0),可惜SendMessage返回的值a是0,无法关闭窗体,这是为什么?
public static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
public const int WM_CLOSE = 0x10; [DllImport("user32.dll", EntryPoint="FindWindowA")]
public static extern int FindWindow (string lpClassName, string lpWindowName);int hwnd = FindWindow(null,"窗口名");
int a = SendMessage(hwnd, WM_CLOSE, 0, 0);其中hwnd得到了句柄(值不为0),可惜SendMessage返回的值a是0,无法关闭窗体,这是为什么?
public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); private void button8_Click(object sender, System.EventArgs e)
{
IntPtr hwnd_win ; hwnd_win = FindWindow(null,this.txtFindWinCaption.Text);
SendMessage(hwnd_win,WM_CLOSE,0,0);
}
[DllImport("user32.dll", EntryPoint="FindWindowA")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", EntryPoint="SendMessageA")]
public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); IntPtr hwnd;
hwnd = FindWindow(null,"窗口");
SendMessage(hwnd, WM_CLOSE, 0, 0);为什么还是不可以呢?
是否找到了进程的主窗体,如果不是有可能被过滤了
可以找到阿 hwnd 的值不为0 ,但是还是不能关闭窗体?实在是不知道为什么?
不过没必要那样指定EntryPoint,默认就可以了(指定了A/W版本也没用)这里返回值是0表示操作成功,窗体应该已经被关闭了
我也觉得没有问题,但是就是不可以 不知道为什么?关闭其他都可以,就是关闭例如“我的电脑”之类的窗口就是不行,郁闷。。对了,我用的是日文的os不知道会不会有影响呢?
2、用PostMessage:
[DllImport("user32.dll")]
static extern int PostMessage(int hWnd,int Msg,int wParam,int lParam);...int hwnd = FindWindow(null,"我的电脑");
int a = PostMessage(hwnd, WM_CLOSE, 0, 0);