情境上下文 - MS Word 插件。
语言 - C#
问题:
我正在尝试获取当前光标位置。我正在使用Application.Selection.Range
它返回InsertionPoint
。每次按Space,Tab
或Enter
键后,我会执行以下操作:MessageBox.Show(Application.Selection.Range.Start.ToString());
有时我会看到 MessageBox 有时具有正确的值 actual_value_of_insertion_point_position+128
。为什么插入点索引有时会增加到 128?我没有做任何具体的事情,我只是输入一些文本,按空格键,有时会看到预期的正确值,有时却没有。
更新 实际上,我的问题更深 -这是我的另一个 SO 问题,详细描述。我的计划:
1)当用户键入Space
记住插入点时 - 它返回下一个未来字母的位置。
2)如果用户输入了某个字母,而前一个键是空格,则表示用户输入了某个生词的第一个字母。如下创建范围Application.ActiveDocument.Range(remembered_pos,rem_pos+1)
并根据需要设置样式。
我的代码
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int pointerCode = Marshal.ReadInt32(lParam);
string pressedKey = ((Keys)pointerCode).ToString();
IntPtr curHandle = GetForegroundWindow();
if(curHandle==wordHandle)
{
//MessageBox.Show(app.ActiveDocument.Content.LanguageID +" "+ WdLanguageID.wdKazakh);
if(pressedKey.Equals("Space")||pressedKey.Equals("Return")||pressedKey.Equals("Tab"))
{
Word.Range r = app.Application.Selection.Range;
MessageBox.Show(app.Application.Selection.Type.ToString());
MessageBox.Show("-"+r.Start.ToString()+"-"+r.End.ToString()); // sometimes +128!
}
else if(firstAfterSpace!=-1)
{ // right now doesn't make sense
MessageBox.Show(firstAfterSpace.ToString());
//Word.Range rng = app.Application.ActiveDocument.Range(firstAfterSpace,firstAfterSpace+1);
//MessageBox.Show("-"+rng.Text+"-");
//rng.Underline = Word.WdUnderline.wdUnderlineNone;
firstAfterSpace = -1;
}
}
}
return CallNextHookEx(hookId, nCode, wParam, lParam);
}