感谢您的光临。
在我的桌面应用程序中,每当按下特定按钮时,我都希望将鼠标移至应用程序窗口的中心。为此,我将获取主窗口的位置,宽度和高度,然后使用User32.dll根据这些值设置鼠标光标的位置。
鼠标光标已移动,但是始终始终偏离中心。它的位置受pos,宽度和高度的影响,但是在测量所需的位置和设置之间似乎存在一些奇怪的缩放问题。基于this question及其重复,这就是我正在使用的内容:
static public double GetWindowLeft(Window window)
{
if (window.WindowState == WindowState.Maximized)
{
var leftField = typeof(Window).GetField("_actualLeft", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
return (double)leftField.GetValue(window);
}
else
return window.Left;
}
static public double GetWindowTop(Window window)
{
if (window.WindowState == WindowState.Maximized)
{
var leftField = typeof(Window).GetField("_actualTop", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
return (double)leftField.GetValue(window);
}
else
return window.Top;
}
static public void SetPosition(int a, int b)
{
SetCursorPos(a, b);
}
[DllImport("User32.dll")]
private static extern bool SetCursorPos(int X, int Y);
}
并在MainWindow方法中:
private void CenterMouse(object sender, RoutedEventArgs e)
{
double top = UCMethods.GetWindowTop(this);
double left = UCMethods.GetWindowLeft(this);
SetPosition((int)(left+left+ActualWidth) / 2, (int)(top + top + ActualHeight) / 2);
}
编辑::这似乎在我朋友的计算机上运行正常,但在我的机器上有补偿。我离屏幕左上角(0,0)越远,鼠标光标在该方向上的滞后性就越大(鼠标光标在左上方向上的偏移)。这个问题怎么可能是特定于设备的?
答案 0 :(得分:0)
这是解决方法:
def add_sheet(self, df, sheet, min_col, max_col, sheet_dim):
index_positions = list(df.index.values)
r = 1
for x in index_positions:
_row = df.loc[x].values
c = min_col
r += 1
for val in _row:
if c <= max_col:
sheet.cell(row=r, column=c).value = val
c += 1
答案 1 :(得分:0)
我也在其他地方问过这个问题,并设法从那里解决了这个问题。 Link to solution