rendered paste bodyusing System;
using System.Runtime.InteropServices;
using System.Reflection;
unsafe class Program
{
#region WinAPI
[DllImport("user32.dll")]
public static extern IntPtr CreateWindowEx(
uint dwExStyle, // extended window style
string lpClassName, // pointer to registered class name
string lpWindowName, // pointer to window name
uint dwStyle, // window style
uint x, // horizontal position of window
uint y, // vertical position of window
uint nWidth, // window width
uint nHeight, // window height
IntPtr hWndParent, // handle to parent or owner window
IntPtr hMenu, // handle to menu, or child-window identifier
IntPtr hInstance, // handle to application instance
void* lpParam // pointer to window-creation data
);
[DllImport("user32.dll")]
public static extern uint DefWindowProc(
IntPtr hWnd, // handle to window
uint Msg, // message identifier
uint wParam, // first message parameter
uint lParam // second message parameter
);
[DllImport("user32.dll")]
public static extern bool ShowWindow(
IntPtr hWnd, // handle of window
uint nCmdShow // show state of window
);
[DllImport("user32.dll")]
public static extern int GetMessage(
MSG* lpMsg, // address of structure with message
IntPtr hWnd, // handle of window
uint wMsgFilterMin, // first message
uint wMsgFilterMax // last message
);
[DllImport("user32.dll")]
public static extern long DispatchMessage(
MSG* lpmsg // pointer to structure with message
);
[DllImport("user32.dll")]
public static extern void MessageBox(
IntPtr hWnd, // handle of owner window
string lpText, // address of text in message box
string lpCaption, // address of title of message box
uint uType // style of message box
);
[DllImport("user32.dll")]
public static extern bool SetWindowText(
IntPtr hWnd, // handle of window or control
string lpString // address of string
);
[DllImport("user32.dll")]
public static extern void PostQuitMessage(
int nExitCode // exit code
);
[DllImport("user32.dll")]
public static extern short RegisterClassEx(
ref WNDCLASSEX lpwcx // address of structure with class data
);
[DllImport("user32.dll")]
public static extern IntPtr LoadIcon(
IntPtr hInstance, // handle of application instance
IntPtr lpIconName // icon-name string or icon resource identifier
);
[DllImport("user32.dll")]
public static extern IntPtr LoadCursor(
IntPtr hInstance, // handle of application instance
IntPtr lpCursorName // name string or cursor resource identifier
);
[DllImport("user32.dll")]
public static extern bool TranslateMessage(
MSG* lpMsg // address of structure with message
);
public static short HIWORD(uint l)
{
return ((short)(((uint)(l) >> 16) & 0xFFFF));
}
public static IntPtr MAKEINTRESOURCE(uint i){
return (IntPtr)((uint)((UInt16)(i)));
}
[StructLayout(LayoutKind.Sequential)]
public struct MSG
{ //WinAPI MSG struct
public IntPtr hwnd;
public uint message;
public uint wParam;
public uint lParam;
public uint time;
public POINT pt;
}
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int x;
public int y;
}
[StructLayout(LayoutKind.Sequential)]
public struct WNDCLASSEX
{
public uint cbSize;
public uint style;
[MarshalAs(UnmanagedType.FunctionPtr)]
public WNDPROC lpfnWndProc;
public int cbClsExtra;
public int cbWndExtra;
public IntPtr hInstance;
public IntPtr hIcon;
public IntPtr hCursor;
public IntPtr hbrBackground;
public string lpszMenuName;
public string lpszClassName;
public IntPtr hIconSm;
}
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate uint WNDPROC(IntPtr hwnd, uint uMsg, uint wParam, uint lParam);
public const uint WS_SYSMENU = 0x80000;
public const uint WS_BORDER = 0x800000;
public const uint WS_CAPTION = 0xc00000;
public const uint WS_CHILD = 0x40000000;
public const uint SW_SHOW = 5;
public const uint CW_USEDEFAULT = 0x80000000;
public const uint WM_LBUTTONUP = 514;
public const uint SS_CENTER = 1;
public const uint BN_CLICKED = 0;
public const uint WM_DESTROY = 2;
public const uint WM_CREATE = 1;
public const uint WM_COMMAND = 273;
public const uint COLOR_WINDOW = 5;
public static IntPtr IDI_APPLICATION = MAKEINTRESOURCE(32512);
public static IntPtr IDC_CROSS = MAKEINTRESOURCE(32515);
#endregion
public static uint WindowProc(IntPtr hwnd, uint uMsg, uint wParam, uint lParam)
{
switch (uMsg)
{
case WM_CREATE:
return 0;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch (HIWORD(wParam))
{
case (short)BN_CLICKED:
MessageBox(hwnd, "Button clicked!", "Awesome", 0);
PostQuitMessage(0);
break;
}
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
public static int Main()
{
WNDCLASSEX wc = new WNDCLASSEX();
wc.cbSize = (uint)Marshal.SizeOf(wc);
wc.style = 0;
wc.cbClsExtra = 0;
wc.lpfnWndProc = new WNDPROC(WindowProc);
wc.cbWndExtra = 0;
wc.hIcon = LoadIcon(IntPtr.Zero, IDI_APPLICATION);
wc.hCursor = LoadCursor(IntPtr.Zero, IDC_CROSS);
wc.hbrBackground = (IntPtr)(COLOR_WINDOW + 1);
wc.lpszMenuName = null;
wc.lpszClassName = "HAX";
wc.hIconSm = LoadIcon(IntPtr.Zero, IDI_APPLICATION);
RegisterClassEx(ref wc);
IntPtr wind = CreateWindowEx(0, "HAX", "Window! >:D", WS_SYSMENU | WS_CAPTION | WS_BORDER, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, null);
IntPtr label = CreateWindowEx(0, "STATIC", "This window was created using the WinAPI inside a C# application...", WS_CHILD | SS_CENTER, 10, 10, 175, 60, wind, IntPtr.Zero, IntPtr.Zero, null);
IntPtr button = CreateWindowEx(0, "BUTTON", "Close", WS_CHILD, 55, 80, 80, 30, wind, IntPtr.Zero, IntPtr.Zero, null);
ShowWindow(wind, SW_SHOW);
ShowWindow(label, SW_SHOW);
ShowWindow(button, SW_SHOW);
MSG msg;
while (GetMessage(&msg, wind, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
}