首页 > 代码库 > InpOut32 CSharpExample.cs hacking
InpOut32 CSharpExample.cs hacking
/************************************************************************************ * InpOut32 CSharpExample.cs hacking * 说明: * 跟一下CSharpExample.cs中InpOut32怎么使用。 * * 2017-6-6 深圳 龙华樟坑村 曾剑锋 ***********************************************************************************/using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace InpOut32.Net{ public partial class CSharpExample : Form { /** * 加载dll相关处理函数 */ [DllImport("inpout32.dll")] private static extern UInt32 IsInpOutDriverOpen(); [DllImport("inpout32.dll")] private static extern void Out32(short PortAddress, short Data); [DllImport("inpout32.dll")] private static extern char Inp32(short PortAddress); [DllImport("inpout32.dll")] private static extern void DlPortWritePortUshort(short PortAddress, ushort Data); [DllImport("inpout32.dll")] private static extern ushort DlPortReadPortUshort(short PortAddress); [DllImport("inpout32.dll")] private static extern void DlPortWritePortUlong(int PortAddress, uint Data); [DllImport("inpout32.dll")] private static extern uint DlPortReadPortUlong(int PortAddress); [DllImport("inpoutx64.dll")] private static extern bool GetPhysLong(ref int PortAddress, ref uint Data); [DllImport("inpoutx64.dll")] private static extern bool SetPhysLong(ref int PortAddress, ref uint Data); [DllImport("inpoutx64.dll", EntryPoint="IsInpOutDriverOpen")] private static extern UInt32 IsInpOutDriverOpen_x64(); [DllImport("inpoutx64.dll", EntryPoint = "Out32")] private static extern void Out32_x64(short PortAddress, short Data); [DllImport("inpoutx64.dll", EntryPoint = "Inp32")] private static extern char Inp32_x64(short PortAddress); [DllImport("inpoutx64.dll", EntryPoint = "DlPortWritePortUshort")] private static extern void DlPortWritePortUshort_x64(short PortAddress, ushort Data); [DllImport("inpoutx64.dll", EntryPoint = "DlPortReadPortUshort")] private static extern ushort DlPortReadPortUshort_x64(short PortAddress); [DllImport("inpoutx64.dll", EntryPoint = "DlPortWritePortUlong")] private static extern void DlPortWritePortUlong_x64(int PortAddress, uint Data); [DllImport("inpoutx64.dll", EntryPoint = "DlPortReadPortUlong")] private static extern uint DlPortReadPortUlong_x64(int PortAddress); [DllImport("inpoutx64.dll", EntryPoint = "GetPhysLong")] private static extern bool GetPhysLong_x64(ref int PortAddress, ref uint Data); [DllImport("inpoutx64.dll", EntryPoint = "SetPhysLong")] private static extern bool SetPhysLong_x64(ref int PortAddress, ref uint Data); bool m_bX64 = false; public CSharpExample() { InitializeComponent(); try { uint nResult = 0; try { // 打开32位驱动,如果失败了,会引发异常,再加载64位驱动 nResult = IsInpOutDriverOpen(); Console.WriteLine("nResult1: " + nResult); } catch (BadImageFormatException) { Console.WriteLine("nResult2: " + nResult); nResult = IsInpOutDriverOpen_x64(); if (nResult != 0) m_bX64 = true; Console.WriteLine("nResult2: " + nResult); } // 加载32、64位驱动均失败了,就给出相关提示信息 if (nResult == 0) { lblMessage.Text = "Unable to open InpOut32 driver"; button1.Enabled = false; button2.Enabled = false; button3.Enabled = false; button4.Enabled = false; button5.Enabled = false; button6.Enabled = false; button7.Enabled = false; } } catch (DllNotFoundException ex) // dll查找是失败异常 { System.Diagnostics.Debug.WriteLine(ex.ToString()); lblMessage.Text = "Unable to find InpOut32.dll"; button1.Enabled = false; button2.Enabled = false; button3.Enabled = false; button4.Enabled = false; button5.Enabled = false; button6.Enabled = false; button7.Enabled = false; } } private void button1_Click(object sender, EventArgs e) { try { // 字符串转16位short类型整数 short iPort = Convert.ToInt16(textBox1.Text); char c; if (m_bX64) c = Inp32_x64(iPort); else c = Inp32(iPort); // 将读取的数据显示出来 textBox2.Text = Convert.ToInt32(c).ToString(); } catch (Exception ex) { MessageBox.Show("An error occured:\n" + ex.Message); } } private void button2_Click(object sender, EventArgs e) { try { // 字符串转16位short类型整数 short iPort = Convert.ToInt16(textBox1.Text); short iData =http://www.mamicode.com/ Convert.ToInt16(textBox2.Text); textBox2.Text = ""; if (m_bX64) Out32_x64(iPort, iData); else Out32(iPort, iData); } catch (Exception ex) { MessageBox.Show("An error occured:\n" + ex.Message); } } private void button3_Click(object sender, EventArgs e) { try { short iPort = Convert.ToInt16(textBox1.Text); ushort s; if (m_bX64) s = DlPortReadPortUshort_x64(iPort); else s = DlPortReadPortUshort(iPort); textBox2.Text = Convert.ToUInt16(s).ToString(); } catch (Exception ex) { MessageBox.Show("An error occured:\n" + ex.Message); } } private void button4_Click(object sender, EventArgs e) { try { int nPort = Convert.ToInt32(textBox1.Text); uint l; if (m_bX64) l = DlPortReadPortUlong_x64(nPort); else l = DlPortReadPortUlong(nPort); textBox2.Text = l.ToString(); } catch (Exception ex) { MessageBox.Show("An error occured:\n" + ex.Message); } } private void button5_Click(object sender, EventArgs e) { try { short sPort = Convert.ToInt16(textBox1.Text); ushort iData =http://www.mamicode.com/ Convert.ToUInt16(textBox2.Text); textBox2.Text = ""; if (m_bX64) DlPortWritePortUshort_x64(sPort, iData); else DlPortWritePortUshort(sPort, iData); } catch (Exception ex) { MessageBox.Show("An error occured:\n" + ex.Message); } } private void button6_Click(object sender, EventArgs e) { try { int nPort = Convert.ToInt32(textBox1.Text); uint nData =http://www.mamicode.com/ Convert.ToUInt32(textBox2.Text); textBox2.Text = ""; if (m_bX64) DlPortWritePortUlong_x64(nPort, nData); else DlPortWritePortUlong(nPort, nData); } catch (Exception ex) { MessageBox.Show("An error occured:\n" + ex.Message); } } // 参考:InpOut32 InputTest.cpp hacking // http://www.cnblogs.com/zengjfgit/p/6945758.html private void Beep(uint freq) { if (m_bX64) { Out32_x64(0x43, 0xB6); Out32_x64(0x42, (byte)(freq & 0xFF)); Out32_x64(0x42, (byte)(freq >> 9)); System.Threading.Thread.Sleep(10); Out32_x64(0x61, (byte)(Convert.ToByte(Inp32_x64(0x61)) | 0x03)); } else { Out32(0x43, 0xB6); Out32(0x42, (byte)(freq & 0xFF)); Out32(0x42, (byte)(freq >> 9)); System.Threading.Thread.Sleep(10); Out32(0x61, (byte)(Convert.ToByte(Inp32(0x61)) | 0x03)); } } private void StopBeep() { if (m_bX64) Out32_x64(0x61, (byte)(Convert.ToByte(Inp32_x64(0x61)) & 0xFC)); else Out32(0x61, (byte)(Convert.ToByte(Inp32(0x61)) & 0xFC)); } private void CSharpExample_Load(object sender, EventArgs e) { // 启动的时候相当于单击一次 button7_Click(this, null); } private void ThreadBeeper() { for (uint i = 440000; i < 500000; i += 1000) { uint freq = 1193180000 / i; // 440Hz Beep(freq); } StopBeep(); } private void button7_Click(object sender, EventArgs e) { System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadBeeper)); t.Start(); } }}
InpOut32 CSharpExample.cs hacking
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。