在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 Sub
一个时刻只有一个窗体能获得焦点.关键是窗体收到
WM_KILLFOCUS
消息时的重绘.如果你只是想让窗体看起来并没有什么不同,就这样吧.我用
API,VB.NET
的库不是很熟,所以......将就一下吧.
调用
SetWindowLong,使窗体的消息处理链接到新的窗口函数
NewWndProc,然后在
NewWndProc
里检测到
时就将其移出消息队列即可.完毕之后调用原来的窗口函数.
可以的
WM_DEVICECHANGE消息和与之对应的
afx_msg BOOL OnDeviceChange( UINT nEventType, DWORD dwData ) 函数,这个函数在CWnd基类中有定义,但在ClassWizard中没有罗列出来.解决办法是:
①在类声明处添加成员函数
protected:
afx_msg BOOL OnDeviceChange( UINT nEventType, DWORD dwData );
BOOL CXXXXX::OnDeviceChange( UINT nEventType, DWORD dwData )
{
if(nEventType == DBT_DEVICEARRIVAL)
MessageBox("CD arrival","Note",MB_OK◆MB_ICONINFORMATION);
return TRUE;
}
BEGIN_MESSAGE_MAP(CXXXXXX, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_WM_DEVICECHANGE() //注意:一定要将这句加在两个AFX_MSG_MAP外
END_MESSAGE_MAP()
两个方法
要接收的窗口先使用FindWindow这个api获得句柄
调用SetForegroundWindow使其获得焦点并选中
调用.net方法:SendKeys.Send方法发送
以上就是土嘎嘎小编为大家整理的vb.net消息处理相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!