2015-01-03 15:20:34 +08:00
using System.Collections.Generic ;
2014-07-25 08:32:19 +08:00
using System.Diagnostics ;
2015-01-07 22:23:10 +08:00
using System.IO ;
using System.Reflection ;
2014-07-25 08:32:19 +08:00
using System.Runtime.InteropServices ;
using System.Windows.Forms ;
2015-01-03 15:20:34 +08:00
namespace Wox.Plugin.Sys
2014-07-25 08:32:19 +08:00
{
2015-01-07 22:23:10 +08:00
public class Sys : IPlugin , ISettingProvider , IPluginI18n
2014-07-25 08:32:19 +08:00
{
List < Result > availableResults = new List < Result > ( ) ;
2015-01-07 22:23:10 +08:00
private PluginInitContext context ;
2014-07-25 08:32:19 +08:00
#region DllImport
internal const int EWX_LOGOFF = 0x00000000 ;
internal const int EWX_SHUTDOWN = 0x00000001 ;
internal const int EWX_REBOOT = 0x00000002 ;
internal const int EWX_FORCE = 0x00000004 ;
internal const int EWX_POWEROFF = 0x00000008 ;
internal const int EWX_FORCEIFHUNG = 0x00000010 ;
[DllImport("user32")]
private static extern bool ExitWindowsEx ( uint uFlags , uint dwReason ) ;
[DllImport("user32")]
private static extern void LockWorkStation ( ) ;
#endregion
public System . Windows . Controls . Control CreateSettingPanel ( )
{
return new SysSettings ( availableResults ) ;
}
2015-01-03 15:20:34 +08:00
public List < Result > Query ( Query query )
2014-07-25 08:32:19 +08:00
{
2015-01-07 22:23:10 +08:00
if ( availableResults . Count = = 0 )
{
LoadCommands ( ) ;
}
2014-07-25 08:32:19 +08:00
List < Result > results = new List < Result > ( ) ;
foreach ( Result availableResult in availableResults )
{
2015-01-26 17:46:55 +08:00
if ( availableResult . Title . ToLower ( ) . StartsWith ( query . Search . ToLower ( ) ) )
2014-07-25 08:32:19 +08:00
{
results . Add ( availableResult ) ;
}
}
return results ;
}
2015-01-03 15:20:34 +08:00
public void Init ( PluginInitContext context )
2014-07-25 08:32:19 +08:00
{
2015-01-07 22:23:10 +08:00
this . context = context ;
}
private void LoadCommands ( )
{
availableResults . AddRange ( new Result [ ] {
2014-07-25 08:32:19 +08:00
new Result
{
Title = "Shutdown" ,
2015-01-07 22:23:10 +08:00
SubTitle = context . API . GetTranslation ( "wox_plugin_sys_shutdown_computer" ) ,
2014-07-25 08:32:19 +08:00
Score = 100 ,
IcoPath = "Images\\exit.png" ,
Action = ( c ) = >
{
if ( MessageBox . Show ( "Are you sure you want to shut the computer down?" , "Shutdown Computer?" , MessageBoxButtons . YesNo , MessageBoxIcon . Warning ) = = DialogResult . Yes ) {
Process . Start ( "shutdown" , "/s /t 0" ) ;
}
return true ;
}
} ,
new Result
{
Title = "Log off" ,
2015-01-07 22:23:10 +08:00
SubTitle = context . API . GetTranslation ( "wox_plugin_sys_log_off" ) ,
2014-08-10 16:50:35 +08:00
Score = 100 ,
2014-07-25 08:32:19 +08:00
IcoPath = "Images\\logoff.png" ,
Action = ( c ) = > ExitWindowsEx ( EWX_LOGOFF , 0 )
} ,
new Result
{
Title = "Lock" ,
2015-01-07 22:23:10 +08:00
SubTitle = context . API . GetTranslation ( "wox_plugin_sys_lock" ) ,
2014-08-10 16:50:35 +08:00
Score = 100 ,
2014-07-25 08:32:19 +08:00
IcoPath = "Images\\lock.png" ,
Action = ( c ) = >
{
LockWorkStation ( ) ;
return true ;
}
} ,
new Result
{
Title = "Exit" ,
2015-01-07 22:23:10 +08:00
SubTitle = context . API . GetTranslation ( "wox_plugin_sys_exit" ) ,
2014-07-25 08:32:19 +08:00
Score = 110 ,
IcoPath = "Images\\app.png" ,
Action = ( c ) = >
{
context . API . CloseApp ( ) ;
return true ;
}
} ,
new Result
{
Title = "Restart Wox" ,
2015-01-07 22:23:10 +08:00
SubTitle = context . API . GetTranslation ( "wox_plugin_sys_restart" ) ,
2014-07-25 08:32:19 +08:00
Score = 110 ,
IcoPath = "Images\\restart.png" ,
Action = ( c ) = >
{
ProcessStartInfo Info = new ProcessStartInfo ( ) ;
Info . Arguments = "/C ping 127.0.0.1 -n 1 && \"" + Application . ExecutablePath + "\"" ;
Info . WindowStyle = ProcessWindowStyle . Hidden ;
Info . CreateNoWindow = true ;
Info . FileName = "cmd.exe" ;
Process . Start ( Info ) ;
context . API . CloseApp ( ) ;
return true ;
}
} ,
new Result
{
Title = "Settings" ,
2015-01-07 22:23:10 +08:00
SubTitle = context . API . GetTranslation ( "wox_plugin_sys_setting" ) ,
2014-08-10 16:50:35 +08:00
Score = 100 ,
2014-07-25 08:32:19 +08:00
IcoPath = "Images\\app.png" ,
Action = ( c ) = >
{
context . API . OpenSettingDialog ( ) ;
return true ;
}
}
} ) ;
}
2015-01-07 22:23:10 +08:00
public string GetLanguagesFolder ( )
{
return Path . Combine ( Path . GetDirectoryName ( Assembly . GetExecutingAssembly ( ) . Location ) , "Languages" ) ;
2014-07-25 08:32:19 +08:00
2015-01-07 22:23:10 +08:00
}
2014-07-25 08:32:19 +08:00
}
}