【问题标题】:Change settings of a running process更改正在运行的进程的设置
【发布时间】:2010-10-24 17:11:59
【问题描述】:

我注意到,当一个进程第一次启动时,它只静态读取一些系统参数信息并保持它直到终止

这意味着,

如果对进程已经读取的系统参数进行了一些修改,它们将在进程重新启动之前反映。

例如启动记事本并输入“;”键盘上的键。现在将语言工具栏中的输入语言更改为西班牙语。现在再次按下键';'。尽管输入语言已更改为西班牙语,但按键仍然是英语(如按“;”键所示)。

理想情况下按下';'输入语言更改为西班牙语后,我们应该注意到'ñ'。

当我们重新启动记事本时,我们注意到';'结果是“ñ”,这意味着需要重新启动记事本进程才能生效。

是否有某种方式不需要重新启动进程来反映输入法的变化?

谢谢

【问题讨论】:

    标签: windows winapi dll process operating-system


    【解决方案1】:

    如果进程愿意,它可以监听各种系统范围设置的更改通知。想到wm_SettingChange 消息。

    如果没有写成这样的话,尝试进行一些其他进程荣誉设置更改是愚蠢的差事。如果程序尚未侦听更改通知并对其采取行动,则您无法使其采取不同的行动。

    记事本可能不是一个很好的例子;这是一个非常简单的程序,因此它不一定涵盖一个好的 Windows 程序应具备的所有细节。

    为了完善您的问题,您给出的“答案”谈到了使用SystemParametersInfo 更改系统的默认输入语言。当您调用该函数时,它将广播wm_SettingChange 消息。要收到更改通知,其他程序需要侦听该消息;以与您在编程环境中侦听任何其他窗口消息相同的方式执行此操作。

    当您收到该消息时,wParam 参数将为spi_GetDefaultInputLangspi_SetDefaultInputLang;我不知道是哪个。这就是你打电话给SystemParametersInfo 以找出设置的新值的提示。根据我刚刚在"Languages, Locales, and Keyboard Layouts" 中读到的内容,您应该使用从SystemParametersInfo 获得的HKL 值调用ActivateKeyboardLayout

    更改默认输入语言的进程不能强制其他进程使用它。在他们选择自己更改输入语言之前,他们将继续使用开始运行时的任何语言。这就是 default 设置和 current 设置之间的区别。

    【讨论】:

    • 罗布说的。当设置更改时,您不能使未设计为在设置更改时更新的程序开始更新。这是记事本的作者决定不编写代码的设计选择。
    猜你喜欢
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 2017-08-29
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2011-09-25
    相关资源
    最近更新 更多