//以上已得到proc
SetActiveWindow(proc);
SetForegroundWindow(proc);
PostMessage(proc, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
//以上朝proc发送WM_CLOSE已成功,回弹出关闭提示对话框 //以下朝关闭提示对话框发送ALT+Y
IntPtr aa = FindWindow("#32770", "提示信息");
if (aa != IntPtr.Zero)
{
SetActiveWindow(aa);
SetForegroundWindow(aa); SendKeys.SendWait("%Y");
} 以上代码在 ,系统未锁定时,实现,,没有任何问题。
系统锁定了,就不行了。
请高手指点。
SetActiveWindow(proc);
SetForegroundWindow(proc);
PostMessage(proc, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
//以上朝proc发送WM_CLOSE已成功,回弹出关闭提示对话框 //以下朝关闭提示对话框发送ALT+Y
IntPtr aa = FindWindow("#32770", "提示信息");
if (aa != IntPtr.Zero)
{
SetActiveWindow(aa);
SetForegroundWindow(aa); SendKeys.SendWait("%Y");
} 以上代码在 ,系统未锁定时,实现,,没有任何问题。
系统锁定了,就不行了。
请高手指点。
我 用desktop, open default,后,还是不行啊
你可以考虑PostMessage
压根发送不了,用微软网站的例子,一个字符都没做改动,都不行如下using System.Runtime.InteropServices;public const uint WM_SYSKEYDOWN = 260;
public const uint VK_MENU = 18;//virtual key code of Alt key
public const uint VK_F= 70;//virtual key code of 'F' key[DllImport("User32.Dll")]
public static extern long PostMessage(IntPtr hWnd, UInt32 wMsg, long wParam, long lParam);[DllImport("user32.dll")]
public static extern IntPtr FindWindow(String sClassName, String sAppName);
IntPtr hwnd=FindWindow("Notepad","Untitled - Notepad");//这里改了,hwnd能够找到的。
PostMessage(hwnd, WM_SYSKEYDOWN, VK_MENU, 1);
PostMessage(hwnd, WM_SYSKEYDOWN, VK_F, 1);
如果你要往记事本里面写字符,PostMessage的窗口不是那个有标题栏的,而是里面的edit控件,找到有标题栏的记事本窗口后,用FindWindowEx找到里面的控件的句柄
带一个定时器的程序 用以 关闭另一个带退出对话进程。系统锁定时,定时器执行时,就 不行了
必须要等登陆了,定时器里 执行的“朝那个 退出对话框 发送 按键”,才执行请问:
锁定时,带此定时器的进程就自动 切换到 winlogon ?
要 被关闭的进程还停留在 Default ?
还是 2个都在 winlogon 了?哎,我很菜啊折腾了半天,没搞定都最后都搞糊涂了
可惜, PostMessage 有不行—————————————————————————————— IntPtr aa = FindWindow("#32770", "提示信息");
Thread.Sleep(100);
IntPtr hwnd = FindWindowEx(new HandleRef(this, aa), new HandleRef(this, IntPtr.Zero), "Button", "是(&Y)");
Thread.Sleep(100);
//PostMessage(hwnd, WM_SYSKEYDOWN, VK_MENU, 1);
SetActiveWindow(hwnd);
SetForegroundWindow(hwnd);
PostMessage(hwnd, WM_SYSKEYDOWN, VK_Y, 1);
Thread.Sleep(100);
——————————————————————————————————以上代码 在 系统未锁定 时 可以。 系统锁定了, 也不行。和 SendKeys.SendWait("%Y") 一样 不起效果 。
或者你用父窗口法干掉那个提示框
成功————————————————
难道 是
SetActiveWindow(hwnd);
SetForegroundWindow(hwnd);
这 2句不行???
SetForegroundWindow(hwnd)
不需要这两个,你发WM_KEYDOWN试一下
IntPtr aa = FindWindow("#32770", "提示信息");
Thread.Sleep(100);
IntPtr hwnd = FindWindowEx(new HandleRef(this, aa), new HandleRef(this, IntPtr.Zero), "Button", "是(&Y)");
Thread.Sleep(100);
if (hwnd != IntPtr.Zero)
{
//listBox1.Items.Add(DateTime.Now.ToString()+" 成功"); //PostMessage(hwnd, WM_SYSKEYDOWN, VK_MENU, 1);
//SetActiveWindow(hwnd);
//SetForegroundWindow(hwnd);
PostMessage(hwnd, WM_KEYDOWN, VK_Y, 1);
Thread.Sleep(100);
}
——————————————————————————————————————
还是没成功。 未锁定,可以,锁定了,无效果。
锁定计算机(k)
PostMessage(hwnd, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(hwnd, WM_KEYUP, VK_RETURN, 0);
Thread.Sleep(100);
————————————————————————
成功了。
太感谢您的指导了
好像也可以。。