- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章ASP.NET微信公众号客服接口由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例为大家分享了ASP.NET微信客服接口的具体代码,供大家参考,具体内容如下 。
Kf_account.cs代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
|
public
partial
class
Kf_account : Form
{
private
readonly
DataTable adt_user =
new
DataTable();
private
readonly
string
as_INIFile = Application.StartupPath +
"\\user.ini"
;
public
Kf_account()
{
BindUser();
}
private
void
BindUser()
{
if
(!File.Exists(as_INIFile))
{
var str =
new
StringBuilder();
str.Append(
";内容由程序自动生成,请不要修改此文件内容\r\n"
);
str.Append(
"[total]\r\n"
);
str.Append(
"total=\r\n"
);
str.Append(
"[count]\r\n"
);
str.Append(
"count=\r\n"
);
str.Append(
"[user]\r\n"
);
//StreamWriter sw = default(StreamWriter);
//sw = File.CreateText(ls_INIFile);
//sw.WriteLine(str.ToString());
//sw.Close();
File.WriteAllText(as_INIFile, str.ToString(), Encoding.Unicode);
File.SetAttributes(as_INIFile, FileAttributes.Hidden);
}
CheckForIllegalCrossThreadCalls =
false
;
InitializeComponent();
Icon = Resource1.ico;
lkl_num.Text = INIFile.ContentValue(
"total"
,
"total"
, as_INIFile);
lkl_num_c.Text = INIFile.ContentValue(
"count"
,
"count"
, as_INIFile);
pictureBox1.Visible =
true
;
var sr =
new
StreamReader(as_INIFile, Encoding.Unicode);
String line;
int
li_count = 0;
adt_user.Columns.Clear();
adt_user.Columns.Add(
"username"
, Type.GetType(
"System.String"
));
adt_user.Columns.Add(
"openid"
, Type.GetType(
"System.String"
));
while
((line = sr.ReadLine()) !=
null
)
{
li_count++;
if
(li_count > 6)
{
line = SysVisitor.Current.GetFormatStr(line);
DataRow newRow;
newRow = adt_user.NewRow();
newRow[
"username"
] = line.Substring(0, line.LastIndexOf(
'='
));
newRow[
"openid"
] = line.Substring(line.LastIndexOf(
'='
) + 1);
adt_user.Rows.Add(newRow);
}
}
sr.Close();
dataGridView1.AutoGenerateColumns =
false
;
dataGridView1.DataSource = adt_user;
//dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells;
lbl_count.Text =
"共"
+ (li_count - 6) +
"行"
;
pictureBox1.Visible =
false
;
}
private
void
btn_GetUser_Click(
object
sender, EventArgs e)
{
if
(MessageBox.Show(
@"拉取用户信息的速度取决于你的关注数与网络速度,
可能需要几分钟甚至更长时间。
使用此功能将消耗大量用户管理接口配额。
要继续此操作吗?"
,
"提示:"
, MessageBoxButtons.YesNo) == DialogResult.No)
{
return
;
}
var thr =
new
Thread(Get_user_list);
thr.Start();
}
private
void
Get_user_list()
{
File.Delete(as_INIFile);
var str =
new
StringBuilder();
str.Append(
";内容由程序自动生成,请不要修改此文件内容\r\n"
);
str.Append(
"[total]\r\n"
);
str.Append(
"total=\r\n"
);
str.Append(
"[count]\r\n"
);
str.Append(
"count=\r\n"
);
str.Append(
"[user]\r\n"
);
File.WriteAllText(as_INIFile, str.ToString(), Encoding.Unicode);
File.SetAttributes(as_INIFile, FileAttributes.Hidden);
string
ls_appid = INIFile.ContentValue(
"weixin"
,
"Appid"
);
string
ls_secret = INIFile.ContentValue(
"weixin"
,
"AppSecret"
);
string
access_token =
""
;
string
menu =
""
;
if
(ls_appid.Length != 18 || ls_secret.Length != 32)
{
MessageBox.Show(
"你的Appid或AppSecret不对,请检查后再操作"
);
return
;
}
access_token = SysVisitor.Current.Get_Access_token(ls_appid, ls_secret);
if
(access_token ==
""
)
{
MessageBox.Show(
"Appid或AppSecret不对,请检查后再操作"
);
return
;
}
menu = SysVisitor.Current.GetPageInfo(
"https://api.weixin.qq.com/cgi-bin/user/get?access_token="
+ access_token);
if
(menu.Substring(2, 7) ==
"errcode"
)
{
MessageBox.Show(
"拉取失败,返回消息:\r\n"
+ menu);
}
JObject json = JObject.Parse(menu);
lkl_num.Text = json[
"total"
].ToString();
INIFile.SetINIString(
"total"
,
"total"
, lkl_num.Text, as_INIFile);
lkl_num_c.Text = json[
"count"
].ToString();
INIFile.SetINIString(
"count"
,
"count"
, lkl_num_c.Text, as_INIFile);
int
li_count =
int
.Parse(json[
"count"
].ToString());
btn_GetUser.Enabled =
false
;
pictureBox1.Visible =
true
;
FileStream fs =
null
;
Encoding encoder = Encoding.Unicode;
for
(
int
i = 0; i < li_count; i++)
{
string
openid, username;
openid = Get_UserName(json[
"data"
][
"openid"
][i].ToString());
username = json[
"data"
][
"openid"
][i].ToString();
//INIFile.SetINIString("user", openid, username, as_INIFile);
byte
[] bytes = encoder.GetBytes(openid +
"="
+ username +
" \r\n"
);
fs = File.OpenWrite(as_INIFile);
//设定书写的開始位置为文件的末尾
fs.Position = fs.Length;
//将待写入内容追加到文件末尾
fs.Write(bytes, 0, bytes.Length);
fs.Close();
lab_nums.Text =
"已拉取"
+ i +
"个,还剩"
+ (li_count - i) +
"个,请耐心等待"
;
}
lab_nums.Text =
""
;
//BindUser();
btn_GetUser.Enabled =
true
;
pictureBox1.Visible =
false
;
MessageBox.Show(
"已全部拉取完毕,请重新打开该窗口"
);
}
/// <summary>
/// 获取用户信息详情,返回json
/// </summary>
/// <param name="as_openid"></param>
private
string
Get_User(
string
as_openid)
{
string
ls_json =
""
;
string
access_token =
""
;
access_token = SysVisitor.Current.Get_Access_token();
ls_json =
SysVisitor.Current.GetPageInfo(
"https://api.weixin.qq.com/cgi-bin/user/info?access_token="
+ access_token +
"&openid="
+ as_openid +
"&lang=zh_CN"
);
return
ls_json;
}
/// <summary>
/// 获取用户用户的昵称
/// </summary>
private
string
Get_UserName(
string
as_openid)
{
string
ls_json =
""
;
ls_json = Get_User(as_openid);
string
username =
""
;
JObject json = JObject.Parse(ls_json);
username = json[
"nickname"
].ToString();
username = SysVisitor.Current.GetFormatStr(username);
return
username;
}
private
void
btn_search_Click(
object
sender, EventArgs e)
{
string
username = txt_search.Text.Trim();
if
(
string
.IsNullOrWhiteSpace(username))
{
return
;
}
DataRow[] datarows = adt_user.Select(
"username like '%"
+ username +
"%'"
);
var ldt =
new
DataTable();
ldt.Columns.Clear();
ldt.Columns.Add(
"username"
, Type.GetType(
"System.String"
));
ldt.Columns.Add(
"openid"
, Type.GetType(
"System.String"
));
ldt = ToDataTable(datarows);
try
{
lbl_count.Text = ldt.Rows.Count.ToString();
}
catch
{
}
dataGridView1.AutoGenerateColumns =
false
;
dataGridView1.DataSource = ldt;
}
public
DataTable ToDataTable(DataRow[] rows)
{
if
(rows ==
null
|| rows.Length == 0)
return
null
;
DataTable tmp = rows[0].Table.Clone();
// 复制DataRow的表结构
foreach
(DataRow row
in
rows)
tmp.Rows.Add(row.ItemArray);
// 将DataRow添加到DataTable中
return
tmp;
}
private
void
dataGridView1_CellMouseClick(
object
sender, DataGridViewCellMouseEventArgs e)
{
try
{
SysVisitor.Current.Wx_openid =
dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1].Value.ToString();
SysVisitor.Current.Wx_username =
dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[0].Value.ToString();
//MessageBox.Show(str);
grb_chat.Enabled =
true
;
grb_chat.Text = SysVisitor.Current.Wx_username;
}
catch
{
}
webBrowser_msg.DocumentText =
""
;
string
url =
string
.Format(
"https://api.weixin.qq.com/cgi-bin/customservice/getrecord?access_token={0}"
,
SysVisitor.Current.Get_Access_token());
string
ls_text =
@"{"
;
ls_text +=
"\"starttime\" : "
+ DateTime.Now.AddDays(-3).Ticks +
","
;
ls_text +=
"\"endtime\" : "
+ DateTime.Now.Ticks +
","
;
ls_text +=
"\"openid\" : \""
+ SysVisitor.Current.Wx_openid +
"\","
;
ls_text +=
"\"pagesize\" : 1000,"
;
ls_text +=
"\"pageindex\" : 1,"
;
ls_text +=
"}"
;
string
ls_history = SysVisitor.Current.PostPage(url, ls_text);
webBrowser_msg.DocumentText = ls_history;
}
private
void
btn_send_Click(
object
sender, EventArgs e)
{
string
ls_msg = richTextBox_msg.Text;
string
ls_text =
@"{"
;
ls_text +=
"\"touser\":\""
+ SysVisitor.Current.Wx_openid +
"\","
;
ls_text +=
"\"msgtype\":\"text\","
;
ls_text +=
"\"text\":"
;
ls_text +=
"{"
;
ls_text +=
"\"content\":\""
+ ls_msg +
"\""
;
ls_text +=
"}"
;
ls_text +=
"}"
;
string
url =
string
.Format(
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}"
,
SysVisitor.Current.Get_Access_token());
string
ls_isright = SysVisitor.Current.PostPage(url, ls_text);
webBrowser_msg.DocumentText +=
"<P align=right><FONT size=3>"
+ ls_isright +
"</FONT></P>"
;
}
private
void
btn_addkf_Click(
object
sender, EventArgs e)
{
string
url =
string
.Format(
"https://api.weixin.qq.com/customservice/kfaccount/add?access_token={0}"
, SysVisitor.Current.Get_Access_token());
//客服账号 设置 xxx@你的公众号 这样的格式才是正确的哟。
string
ls_text =
"{"
;
ls_text +=
"\"kf_account\":test2@gz-sisosoft,"
;
ls_text +=
"\"nickname\":\"客服2\","
;
ls_text +=
"\"password\":\"12345\","
;
ls_text +=
"}"
;
string
ls_kf =
@"{
'kf_account' : 'test1@gz-sisosoft',
'nickname' : '客服1',
'password' : '123456',
}"
;
string
ls_isok = SysVisitor.Current.PostPage(url, ls_text);
MessageBox.Show(ls_isok);
}
private
void
Kf_account_Load(
object
sender, EventArgs e)
{
}
}
|
SysVisitor.cs代码
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
class
SysVisitor
{
private
static
SysVisitor visit =
null
;
public
static
SysVisitor Current
{
get
{
if
(visit ==
null
)
visit =
new
SysVisitor();
return
visit;
}
}
/// <summary>
/// 获取access_token
/// </summary>
/// <param name="appid">appid</param>
/// <param name="secret">appsecret</param>
/// <returns></returns>
public
string
Get_Access_token(
string
appid,
string
appsecret)
{
string
secondappid = INIFile.ContentValue(
"weixin"
,
"secondappid"
);
if
(appid.ToLower() == secondappid.ToLower())
{
string
ls_time = INIFile.ContentValue(
"weixin"
,
"gettime"
);
Decimal ldt;
try
{
ldt = Convert.ToDecimal(ls_time);
if
(Convert.ToDecimal(DateTime.Now.ToString(
"yyyyMMddHHmmss"
)) - ldt < 7100)
//每两个小时刷新一次
{
return
INIFile.ContentValue(
"weixin"
,
"access_token"
);
}
}
catch
{ }
}
string
ls_appid = appid.Replace(
" "
,
""
);
string
ls_secret = appsecret.Replace(
" "
,
""
);
string
access_token =
""
;
string
url =
string
.Format(
"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}"
, ls_appid, ls_secret);
string
json_access_token = GetPageInfo(url);
//DataTable dt = Json.JsonToDataTable(json_access_token);
DataTable dt = JsonHelper.JsonToDataTable(json_access_token);
try
{
access_token = dt.Rows[0][
"access_token"
].ToString();
}
catch
{
return
""
;
}
INIFile.SetINIString(
"weixin"
,
"gettime"
, DateTime.Now.ToString(
"yyyyMMddHHmmss"
));
INIFile.SetINIString(
"weixin"
,
"access_token"
, access_token);
INIFile.SetINIString(
"weixin"
,
"secondappid"
, ls_appid);
return
access_token;
}
/// <summary>
/// 获取access_token
/// </summary>
public
string
Get_Access_token()
{
string
ls_appid = INIFile.ContentValue(
"weixin"
,
"Appid"
);
string
ls_secret = INIFile.ContentValue(
"weixin"
,
"AppSecret"
);
return
Get_Access_token(ls_appid, ls_secret);
}
/// <summary>
/// Get方法请求url并接收返回消息
/// </summary>
/// <param name="strUrl">Url地址</param>
/// <returns></returns>
public
string
GetPageInfo(
string
url)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string
ret =
string
.Empty;
Stream s;
string
StrDate =
""
;
string
strValue =
""
;
if
(response.StatusCode == HttpStatusCode.OK)
{
s = response.GetResponseStream();
////在这儿处理返回的文本
StreamReader Reader =
new
StreamReader(s, Encoding.UTF8);
while
((StrDate = Reader.ReadLine()) !=
null
)
{
strValue += StrDate +
"\r\n"
;
}
//strValue = Reader.ReadToEnd();
}
return
strValue;
}
/// <summary>
/// Post方法
/// </summary>
/// <param name="posturl">URL</param>
/// <param name="postData">Post数据</param>
/// <returns></returns>
public
string
PostPage(
string
posturl,
string
postData)
{
Stream outstream =
null
;
Stream instream =
null
;
StreamReader sr =
null
;
HttpWebResponse response =
null
;
HttpWebRequest request =
null
;
Encoding encoding = Encoding.UTF8;
byte
[] data = encoding.GetBytes(postData);
// 准备请求...
try
{
// 设置参数
request = WebRequest.Create(posturl)
as
HttpWebRequest;
CookieContainer cookieContainer =
new
CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect =
true
;
request.Method =
"POST"
;
request.ContentType =
"application/x-www-form-urlencoded"
;
request.ContentLength = data.Length;
outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();
//发送请求并获取相应回应数据
response = request.GetResponse()
as
HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
instream = response.GetResponseStream();
sr =
new
StreamReader(instream, encoding);
//返回结果网页(html)代码
string
content = sr.ReadToEnd();
string
err =
string
.Empty;
return
content;
}
catch
(Exception ex)
{
string
err = ex.Message;
return
string
.Empty;
}
}
/// <summary>
/// 格式化字符串
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public
string
GetFormatStr(
string
str)
{
if
(
""
== str)
return
""
;
else
{
str = str.Trim();
str = str.Replace(
"'"
,
"'"
);
str = str.Replace(
"〈"
,
"<"
);
str = str.Replace(
"〉"
,
">"
);
str = str.Replace(
","
,
","
);
return
str;
}
}
string
ls_username =
""
;
/// <summary>
/// 用户名
/// </summary>
public
string
Wx_username
{
get
{
return
ls_username;
}
set
{
ls_username = value;
}
}
string
ls_openid =
""
;
/// <summary>
/// Openid
/// </summary>
public
string
Wx_openid
{
get
{
return
ls_openid;
}
set
{
ls_openid = value;
}
}
}
|
INIFile.cs代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
|
class
INIFile
{
///// <summary>
///// 设置INI文件参数
///// </summary>
///// <param name="section">INI文件中的段落</param>
///// <param name="key">INI文件中的关键字</param>
///// <param name="val">INI文件中关键字的数值</param>
///// <param name="filePath">INI文件的完整的路径和名称</param>
///// <returns></returns>
//[DllImport("kernel32")]
//private static extern long WritePrivateProfileString(
// string section, string key, string val, string filePath);
///// <summary>
///// 获取INI文件参数
///// </summary>
///// <param name="section">INI文件中的段落名称</param>
///// <param name="key">INI文件中的关键字</param>
///// <param name="def">无法读取时候时候的缺省数值</param>
///// <param name="retVal">读取数值</param>
///// <param name="size">数值的大小</param>
///// <param name="filePath">INI文件的完整路径和名称</param>
//[DllImport("kernel32")]
//private static extern int GetPrivateProfileString(
// string section, string key, string def, StringBuilder retVal, int size, string filePath);
//static string gs_FileName = System.AppDomain.CurrentDomain.BaseDirectory + "Config.ini";
///// <summary>
///// 获取INI文件参数
///// </summary>
///// <param name="as_section">INI文件中的段落名称</param>
///// <param name="as_key">INI文件中的关键字</param>
///// <param name="as_FileName">INI文件的完整路径和名称</param>
//public static string GetINIString(string as_section, string as_key, string as_FileName)
//{
// StringBuilder temp = new StringBuilder(255);
// int i = GetPrivateProfileString(as_section, as_key, "", temp, 255, as_FileName);
// return temp.ToString();
//}
///// <summary>
///// 获取INI文件参数
///// </summary>
///// <param name="as_section">INI文件中的段落名称</param>
///// <param name="as_key">INI文件中的关键字</param>
///// <param name="as_FileName">INI文件的完整路径和名称</param>
//public static string GetINIString(string as_section, string as_key)
//{
// return GetINIString(as_section, as_key, gs_FileName);
//}
///// <summary>
///// 设置INI文件参数
///// </summary>
///// <param name="as_section">INI文件中的段落</param>
///// <param name="as_key">INI文件中的关键字</param>
///// <param name="as_Value">INI文件中关键字的数值</param>
///// <param name="as_FileName">INI文件的完整路径和名称</param>
//public static long SetINIString(string as_section, string as_key, string as_Value, string as_FileName)
//{
// return WritePrivateProfileString(as_section, as_key, as_Value, as_FileName);
//}
///// <summary>
///// 设置INI文件参数
///// </summary>
///// <param name="as_section">INI文件中的段落</param>
///// <param name="as_key">INI文件中的关键字</param>
///// <param name="as_Value">INI文件中关键字的数值</param>
//public static long SetINIString(string as_section, string as_key, string as_Value)
//{
// return SetINIString(as_section, as_key, as_Value, gs_FileName);
//}
/// <summary>
/// 写入INI文件
/// </summary>
/// <param name="section">节点名称[如[TypeName]]</param>
/// <param name="key">键</param>
/// <param name="val">值</param>
/// <param name="filepath">文件路径</param>
/// <returns></returns>
[DllImport(
"kernel32"
)]
public
static
extern
long
WritePrivateProfileString(
string
section,
string
key,
string
val,
string
filepath);
[DllImport(
"kernel32.dll"
)]
public
extern
static
int
GetPrivateProfileSectionNamesA(
byte
[] buffer,
int
iLen,
string
fileName);
/// <summary>
/// 写入INI文件(section:节点名称 key:键 val:值)
/// </summary>
/// <param name="section">节点名称</param>
/// <param name="key">键</param>
/// <param name="val">值</param>
/// <returns></returns>
public
static
long
SetINIString(
string
section,
string
key,
string
val,
string
as_FilePath =
""
)
{
if
(as_FilePath ==
""
)
{
return
(WritePrivateProfileString(section, key, val, strFilePath));
}
else
{
return
(WritePrivateProfileString(section, key, val, as_FilePath));
}
}
/// <summary>
/// 读取INI文件
/// </summary>
/// <param name="section">节点名称</param>
/// <param name="key">键</param>
/// <param name="def">值</param>
/// <param name="retval">stringbulider对象</param>
/// <param name="size">字节大小</param>
/// <param name="filePath">文件路径</param>
/// <returns></returns>
[DllImport(
"kernel32"
)]
public
static
extern
int
GetPrivateProfileString(
string
section,
string
key,
string
def, StringBuilder retval,
int
size,
string
filePath);
public
static
string
strFilePath = Application.StartupPath +
"\\Config.ini"
;
//获取INI文件默认路径
public
static
string
strSec =
""
;
//INI文件名
/// <summary>
/// 读取INI文件中的内容方法 (Section 节点名称;key 键)
/// </summary>
/// <param name="Section">节点名称</param>
/// <param name="key">键</param>
/// <returns></returns>
public
static
string
ContentValue(
string
Section,
string
key,
string
as_FilePath =
""
)
{
StringBuilder temp =
new
StringBuilder(1024);
if
(as_FilePath ==
""
)
{
GetPrivateProfileString(Section, key,
""
, temp, 1024, strFilePath);
}
else
{
GetPrivateProfileString(Section, key,
""
, temp, 1024, as_FilePath);
}
return
temp.ToString();
}
/// <summary>
/// 获取指定小节所有项名和值的一个列表
/// </summary>
/// <param name="section">节 段,欲获取的小节。注意这个字串不区分大小写</param>
/// <param name="buffer">缓冲区 返回的是一个二进制的串,字符串之间是用"\0"分隔的</param>
/// <param name="nSize">缓冲区的大小</param>
/// <param name="filePath">初始化文件的名字。如没有指定完整路径名,windows就在Windows目录中查找文件</param>
/// <returns></returns>
[DllImport(
"kernel32"
)]
public
static
extern
int
GetPrivateProfileSection(
string
section,
byte
[] buffer,
int
nSize,
string
filePath);
/// <summary>
/// 获取指定段section下的所有键值对 返回集合的每一个键形如"key=value"
/// </summary>
/// <param name="section">指定的段落</param>
/// <param name="filePath">ini文件的绝对路径</param>
/// <returns></returns>
public
static
List<
string
> ReadKeyValues(
string
section,
string
as_FilePath =
""
)
{
byte
[] buffer =
new
byte
[32767];
List<
string
> list =
new
List<
string
>();
int
length = 0;
if
(as_FilePath ==
""
)
{
length = GetPrivateProfileSection(section, buffer, buffer.GetUpperBound(0), strFilePath);
}
else
{
length = GetPrivateProfileSection(section, buffer, buffer.GetUpperBound(0), as_FilePath);
}
string
temp;
int
postion = 0;
for
(
int
i = 0; i < length; i++)
{
if
(buffer[i] == 0x00)
//以'\0'来作为分隔
{
temp = System.Text.ASCIIEncoding.Default.GetString(buffer, postion, i - postion).Trim();
postion = i + 1;
if
(temp.Length > 0)
{
list.Add(temp);
}
}
}
return
list;
}
/// <summary>
/// 删除指定的key
/// </summary>
/// <param name="section">要写入的段落名</param>
/// <param name="key">要删除的键</param>
/// <param name="fileName">INI文件的完整路径和文件名</param>
public
static
void
DelKey(
string
section,
string
key,
string
as_FilePath =
""
)
{
if
(as_FilePath ==
""
)
{
WritePrivateProfileString(section, key,
null
, strFilePath);
}
else
{
WritePrivateProfileString(section, key,
null
, as_FilePath);
}
}
/// <summary>
/// 返回该配置文件中所有Section名称的集合
/// </summary>
public
static
ArrayList ReadSections()
{
byte
[] buffer =
new
byte
[65535];
int
rel = GetPrivateProfileSectionNamesA(buffer, buffer.GetUpperBound(0), strFilePath);
int
iCnt, iPos;
ArrayList arrayList =
new
ArrayList();
string
tmp;
if
(rel > 0)
{
iCnt = 0; iPos = 0;
for
(iCnt = 0; iCnt < rel; iCnt++)
{
if
(buffer[iCnt] == 0x00)
{
tmp = System.Text.ASCIIEncoding.UTF8.GetString(buffer, iPos, iCnt - iPos).Trim();
iPos = iCnt + 1;
if
(tmp !=
""
)
arrayList.Add(tmp);
}
}
}
return
arrayList;
}
}
|
运行结果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
最后此篇关于ASP.NET微信公众号客服接口的文章就讲到这里了,如果你想了解更多关于ASP.NET微信公众号客服接口的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我试图对 ASP.Net MVC 有一个高层次的理解,我开始意识到它看起来很像原始的 ASP 脚本。过去,我们将“模型”/业务逻辑代码组织到 VBScript 类或 VB COM 组件中。 当然,现在
我已经搜索了一段时间,但似乎找不到答案。 我想在我的旋转木马中显示一个计数器,左边是当前项目(工作),左边是项目总数。 我的代码:
. 最佳答案 Scott Gu 称这些为代码块。这就是我的看法。 http://weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax
我有一个使用 Visual Studio 2010/.net 4/VB 制作的网站。 我真的很喜欢我发现的 FAQ 系统的布局,因为它很简单,但它是经典的 asp。所以,显然,我不能包括我的母版页布局
好吧,对于你们许多人来说,这个问题可能有一个非常明显的答案,但它让我难住了。 我有一个 asp.net Web 表单,上面有两个控件(嗯,不止这两个,但我们将重点关注这些) - 第一个是 asp:dr
当我将 ASP.NET 复选框控件设置为 asp.net 更新面板的异步回发触发器时,EventName 属性是什么? 最佳答案 我相信它是 CheckedChanged。 关于asp.net - a
我有一个用经典 asp 编写的(巨大的)网站。现在我必须切换到 vb.net (razor)。有没有办法将这两个结合起来直到切换完成? 有没有办法让应用程序与经典的 asp 和 vb.net 一起工作
I am creating a products page, where the user selects an option in a radiobuttonlist for example, an
我最近将一个经典的 ASP 应用程序转换为 ASP.NET 3.5,但我觉得我的经典 ASP 版本要快一些(我不知道可能买家会后悔)。 所以你们能帮我解决这个问题吗,让我知道哪个更快,asp、asp.
从本周开始,我被要求开始学习如何使用 ASP 开发网站。我通过 XNA 对 C# 有一定的经验,所以这部分对我来说并不是什么麻烦。 我一直在关注Music Store Tutorial这需要我设置一个
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我想将一些表单变量发布到经典 ASP 页面中。我不想改变经典的 ASP 页面,因为需要完成大量的工作,以及消耗它们的页面数量。 经典的 ASP 页面需要将表单变量 Username 和 Userpas
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
在某种程度上,这可能是一个异端问题。我们有一个大型站点,其中许多页面仍在ASP中。通常,并没有真正动态的,而是包括(通过SSI或Server.Execute)定期重新生成的HTML块。看起来好像是一个
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我有一个遗留的 ASP 应用程序——在不久的某个时候——需要迁移到 ASP.Net 2.0(以与也在 2.0 中的其他应用程序兼容)。 对于这类事情是否有最佳实践,即作为第一步将当前 html、vbs
我目前在一家公司工作,该公司使用 ASP.NET Webforms 和旧 ASP 页面的组合进行 Web 开发。这对于他们当前的项目来说效果很好,但我想说服/建议他们切换到 ASP.NET MVC,因
我有一个经典的 asp 应用程序。我想将该页面的竞赛表格发布到 Asp.Net 表格。原因是我想在进入数据库之前使用我在 Asp.Net 页面中内置的大量逻辑进行验证,而我对 asp 不太了解。更不用
我知道在 ASP.NET MVC 中,您可以拥有移动 View 并执行类似 Index.mobile.cshtml 的操作。和 _Layout.mobile.cshtml并且服务器知道将这些 View
我需要从一些服务器端 c#.net 代码中调用经典 asp 页面上的 VBscript 函数 - 有谁知道一种干净的方法来做到这一点?在 .net 中重写函数不是一种选择。 我会再解释一下这个问题..
我是一名优秀的程序员,十分优秀!