108 lines
3.7 KiB
C#
108 lines
3.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Runtime.InteropServices;
|
|
using System.Reflection;
|
|
|
|
using Foo.Platform;
|
|
using Foo.Platform.Interacters;
|
|
|
|
namespace Foo.Hooks.CaptionButton
|
|
{
|
|
public partial class CaptionButton : Form
|
|
{
|
|
// Declare the Log4net Variable
|
|
private static log4net.ILog Log = Logger.GetLog4NetInterface(MethodBase.GetCurrentMethod().DeclaringType);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern Int32 GetWindowLong(IntPtr hwnd, int nIndex);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern Int32 SetWindowLong(IntPtr hwnd, int nIndex, Int32 dwNewLong);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern bool SetLayeredWindowAttributes(IntPtr hwnd, Int32 crKey, int bAlpha, uint dwFlags);
|
|
|
|
public const int GWL_EXSTYLE = -20;
|
|
public const int LWA_COLORKEY = 0x00000001;
|
|
public const int WS_EX_LAYERED = 0x00080000;
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
struct COLORREF
|
|
{
|
|
public byte R;
|
|
public byte G;
|
|
public byte B;
|
|
}
|
|
|
|
public CaptionButton()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
~CaptionButton()
|
|
{
|
|
}
|
|
|
|
protected override void WndProc(ref Message m)
|
|
{
|
|
// Debug Only *Allows us to step right into buttonhook starting *
|
|
if (Program.DEBUG_ONLY_SETTING_STARTBUTTONHOOK &&
|
|
!Program.DEBUG_ONLY_SETTING_STARTBUTTONHOOK_IS_STARTED)
|
|
{
|
|
Log.Info(string.Format("{0}() - * Debug Only Option * Starting ButtonHook", MethodBase.GetCurrentMethod().Name));
|
|
BHInteracter.StartButtonHookDLLEntryW();
|
|
Program.DEBUG_ONLY_SETTING_STARTBUTTONHOOK_IS_STARTED = true;
|
|
}
|
|
|
|
if (m.Msg == BHInteracter.WM_CAPTIONBUTTON_START)
|
|
{
|
|
Log.Info(string.Format("{0}() - Received CAPTIONBUTTON_START Message", MethodBase.GetCurrentMethod().Name));
|
|
BHInteracter.StartButtonHookDLLEntryW();
|
|
}
|
|
else if (m.Msg == BHInteracter.WM_CAPTIONBUTTON_STOP)
|
|
{
|
|
Log.Info(string.Format("{0}() - Received CAPTIONBUTTON_STOP Message", MethodBase.GetCurrentMethod().Name));
|
|
BHInteracter.StopButtonHookDLLEntryW();
|
|
}
|
|
|
|
// force opacity at all times
|
|
if (Opacity == 1.0)
|
|
Opacity = 0.0;
|
|
|
|
// force minimized at all times
|
|
if (WindowState != FormWindowState.Minimized)
|
|
WindowState = FormWindowState.Minimized;
|
|
|
|
// force Not to be seen in taskbar
|
|
if (ShowInTaskbar == true)
|
|
ShowInTaskbar = false;
|
|
|
|
base.WndProc(ref m);
|
|
}
|
|
|
|
void CaptionButton_Shown(object sender, System.EventArgs e)
|
|
{
|
|
Hide();
|
|
}
|
|
|
|
private void CaptionButton_HandleCreated(object sender, EventArgs e)
|
|
{
|
|
IntPtr hWnd = this.Handle;
|
|
SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
|
|
SetLayeredWindowAttributes(hWnd, 0x00000000, 0, LWA_COLORKEY);
|
|
}
|
|
|
|
void CaptionButton_Load(object sender, System.EventArgs e)
|
|
{
|
|
Log.Info(string.Format("{0}() - CaptionButton Load Called! - passing out hWnd Handle {1}", MethodBase.GetCurrentMethod().Name,Handle.ToInt32()));
|
|
TemporaryVal.SetValI(Handle.ToInt32());
|
|
}
|
|
}
|
|
}
|