模拟城市中文网

 找回密码
 入住
搜索
查看: 9057|回复: 27

SC4 Tool 打开菜单时出错【已解决】

[复制链接]
发表于 2011-7-29 16:46 | 显示全部楼层 |阅读模式
原问题:
求解(PS:之前曾经提示注册表里HKEY_CURRENT_USERControl PanelDesktopMenuShowDelay值要大于零,于是修改成了1000)

出错信息如图:



问题已解决

最后通过调用Win32API修改系统数据总算解决问题了……

[ 本帖最后由 UFD 于 2011-7-31 13:00 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
发表于 2011-7-29 18:11 | 显示全部楼层
我这里也同样报错,但是没影响使用
回复 支持 反对

使用道具 举报

发表于 2011-7-29 18:15 | 显示全部楼层
沒出現情況
·············
回复 支持 反对

使用道具 举报

发表于 2011-7-29 18:57 | 显示全部楼层
原帖由 weixc812 于 2011-7-29 18:11 发表
我这里也同样报错,但是没影响使用


我这里也同样报错,但是却影响菜单使用
回复 支持 反对

使用道具 举报

发表于 2011-7-29 19:05 | 显示全部楼层
我觉得更新一下.NET。。。。
我也不知道
回复 支持 反对

使用道具 举报

发表于 2011-7-29 19:29 | 显示全部楼层
原帖由 lrdcq 于 2011-7-29 19:05 发表
我觉得更新一下.NET。。。。
我也不知道

这与.Net版本无关,这是他们的菜单控件导致的
回复 支持 反对

使用道具 举报

发表于 2011-7-29 19:47 | 显示全部楼层
原帖由 Bobbi 于 2011-7-29 19:29 发表

这与.Net版本无关,这是他们的菜单控件导致的

但如果不是 .Net的不同,为什么同一个软件在不同电脑上有不同效果?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-7-29 19:55 | 显示全部楼层
之前上一台电脑装的是SC4 TOOL(SCCN上的,运行正常)

现在装的是SCME上功能更全的那个SC4 TOOL

两次都是.NET FRAMEWORK 2.0

求解……

[ 本帖最后由 UFD 于 2011-7-29 19:58 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2011-7-29 20:15 | 显示全部楼层
原帖由 lrdcq 于 2011-7-29 19:47 发表

但如果不是 .Net的不同,为什么同一个软件在不同电脑上有不同效果?

好吧。刚才对他们的菜单控件进行反编译分析,发现如下代码(经过简化修改和加上个人代码风格)
  1. class Unknown
  2. {
  3.     Timer r_ShowMenuTimer;

  4.     public b()
  5.     {
  6.         //...
  7.         r_ShowMenuTimer = new Timer() { Interval = GetMenuShowDelay() };
  8.     }
  9.    
  10.     const int SPI_GETMENUSHOWDELAY = 0x6A;

  11.     [DllImport("user32.dll", CharSet = CharSet.Auto)]
  12.     static extern bool SystemParametersInfo(int uiAction, int uiParam, out int pvParam, int fWinIni);

  13.     static int GetMenuShowDelay()
  14.     {
  15.         int rResult;
  16.         SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, out rResult, 0);
  17.         return rResult;
  18.     }
  19. }
复制代码
Timer.Interval属性在赋值为0的时候会抛出异常,而这个值是通过调用SystemParametersInfo这个Win32 API获取菜单显示延迟时间得到的。这样,为什么同一个软件在不同电脑上有不同效果,原因很清楚了——因为有的电脑使用了优化软件,菜单的显示延迟被“优化”成0了(优化软件就是渣渣,老是弄出各种各样的问题)

评分

参与人数 1威望 +2 收起 理由
lrdcq + 2 热心助人

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2011-7-29 21:07 | 显示全部楼层
原帖由 UFD 于 2011-7-29 19:55 发表
之前上一台电脑装的是SC4 TOOL(SCCN上的,运行正常)

现在装的是SCME上功能更全的那个SC4 TOOL

两次都是.NET FRAMEWORK 2.0

求解……


同上,我以前的是SCCN阉割版,用起来没事
后来换了SCME非阉割版,有一天就出事了
回复 支持 反对

使用道具 举报

发表于 2011-7-29 21:31 | 显示全部楼层
我的回复什么时候审核完毕呀0.0

没事了

[ 本帖最后由 Bobbi 于 2011-7-29 22:09 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2011-7-29 21:44 | 显示全部楼层
原帖由 Bobbi 于 2011-7-29 21:31 发表
我的回复什么时候审核完毕呀0.0

你什么关键字装上墙了啊。。。还要审核。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-7-29 21:58 | 显示全部楼层
原帖由 Bobbi 于 2011-7-29 20:15 发表

好吧。刚才对他们的菜单控件进行反编译分析,发现如下代码(经过简化修改和加上个人代码风格)class Unknown
{
    Timer r_ShowMenuTimer;

    public b()
    {
        //...
        r_ShowMenuTimer = new Timer()  ...


既然是Win32API,为什么??

  1. #include <iostream>
  2. #include <windows.h>

  3. using namespace std;

  4. int main()
  5. {
  6.      int i;
  7.      SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, &i, 0);
  8.      cout<<"Result:"<<i<<endl;
  9.      return 0;
  10. }
复制代码

[ 本帖最后由 UFD 于 2011-7-29 22:07 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
回复 支持 反对

使用道具 举报

发表于 2011-7-29 22:08 | 显示全部楼层
原帖由 UFD 于 2011-7-29 21:58 发表
既然是Win32API,为什么??

SystemParametersInfo函数和SPI_GETMENUSHOWDELAY常量是在“WinUser.h”头文件里的。看代码,没有导入这个头文件0.0

[ 本帖最后由 Bobbi 于 2011-7-29 22:09 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-7-29 22:13 | 显示全部楼层
原帖由 Bobbi 于 2011-7-29 22:08 发表

SystemParametersInfo函数和SPI_GETMENUSHOWDELAY常量是在“WinUser.h”头文件里的。看代码,没有导入这个头文件0.0



已经include了,问题依旧。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
回复 支持 反对

使用道具 举报

发表于 2011-7-29 22:19 | 显示全部楼层
原帖由 UFD 于 2011-7-29 22:13 发表



已经include了,问题依旧。230975

看了这个头文件,加上看了之前那张图。看来你用的是VC++6,那个Windows SDK有点旧了。更新一下IDE吧
如果你不想换,就用0x6A代替那个常量吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-7-29 22:26 | 显示全部楼层
原帖由 Bobbi 于 2011-7-29 22:19 发表

看了这个头文件,加上看了之前那张图。看来你用的是VC++6,那个Windows SDK有点旧了。更新一下IDE吧
如果你不想换,就用0x6A代替那个常量吧



终于成功了……


不过SystemParametersInfo(0x6A, 0, &i, 0);读取的到底是哪里的哪一部分内容呢?

评分

参与人数 1威望 +2 收起 理由
lrdcq + 2 自救加分

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2011-7-29 22:28 | 显示全部楼层
原帖由 UFD 于 2011-7-29 22:26 发表



终于成功了……


不过SystemParametersInfo(0x6A, 0, &i, 0);读取的到底是哪里的哪一部分内容呢?

你看这个吧。SystemParametersInfo BD百科,不过这个没有那个常量,MSDN上就有

[ 本帖最后由 Bobbi 于 2011-7-29 22:29 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-7-29 22:32 | 显示全部楼层
系统级参数?


神马系统级参数?在哪儿?
回复 支持 反对

使用道具 举报

发表于 2011-7-29 22:37 | 显示全部楼层
原帖由 UFD 于 2011-7-29 22:32 发表
系统级参数?


神马系统级参数?在哪儿?

这点我不清楚了,我Win32 API不熟悉0.0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-7-30 12:36 | 显示全部楼层
原帖由 Bobbi 于 2011-7-29 22:37 发表

这点我不清楚了,我Win32 API不熟悉0.0

要不然你把你的WinUser.h传上来吧……
回复 支持 反对

使用道具 举报

发表于 2011-7-30 12:59 | 显示全部楼层
原帖由 UFD 于 2011-7-30 12:36 发表

要不然你把你的WinUser.h传上来吧……

建议升级一下Windows SDK吧
Link
回复 支持 反对

使用道具 举报

发表于 2011-8-4 08:42 | 显示全部楼层
C++,看不懂
回复 支持 反对

使用道具 举报

发表于 2011-8-4 08:51 | 显示全部楼层
第一行出错
回复 支持 反对

使用道具 举报

发表于 2011-8-4 09:06 | 显示全部楼层
额,直接改注册表就行了
回复 支持 反对

使用道具 举报

发表于 2011-8-4 09:09 | 显示全部楼层
还是报错额
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.ArgumentOutOfRangeException: Value '0' is not a valid value for Interval. Interval must be greater than 0.
Parameter name: Interval
   at System.Windows.Forms.Timer.set_Interval(Int32 value)
   at TD.SandBar.b..ctor(PopupMenu A_0, i A_1, Screen A_2)
   at TD.SandBar.PopupMenu.a(i A_0, Screen A_1)
   at TD.SandBar.i.a(TopLevelMenuItemBase A_0, Boolean A_1, Boolean A_2, Point A_3)
   at TD.SandBar.i.b(TopLevelMenuItemBase A_0, Boolean A_1, Boolean A_2, Point A_3)
   at TD.SandBar.TopLevelMenuItemBase.Show(Boolean select)
   at TD.SandBar.TopLevelMenuItemBase.Show()
   at TD.SandBar.ToolBar.OnItemPush(ToolbarItemBase item, Point position)
   at TD.SandBar.ToolBar.OnMouseDown(MouseEventArgs e)
   at TD.SandBar.MenuBar.OnMouseDown(MouseEventArgs e)
   at System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at TD.SandBar.ToolBar.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
SC4Tool
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Program%20Files/SC4Tool/SC4Tool.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Draw(HXHXHXHXHXHX)ing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.︶︿︶/2.0.0.0__b03f5f7f11d50a3a/System.︶︿︶.dll
----------------------------------------
SandDock
    Assembly Version: 1.0.6.1
    Win32 Version: 1.0.6.1
    CodeBase: file:///C:/Program%20Files/SC4Tool/SandDock.DLL
----------------------------------------
SandBar
    Assembly Version: 1.1.0.0
    Win32 Version: 1.1.0.0
    CodeBase: file:///C:/Program%20Files/SC4Tool/SandBar.DLL
----------------------------------------
System.Data
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
System.Xml
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
Microsoft.VisualBasic
    Assembly Version: 8.0.0.0
    Win32 Version: 8.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
sr_SC4Lib
    Assembly Version: 1.0.2066.17015
    Win32 Version: 1.0.2066.17015
    CodeBase: file:///C:/Program%20Files/SC4Tool/sr_SC4Lib.DLL
----------------------------------------
System.Transactions
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Transactions/2.0.0.0__b77a5c561934e089/System.Transactions.dll
----------------------------------------
System.EnterpriseServices
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.EnterpriseServices/2.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
----------------------------------------
System.Configuration
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
Eyefinder
    Assembly Version: 1.0.4.2
    Win32 Version: 1.0.4.2
    CodeBase: file:///C:/Program%20Files/SC4Tool/Eyefinder.DLL
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

[ 本帖最后由 XBOX778461484 于 2011-8-4 09:10 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2012-1-6 17:58 | 显示全部楼层
引用:Timer.Interval属性在赋值为0的时候会抛出异常,而这个值是通过调用SystemParametersInfo这个Win32 API获取菜单显示延迟时间得到的。这样,为什么同一个软件在不同电脑上有不同效果,原因很清楚了——因为有的电脑使用了优化软件,菜单的显示延迟被“优化”成0了(优化软件就是渣渣,老是弄出各种各样的问题)
根据这一提示,下载并安装windows优化大师,找到菜单运行速度(这一项好找),把它调慢,然后点击“优化‘,再重新启动就OK了
回复 支持 反对

使用道具 举报

发表于 2012-1-10 14:59 | 显示全部楼层
LS,我用优化大师打开,看到的就是菜单运行速度就是慢,怎么处理呢,十分感谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 入住

本版积分规则

小黑屋|手机版|模拟城市中文网

GMT+8, 2024-5-17 23:16 , Processed in 0.042122 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表