十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在SystemEvents类中 可以 用户试图注销或关闭系统时发生。 (当用户试图注销或关闭系统时发生。当用户试图注销或关闭系统时发生。) 这个 事件处理函数中 可以找到如下方法
在仙桃等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、成都网站建设 网站设计制作按需策划,公司网站建设,企业网站建设,品牌网站设计,全网营销推广,成都外贸网站制作,仙桃网站建设费用合理。
Private Shared WM_QUERYENDSESSION As Integer = H11
Private Shared systemShutdown As Boolean = False
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_QUERYENDSESSION Then
'MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot")
systemShutdown = True
End If
' If this is WM_QUERYENDSESSION, the closing event should be raised in the base WndProc.
MyBase.WndProc(m)
End Sub 'WndProc
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If (systemShutdown) Then
' Reset the variable because the user might cancel the shutdown.
systemShutdown = False
If (System.Windows.Forms.DialogResult.Yes = _
MessageBox.Show("My application", "Do you want to save your work before logging off?", MessageBoxButtons.YesNo)) Then
e.Cancel = True
Else
e.Cancel = False
End If
End If
End Sub
一个时刻只有一个窗体能获得焦点。关键是窗体收到
WM_KILLFOCUS
消息时的重绘。如果你只是想让窗体看起来并没有什么不同,就这样吧。我用
VB6,所以写的都是
API,VB.NET
的库不是很熟,所以……将就一下吧。
调用
SetWindowLong,使窗体的消息处理链接到新的窗口函数
NewWndProc,然后在
NewWndProc
里检测到
WM_KILLFOCUS
时就将其移出消息队列即可。完毕之后调用原来的窗口函数。
可以的
WM_DEVICECHANGE消息和与之对应的
afx_msg BOOL OnDeviceChange( UINT nEventType, DWORD dwData ) 函数,这个函数在CWnd基类中有定义,但在ClassWizard中没有罗列出来。解决办法是:
1.在类声明处添加成员函数
protected:
afx_msg BOOL OnDeviceChange( UINT nEventType, DWORD dwData );
2.在相应的cpp文件中加入BOOL OnDeviceChange(UINT, DWORD)的函数体;
BOOL CXXXXX::OnDeviceChange( UINT nEventType, DWORD dwData )
{
if(nEventType == DBT_DEVICEARRIVAL)
MessageBox("CD arrival","Note",MB_OK+MB_ICONINFORMATION);
return TRUE;
}
3.在消息映射宏中加入
BEGIN_MESSAGE_MAP(CXXXXXX, CDialog)
//{{AFX_MSG_MAP(CTest031Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_WM_DEVICECHANGE() //注意:一定要将这句加在两个AFX_MSG_MAP外
END_MESSAGE_MAP()
两个方法
1.
要接收的窗口先使用FindWindow这个api获得句柄
调用SetForegroundWindow使其获得焦点并选中
调用.net方法:SendKeys.Send方法发送
2.使用API的SendInput