using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.VisualBasic;
using Microsoft.VisualBasic.Compatibility;
using Microsoft.VisualBasic.Compatibility.VB6;
namespace IndiLogiX
{
namespace Native32
{
public class Native32
{
//=========================================================
// === External Consts: ===
public const int vbString = 8;
public static IntPtr GetByteFromString(String Buf)
{
IntPtr pBuf = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(Buf);
return pBuf;
}
public static void GetStringFromByte(ref String Buf, IntPtr pBuf)
{
Buf = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(pBuf);
}
// General API functions.
[System.Runtime.InteropServices.DllImport("shell32.dll", EntryPoint = "ShellAboutA")]
private static extern unsafe int ShellAbout(int hwnd, IntPtr szApp, IntPtr szOtherStuff, int hIcon);
private unsafe int ShellAboutWrp(int hwnd, string szApp, string szOtherStuff, int hIcon)
{
int ret;
IntPtr pszApp = GetByteFromString(szApp);
IntPtr pszOtherStuff = GetByteFromString(szOtherStuff);
ret = ShellAbout(hwnd, pszApp, pszOtherStuff, hIcon);
//VBtoConverter.GetStringFromByte(ref szApp, pszApp);
//VBtoConverter.GetStringFromByte(ref szOtherStuff, pszOtherStuff);
return ret;
}
const int HWND_TOPMOST = -1;
const int SWP_NOACTIVATE = 0x10;
const int SWP_SHOWWINDOW = 0x40;
const int SWP_HIDEWINDOW = 0x80;
const int SWP_NOZORDER = 0x4;
const int SWP_NOMOVE = 0x2;
const int SWP_NOREPOSITION = 0x200;
const int SWP_NOSIZE = 0x1;
[System.Runtime.InteropServices.DllImport("user32")]
private static extern int SetWindowPos(int hwnd, int hWndInsertAfter, int X, int Y, int cx, int cy, int wFlags);
[System.Runtime.InteropServices.DllImport("user32", EntryPoint = "FindWindowA")]
private static extern unsafe int FindWindow(IntPtr lpClassName, IntPtr lpWindowName);
private unsafe int FindWindowWrp(string lpClassName, string lpWindowName)
{
int ret;
IntPtr plpClassName = GetByteFromString(lpClassName);
IntPtr plpWindowName = GetByteFromString(lpWindowName);
ret = FindWindow(plpClassName, plpWindowName);
//VBtoConverter.GetStringFromByte(ref lpClassName, plpClassName);
//VBtoConverter.GetStringFromByte(ref lpWindowName, plpWindowName);
return ret;
}
[System.Runtime.InteropServices.DllImport("user32")]
private static extern int GetForegroundWindow();
[System.Runtime.InteropServices.DllImport("user32")]
private static extern int GetParent(int hwnd);
[System.Runtime.InteropServices.DllImport("user32", EntryPoint = "GetWindowTextLengthA")]
private static extern int GetWindowTextLength(int hwnd);
[System.Runtime.InteropServices.DllImport("user32", EntryPoint = "GetWindowTextA")]
private static extern unsafe int GetWindowText(int hwnd, IntPtr lpString, int cch);
private unsafe int GetWindowTextWrp(int hwnd, ref string lpString, int cch)
{
int ret;
IntPtr plpString = GetByteFromString(lpString);
ret = GetWindowText(hwnd, plpString, cch);
GetStringFromByte(ref lpString, plpString);
return ret;
}
[System.Runtime.InteropServices.DllImport("advapi32.dll")]
private static extern unsafe int GetUserNameA(IntPtr lpBuffer, int* nSize);
private unsafe int GetUserNameAWrp(ref string lpBuffer, ref int nSize)
{
int ret;
IntPtr plpBuffer = GetByteFromString(lpBuffer);
fixed (int* pnSize = &nSize)
{
ret = GetUserNameA(plpBuffer, pnSize);
}
GetStringFromByte(ref lpBuffer, plpBuffer);
return ret;
}
private int TaskBarhWnd;
// Exit's windows with one of the following results.
// dwReserved = 0
[System.Runtime.InteropServices.DllImport("user32")]
private static extern int ExitWindowsEx(int uFlags, int dwReserved);
const int EXIT_LOGOFF = 0;
const int EXIT_SHUTDOWN = 1;
const int EXIT_REBOOT = 2;
[System.Runtime.InteropServices.DllImport("kernel32")]
private static extern unsafe int GetComputerNameA(IntPtr lpBuffer, int* nSize);
private unsafe int GetComputerNameAWrp(ref string lpBuffer, ref int nSize)
{
int ret;
IntPtr plpBuffer = GetByteFromString(lpBuffer);
fixed (int* pnSize = &nSize)
{
ret = GetComputerNameA(plpBuffer, pnSize);
}
GetStringFromByte(ref lpBuffer, plpBuffer);
return ret;
}
// General API functions. (with no VBasic wrapper)
// Puts the app to sleep for the given number of milliseconds
[System.Runtime.InteropServices.DllImport("kernel32")]
private static extern void Sleep(int dwMilliseconds);
public void ExitWindows(int uFlags)
{
#if def_ExitWindows
ExitWindowsEx(uFlags, 0);
#endif // def_ExitWindows
}
public string GetUserName()
{
string GetUserName = "";
#if def_GetUserName
char[] UserName = new char[255];
GetUserNameAWrp(ref UserName, ref 255);
GetUserName = Strings.Left(UserName, Strings.InStr(UserName, Chr(0), CompareMethod.Text)-1);
#endif // def_GetUserName
return GetUserName;
}
//
// Returns the computer's name
//
public string GetComputerName()
{
string GetComputerName = "";
#if def_GetComputerName
char[] UserName = new char[255];
GetComputerNameAWrp(ref UserName, ref 255);
GetComputerName = Strings.Left(UserName, Strings.InStr(UserName, Chr(0), CompareMethod.Text)-1);
#endif // def_GetComputerName
return GetComputerName;
}
//
// Returns the title of the active window.
// if GetParent = true then the parent window is
// returned.
//
public string GetActiveWindowTitle(bool ReturnParent)
{
string GetActiveWindowTitle = "";
#if def_GetActiveWindowTitle
int i;
int j;
i = GetForegroundWindow;
if (ReturnParent) {
while (i!=0) {
j = i;
i = GetParent(i);
}
i = j;
}
GetActiveWindowTitle = GetWindowTitle(i);
#endif // def_GetActiveWindowTitle
return GetActiveWindowTitle;
}
public void HideTaskBar()
{
#if def_HideTaskBar
TaskBarhWnd = FindWindowWrp("Shell_traywnd", "");
if (TaskBarhWnd!=0) {
SetWindowPos(TaskBarhWnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW);
}
#endif // def_HideTaskBar
}
public void ShowTaskBar()
{
#if def_ShowTaskBar
if (TaskBarhWnd!=0) {
SetWindowPos(TaskBarhWnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW);
}
#endif // def_ShowTaskBar
}
//
// Returns the handle of the active window.
// if GetParent = true then the parent window is
// returned.
//
public int GetActiveWindow(bool ReturnParent)
{
int GetActiveWindow = 0;
#if def_GetActiveWindow
int i;
int j;
i = GetForegroundWindow;
if (ReturnParent) {
while (i!=0) {
j = i;
i = GetParent(i);
}
i = j;
}
GetActiveWindow = i;
#endif // def_GetActiveWindow
return GetActiveWindow;
}
public string GetWindowTitle(int hwnd)
{
string GetWindowTitle = "";
#if def_GetWindowTitle
int l;
string s = "";
l = GetWindowTextLength(hwnd);
s = Strings.Space(l+1);
GetWindowTextWrp(hwnd, ref s, l+1);
GetWindowTitle = Strings.Left(s, l);
#endif // def_GetWindowTitle
return GetWindowTitle;
}
//
// Makes a form the top window if top = True. When top = False it removes
// this property.
//
// Public Sub TopMostForm(f As Form, Top As Boolean)
// If Top Then
// SetWindowPos f.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
// Else
// SetWindowPos f.hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
// End If
// End Sub
//
// Sleeps for a given number of seconds.
//
public void Pause(float seconds)
{
#if def_Pause
Sleep(Math.Floor(Convert.ToDouble(seconds*1000.0)));
#endif // def_Pause
}
//
// Generates a standard windows About box.
//
public void AboutBox(object frm)
{
//AboutBox(frm, null);
}
public void AboutBox(object frm, ref object copyright)
{
#if def_AboutBox
if (VarType(copyright)==VBtoConverter.vbString) {
ShellAboutWrp(frm.hwnd, App.ProductName, copyright, frm.Icon);
} else {
ShellAboutWrp(frm.hwnd, App.ProductName, "", frm.Icon);
}
#endif // def_AboutBox
}
}
}
}