31 changed files with 885 additions and 146 deletions
@ -0,0 +1,239 @@ |
|||
|
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Drawing; |
|||
using System.Linq; |
|||
using System.Runtime.InteropServices; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace QYDongDongTool |
|||
{ |
|||
public class CSharpAPIs |
|||
{ |
|||
private delegate bool WNDENUMPROC(IntPtr hWnd, int lParam); |
|||
[DllImport("user32.dll")] |
|||
private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, int lParam); |
|||
//[DllImport("user32.dll")]
|
|||
//private static extern IntPtr FindWindowW(string lpClassName, string lpWindowName);
|
|||
[DllImport("user32.dll")] |
|||
private static extern int GetWindowTextW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpString, int nMaxCount); |
|||
[DllImport("user32.dll")] |
|||
private static extern int GetClassNameW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpString, int nMaxCount); |
|||
|
|||
|
|||
[DllImport("User32.dll", CharSet = CharSet.Auto)] |
|||
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID); |
|||
|
|||
|
|||
[DllImport("user32.dll", EntryPoint = "ShowWindow", SetLastError = true)] |
|||
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow); |
|||
|
|||
[DllImport("user32.dll")] |
|||
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndlnsertAfter, int X, int Y, int cx, int cy, uint Flags); |
|||
|
|||
[DllImport("user32.dll", EntryPoint = "SetParent")] |
|||
public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent); |
|||
|
|||
[DllImport("user32.dll", CharSet = CharSet.Auto)] |
|||
public static extern int MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool BRePaint); |
|||
|
|||
|
|||
[DllImport("user32.dll")] |
|||
public static extern IntPtr GetTopWindow(IntPtr hWnd); |
|||
|
|||
[DllImport("user32.dll", CharSet = CharSet.Auto, EntryPoint = "GetWindow", SetLastError = true)] |
|||
public static extern IntPtr GetNextWindow(IntPtr hwnd, [MarshalAs(UnmanagedType.U4)] int wFlag); |
|||
|
|||
[DllImport("user32.dll", EntryPoint = "GetDesktopWindow", CharSet = CharSet.Auto, SetLastError = true)] |
|||
public static extern IntPtr GetDesktopWindow(); |
|||
|
|||
[DllImport("user32.dll", EntryPoint = "GetWindowLong")] |
|||
private static extern IntPtr GetWindowLongPtr32(IntPtr hWnd, int nIndex); |
|||
|
|||
[DllImport("user32.dll", EntryPoint = "GetWindowLongPtr")] |
|||
private static extern IntPtr GetWindowLongPtr64(IntPtr hWnd, int nIndex); |
|||
|
|||
// This static method is required because Win32 does not support
|
|||
// GetWindowLongPtr directly
|
|||
public static IntPtr GetWindowLong(IntPtr hWnd, int nIndex) |
|||
{ |
|||
if (IntPtr.Size == 8) |
|||
return GetWindowLongPtr64(hWnd, nIndex); |
|||
else |
|||
return GetWindowLongPtr32(hWnd, nIndex); |
|||
} |
|||
|
|||
|
|||
public static IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong) |
|||
{ |
|||
if (IntPtr.Size == 8) |
|||
return SetWindowLongPtr64(hWnd, nIndex, dwNewLong); |
|||
else |
|||
return new IntPtr(SetWindowLong32(hWnd, nIndex, dwNewLong.ToInt32())); |
|||
} |
|||
|
|||
[DllImport("user32.dll", EntryPoint = "SetWindowLong")] |
|||
private static extern int SetWindowLong32(IntPtr hWnd, int nIndex, int dwNewLong); |
|||
|
|||
[DllImport("user32.dll", EntryPoint = "SetWindowLongPtr")] |
|||
private static extern IntPtr SetWindowLongPtr64(IntPtr hWnd, int nIndex, IntPtr dwNewLong); |
|||
|
|||
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] |
|||
public static extern IntPtr GetForegroundWindow(); |
|||
|
|||
[DllImport("user32.dll")] |
|||
public static extern bool SetForegroundWindow(IntPtr hWnd); |
|||
|
|||
|
|||
//根据窗口来获取进程ID,
|
|||
public static int GetCurrentProcessID(IntPtr handle) |
|||
{ |
|||
GetWindowThreadProcessId(handle, out int oo); |
|||
return oo; |
|||
} |
|||
public struct WindowInfo |
|||
{ |
|||
public IntPtr hWnd; |
|||
public string szWindowName; |
|||
public string szClassName; |
|||
public int ProcessId { get; set; } |
|||
|
|||
public int Width { get; set; } |
|||
|
|||
public int Height { get; set; } |
|||
|
|||
public int X { get; set; } |
|||
|
|||
public int Y { get; set; } |
|||
} |
|||
|
|||
[DllImport("user32.dll")] |
|||
[return: MarshalAs(UnmanagedType.Bool)] |
|||
static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect); |
|||
|
|||
[StructLayout(LayoutKind.Sequential)] |
|||
public struct RECT |
|||
{ |
|||
public int Left; //最左坐标
|
|||
public int Top; //最上坐标
|
|||
public int Right; //最右坐标
|
|||
public int Bottom; //最下坐标
|
|||
} |
|||
|
|||
|
|||
public static (int width, int height, int x, int y) GetWindowSize(IntPtr hwnd) |
|||
{ |
|||
RECT rc = new RECT(); |
|||
GetWindowRect(hwnd, ref rc); |
|||
|
|||
int width = rc.Right - rc.Left; //窗口的宽度
|
|||
int height = rc.Bottom - rc.Top; //窗口的高度
|
|||
int x = rc.Left; |
|||
int y = rc.Top; |
|||
|
|||
|
|||
return (width, height, x, y); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
/* |
|||
SetWindowLong(ChildWindowHandle, GWL_EXSTYLE, (GetWindowLong(ChildWindowHandle, GWL_EXSTYLE) | WS_EX_NOPARENTNOTIFY)); |
|||
*/ |
|||
public enum GWL |
|||
{ |
|||
GWL_WNDPROC = (-4), |
|||
GWL_HINSTANCE = (-6), |
|||
GWL_HWNDPARENT = (-8), |
|||
GWL_STYLE = (-16), |
|||
GWL_EXSTYLE = (-20), |
|||
GWL_USERDATA = (-21), |
|||
GWL_ID = (-12) |
|||
} |
|||
|
|||
public static bool ReSetParent(IntPtr hWnd) |
|||
{ |
|||
int row= SetParent(hWnd, GetDesktopWindow()); |
|||
MoveWindow(hWnd, 0, 0, 0, 0, true); |
|||
return row > 0; |
|||
} |
|||
|
|||
|
|||
public static WindowInfo GetWindowInfo(IntPtr hWnd) |
|||
{ |
|||
WindowInfo wnd = new WindowInfo(); |
|||
StringBuilder sb = new StringBuilder(256); |
|||
//get hwnd
|
|||
wnd.hWnd = hWnd; |
|||
//get window name
|
|||
GetWindowTextW(hWnd, sb, sb.Capacity); |
|||
wnd.szWindowName = sb.ToString(); |
|||
//get window class
|
|||
GetClassNameW(hWnd, sb, sb.Capacity); |
|||
wnd.szClassName = sb.ToString(); |
|||
wnd.ProcessId = GetCurrentProcessID(hWnd); |
|||
|
|||
var size = GetWindowSize(hWnd); |
|||
wnd.Width = size.width; |
|||
wnd.Height = size.height; |
|||
wnd.X = size.x; |
|||
wnd.Y = size.y; |
|||
|
|||
return wnd; |
|||
} |
|||
|
|||
|
|||
public List<WindowInfo> GetAllDesktopWindows() |
|||
{ |
|||
List<WindowInfo> wndList = new List<WindowInfo>(); |
|||
|
|||
//enum all desktop windows
|
|||
EnumWindows(delegate (IntPtr hWnd, int lParam) |
|||
{ |
|||
WindowInfo wnd = new WindowInfo(); |
|||
StringBuilder sb = new StringBuilder(256); |
|||
//get hwnd
|
|||
wnd.hWnd = hWnd; |
|||
//get window name
|
|||
GetWindowTextW(hWnd, sb, sb.Capacity); |
|||
wnd.szWindowName = sb.ToString(); |
|||
//get window class
|
|||
GetClassNameW(hWnd, sb, sb.Capacity); |
|||
wnd.szClassName = sb.ToString(); |
|||
wnd.ProcessId = GetCurrentProcessID(hWnd); |
|||
|
|||
var (width, height, x, y) = GetWindowSize(hWnd); |
|||
wnd.Width = width; |
|||
wnd.Height = height; |
|||
wnd.X = x; |
|||
wnd.Y = y; |
|||
|
|||
//add it into list
|
|||
wndList.Add(wnd); |
|||
return true; |
|||
}, 0); |
|||
|
|||
return wndList; |
|||
} |
|||
//获取窗体位置 最小化 最大化 隐藏 api
|
|||
[DllImport("user32.dll")] |
|||
[return: MarshalAs(UnmanagedType.Bool)] |
|||
public static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl); |
|||
|
|||
|
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
public struct WINDOWPLACEMENT |
|||
{ |
|||
public int length; |
|||
public int flags; |
|||
public int showCmd; |
|||
public System.Drawing.Point ptMinPosition; |
|||
public System.Drawing.Point ptMaxPosition; |
|||
public System.Drawing.Rectangle rcNormalPosition; |
|||
} |
@ -0,0 +1,100 @@ |
|||
using BBWY.Common.Models; |
|||
using QYDongDongTool; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Diagnostics; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using System.Reflection; |
|||
using System.Windows; |
|||
|
|||
namespace BBWY.Client.Helpers |
|||
{ |
|||
public class DongDongHelper : IDenpendency |
|||
{ |
|||
private CSharpAPIs csapi; |
|||
private System.Timers.Timer inJectionTimer; |
|||
public DongDongHelper() |
|||
{ |
|||
csapi = new CSharpAPIs(); |
|||
inJectionTimer = new System.Timers.Timer(10000); |
|||
inJectionTimer.Elapsed += InJectionTimer_Elapsed; |
|||
} |
|||
|
|||
private void InJectionTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) |
|||
{ |
|||
InJection(); |
|||
} |
|||
|
|||
private void InJection() |
|||
{ |
|||
try |
|||
{ |
|||
ProcessStartInfo p = new ProcessStartInfo(); |
|||
//p.UseShellExecute = true;
|
|||
p.CreateNoWindow = true; |
|||
p.FileName= Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "InJectionDongDong", "dllin.exe"); |
|||
p.Verb = "runas"; |
|||
Process.Start(p); |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Console.WriteLine($"InJection Error, {ex.Message}"); |
|||
} |
|||
} |
|||
|
|||
public void StartInJection() |
|||
{ |
|||
if (!inJectionTimer.Enabled) |
|||
{ |
|||
InJection(); |
|||
inJectionTimer.Start(); |
|||
} |
|||
|
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取全部登录咚咚账号
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public List<string> GetAllDongdongUser() |
|||
{ |
|||
List<string> dongdongList = new List<string>(); |
|||
var list = csapi.GetAllDesktopWindows(); |
|||
|
|||
var windows = list.Where(c => c.szClassName == "DD_JM_Workbench_DLG").ToList(); |
|||
|
|||
windows.ForEach(info => |
|||
{ |
|||
dongdongList.Add(info.szWindowName.Replace("的工作台", "")); |
|||
}); |
|||
|
|||
return dongdongList; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 唤醒咚咚
|
|||
/// </summary>
|
|||
/// <param name="waiterName"></param>
|
|||
/// <param name="buyerAccount"></param>
|
|||
public void WakeUpDongDong(string waiterName, string buyerAccount) |
|||
{ |
|||
var url = $"jdworkstation://jm/?command=openDD&pin={waiterName}&client={buyerAccount}"; |
|||
try |
|||
{ |
|||
try |
|||
{ |
|||
//Process.Start("explorer.exe", url);
|
|||
|
|||
ShellExecuteHelper.ShellExecute(IntPtr.Zero, "open", url, string.Empty, string.Empty, ShellExecuteHelper.ShowCommands.SW_SHOWNORMAL); |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Clipboard.SetText(url); |
|||
MessageBox.Show($"{ex.Message}\r\n唤醒咚咚失败,唤醒链接已复制到剪切板,请手动打开浏览器唤醒", "提示"); |
|||
} |
|||
} |
|||
catch { throw; } |
|||
} |
|||
} |
|||
} |
@ -1,80 +0,0 @@ |
|||
using BBWY.Common.Models; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.IO.Pipes; |
|||
using System.Text; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace BBWY.Client.Helpers |
|||
{ |
|||
public class PipeHelper: IDenpendency |
|||
{ |
|||
public PipeHelper() |
|||
{ |
|||
_pipeServerDictionary = new Dictionary<string, NamedPipeServerStream>(); |
|||
} |
|||
|
|||
private IDictionary<string, NamedPipeServerStream> _pipeServerDictionary; |
|||
|
|||
public Action<string> ServerReceiveCallback; |
|||
|
|||
private async Task WaitForClientConnectionsAsync(NamedPipeServerStream pipeServer) |
|||
{ |
|||
while (true) |
|||
{ |
|||
await pipeServer.WaitForConnectionAsync().ConfigureAwait(false); |
|||
try |
|||
{ |
|||
const int bufferLength = 1024; |
|||
var buffer = new byte[bufferLength]; |
|||
using (var stream = new MemoryStream()) |
|||
{ |
|||
while (true) |
|||
{ |
|||
var bytesRead = await pipeServer.ReadAsync(buffer.AsMemory(0, bufferLength), CancellationToken.None).ConfigureAwait(false); |
|||
if (bytesRead == 0) |
|||
{ |
|||
break; |
|||
} |
|||
stream.Write(buffer, 0, bytesRead); |
|||
} |
|||
|
|||
stream.Seek(0, SeekOrigin.Begin); |
|||
ServerReceiveCallback?.Invoke(Encoding.UTF8.GetString(stream.ToArray())); |
|||
} |
|||
} |
|||
finally |
|||
{ |
|||
pipeServer.Disconnect(); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void CreateServer(string pipeName) |
|||
{ |
|||
var _pipeServer = new NamedPipeServerStream(pipeName, PipeDirection.InOut, 100, PipeTransmissionMode.Byte, PipeOptions.Asynchronous | PipeOptions.CurrentUserOnly); |
|||
_ = WaitForClientConnectionsAsync(_pipeServer); |
|||
} |
|||
|
|||
public void CloseServer(string pipeName) |
|||
{ |
|||
if (_pipeServerDictionary.TryGetValue(pipeName, out NamedPipeServerStream pipeServer)) |
|||
{ |
|||
try |
|||
{ |
|||
pipeServer.Disconnect(); |
|||
pipeServer.Dispose(); |
|||
pipeServer.Close(); |
|||
_pipeServerDictionary.Remove(pipeName); |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
|
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
@ -0,0 +1,36 @@ |
|||
using System; |
|||
using System.Runtime.InteropServices; |
|||
|
|||
namespace BBWY.Client.Helpers |
|||
{ |
|||
public class ShellExecuteHelper |
|||
{ |
|||
public enum ShowCommands : int |
|||
{ |
|||
SW_HIDE = 0, |
|||
SW_SHOWNORMAL = 1, |
|||
SW_NORMAL = 1, |
|||
SW_SHOWMINIMIZED = 2, |
|||
SW_SHOWMAXIMIZED = 3, |
|||
SW_MAXIMIZE = 3, |
|||
SW_SHOWNOACTIVATE = 4, |
|||
SW_SHOW = 5, |
|||
SW_MINIMIZE = 6, |
|||
SW_SHOWMINNOACTIVE = 7, |
|||
SW_SHOWNA = 8, |
|||
SW_RESTORE = 9, |
|||
SW_SHOWDEFAULT = 10, |
|||
SW_FORCEMINIMIZE = 11, |
|||
SW_MAX = 11 |
|||
} |
|||
|
|||
[DllImport("shell32.dll")] |
|||
public static extern IntPtr ShellExecute( |
|||
IntPtr hwnd, |
|||
string lpOperation, |
|||
string lpFile, |
|||
string lpParameters, |
|||
string lpDirectory, |
|||
ShowCommands nShowCmd); |
|||
} |
|||
} |
@ -0,0 +1,59 @@ |
|||
using BBWY.Common.Models; |
|||
using Fleck; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.IO.Pipes; |
|||
using System.Text; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace BBWY.Client.Helpers |
|||
{ |
|||
public class WSHelper : IDenpendency |
|||
{ |
|||
//private List<IWebSocketConnection> connectSocketPool = new List<IWebSocketConnection>();
|
|||
|
|||
private WebSocketServer wsServer; |
|||
|
|||
public WSHelper() |
|||
{ |
|||
wsServer = new WebSocketServer("ws://127.0.0.1:35192"); |
|||
} |
|||
|
|||
public Action<string> ServerReceiveCallback; |
|||
|
|||
|
|||
public void Start() |
|||
{ |
|||
//开启监听
|
|||
wsServer.Start(socket => |
|||
{ |
|||
//注册客户端连接建立事件
|
|||
socket.OnOpen = () => |
|||
{ |
|||
Console.WriteLine("建立连接"); |
|||
//将当前客户端连接对象放入连接池中
|
|||
//connectSocketPool.Add(socket);
|
|||
}; |
|||
//注册客户端连接关闭事件
|
|||
socket.OnClose = () => |
|||
{ |
|||
//Console.WriteLine("Close");
|
|||
//将当前客户端连接对象从连接池中移除
|
|||
//connectSocketPool.Remove(socket);
|
|||
}; |
|||
//注册客户端发送信息事件
|
|||
socket.OnMessage = message => |
|||
{ |
|||
Console.WriteLine($"收到webSocket消息:{message}"); |
|||
socket.Close(); |
|||
////向客户端发送消息
|
|||
//socket.Send($"服务端接收到信息:{message}");
|
|||
ServerReceiveCallback?.Invoke(message); |
|||
}; |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
|
@ -0,0 +1,11 @@ |
|||
namespace BBWY.Client.Models |
|||
{ |
|||
public class WaiterResponse |
|||
{ |
|||
public string Id { get; set; } |
|||
|
|||
public string Name { get; set; } |
|||
|
|||
public string Level { get; set; } |
|||
} |
|||
} |
@ -0,0 +1,26 @@ |
|||
//------------------------------------------------------------------------------
|
|||
// <auto-generated>
|
|||
// 此代码由工具生成。
|
|||
// 运行时版本:4.0.30319.42000
|
|||
//
|
|||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
|||
// 重新生成代码,这些更改将会丢失。
|
|||
// </auto-generated>
|
|||
//------------------------------------------------------------------------------
|
|||
|
|||
namespace BBWY.Client.Properties { |
|||
|
|||
|
|||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] |
|||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.0.3.0")] |
|||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { |
|||
|
|||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); |
|||
|
|||
public static Settings Default { |
|||
get { |
|||
return defaultInstance; |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,6 @@ |
|||
<?xml version='1.0' encoding='utf-8'?> |
|||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)"> |
|||
<Profiles> |
|||
<Profile Name="(Default)" /> |
|||
</Profiles> |
|||
</SettingsFile> |
@ -0,0 +1,78 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> |
|||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> |
|||
<security> |
|||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> |
|||
<!-- UAC 清单选项 |
|||
如果想要更改 Windows 用户帐户控制级别,请使用 |
|||
以下节点之一替换 requestedExecutionLevel 节点。n |
|||
<requestedExecutionLevel level="asInvoker" uiAccess="false" /> |
|||
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> |
|||
<requestedExecutionLevel level="highestAvailable" uiAccess="false" /> |
|||
|
|||
指定 requestedExecutionLevel 元素将禁用文件和注册表虚拟化。 |
|||
如果你的应用程序需要此虚拟化来实现向后兼容性,则删除此 |
|||
元素。 |
|||
--> |
|||
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> |
|||
</requestedPrivileges> |
|||
</security> |
|||
</trustInfo> |
|||
|
|||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> |
|||
<application> |
|||
<!-- 设计此应用程序与其一起工作且已针对此应用程序进行测试的 |
|||
Windows 版本的列表。取消评论适当的元素, |
|||
Windows 将自动选择最兼容的环境。 --> |
|||
|
|||
<!-- Windows Vista --> |
|||
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />--> |
|||
|
|||
<!-- Windows 7 --> |
|||
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />--> |
|||
|
|||
<!-- Windows 8 --> |
|||
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />--> |
|||
|
|||
<!-- Windows 8.1 --> |
|||
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />--> |
|||
|
|||
<!-- Windows 10 --> |
|||
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />--> |
|||
|
|||
</application> |
|||
</compatibility> |
|||
|
|||
<!-- 指示该应用程序可感知 DPI 且 Windows 在 DPI 较高时将不会对其进行 |
|||
自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需 |
|||
选择加入。选择加入此设置的 Windows 窗体应用程序(面向 .NET Framework 4.6)还应 |
|||
在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。 |
|||
|
|||
将应用程序设为感知长路径。请参阅 https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation --> |
|||
<!-- |
|||
<application xmlns="urn:schemas-microsoft-com:asm.v3"> |
|||
<windowsSettings> |
|||
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> |
|||
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware> |
|||
</windowsSettings> |
|||
</application> |
|||
--> |
|||
|
|||
<!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) --> |
|||
<!-- |
|||
<dependency> |
|||
<dependentAssembly> |
|||
<assemblyIdentity |
|||
type="win32" |
|||
name="Microsoft.Windows.Common-Controls" |
|||
version="6.0.0.0" |
|||
processorArchitecture="*" |
|||
publicKeyToken="6595b64144ccf1df" |
|||
language="*" |
|||
/> |
|||
</dependentAssembly> |
|||
</dependency> |
|||
--> |
|||
|
|||
</assembly> |
@ -0,0 +1,11 @@ |
|||
namespace BBWY.Server.Model.Dto |
|||
{ |
|||
public class WaiterResponse |
|||
{ |
|||
public string Id { get; set; } |
|||
|
|||
public string Name { get; set; } |
|||
|
|||
public string Level { get; set; } |
|||
} |
|||
} |
@ -0,0 +1,78 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> |
|||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> |
|||
<security> |
|||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> |
|||
<!-- UAC 清单选项 |
|||
如果想要更改 Windows 用户帐户控制级别,请使用 |
|||
以下节点之一替换 requestedExecutionLevel 节点。n |
|||
<requestedExecutionLevel level="asInvoker" uiAccess="false" /> |
|||
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> |
|||
<requestedExecutionLevel level="highestAvailable" uiAccess="false" /> |
|||
|
|||
指定 requestedExecutionLevel 元素将禁用文件和注册表虚拟化。 |
|||
如果你的应用程序需要此虚拟化来实现向后兼容性,则删除此 |
|||
元素。 |
|||
--> |
|||
<requestedExecutionLevel level="asInvoker" uiAccess="false" /> |
|||
</requestedPrivileges> |
|||
</security> |
|||
</trustInfo> |
|||
|
|||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> |
|||
<application> |
|||
<!-- 设计此应用程序与其一起工作且已针对此应用程序进行测试的 |
|||
Windows 版本的列表。取消评论适当的元素, |
|||
Windows 将自动选择最兼容的环境。 --> |
|||
|
|||
<!-- Windows Vista --> |
|||
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />--> |
|||
|
|||
<!-- Windows 7 --> |
|||
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />--> |
|||
|
|||
<!-- Windows 8 --> |
|||
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />--> |
|||
|
|||
<!-- Windows 8.1 --> |
|||
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />--> |
|||
|
|||
<!-- Windows 10 --> |
|||
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />--> |
|||
|
|||
</application> |
|||
</compatibility> |
|||
|
|||
<!-- 指示该应用程序可感知 DPI 且 Windows 在 DPI 较高时将不会对其进行 |
|||
自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需 |
|||
选择加入。选择加入此设置的 Windows 窗体应用程序(面向 .NET Framework 4.6)还应 |
|||
在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。 |
|||
|
|||
将应用程序设为感知长路径。请参阅 https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation --> |
|||
<!-- |
|||
<application xmlns="urn:schemas-microsoft-com:asm.v3"> |
|||
<windowsSettings> |
|||
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> |
|||
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware> |
|||
</windowsSettings> |
|||
</application> |
|||
--> |
|||
|
|||
<!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) --> |
|||
<!-- |
|||
<dependency> |
|||
<dependentAssembly> |
|||
<assemblyIdentity |
|||
type="win32" |
|||
name="Microsoft.Windows.Common-Controls" |
|||
version="6.0.0.0" |
|||
processorArchitecture="*" |
|||
publicKeyToken="6595b64144ccf1df" |
|||
language="*" |
|||
/> |
|||
</dependentAssembly> |
|||
</dependency> |
|||
--> |
|||
|
|||
</assembly> |
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue