net检测demo

This commit is contained in:
gfdgd xi 2022-11-05 20:00:10 +08:00
parent 314a685395
commit 02e44ebb11
42 changed files with 1998 additions and 22 deletions

View File

@ -20,7 +20,14 @@ import PyQt5.QtWidgets as QtWidgets
from UI.AutoConfig import *
from Model import *
urlSources = "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/auto"
urlSourcesList = [
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/auto", # Gitlink 源
"https://gitee.com/gfdgd-xi/deep-wine-runner-auto-configuration-script/raw/master/", # Gitee 源
"https://gfdgd-xi.github.io/deep-wine-runner-auto-configuration-script/", # Github 源
"http://gfdgdxi.msns.cn/wine-runner-list/auto/", # 备用源,纯 IPv6 源
"http://127.0.0.1/wine-runner-list/auto/" # 本地测试源
]
urlSources = urlSourcesList[0]
lists = []
class ProgramRunStatusUpload():
msgWindow = None
@ -319,6 +326,26 @@ def readtxt(path):
f.close() # 关闭文本对象
return str # 返回结果
def ChangeSources():
global urlSources
sources = [ui.actionGitlink, ui.actionGitee, ui.actionGithub, ui.action_IPv6, ui.action]
for i in range(0, len(sources)):
if sources[i].isChecked():
urlSources = urlSourcesList[i]
# 解析云列表
try:
# 获取列表
lists = json.loads(requests.get(f"{urlSources}/list.json").text)
# 解释列表并显示在 GUI 上
nmodel = QtGui.QStandardItemModel(window)
for i in lists:
nmodel.appendRow(QtGui.QStandardItem(i[0]))
ui.searchList.setModel(nmodel)
except:
traceback.print_exc()
QtWidgets.QMessageBox.critical(window, "提示", "无法连接服务器")
break
if __name__ == "__main__":
homePath = os.path.expanduser('~')
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
@ -339,6 +366,18 @@ if __name__ == "__main__":
window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg"))
iconPath = "{}/deepin-wine-runner.svg".format(programPath)
window.show()
#ui.actionGitlink.setExclusive(True)
sourcesGroup = QtWidgets.QActionGroup(window)
sourcesGroup.addAction(ui.actionGitlink)
sourcesGroup.addAction(ui.actionGitee)
sourcesGroup.addAction(ui.actionGithub)
sourcesGroup.addAction(ui.action_IPv6)
sourcesGroup.addAction(ui.action)
sourcesGroup.triggered.connect(ChangeSources)
sourcesGroup.setExclusive(True)
#for i in [ui.actionGitlink, ui.actionGitee, ui.actionGithub, ui.action_IPv6, ui.action]:
#i.triggered.connect(ChangeSources)
#pass
# 连接信号和槽
ui.saerchBotton.clicked.connect(Connect.SearchBotton_Clicked)
ui.uploadFen.clicked.connect(UploadFen)

View File

