打印

摆脱小农意识,C#学完出学堂, 交上毕业“论文”

[复制链接]
5432|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2008-10-31 18:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C#, se, TE, Box, TI
Program.cs文件,主要是建立互斥,阻止多实例运行(方法还有许多)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Threading;//Mutex类需要

namespace WindowsFormsApplication2
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            bool createdNew; 
            Mutex mutexFile = new Mutex(false, "WindowsFormsApplication2", out createdNew);//创建互斥
            if (createdNew)
            {//成功创建无进程运行
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            else
            {//创建失败有进程在运行
                MessageBox.Show("对不起,有一进程在工作", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
    }
}

Form1.cs文件,程序的主体,主要是VS如何调用DLL,关闭窗口提示,异常的捕捉等.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;//加动态链接库需要

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        [DllImport("winio.dll")]
        public static extern bool InitializeWinIo();
        [DllImport("winio.dll")]
        public static extern bool GetPortVal(IntPtr wPortAddr, out int pdwPortVal, byte bSize);
        [DllImport("winio.dll")]
        public static extern bool SetPortVal(uint wPortAddr, IntPtr dwPortVal, byte bSize);
        [DllImport("winio.dll")]
        public static extern byte MapPhysToLin(byte pbPhysAddr, uint dwPhysSize, IntPtr PhysicalMemoryHandle);
        [DllImport("winio.dll")]
        public static extern bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle, byte pbLinAddr);
        [DllImport("winio.dll")]
        public static extern bool GetPhysLong(IntPtr pbPhysAddr, byte pdwPhysVal);
        [DllImport("winio.dll")]
        public static extern bool SetPhysLong(IntPtr pbPhysAddr, byte dwPhysVal);
        [DllImport("winio.dll")]
        public static extern void ShutdownWinIo();
        [DllImport("user32.dll")]
        public static extern int MapVirtualKey(uint Ucode, uint uMapType);

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {//捕捉窗体Close事件,关闭窗口时提示
            if (MessageBox.Show("请您确认是否退出(Y/N)", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
            {
                try
                {
                    ShutdownWinIo();
                }
                catch (System.Exception error)
                {//WinIO卸载失败异常
                    MessageBox.Show(error.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                e.Cancel = false;//允许退出系统
            }
            else
            {
                e.Cancel = true;//阻止退出系统
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {//Timer定时到事件
            toolStripStatusLabel3.Text = System.DateTime.Now.ToString();
            if (toolStripProgressBar1.Value < toolStripProgressBar1.Maximum)
            {
                toolStripProgressBar1.Value += toolStripProgressBar1.Step;
            }
            else
            {
                toolStripProgressBar1.Value = toolStripProgressBar1.Minimum;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {//WinIO读操作
            int pdwPortVal = 0;
            try
            {
                uint wPortAddr = Convert.ToUInt32(comboBox1.Text, 16);
                if (GetPortVal((IntPtr)wPortAddr, out pdwPortVal, sizeof(byte)))
                {
                    textBox2.Text = string.Format("{0:x02}", (byte)pdwPortVal);
                }
                else
                {
                    MessageBox.Show("WinIO读操作失败!!!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            catch (System.Exception error)
            {//读出操作异常处理
                MessageBox.Show(error.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            for (int i = 0; i < 8; i ++)
            {
                switch (i)
                {
                    case 0:
                        checkBox8.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 1:
                        checkBox7.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 2:
                        checkBox6.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 3:
                        checkBox5.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 4:
                        checkBox4.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 5:
                        checkBox3.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 6:
                        checkBox2.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 7:
                        checkBox1.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {//delphi一般在此初始化
            try
            {
                InitializeWinIo();
            }
            catch (System.Exception error)
            {//WinIO加载失败异常处理
                MessageBox.Show(error.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {//WinIO写操作
            try
            {
                uint wPortAddr = Convert.ToUInt32(comboBox1.Text, 16);
                int pdwPortVal = Convert.ToInt32(textBox1.Text, 16);
                if (!SetPortVal(wPortAddr, (IntPtr)pdwPortVal, sizeof(byte)))
                {
                    MessageBox.Show("WinIO写入操作失败!!!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            catch (System.Exception error)
            {//写入操作异常处理
                MessageBox.Show(error.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {//与delphi一样的处理方法
            char ch = e.KeyChar;
            if (!((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')))
            {
                switch (ch)
                {
                    case '\x08'://退格
                    case '\x0d'://回车
                        break;//放过
                    default:
                        e.KeyChar = '\x0';//放弃输入的非法字符
                        MessageBox.Show("请正确输入16进制数!!!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        break;
                }
            }
            else
            {//合法16进制数
                e.KeyChar |= ' ';//强制转换为小写字母
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {//WinIO读操作
            int pdwPortVal = 0;
            try
            {
                uint wPortAddr = Convert.ToUInt32(comboBox1.Text, 16) + 1;//状态口
                if (GetPortVal((IntPtr)wPortAddr, out pdwPortVal, sizeof(byte)))
                {
                    textBox3.Text = string.Format("{0:x02}", (byte)pdwPortVal);
                }
                else
                {
                    MessageBox.Show("WinIO读操作失败!!!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            catch (System.Exception error)
            {//读出操作异常处理
                MessageBox.Show(error.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            for (int i = 0; i < 8; i++)
            {
                switch (i)
                {
                    case 0:
                        checkBox9.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 1:
                        checkBox10.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 2:
                        checkBox11.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 3:
                        checkBox12.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 4:
                        checkBox13.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 5:
                        checkBox14.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 6:
                        checkBox15.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 7:
                        checkBox16.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                }
            }
        }

        private void textBox4_KeyPress(object sender, KeyPressEventArgs e)
        {//与delphi一样的处理方法
            char ch = e.KeyChar;
            if (!((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')))
            {
                switch (ch)
                {
                    case '\x08'://退格
                    case '\x0d'://回车
                        break;//放过
                    default://捕捉到的非法字符
                        e.KeyChar = '\x0';//放弃输入的非法字符
                        MessageBox.Show("请正确输入16进制数!!!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        break;
                }
            }
            else
            {//合法16进制数
                e.KeyChar |= ' ';//强制转换为小写字母
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {//控制口WinIO写操作
            try
            {
                uint wPortAddr = Convert.ToUInt32(comboBox1.Text, 16) + 2;//控制口
                int pdwPortVal = Convert.ToInt32(textBox4.Text, 16);
                if (!SetPortVal(wPortAddr, (IntPtr)pdwPortVal, sizeof(byte)))
                {
                    MessageBox.Show("WinIO写入操作失败!!!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            catch (System.Exception error)
            {//写入操作异常处理
                MessageBox.Show(error.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {//控制口WinIO读操作
            int pdwPortVal = 0;
            try
            {
                uint wPortAddr = Convert.ToUInt32(comboBox1.Text, 16) + 2;//控制口
                if (GetPortVal((IntPtr)wPortAddr, out pdwPortVal, sizeof(byte)))
                {
                    textBox5.Text = string.Format("{0:x02}", (byte)pdwPortVal);
                }
                else
                {
                    MessageBox.Show("WinIO读操作失败!!!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            catch (System.Exception error)
            {//读出操作异常处理
                MessageBox.Show(error.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            for (int i = 0; i < 8; i++)
            {
                switch (i)
                {
                    case 0:
                        checkBox17.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 1:
                        checkBox18.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 2:
                        checkBox19.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 3:
                        checkBox20.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 4:
                        checkBox21.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 5:
                        checkBox22.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 6:
                        checkBox23.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                    case 7:
                        checkBox24.Checked = ((pdwPortVal & (1 << i)) != 0) ? true : false;
                        break;
                }
            }
        }

        private void xToolStripMenuItem_Click(object sender, EventArgs e)
        {//主菜单内退出系统
            Close();
        }

        private void aToolStripMenuItem_Click(object sender, EventArgs e)
        {//主菜单的帮助
            MessageBox.Show("C#学习菜鸟作\nHotPower@126.com", "并口调试帮助提示", MessageBoxButtons.OK);
        }

    }
}

相关帖子

沙发
hotpower|  楼主 | 2008-10-31 18:30 | 只看该作者

哈哈~~~俺以后不玩CVI,BCB,DELPHI,VB,VC了~~~



使用特权

评论回复
板凳
dengm| | 2008-10-31 19:01 | 只看该作者

c# == C++++

C# ==
        ++
      C ||
        ++

使用特权

评论回复
地板
ch2003_23| | 2008-10-31 19:14 | 只看该作者

hotpower成精了?学得这么快,佩服

使用特权

评论回复
5
hotpower|  楼主 | 2008-10-31 19:20 | 只看该作者

晕~~~和delphi操作一个套路,没什么学的~~~

俺不学都知道事件应该加到何处~~~


哈哈~~~摆脱“技巧”方能“熟能生巧”~~~

俺基本3天就会了~~~(可能多说了2天)

使用特权

评论回复
6
xiaoaihua| | 2008-10-31 19:26 | 只看该作者

我咋就没有那么好的天份呢?

使用特权

评论回复
7
HWM| | 2008-10-31 19:29 | 只看该作者

“层次”越高越好弄,否则前人的工作就没价值啦。

关键是摆脱“机器”思维,回归“人类”思维。

使用特权

评论回复
8
sodwell| | 2008-10-31 20:36 | 只看该作者

re

呵呵 是这样的!
HOT大叔有时间就学习学习QT吧 现在出QT4了,真正的跨平台,开源,学习乐趣无穷!
代码WINDOWS LINUX都可使用
学习WINDOWS编程 我怎么感觉不到乐趣了....... 

使用特权

评论回复
9
hotpower|  楼主 | 2008-10-31 21:13 | 只看该作者

农家无银两~~~别人下班俺上学堂~~~

饿了凉水+馒头~~~

使用特权

评论回复
10
tdh03z| | 2008-10-31 22:02 | 只看该作者

晕,现在内存这么便宜也不扩充下

使用特权

评论回复
11
hotpower|  楼主 | 2008-10-31 23:03 | 只看该作者

晕~~~这是村里的~~~俺家里的T23都用了快6年了~~~

夜校上学堂结束~~~

“功课太繁重”~~~真想呕吐~~~

使用特权

评论回复
12
程序匠人| | 2008-10-31 23:12 | 只看该作者

裤子来了

使用特权

评论回复
13
hexenzhou| | 2008-11-1 08:46 | 只看该作者

感觉菜农不务正业,东戳一下,西戳一下。

使用特权

评论回复
14
hotpower|  楼主 | 2008-11-1 09:28 | 只看该作者
15
jack.king| | 2008-11-1 09:32 | 只看该作者

大叔的东西太多了我都眼花缭乱了

使用特权

评论回复
16
hotpower|  楼主 | 2008-11-1 09:44 | 只看该作者

多上学堂就不会“花眼”~~~

年轻时贪玩整天下棋耽误了“学业”~~~

如今别人休假,俺继续上“学堂”,总感觉比下棋“务些正业”~~~

哈哈~~~继续摆脱“技巧”,也好C~~~

使用特权

评论回复
17
sz_kd| | 2008-11-1 09:50 | 只看该作者

厉害

使用特权

评论回复
18
linqing171| | 2008-11-1 11:39 | 只看该作者

c#继承了delphi的快速开发 的优势

hot大叔跑的太快了,微软更新不过来了,没有新东西了。c#还没有普及呢。


风格上就是一个delphi。隐藏了消息等做程序的人不关心的过程,只有功能才是有用的。

虽然库函数效率很高,但是framework需要另外安装,并且性能的代价是内存的占用,如果内存达不到要求,性能反而更低。。。。。。。

等待 vista 普及,等待黑屏,为什么打开自动更新还不黑屏? 难道俺是番茄版的原因?

使用特权

评论回复
19
hsp8031| | 2008-11-1 12:05 | 只看该作者

三天即会?层次太低!

  低级语言只有高层次的人员才能玩。
  语言越高级,入门的门栏越低,低层次人员都可玩。要不现在单片机这么普及。
  等到有一天把人的语言写入单片机即可操控时,您也就是一个真正的菜农啦!
  如果真有这样的编译器,可每人写的单片机的效率还是不会一样。别把思想看成技巧,更别把技巧混谈为淫技!

使用特权

评论回复
20
dengm| | 2008-11-1 12:14 | 只看该作者

如果扩大 framework 一点,把win32 API Delete,内存就不用多少了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1538

主题

21697

帖子

506

粉丝