重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
很簡單,你怎么不先問我,還在這提問。用api函數,鉤子,設置成全局鉤子,然后對鉤取來的message消息不做處理,也不返回,這樣屏蔽了鍵盤了。鉤子函數api好像是什么hook的那個,還有鉤子函數的返回函數,以整個自定義函數的指針作參數
創新互聯是一家專注于成都網站制作、網站設計與策劃設計,洛隆網站建設哪家好?創新互聯做網站,專注于網站建設10余年,網設計領域的專業建站公司;建站業務涵蓋:洛隆等地區。洛隆做網站價格咨詢:18982081108
很簡單,通過WindowsAPI,刪除窗體菜單項就行了
首先在窗體類中聲明API:
Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr
Declare Function RemoveMenu Lib "user32" (ByVal lngHmenu As IntPtr, ByVal nPosition As Integer, ByVal wFlags As Integer) As Integer
其次聲明API參數常量:
Const MF_BYPOSITION As Integer = H400
然后在窗體類中寫入過程:
Private Sub UserForm_Initialize_stopmove() '禁止窗體移動
? Dim lngHwnd As IntPtr
? Dim lngHmenu As IntPtr
? lngHwnd = Me.Handle
? If lngHwnd 0 Then
? ? ? lngHmenu = GetSystemMenu(lngHwnd, False)
? ? ? RemoveMenu(lngHmenu, 0, MF_BYPOSITION) '這里的0代表菜單中從上往下數第一個菜單項
? End If
End Sub
Private Sub UserForm_Initialize_onmove() '恢復窗體移動
? Dim lngHwnd As IntPtr
? Dim lngHmenu As IntPtr
? lngHwnd = Me.Handle
? If lngHwnd 0 Then
? ? ? lngHmenu = GetSystemMenu(lngHwnd, True)
RemoveMenu(lngHmenu, 0, MF_BYPOSITION) '這里的0與禁止代碼中的數值同步,原因時雖然表面上刪除了菜單項,實則為隱藏了菜單項,各個菜單的索引值并沒有變,所以0依然代表初始菜單的第一個菜單項,即被刪除的那個菜單項
? End If
End Sub
然后如果你的窗口菜單是動態變化的,建議聲明常數:
Const MF_BYPOSITION As Integer = H0
然后使用相關的Windows功能的常數進行刪除菜單。常數需要自行查看winuser.h頭文件
如果找不到該頭文件,可以看這里:網頁鏈接
其余信息詳見MSDN:網頁鏈接
最后說一下,不建議前面網友說的重寫WndProc的方法,因為這樣攔截標題欄點擊消息會導致窗體本身的菜單也無法顯示出來,有損窗體功能,并且像雙擊左上角圖標關閉窗體這樣的功能也會跟著攔截消息的操作一起被吞掉。
VB.net可以調用DLL嗎?如果可以的話,你用VB6.0編寫一個DLL給VB.NET調用就行了