问题:使用c#调用win32 Api时,在32位win7下执行正常。win10 64位下执行无效,不报错。
源代码:
public static void SetWndLong()
{
Help.DebugWrite(this, "EditPWDWindow...");
Help.DebugWrite(this, "Style Chenge...{0}", Style);
Style &= ~Win32Api.ES_PASSWORD;
//Win32Api.SetWindowLong(HWnd, Win32Api.GWL_STYLE, Style);
this.RunApi(() => Win32Api.SetWindowLongPtr(HWnd, Win32Api.GWL_STYLE, Style));
Help.DebugWrite(this, "Style Chenge.[{0}[{1}]", Style, Win32Api.GetWindowLong(pHWnd, Win32Api.GWL_STYLE));
}
public static void RunApi(this object o, Action run)
{
run();
Help.DebugWrite(null, Help.LongToString(Marshal.GetLastWin32Error(),"err"));
}
win7 32位结果如下:
121032.8284 tId[ 1] o[0x116f450,18281552D] Style Change...1073807520
121032.8284 tId[ 1] err0x 5, 5D
121032.8284 tId[ 1] o[0x116f450,18281552D] Style Change.[1073807488][1073807520][0]
结果显示SetWindowLong并未生效。
解决方案:在win10下使用管理员权限运行visual studio 2017。尽管输入显示未更改,但实际已经可以通过SetWindowText改变Edit内容。