请问各位高手,如何使自己的窗口像“桌面天气秀”一样不响应WIN+D和WIN+M键,而不影响到别的程序响应?

解决方案 »

  1.   


    “将BorderStyle设为0就行”可以使窗口对Win+M无效
    再将窗口设为永在顶层可使Win+D无效
    Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cX As Long, ByVal cY As Long, ByVal wFlags As Long) As Long
    Private Const HWND_TOPMOST As Long = -1
    Private Const SWP_NOSIZE As Long = &H1
    Private Const SWP_NOMOVE As Long = &H2Private Sub Form_Load()
        Call SetWindowPos(Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)End Sub
      

  2.   

    这两个HOTKEY就是向窗体们送WMMINIMIZE消息,如果你的程序窗口不支持最小化就OK了,所以用楼上的使之NOSIZE就可以。
      

  3.   

    TO zyl910(910:分儿,我又来了!)
     
       我必须让窗体置底。不能让它显示在顶部。
      

  4.   

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As LongPrivate Declare Function SetWindowPos Lib "user32.dll" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cX As Long, ByVal cY As Long, ByVal wFlags As Long) As Long
    Private Const HWND_TOPMOST As Long = -1
    Private Const SWP_NOSIZE As Long = &H1
    Private Const SWP_NOMOVE As Long = &H2Private Sub Form_Load()
        Dim hWndPM As Long
        
        '将自身窗体的父窗口设为桌面
        hWndPM = FindWindow("Progman", vbNullString)
        Call SetParent(Me.hWnd, hWndPM)
        
        Call SetWindowPos(Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)End Sub
      

  5.   

    其实这样做是在错误的道路上走得更远真正桌面软件都是使用Custom Draw自绘桌面ListView的
    这样才能与桌面完美的融合但是这样正规软件的技术难度是远远超过你的想象的
      

  6.   

    //真正桌面软件都是使用Custom Draw自绘桌面ListView的
    这样才能与桌面完美的融合同意,就是这个意思
      

  7.   

    是这样的:我必须在自己的窗体里面加载一个网页,这个网页的内容是在不断变化的!目前所有问题都已经解决了,除了WIN+D的问题。
    不过我看到“桌面天气秀”已经将这个问题解决了!
      

  8.   

    界面是画出来的!“桌面天气秀”也是自己画界面的,而不是用html当你偷懒而用控件时,你已经受控件的局限了
      

  9.   

    我知道它是画出来的,可是这和他把WIN+D键屏蔽有关系吗?
      

  10.   

    可以使用Custom Draw自绘桌面ListView的背景不需要窗口,自然不再理睬WIN+D
      

  11.   

    不知道用我这种方式怎么才能将WIN+D键给忽略了!谢谢
      

  12.   

    //用自绘的也可以用鼠标拖动处理鼠标消息(WM_MOUSEMOVE、WM_LBUTTONDOWN)就行界面是画出来的!
      

  13.   

    //不知道用我这种方式怎么才能将WIN+D键给忽略了!谢谢这种方法不行吗:
    将BorderStyle设为0,将自身窗体的父窗口设为桌面,再永在顶层
      

  14.   

    又测试了一下
    发现不需要设置BorderStyle
    只需:将自身窗体的父窗口设为桌面,再永在顶层
    我的操作系统是WindowsXP sp2