如何实现窗体十秒钟之内无任何操作则自动最小化? 大家好 : 如何实现窗体在十秒钟之内无任何操作则自动最小化? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private const int WM_NCHITTEST = 0x84; private System.Threading.Timer timer; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { timer = new System.Threading.Timer(delegate { this.WindowState = FormWindowState.Minimized; }, null, 10000, 10000); } protected override void WndProc(ref Message m) { if (m.Msg == WM_NCHITTEST) timer.Change(10000, 10000); base.WndProc(ref m); } using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Runtime.InteropServices;[StructLayout(LayoutKind.Sequential)] public struct LASTINPUTINFO { [MarshalAs(UnmanagedType.U4)] public int cbSize; [MarshalAs(UnmanagedType.U4)] public uint dtTime; }//调用获取最后一次操作屏幕的时间(包括鼠标移动,键盘等) [DllImport("user32")] public static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); public long getIdleTick() { LASTINPUTINFO i = new LASTINPUTINFO(); i.cbSize = Marshal.SizeOf(i); if(!GetLastInputInfo(ref i)) return 0; return Environment.TickCount -(long)i.dtTime; }private void OnNotOperation_Load(object sender, System.EventArgs e) {//开始TIMER的运行 this.timer1.Interval=2000; this.timer1.Enabled =true; }private void timer1_Tick(object sender, System.EventArgs e) { long i = getIdleTick(); this.label1.Text = String.Format("zyzhang,你已經{0}ms沒有動電腦了",i);//20秒内如果没有动作就锁定屏幕 if(i>2*1000) { //this.WindowState = FormWindowState.Minimized;} 我想应该用time控件来弄吧,具体的就不知道啦! timer不是可以kill吗?c#中也可以吧。最小化后,停止timer就行了。 窗体启动之后,打开一个timer,然后倒计时啊,如果10秒钟没有事件发生就最小化了 Timer所触发的事件是在另一个工作线程中执行的,所以这里需要注意线程间对UI控件的调用,包括窗体本身,都不能直接调用的.下面将代码分开写出来,因为一次总回复不成功. public partial class Form1 : Form { private const int WM_NCHITTEST = 0x84; private System.Threading.Timer timer; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { try { //先获取回调函数 System.Threading.TimerCallback tc = new System.Threading.TimerCallback(GetMinimized); //然后再调用Timer类 timer = new System.Threading.Timer(tc, null, 10000, 10000); } catch (Exception ex) { MessageBox.Show(ex.Message); } } 接13楼代码: protected override void WndProc(ref Message m) { if (m.Msg == WM_NCHITTEST) timer.Change(10000, 10000); base.WndProc(ref m); } 接15楼代码://回调函数 private void GetMinimized(object sender) { if (InvokeRequired) { Invoke(new MethodInvoker(delegate() { this.WindowState = FormWindowState.Minimized; })); } else { this.WindowState = FormWindowState.Minimized; } }至此全部粘贴完毕!12,13,15,16楼是一个完整的代码. 关于GDI+绘制复杂线型 C# sql 删除行信息 行编号自动更新 C#删除EXCEL的某行的问题 高分求触发事件 C#与C# builder有什么不同 帮忙写个递归,查询某个目录下所有的文件,以及文件夹,分类显示 DevExpress.XtraNavBar 7.2 怎样在页面没有焦点的情况下,当用条形码扫描仪进行录入时,自动到某个指定的text框中? 关于。net多语言谁有好的解决方案。帮我有偿做下也行 在c#中如何做到动态数组 本地excel数据与远程服务器数据的比较 关于API函数的AnimateWindow
private const int WM_NCHITTEST = 0x84;
private System.Threading.Timer timer; public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
timer = new System.Threading.Timer(delegate { this.WindowState = FormWindowState.Minimized; }, null, 10000, 10000);
} protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCHITTEST)
timer.Change(10000, 10000);
base.WndProc(ref m);
}
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Runtime.InteropServices;[StructLayout(LayoutKind.Sequential)]
public struct LASTINPUTINFO
{
[MarshalAs(UnmanagedType.U4)]
public int cbSize;
[MarshalAs(UnmanagedType.U4)]
public uint dtTime;
}
//调用获取最后一次操作屏幕的时间(包括鼠标移动,键盘等)
[DllImport("user32")]
public static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
public long getIdleTick()
{
LASTINPUTINFO i = new LASTINPUTINFO();
i.cbSize = Marshal.SizeOf(i);
if(!GetLastInputInfo(ref i)) return 0;
return Environment.TickCount -(long)i.dtTime;
}
private void OnNotOperation_Load(object sender, System.EventArgs e)
{
//开始TIMER的运行
this.timer1.Interval=2000;
this.timer1.Enabled =true;
}private void timer1_Tick(object sender, System.EventArgs e)
{
long i = getIdleTick();
this.label1.Text = String.Format("zyzhang,你已經{0}ms沒有動電腦了",i);
//20秒内如果没有动作就锁定屏幕
if(i>2*1000)
{
//this.WindowState = FormWindowState.Minimized;
}
最小化后,停止timer就行了。
下面将代码分开写出来,因为一次总回复不成功.
{
private const int WM_NCHITTEST = 0x84;
private System.Threading.Timer timer; public Form1()
{
InitializeComponent();
}
{
try
{
//先获取回调函数
System.Threading.TimerCallback tc = new System.Threading.TimerCallback(GetMinimized);
//然后再调用Timer类
timer = new System.Threading.Timer(tc, null, 10000, 10000);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCHITTEST)
timer.Change(10000, 10000);
base.WndProc(ref m);
}
//回调函数
private void GetMinimized(object sender)
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate() { this.WindowState = FormWindowState.Minimized; }));
}
else
{
this.WindowState = FormWindowState.Minimized;
}
}
至此全部粘贴完毕!12,13,15,16楼是一个完整的代码.