wParam的高16位是键盘状态,包括ctrl,alt,shift的状态,具体数值自己查一下,然后根低16位组合后发送就可以了,我记得alt应该是0x0001.
PostMessage(this.objIntPtr,WM_CHAR,new IntPtr(0x01 << 16 + 0x41),new IntPtr(0));
PostMessage(this.objIntPtr,WM_CHAR,new IntPtr(0x01 << 16 + 0x41),new IntPtr(0));
public static extern int SetForegroundWindow (
int hwnd
);来获得焦点PostMessage不用焦点吗 ?
你发给谁 ?
下面这个没有焦点就可以发给应用程序窗口,PostMessage(this.objIntPtr,WM_CHAR,new IntPtr(0x41),new IntPtr(0));我想给没有焦点的应用程序发送组合键而不是单键,有焦点我也会
哪个API可以?
private void button1_Click(object sender, System.EventArgs e)
{
char strWindow;
IntPtr hParent = IntPtr.Zero;
IntPtr hNext=IntPtr.Zero;
timer1.Enabled=false;
string sClassName = "TestSendKey"; //要关闭的窗口标题
hNext=NativeWIN32.FindWindowEx(hParent,hNext,IntPtr.Zero,sClassName);
if(hNext.ToInt32()>0)
{
NativeWIN32.SetForegroundWindow(hNext.ToInt32());//置顶显示
NativeWIN32.ShowWindow(hNext.ToInt32(),NativeWIN32.nCmdShow.SW_SHOWMINNOACTIVE); //显示窗口
System.Windows.Forms.SendKeys.Send("%{F4}");
}
}
}
public class NativeWIN32
{
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr FindWindowEx(IntPtr parent /*HWND*/,
IntPtr next /*HWND*/,
IntPtr sClassName,
string sWindowTitle);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern void SetForegroundWindow(int hwnd); [DllImport("user32.dll")]
public static extern bool ShowWindow(int hWnd, nCmdShow nCmdShow); [DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); //SendMessage(Handle2, WM_GETTEXT, 1024, Integer(@Buf)); public enum nCmdShow:uint
{
SW_FORCEMINIMIZE=0x0,
SW_HIDE=0x1,
SW_MAXIMIZE=0x2,
SW_MINIMIZE=0x3,
SW_RESTORE=0x4,
SW_SHOW=0x5,
SW_SHOWDEFAULT=0x6,
SW_SHOWMAXIMIZED=0x7,
SW_SHOWMINIMIZED=0x8,
SW_SHOWMINNOACTIVE=0x9,
SW_SHOWNA=0xA,
SW_SHOWNOACTIVATE=0xB,
SW_SHOWNORMAL=0xC,
WM_CLOSE=0x10,
} }