首页 新闻 会员 周边 捐助

需要获取登录时间放到注册表中,时间快结束时,判断一下就行了

0
悬赏园豆:50 [已解决问题] 解决于 2015-07-06 09:24

第一次提问,说的不清楚望见谅

最好能有个实例,获取登录时间方注册表中,时间结束判断就行,利用计时器只能让用户登录一星期不现实,最好将时间方注册表中

目前系统需要做到的是:例如发现网卡ID与数据库中网卡ID不同时,计时器启动,一星期后结束,系统退出,该用户无法登录。

Mask1的主页 Mask1 | 初学一级 | 园豆:113
提问于:2015-07-03 15:44
< >
分享
最佳答案
0

用net/WPF实现了简单的,其他语言类似

//定时器
        private System.Windows.Threading.DispatcherTimer _timer;
        //限制的日期
        private DateTime _limiteDt;
        //当前当前时间超过限制日期时候给出的报警处理类
        private void ShowWarnMessage()
        {
            //弹出提示消息
            //其他的操作 

        }

        //初始化定时器
        private void InitializeTimer()
        {
            this._timer = new System.Windows.Threading.DispatcherTimer();
            this._timer.Interval = TimeSpan.FromMilliseconds(1000); //1s
            this._timer.Tick += _timer_Tick;
        }

        //每一秒后定时器处理的事件
        void _timer_Tick(object sender, EventArgs e)
        {
            //关键处理,如果当前的时间超过了限制的时间,那么直接弹出警告
            if(DateTime.Now >= this._limiteDt )
            {
                ShowWarnMessage();
                this.stop();
            
                return ;
            }

            System.Diagnostics.Debug.WriteLine("---");
        }


        private void start()
        {
            this._limiteDt = DateTime.Now.Add(TimeSpan.FromSeconds(10));
            this._timer.Start();
        }

        private void stop()
        {
            if (this._timer.IsEnabled)
            {
                this._timer.Stop();
            }
        }

        //用于比较两个ID是否一样,不一样就启动定时器
        private void doHandle(string user_input_phid, string local_phid)
        {
            if (user_input_phid != local_phid)
            {
                start();
            }
        }
收获园豆:50
visonme | 小虾三级 |园豆:1674 | 2015-07-03 17:05

我是菜鸟,没怎么看懂

目前做的是用winfrom窗体做的,登录后判断

//登录
private void button1_Click(object sender, EventArgs e)
{

denglu(textBox1.Text,textBox2.Text);
//获取系统网卡id
string NetworkID1="";
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc2 = mc.GetInstances();
//ManagementBaseObject inPar = null;
foreach (ManagementObject mo in moc2)
{

if ((bool)mo["IPEnabled"] == true)

NetworkID1 = mo["MacAddress"].ToString();
mo.Dispose();
}
//获取数据网卡id
string sql = "select NetworkID from Network where id=1";
SqlConnection conn = new SqlConnection(strcon);
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlParameter pm = new SqlParameter();
pm = new SqlParameter("@a",NetworkID1);

cmd.Parameters.Add(pm);

object obj = cmd.ExecuteScalar();
conn.Close();

MessageBox.Show("网卡id"+NetworkID1);
MessageBox.Show("数据库网卡id"+obj);
if (obj==NetworkID1)
{
MessageBox.Show("匹配");
}
else
{
MessageBox.Show("不匹配");

//关键点多线程定时器

}

 

}

线程没学好,计时器这个地方是用多线程的应该,同时执行用户操作,及计时器运行,互不影响

描述的不是很专业

Mask1 | 园豆:113 (初学一级) | 2015-07-04 09:22

最好的方法不用计时器(用户中途退出问题),将登录后时间放到注册表中,最后快到时间的时候判断一下就行了,

Mask1 | 园豆:113 (初学一级) | 2015-07-04 09:36

数据能插入到注册表中,问题是时间改如何存放

public static PageVisibility OpenAfterStart()
{
Microsoft.Win32.RegistryKey registryKey;
PageVisibility visibility = PageVisibility.Visible;

// HKCU\Software\RegeditStorage
registryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\RegistryStorage");
if (registryKey != null)
{
visibility = (string)registryKey.GetValue("PageVisibility") == PageVisibility.Hide.ToString() ?
PageVisibility.Hide : PageVisibility.Visible;
registryKey.Close();
}

return visibility;
}

public static void SaveBeforeExit(PageVisibility visibility)
{
Microsoft.Win32.RegistryKey registryKey;

// HKCU\Software\RegeditStorage
registryKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\RegistryStorage");
registryKey.SetValue("PageVisibility", visibility.ToString());
registryKey.Close();
}
}

public enum PageVisibility
{
Visible,
Hide
}

Mask1 | 园豆:113 (初学一级) | 2015-07-04 10:10

@Mask-male: 

不清楚你是不是有特殊的需求,一般你能操作注册表了,那么直接将时间转为字符串存储到注册表就可以了,需要的时候再读取转换为dateTime或者其他类型就可以了。

关于定时器问题? 如果你当心定时器会影响到程序,可以考虑将监测这部分转移到window服务来做或者使用类似quartz这样的第三方库来做,至于只用线程来做的话,其实你还是要定时判断的。

visonme | 园豆:1674 (小虾三级) | 2015-07-06 08:55

@visonme: 差不多就是这样子吧,我再看看写入和读取注册表就差不多了

Mask1 | 园豆:113 (初学一级) | 2015-07-06 09:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册