none
windows mobile 5.0 应用如何禁止手机响应转屏按键事件 RRS feed

答案

  • here's a simple but ugly solution:

    note that SystemSettings.ScreenOrientation needs to be changed, since its the parameter that decides the display orientation.

    the code:

    void OrientationWatcher_Changed(object sender, ChangeEventArgs args)
    {
          int newOrientation = (int)args.NewValue;
          if (condition on newOrientation)
               ChangeToLandscape();
    
    }
    public static void ChangeToLandscape()
    {
          SystemSettings.ScreenOrientation = ScreenOrientation.Angle270;
          Registry.SetValue(@"HKEY_LOCAL_MACHINE\System\GDI\ROTATION",
                   "Angle", 270, RegistryValueKind.DWord);
    }
    这个例子用来保持Landscape模式
    I'm a device.
    2009年5月4日 15:15
    版主

全部回复

  • 楼主,你好

    既然各种手机手机转屏按键对应的值不同,很难直接有通用的办法。除非你已经搜集了很多这样的资料,然后你构造一个简单工厂模式处理下就可以了。
    Microsoft Online Community Support
    2009年3月16日 7:46
  • 谢谢.
    我想再请教下,可不可以从更低层去解决这个办法.比如按了转屏键,windows moible是做的什么处理,是中断吗?如果是,我怎么样能截获并组织这个中断
    2009年3月16日 7:54
  • 不好意思,我想确认下。
    你说的转屏键是指什么?

    Microsoft Online Community Support
    2009年3月16日 8:11
  • 就是有的mobile手机上有个快捷键,按了就会横屏转成竖屏,再按一下恢复.我想屏蔽这个按键在我的应用里.
    2009年3月16日 8:14
  • 楼主,你好

    不好意思,刚才没理解清楚。

    其实你说的转屏键其实对应的是键值为0X80.
    你可以参考下面的这篇文章。

    Keys and Key Codes for Windows Mobile

    如果你想禁用这个键值,你可以添加按键检测事件。如果是这个键值,则不响应即可。

    例子你可以参考下面的文章试试。
    Control.KeyPress Event






    Microsoft Online Community Support
    2009年3月16日 8:33
  •  呵呵,非常感谢热心的版主.
    可是我在模拟器上试了下,不是0x80啊,模拟器是91(十进制),但是用了勾子表现并不正确,而且会死掉.
    2009年3月16日 9:02
  • 你看看我给的第一个连接,它上面说的好像就是0X80的,你自己看看。
    Microsoft Online Community Support
    2009年3月16日 9:05
  • here's a simple but ugly solution:

    note that SystemSettings.ScreenOrientation needs to be changed, since its the parameter that decides the display orientation.

    the code:

    void OrientationWatcher_Changed(object sender, ChangeEventArgs args)
    {
          int newOrientation = (int)args.NewValue;
          if (condition on newOrientation)
               ChangeToLandscape();
    
    }
    public static void ChangeToLandscape()
    {
          SystemSettings.ScreenOrientation = ScreenOrientation.Angle270;
          Registry.SetValue(@"HKEY_LOCAL_MACHINE\System\GDI\ROTATION",
                   "Angle", 270, RegistryValueKind.DWord);
    }
    这个例子用来保持Landscape模式
    I'm a device.
    2009年5月4日 15:15
    版主