@ -50,10 +50,12 @@ class Ui_MainWindow(object):
self.verticalLayout_3.addLayout(self.horizontalLayout_2)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 33))
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 36))
self.menubar.setObjectName("menubar")
self.menu = QtWidgets.QMenu(self.menubar)
self.menu.setObjectName("menu")
self.menu_2 = QtWidgets.QMenu(self.menubar)
self.menu_2.setObjectName("menu_2")
MainWindow.setMenuBar(self.menubar)
self.about = QtWidgets.QAction(MainWindow)
self.about.setObjectName("about")
@ -63,10 +65,32 @@ class Ui_MainWindow(object):
self.help.setObjectName("help")
self.openFile = QtWidgets.QAction(MainWindow)
self.openFile.setObjectName("openFile")
self.actionGitlink = QtWidgets.QAction(MainWindow)
self.actionGitlink.setCheckable(True)
self.actionGitlink.setChecked(True)
self.actionGitlink.setObjectName("actionGitlink")
self.actionGitee = QtWidgets.QAction(MainWindow)
self.actionGitee.setCheckable(True)
self.actionGitee.setObjectName("actionGitee")
self.actionGithub = QtWidgets.QAction(MainWindow)
self.actionGithub.setCheckable(True)
self.actionGithub.setObjectName("actionGithub")
self.action_IPv6 = QtWidgets.QAction(MainWindow)
self.action_IPv6.setCheckable(True)
self.action_IPv6.setObjectName("action_IPv6")
self.action = QtWidgets.QAction(MainWindow)
self.action.setCheckable(True)
self.action.setObjectName("action")
self.menu.addAction(self.openFile)
self.menu.addSeparator()
self.menu.addAction(self.exitProgram)
self.menu_2.addAction(self.actionGitlink)
self.menu_2.addAction(self.actionGitee)
self.menu_2.addAction(self.actionGithub)
self.menu_2.addAction(self.action_IPv6)
self.menu_2.addAction(self.action)
self.menubar.addAction(self.menu.menuAction())
self.menubar.addAction(self.menu_2.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
@ -81,8 +105,14 @@ class Ui_MainWindow(object):
self.uploadFen.setText(_translate("MainWindow", "提交选中项的评分"))
self.runBotton.setText(_translate("MainWindow", "部署此方案"))
self.menu.setTitle(_translate("MainWindow", "程序"))
self.menu_2.setTitle(_translate("MainWindow", "切换源"))
self.about.setText(_translate("MainWindow", "关于"))
self.exitProgram.setText(_translate("MainWindow", "退出程序"))
self.help.setText(_translate("MainWindow", "帮助"))
self.openFile.setText(_translate("MainWindow", "打开本地部署脚本"))
self.actionGitlink.setText(_translate("MainWindow", "Gitlink 源"))
self.actionGitee.setText(_translate("MainWindow", "Gitee 源"))
self.actionGithub.setText(_translate("MainWindow", "Github 源"))
self.action_IPv6.setText(_translate("MainWindow", "备用源只限IPv6用户"))
self.action.setText(_translate("MainWindow", "本地测试源"))

View File

@ -92,7 +92,7 @@
<x>0</x>
<y>0</y>
<width>800</width>
<height>33</height>
<height>36</height>
</rect>
</property>
<widget class="QMenu" name="menu">
@ -103,7 +103,18 @@
<addaction name="separator"/>
<addaction name="exitProgram"/>
</widget>
<widget class="QMenu" name="menu_2">
<property name="title">
<string>切换源</string>
</property>
<addaction name="actionGitlink"/>
<addaction name="actionGitee"/>
<addaction name="actionGithub"/>
<addaction name="action_IPv6"/>
<addaction name="action"/>
</widget>
<addaction name="menu"/>
<addaction name="menu_2"/>
</widget>
<action name="about">
<property name="text">
@ -125,6 +136,49 @@
<string>打开本地部署脚本</string>
</property>
</action>
<action name="actionGitlink">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="text">
<string>Gitlink 源</string>
</property>
</action>
<action name="actionGitee">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Gitee 源</string>
</property>
</action>
<action name="actionGithub">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Github 源</string>
</property>
</action>
<action name="action_IPv6">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>备用源只限IPv6用户</string>
</property>
</action>
<action name="action">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>本地测试源</string>
</property>
</action>
</widget>
<resources/>
<connections/>

View File

@ -219,20 +219,29 @@ class make_deb_threading(QtCore.QThread):
][int(chooseWineHelperValue.isChecked())],
"postinst": "",
"postrm": ["", f"""#!/bin/bash
if [ "$1" = "remove" ] || [ "$1" = "purge" ];then
echo "清理卸载残留"
for username in `ls /home`
CONTAINER_NAME="{e5_text.text()}"
if [ -z $CONTAINER_NAME ];then
echo "W: 没有指定容器,跳过清理容器。请手动前往 ~/.deepinwine/ 下删除"
exit
fi
/opt/deepinwine/tools/kill.sh $CONTAINER_NAME
###这里注意如果没写CONTAINER_NAME,会把QQ杀了
for username in $(ls /home)
do
echo /home/$username
if [ -d "/home/$username/.deepinwine/{e5_text.text()}" ]
then
rm -rf "/home/$username/.deepinwine/{e5_text.text()}"
fi
echo /home/$username
if [ -d /home/$username/.deepinwine/$CONTAINER_NAME ]
then
rm -rf /home/$username/.deepinwine/$CONTAINER_NAME
fi
done
else
echo "非卸载,跳过清理"
echo "非卸载,跳过清理"
fi"""][int(rmBash.isChecked())],
"run.sh": [
f"""#!/bin/sh
@ -464,22 +473,312 @@ fi
true
""",
"postrm": f"""#!/bin/bash
# 因为 arm 不依赖 helper所以要自带 kill.sh
"kill.sh": """#!/bin/bash
APP_NAME="QQ"
LOG_FILE=$0
SHELL_DIR=$(dirname $0)
SHELL_DIR=$(realpath "$SHELL_DIR")
if [ $SPECIFY_SHELL_DIR ]; then
SHELL_DIR=$SPECIFY_SHELL_DIR
fi
PUBLIC_DIR="/var/public"
UsePublicDir()
{
if [ -z "$USE_PUBLIC_DIR" ]; then
echo "Don't use public dir"
return 1
fi
if [ ! -d "$PUBLIC_DIR" ];then
echo "Not found $PUBLIC_DIR"
return 1
fi
if [ ! -r "$PUBLIC_DIR" ];then
echo "Can't read for $PUBLIC_DIR"
return 1
fi
if [ ! -w "$PUBLIC_DIR" ];then
echo "Can't write for $PUBLIC_DIR"
return 1
fi
if [ ! -x "$PUBLIC_DIR" ];then
echo "Can't excute for $PUBLIC_DIR"
return 1
fi
return 0
}
WINE_BOTTLE="$HOME/.deepinwine"
if UsePublicDir;then
WINE_BOTTLE="$PUBLIC_DIR"
fi
get_wine_by_pid()
{
wine_path=$(cat /proc/$1/maps | grep -E "\/wine$|\/wine64$|\/wine |\/wine64 " | head -1 | awk '{print $6}')
if [ -z "$wine_path" ];then
cat /proc/$1/cmdline| xargs -0 -L1 -I{} echo {} | grep -E "\/wine$|\/wine64$|\/wine |\/wine64 " | head -1
else
echo $wine_path
fi
}
is_wine_process()
{
wine_module=$(get_wine_by_pid $1)
if [ -z "$wine_module" ];then
wine_module=$(cat /proc/$1/maps | grep -E "\/wineserver$" | head -1)
fi
echo $wine_module
}
get_prefix_by_pid()
{
WINE_PREFIX=$(xargs -0 printf '%s\n' < /proc/$1/environ | grep WINEPREFIX)
WINE_PREFIX=${WINE_PREFIX##*=}
if [ -z "$WINE_PREFIX" ] && [ -n "$(is_wine_process $1)" ]; then
#不指定容器的情况用默认容器目录
WINE_PREFIX="$HOME/.wine"
fi
if [ -n "$WINE_PREFIX" ];then
WINE_PREFIX=$(realpath $WINE_PREFIX)
echo $WINE_PREFIX
fi
}
get_wineserver()
{
if [ -z "$1" ];then
return
fi
targ_prefix=$(realpath $1)
ps -ef | grep wineserver | while read server_info ;do
debug_log_to_file "get server info: $server_info"
server_pid=$(echo $server_info | awk '{print $2}')
server_prefix=$(get_prefix_by_pid $server_pid)
debug_log_to_file "get server pid $server_pid, prefix: $server_prefix"
if [ "$targ_prefix" = "$server_prefix" ];then
server=$(echo $server_info | awk '{print $NF}')
if [ "-p0" = "$server" ];then
server=$(echo $server_info | awk '{print $(NF-1)}')
fi
debug_log_to_file "get server $server"
echo $server
return
fi
done
}
init_log_file()
{
if [ -d "$DEBUG_LOG" ];then
LOG_DIR=$(realpath $DEBUG_LOG)
if [ -d "$LOG_DIR" ];then
LOG_FILE="${LOG_DIR}/${LOG_FILE##*/}.log"
echo "" > "$LOG_FILE"
debug_log "LOG_FILE=$LOG_FILE"
fi
fi
}
debug_log_to_file()
{
if [ -d "$DEBUG_LOG" ];then
strDate=$(date)
echo -e "${strDate}:${1}" >> "$LOG_FILE"
fi
}
debug_log()
{
strDate=$(date)
echo "${strDate}:${1}"
}
init_log_file
get_bottle_path_by_process_id()
{
PID_LIST="$1"
PREFIX_LIST=""
for pid_var in $PID_LIST ; do
WINE_PREFIX=$(get_prefix_by_pid $pid_var)
#去掉重复项
for path in $(echo -e $PREFIX_LIST) ; do
if [[ $path == "$WINE_PREFIX" ]]; then
WINE_PREFIX=""
fi
done
if [ -d "$WINE_PREFIX" ]; then
debug_log_to_file "found $pid_var : $WINE_PREFIX"
PREFIX_LIST+="\n$WINE_PREFIX"
fi
done
echo -e $PREFIX_LIST
}
get_pid_by_process_name()
{
PID_LIST=""
for pid_var in $(ps -ef | grep -E -i "$1" | grep -v grep | awk '{print $2}');do
#通过判断是否加载wine来判断是不是wine进程
if [ -n "$(is_wine_process $pid_var)" ];then
PID_LIST+=" $pid_var"
fi
done
echo "$PID_LIST"
}
get_bottle_path_by_process_name()
{
PID_LIST=$(get_pid_by_process_name $1)
debug_log_to_file "get pid list: $PID_LIST"
get_bottle_path_by_process_id "$PID_LIST"
}
get_bottle_path()
{
if [ -z "$1" ];then
return 0
fi
if [ -f "$1/user.reg" ]; then
realpath "$1"
return 0
fi
if [ -f "$WINE_BOTTLE/$1/user.reg" ]; then
realpath "$WINE_BOTTLE/$1"
return 0
fi
get_bottle_path_by_process_name "$1"
}
kill_app()
{
debug_log "try to kill $1"
for path in $(get_bottle_path $1); do
if [ -n "$path" ];then
WINESERVER=$(get_wineserver "$path")
if [ -f "$WINESERVER" ];then
debug_log "kill $path by $WINESERVER"
env WINEPREFIX="$path" "$WINESERVER" -k
fi
PID_LIST=$(get_pid_by_process_name "exe|wine")
for tag_pid in $PID_LIST; do
bottle=$(get_bottle_path_by_process_id "$tag_pid")
bottle=${bottle:1}
if [ "$path" = "$bottle" ];then
echo "kill $tag_pid for $bottle"
kill -9 $tag_pid
fi
done
fi
done
#Kill defunct process
ps -ef | grep -E "$USER.*exe.*<defunct>"
ps -ef | grep -E "$USER.*exe.*<defunct>" | grep -v grep | awk '{print $2}' | xargs -i kill -9 {}
}
get_tray_window()
{
$SHELL_DIR/get_tray_window | grep window_id: | awk -F: '{print $2}'
}
get_stacking_window()
{
xprop -root _NET_CLIENT_LIST_STACKING | awk -F# '{print $2}' | sed -e 's/, / /g'
}
get_window_pid()
{
for winid in $(echo "$1" | sed -e 's/ /\n/g') ;
do
xprop -id $winid _NET_WM_PID | awk -F= '{print $2}'
done
}
get_window_bottle()
{
debug_log_to_file "get_window_bottle $1"
PID_LIST=$(get_window_pid "$1")
debug_log_to_file "get_window_bottle pid list: $PID_LIST"
get_bottle_path_by_process_id "$PID_LIST"
}
get_active_bottles()
{
TRAYWINDOWS=$(get_tray_window)
STACKINGWINDOWS=$(get_stacking_window)
debug_log_to_file "tray window id: $TRAYWINDOWS"
debug_log_to_file "stacking window id: $STACKINGWINDOWS"
PID_LIST="$TRAYWINDOWS $STACKINGWINDOWS"
get_window_bottle "$PID_LIST"
}
kill_exit_block_app()
{
TAGBOTTLE=$(get_bottle_path $1)
debug_log "tag bottle: $TAGBOTTLE"
ACTIVEBOTTLES=$(get_active_bottles)
debug_log "active bottles: $ACTIVEBOTTLES"
if [[ "$ACTIVEBOTTLES" != *"$TAGBOTTLE"* ]]; then
kill_app "$TAGBOTTLE"
fi
}
#get_active_bottles
#exit
debug_log "kill $1 $2"
if [ -n "$1" ]; then
APP_NAME="$1"
fi
if [ "$2" = "block" ]; then
kill_exit_block_app $APP_NAME $3
else
kill_app $APP_NAME
fi
""",
"postrm": f"""#!/bin/bash
if [ "$1" = "remove" ] || [ "$1" = "purge" ];then
echo "清理卸载残留"
for username in `ls /home`
CONTAINER_NAME="{e5_text.text()}"
if [ -z $CONTAINER_NAME ];then
echo "W: 没有指定容器,跳过清理容器。请手动前往 ~/.deepinwine/ 下删除"
exit
fi
/opt/apps/{e1_text.text()}/kill.sh $CONTAINER_NAME
###这里注意如果没写CONTAINER_NAME,会把QQ杀了
for username in $(ls /home)
do
echo /home/$username
if [ -d "/home/$username/.deepinwine/{e5_text.text()}" ]
then
rm -rf "/home/$username/.deepinwine/{e5_text.text()}"
fi
echo /home/$username
if [ -d /home/$username/.deepinwine/$CONTAINER_NAME ]
then
rm -rf /home/$username/.deepinwine/$CONTAINER_NAME
fi
done
else
echo "非卸载,跳过清理"
fi""",
echo "非卸载,跳过清理"
fi
""",
"run_with_box86.sh": f"""#!/bin/bash
DEB_PATH="/opt/apps/{e1_text.text()}"
WINE="/opt/deepin-wine6-stable/bin/wine"
@ -975,6 +1274,7 @@ Description: {e3_text.text()}
if debArch.currentIndex() == 0:
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run.sh", debInformation[debArch.currentIndex()]["run.sh"])
if debArch.currentIndex() == 1:
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/kill.sh", debInformation[debArch.currentIndex()]["kill.sh"])
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run_with_box86.sh", debInformation[debArch.currentIndex()]["run_with_box86.sh"])
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run_with_exagear.sh", debInformation[debArch.currentIndex()]["run_with_exagear.sh"])
write_txt("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()), debInformation[debArch.currentIndex()]["info"])
@ -986,6 +1286,7 @@ Description: {e3_text.text()}
self.run_command("chmod -Rv 644 {}/opt/apps/{}/info".format(debPackagePath, e1_text.text()))
self.run_command("chmod -Rv 0755 {}/DEBIAN".format(debPackagePath))
self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()))
self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/kill.sh".format(debPackagePath, e1_text.text()))
self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/run_with_box86.sh".format(debPackagePath, e1_text.text()))
self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/run_with_exagear.sh".format(debPackagePath, e1_text.text()))
self.run_command("chmod -Rv 755 {}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()))
@ -994,7 +1295,7 @@ Description: {e3_text.text()}
################
if not self.build:
self.label.emit("正在构建 deb 包……")
self.run_command("bash -c 'dpkg -b {} {}'".format(debPackagePath, e12_text.text()))
self.run_command("bash -c 'dpkg -b \"{}\" \"{}\"'".format(debPackagePath, e12_text.text()))
################
# 完成构建
################

View File

@ -308,7 +308,11 @@ def get_now_lang()->"获取当前语言":
if __name__ == "__main__":
localJsonList = []
internetJsonList = []
internetWineSource = "https://code.gitlink.org.cn/gfdgd_xi/wine-mirrors/raw/branch/master/"
internetWineSource = [
"https://code.gitlink.org.cn/gfdgd_xi/wine-mirrors/raw/branch/master/",
"http://gfdgdxi.msns.cn/wine-mirrors/", # 备用源,纯 IPv6 源
"http://127.0.0.1/wine-mirrors/" # 本地测试源
][1]
app = QtWidgets.QApplication(sys.argv)
# 读取翻译
if not get_now_lang() == "zh_CN.UTF-8":

18
demo/CheckNet/CheckNet.sln Executable file
View File

@ -0,0 +1,18 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 5.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CheckNet", "CheckNet\CheckNet.csproj", "{1E44CD7F-9E68-4C36-9EFF-7E9125086F2C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1E44CD7F-9E68-4C36-9EFF-7E9125086F2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E44CD7F-9E68-4C36-9EFF-7E9125086F2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E44CD7F-9E68-4C36-9EFF-7E9125086F2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1E44CD7F-9E68-4C36-9EFF-7E9125086F2C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<PropertyGroup>
<ProjectGuid>{1E44CD7F-9E68-4C36-9EFF-7E9125086F2C}</ProjectGuid>
<ProjectTypeGuids>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<OutputType>WinExe</OutputType>
<RootNamespace>CheckNet</RootNamespace>
<AssemblyName>CheckNet</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<AppDesignerFolder>Properties</AppDesignerFolder>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<OutputPath>bin\Debug\</OutputPath>
<DebugSymbols>True</DebugSymbols>
<DebugType>Full</DebugType>
<Optimize>False</Optimize>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<OutputPath>bin\Release\</OutputPath>
<DebugSymbols>False</DebugSymbols>
<DebugType>None</DebugType>
<Optimize>True</Optimize>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="MainForm.cs" />
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

290
demo/CheckNet/CheckNet/MainForm.Designer.cs generated Executable file
View File

@ -0,0 +1,290 @@
/*
* Created by SharpDevelop.
* User: gfdgd xi
* Date: 2022/11/5
* Time: 17:22
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
namespace CheckNet
{
partial class MainForm
{
/// <summary>
/// Designer variable used to keep track of non-visual components.
/// </summary>
private System.ComponentModel.IContainer components = null;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.ColorDialog colorDialog1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.FontDialog fontDialog1;
private System.Windows.Forms.ProgressBar progressBar1;
private System.Windows.Forms.ProgressBar progressBar2;
private System.Windows.Forms.TrackBar trackBar1;
private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private System.Windows.Forms.SaveFileDialog saveFileDialog1;
private System.Windows.Forms.MonthCalendar monthCalendar1;
private System.Windows.Forms.CheckedListBox checkedListBox1;
private System.Windows.Forms.DateTimePicker dateTimePicker1;
private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.TabPage tabPage1;
private System.Windows.Forms.TabPage tabPage2;
private System.Windows.Forms.MaskedTextBox maskedTextBox1;
/// <summary>
/// Disposes resources used by the form.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
base.Dispose(disposing);
}
/// <summary>
/// This method is required for Windows Forms designer support.
/// Do not change the method contents inside the source code editor. The Forms designer might
/// not be able to load this method if it was changed manually.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.button1 = new System.Windows.Forms.Button();
this.colorDialog1 = new System.Windows.Forms.ColorDialog();
this.label1 = new System.Windows.Forms.Label();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.fontDialog1 = new System.Windows.Forms.FontDialog();
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.progressBar2 = new System.Windows.Forms.ProgressBar();
this.trackBar1 = new System.Windows.Forms.TrackBar();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.button4 = new System.Windows.Forms.Button();
this.button5 = new System.Windows.Forms.Button();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
this.monthCalendar1 = new System.Windows.Forms.MonthCalendar();
this.checkedListBox1 = new System.Windows.Forms.CheckedListBox();
this.dateTimePicker1 = new System.Windows.Forms.DateTimePicker();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.maskedTextBox1 = new System.Windows.Forms.MaskedTextBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit();
this.tabControl1.SuspendLayout();
this.SuspendLayout();
//
// pictureBox1
//
this.pictureBox1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage")));
this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.pictureBox1.Location = new System.Drawing.Point(13, 13);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(148, 156);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// button1
//
this.button1.Location = new System.Drawing.Point(167, 13);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 1;
this.button1.Text = "颜色对话框";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.Button1Click);
//
// label1
//
this.label1.AllowDrop = true;
this.label1.AutoEllipsis = true;
this.label1.Location = new System.Drawing.Point(168, 43);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(478, 62);
this.label1.TabIndex = 2;
this.label1.Text = "此程序用于测试是否能运行 .net framework 应用";
//
// button2
//
this.button2.Location = new System.Drawing.Point(249, 13);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, 23);
this.button2.TabIndex = 3;
this.button2.Text = "消息对话框";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.Button2Click);
//
// button3
//
this.button3.Location = new System.Drawing.Point(331, 13);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(75, 23);
this.button3.TabIndex = 4;
this.button3.Text = "字体对话框";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.Button3Click);
//
// progressBar1
//
this.progressBar1.Location = new System.Drawing.Point(168, 81);
this.progressBar1.Name = "progressBar1";
this.progressBar1.Size = new System.Drawing.Size(287, 23);
this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
this.progressBar1.TabIndex = 5;
this.progressBar1.Value = 50;
//
// progressBar2
//
this.progressBar2.Location = new System.Drawing.Point(168, 111);
this.progressBar2.Name = "progressBar2";
this.progressBar2.Size = new System.Drawing.Size(287, 23);
this.progressBar2.TabIndex = 6;
this.progressBar2.Value = 50;
//
// trackBar1
//
this.trackBar1.Location = new System.Drawing.Point(168, 140);
this.trackBar1.Name = "trackBar1";
this.trackBar1.Size = new System.Drawing.Size(287, 45);
this.trackBar1.TabIndex = 7;
//
// richTextBox1
//
this.richTextBox1.Location = new System.Drawing.Point(12, 175);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(443, 96);
this.richTextBox1.TabIndex = 8;
this.richTextBox1.Text = "";
//
// button4
//
this.button4.Location = new System.Drawing.Point(413, 13);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(75, 23);
this.button4.TabIndex = 9;
this.button4.Text = "打开对话框";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.Button4Click);
//
// button5
//
this.button5.Location = new System.Drawing.Point(495, 13);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(75, 23);
this.button5.TabIndex = 10;
this.button5.Text = "保存对话框";
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.Button5Click);
//
// openFileDialog1
//
this.openFileDialog1.FileName = "openFileDialog1";
//
// monthCalendar1
//
this.monthCalendar1.Location = new System.Drawing.Point(467, 48);
this.monthCalendar1.Name = "monthCalendar1";
this.monthCalendar1.TabIndex = 11;
//
// checkedListBox1
//
this.checkedListBox1.FormattingEnabled = true;
this.checkedListBox1.Items.AddRange(new object[] {
"One",
"Two",
"Three"});
this.checkedListBox1.Location = new System.Drawing.Point(467, 240);
this.checkedListBox1.Name = "checkedListBox1";
this.checkedListBox1.Size = new System.Drawing.Size(120, 84);
this.checkedListBox1.TabIndex = 12;
//
// dateTimePicker1
//
this.dateTimePicker1.Location = new System.Drawing.Point(12, 277);
this.dateTimePicker1.Name = "dateTimePicker1";
this.dateTimePicker1.Size = new System.Drawing.Size(200, 21);
this.dateTimePicker1.TabIndex = 13;
//
// tabControl1
//
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Location = new System.Drawing.Point(218, 277);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(200, 100);
this.tabControl1.TabIndex = 14;
//
// tabPage1
//
this.tabPage1.Location = new System.Drawing.Point(4, 22);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
this.tabPage1.Size = new System.Drawing.Size(192, 74);
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "tabPage1";
this.tabPage1.UseVisualStyleBackColor = true;
//
// tabPage2
//
this.tabPage2.Location = new System.Drawing.Point(4, 22);
this.tabPage2.Name = "tabPage2";
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
this.tabPage2.Size = new System.Drawing.Size(192, 74);
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "tabPage2";
this.tabPage2.UseVisualStyleBackColor = true;
//
// maskedTextBox1
//
this.maskedTextBox1.Location = new System.Drawing.Point(13, 304);
this.maskedTextBox1.Name = "maskedTextBox1";
this.maskedTextBox1.Size = new System.Drawing.Size(100, 21);
this.maskedTextBox1.TabIndex = 15;
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(700, 383);
this.Controls.Add(this.maskedTextBox1);
this.Controls.Add(this.tabControl1);
this.Controls.Add(this.dateTimePicker1);
this.Controls.Add(this.checkedListBox1);
this.Controls.Add(this.monthCalendar1);
this.Controls.Add(this.button5);
this.Controls.Add(this.button4);
this.Controls.Add(this.richTextBox1);
this.Controls.Add(this.trackBar1);
this.Controls.Add(this.progressBar2);
this.Controls.Add(this.progressBar1);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.label1);
this.Controls.Add(this.button1);
this.Controls.Add(this.pictureBox1);
this.Name = "MainForm";
this.Text = "测试 .net framework";
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit();
this.tabControl1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
}
}

View File

@ -0,0 +1,58 @@
/*
* Created by SharpDevelop.
* User: gfdgd xi
* Date: 2022/11/5
* Time: 17:22
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace CheckNet
{
/// <summary>
/// Description of MainForm.
/// </summary>
public partial class MainForm : Form
{
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
void Button1Click(object sender, EventArgs e)
{
colorDialog1.ShowDialog();
pictureBox1.BackColor = colorDialog1.Color;
}
void Button2Click(object sender, EventArgs e)
{
MessageBox.Show("这是一个对话框", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show("这是一个对话框", "提示", MessageBoxButtons.OK, MessageBoxIcon.Question);
MessageBox.Show("这是一个对话框", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
MessageBox.Show("这是一个对话框", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
void Button3Click(object sender, EventArgs e)
{
fontDialog1.ShowDialog();
label1.Font = fontDialog1.Font;
}
void Button4Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
}
void Button5Click(object sender, EventArgs e)
{
saveFileDialog1.ShowDialog();
}
}
}

View File

@ -0,0 +1,525 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBox1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
rkJggg==
</value>
</data>
<metadata name="colorDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="fontDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>143, 17</value>
</metadata>
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>263, 17</value>
</metadata>
<metadata name="saveFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>407, 17</value>
</metadata>
</root>

View File

@ -0,0 +1,31 @@
/*
* Created by SharpDevelop.
* User: gfdgd xi
* Date: 2022/11/5
* Time: 17:22
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Windows.Forms;
namespace CheckNet
{
/// <summary>
/// Class with program entry point.
/// </summary>
internal sealed class Program
{
/// <summary>
/// Program entry point.
/// </summary>
[STAThread]
private static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}

View File

@ -0,0 +1,31 @@
#region Using directives
using System;
using System.Reflection;
using System.Runtime.InteropServices;
#endregion
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CheckNet")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CheckNet")]
[assembly: AssemblyCopyright("Copyright 2022")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
[assembly: ComVisible(false)]
// The assembly version has following format :
//
// Major.Minor.Build.Revision
//
// You can specify all the values or you can use the default the Revision and
// Build Numbers by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")]

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
</configuration>

Binary file not shown.

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
</configuration>

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,8 @@
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNet\CheckNet\bin\Debug\CheckNet.exe.config
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNet\CheckNet\bin\Debug\CheckNet.exe
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNet\CheckNet\bin\Debug\CheckNet.pdb
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNet\CheckNet\obj\Debug\CheckNet.csprojResolveAssemblyReference.cache
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNet\CheckNet\obj\Debug\CheckNet.MainForm.resources
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNet\CheckNet\obj\Debug\CheckNet.csproj.GenerateResource.Cache
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNet\CheckNet\obj\Debug\CheckNet.exe
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNet\CheckNet\obj\Debug\CheckNet.pdb

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,18 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 5.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CheckNetAndIE", "CheckNetAndIE\CheckNetAndIE.csproj", "{8181164E-829B-4785-AC8A-87D6C25AB078}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{8181164E-829B-4785-AC8A-87D6C25AB078}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8181164E-829B-4785-AC8A-87D6C25AB078}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8181164E-829B-4785-AC8A-87D6C25AB078}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8181164E-829B-4785-AC8A-87D6C25AB078}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<PropertyGroup>
<ProjectGuid>{8181164E-829B-4785-AC8A-87D6C25AB078}</ProjectGuid>
<ProjectTypeGuids>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<OutputType>WinExe</OutputType>
<RootNamespace>CheckNetAndIE</RootNamespace>
<AssemblyName>CheckNetAndIE</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<AppDesignerFolder>Properties</AppDesignerFolder>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<OutputPath>bin\Debug\</OutputPath>
<DebugSymbols>True</DebugSymbols>
<DebugType>Full</DebugType>
<Optimize>False</Optimize>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<OutputPath>bin\Release\</OutputPath>
<DebugSymbols>False</DebugSymbols>
<DebugType>None</DebugType>
<Optimize>True</Optimize>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="MainForm.cs" />
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -0,0 +1,160 @@
/*
* Created by SharpDevelop.
* User: gfdgd xi
* Date: 2022/11/5
* Time: 18:08
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
namespace CheckNetAndIE
{
partial class MainForm
{
/// <summary>
/// Designer variable used to keep track of non-visual components.
/// </summary>
private System.ComponentModel.IContainer components = null;
private System.Windows.Forms.WebBrowser webBrowser1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Button button6;
private System.Windows.Forms.TextBox textBox1;
/// <summary>
/// Disposes resources used by the form.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
base.Dispose(disposing);
}
/// <summary>
/// This method is required for Windows Forms designer support.
/// Do not change the method contents inside the source code editor. The Forms designer might
/// not be able to load this method if it was changed manually.
/// </summary>
private void InitializeComponent()
{
this.webBrowser1 = new System.Windows.Forms.WebBrowser();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.button5 = new System.Windows.Forms.Button();
this.button6 = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// webBrowser1
//
this.webBrowser1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.webBrowser1.Location = new System.Drawing.Point(12, 61);
this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20);
this.webBrowser1.Name = "webBrowser1";
this.webBrowser1.ScriptErrorsSuppressed = true;
this.webBrowser1.Size = new System.Drawing.Size(431, 258);
this.webBrowser1.TabIndex = 0;
this.webBrowser1.Url = new System.Uri("http://gfdgd-xi.github.io", System.UriKind.Absolute);
//
// button1
//
this.button1.Location = new System.Drawing.Point(12, 32);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 1;
this.button1.Text = "Url1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.Button1Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(95, 32);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, 23);
this.button2.TabIndex = 2;
this.button2.Text = "Url2";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.Button2Click);
//
// button3
//
this.button3.Location = new System.Drawing.Point(177, 32);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(75, 23);
this.button3.TabIndex = 3;
this.button3.Text = "Url3";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.Button3Click);
//
// button4
//
this.button4.Location = new System.Drawing.Point(258, 32);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(75, 23);
this.button4.TabIndex = 4;
this.button4.Text = "Url4";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.Button4Click);
//
// button5
//
this.button5.Location = new System.Drawing.Point(339, 32);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(75, 23);
this.button5.TabIndex = 5;
this.button5.Text = "Url5";
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.Button5Click);
//
// button6
//
this.button6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.button6.Location = new System.Drawing.Point(368, 3);
this.button6.Name = "button6";
this.button6.Size = new System.Drawing.Size(75, 23);
this.button6.TabIndex = 6;
this.button6.Text = "Go";
this.button6.UseVisualStyleBackColor = true;
this.button6.Click += new System.EventHandler(this.Button6Click);
//
// textBox1
//
this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.textBox1.Location = new System.Drawing.Point(12, 3);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(350, 21);
this.textBox1.TabIndex = 7;
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(455, 331);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.button6);
this.Controls.Add(this.button5);
this.Controls.Add(this.button4);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.webBrowser1);
this.Name = "MainForm";
this.Text = "测试 .net framework 和 Internet Explorer";
this.ResumeLayout(false);
this.PerformLayout();
}
}
}

View File

@ -0,0 +1,57 @@
/*
* Created by SharpDevelop.
* User: gfdgd xi
* Date: 2022/11/5
* Time: 18:08
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace CheckNetAndIE
{
/// <summary>
/// Description of MainForm.
/// </summary>
public partial class MainForm : Form
{
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
void Button1Click(object sender, EventArgs e)
{
webBrowser1.Navigate("https://gfdgd-xi.github.io");
}
void Button2Click(object sender, EventArgs e)
{
webBrowser1.Navigate("https://bbs.deepin.org/user/239113");
}
void Button3Click(object sender, EventArgs e)
{
webBrowser1.Navigate("https://spark-app.store/");
}
void Button4Click(object sender, EventArgs e)
{
webBrowser1.Navigate("https://gitee.com/gfdgd-xi");
}
void Button5Click(object sender, EventArgs e)
{
webBrowser1.Navigate("https://github.com/gfdgd-xi");
}
void Button6Click(object sender, EventArgs e)
{
webBrowser1.Navigate(textBox1.Text);
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,31 @@
/*
* Created by SharpDevelop.
* User: gfdgd xi
* Date: 2022/11/5
* Time: 18:08
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Windows.Forms;
namespace CheckNetAndIE
{
/// <summary>
/// Class with program entry point.
/// </summary>
internal sealed class Program
{
/// <summary>
/// Program entry point.
/// </summary>
[STAThread]
private static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}

View File

@ -0,0 +1,31 @@
#region Using directives
using System;
using System.Reflection;
using System.Runtime.InteropServices;
#endregion
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CheckNetAndIE")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CheckNetAndIE")]
[assembly: AssemblyCopyright("Copyright 2022")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
[assembly: ComVisible(false)]
// The assembly version has following format :
//
// Major.Minor.Build.Revision
//
// You can specify all the values or you can use the default the Revision and
// Build Numbers by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")]

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
</configuration>

Binary file not shown.

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
</configuration>

Binary file not shown.

View File

@ -0,0 +1,8 @@
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNetAndIE\CheckNetAndIE\bin\Debug\CheckNetAndIE.exe.config
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNetAndIE\CheckNetAndIE\bin\Debug\CheckNetAndIE.exe
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNetAndIE\CheckNetAndIE\bin\Debug\CheckNetAndIE.pdb
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNetAndIE\CheckNetAndIE\obj\Debug\CheckNetAndIE.csprojResolveAssemblyReference.cache
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNetAndIE\CheckNetAndIE\obj\Debug\CheckNetAndIE.MainForm.resources
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNetAndIE\CheckNetAndIE\obj\Debug\CheckNetAndIE.csproj.GenerateResource.Cache
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNetAndIE\CheckNetAndIE\obj\Debug\CheckNetAndIE.exe
C:\Users\gfdgd xi\Documents\SharpDevelop Projects\CheckNetAndIE\CheckNetAndIE\obj\Debug\CheckNetAndIE.pdb

Binary file not shown.

Binary file not shown.

Binary file not shown.