Dav*_*ave 0 c# interop systemtime
我很难让SetSystemTime在我的C#代码中工作.SetSystemtime是一个kernel32.dll函数.我正在使用P/invoke(interop)来调用它.SetSystemtime返回false,错误为"Invalid Parameter".我已经发布了以下代码.我强调GetSystemTime工作得很好.我已经在Vista和Windows 7上对此进行了测试.根据我发现的一些新闻组帖子,我已经关闭了UAC.没有不同.我已经做了一些搜索这个问题.我找到了这个链接:http: //groups.google.com.tw/group/microsoft.public.dotnet.framework.interop/browse_thread/thread/805fa8603b00c267
报告问题但似乎没有找到解决方案.请注意,还提到了UAC,但我不确定这是不是问题.还要注意这个绅士没有得到实际的Win32Error.
非常感谢您的任何帮助或想法.安德鲁
码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace SystemTimeInteropTest
{
class Program
{
#region ClockDriftSetup
[StructLayout(LayoutKind.Sequential)]
public struct SystemTime
{
[MarshalAs(UnmanagedType.U2)]
public short Year;
[MarshalAs(UnmanagedType.U2)]
public short Month;
[MarshalAs(UnmanagedType.U2)]
public short DayOfWeek;
[MarshalAs(UnmanagedType.U2)]
public short Day;
[MarshalAs(UnmanagedType.U2)]
public short Hour;
[MarshalAs(UnmanagedType.U2)]
public short Minute;
[MarshalAs(UnmanagedType.U2)]
public short Second;
[MarshalAs(UnmanagedType.U2)]
public short Milliseconds;
}
[DllImport("kernel32.dll")]
public static extern void GetLocalTime(
out SystemTime systemTime);
[DllImport("kernel32.dll")]
public static extern void GetSystemTime(
out SystemTime systemTime);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool SetSystemTime(
ref SystemTime systemTime);
//[DllImport("kernel32.dll", SetLastError = true)]
//public static extern bool SetLocalTime(
//ref SystemTime systemTime);
[System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "SetLocalTime")]
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public static extern bool SetLocalTime([InAttribute()] ref SystemTime lpSystemTime);
#endregion ClockDriftSetup
static void Main(string[] args)
{
try
{
SystemTime sysTime;
GetSystemTime(out sysTime);
sysTime.Milliseconds += (short)80;
sysTime.Second += (short)3000;
bool bResult = SetSystemTime(ref sysTime);
if (bResult == false)
throw new System.ComponentModel.Win32Exception();
}
catch (Exception ex)
{
Console.WriteLine("Drift Error: " + ex.Message);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
有一种.Net方法来设置时间; 它默认情况下在C#中不可用.如果您添加Microsoft.VisualBasic
对项目的引用,那么您可以写:
Microsoft.VisualBasic.DateAndTime.TimeOfDay = DateTime.Now.AddSeconds(3000).AddMilliseconds(80);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3788 次 |
最近记录: |