日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

图解C# 调用Win32 API 示例程序

發布時間:2025/4/14 C# 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解C# 调用Win32 API 示例程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 彈出消息框和發聲

先上代碼;相關函數不解釋;網上比較容易查到;

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 win32demo1 {public partial class Form1 : Form{[DllImport("User32.dll")]public static extern int MessageBox(int h, string m, string c, int type);[DllImport("kernel32.dll")]public static extern bool Beep(int frequency, int duration);public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){MessageBox(0, "Hello Win32 API", "C#", comboBox1.SelectedIndex);}private void button2_Click(object sender, EventArgs e){Random random = new Random();for (int i = 0; i < 10000; i++){Beep(random.Next(10000), 100);}}private void Form1_Load(object sender, EventArgs e){comboBox1.Items.Add("確定按鈕");comboBox1.Items.Add("確定、取消按鈕");comboBox1.Items.Add("終止、重試、忽略按鈕");comboBox1.Items.Add("是、否、取消按鈕");comboBox1.Items.Add("是、否按鈕");comboBox1.Items.Add("重試取消鈕");comboBox1.Items.Add("終止、重試、繼續");}} }
可以選擇彈出不同類別的消息框;如下圖;

另上面發聲的代碼,重復1萬,能響一段時間了;







當調用非托管API函數時,它將依次執行以下操作:?
1.查找包含該函數的 DLL。
2.將該 DLL 加載到內存中。
3.查找函數在內存中的地址并將其參數推到堆棧上,以封送所需的數據(注意:只在第一次調用函數時,才會查找和加載 DLL 并查找函數在內存中的地址。)。
4.將控制權轉移給非托管函數。
5.對非托管 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 Power1 {public partial class Form1 : Form{public struct SystemPowerStatus{public byte ACLineStatus; //交流電源狀態public byte batteryFlag; //電池充電狀態public byte batteryLifePercent;//電池還有百分之幾能充滿.0~100,若未知則為255public byte reserved1;public int batteryLifeTime;//秒為單位的電池剩余電量, 若未知則為-1public int batteryFullLifeTime;//秒為單位的電池充滿電的電量,若未知則為-1}enum ACLineStatus : byte{Offline = 0,Online = 1,Unknown = 255,}enum BatteryFlag : byte{High = 1,//高,電量大于66%Low = 2,//低,小于33%Critical = 4,//極低,小于5%Charging = 8,//充電中NoSystemBattery = 128,//沒有電池Unknown = 255,}[DllImport("kernel32.dll")]public static extern bool GetSystemPowerStatus(ref SystemPowerStatus systemPowerStatus);public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){SystemPowerStatus sps = new SystemPowerStatus();//SystemPowerStatus sps;GetSystemPowerStatus(ref sps);textBox1.Text = "交流電源狀態:" + getACLineStr(sps.ACLineStatus);textBox1.Text = textBox1.Text + Environment.NewLine + "電池充電狀態:" + getBatteryFlag(sps.batteryFlag);textBox1.Text = textBox1.Text + Environment.NewLine + "電量百分比:" + sps.batteryLifePercent.ToString();textBox1.Text = textBox1.Text + Environment.NewLine + "秒為單位的電池剩余電量:"+sps.batteryLifeTime.ToString();textBox1.Text = textBox1.Text + Environment.NewLine + "秒為單位的電池充滿電的電量:"+sps.batteryFullLifeTime.ToString();}private void Form1_Load(object sender, EventArgs e){}private string getACLineStr(int n){switch (n){case 0:return "離線";break;case 1:return "在線";break;case 255:return "未知";break;default:return "未知";break;}}private string getBatteryFlag(int n){switch (n){case 1:return "高,電量大于66%";break;case 2:return "低,小于33%";break;case 4:return "極低,小于5%";break;case 8:return "充電中";break;case 128:return "沒有電池";break;case 255:return "未知";break;default:return "未知";break;}}} }

總結

以上是生活随笔為你收集整理的图解C# 调用Win32 API 示例程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。