Windows API常用函數

來源:互聯網
上載者:User

標籤:max   ons   沒有   seconds   async   bytes   kill   state   函數   

轉自:http://www.cnblogs.com/xiashengwang/p/4026259.html

.NET中雖然類庫很強,但還是有些時候功能有限,掌握常用的api函數,

會給我們解決問題提供另一種思路。

1、SetForegroundWindow

將視窗顯示到最前面,前提是視窗沒有最小化。

[DIIImport("User32.dll")]

public static extern bool SetForegroundWindow(IntPtrh Wnd);

2、ShowWindowAsync

 

顯示視窗,如最小化後顯示正常,這是非同步。 

[DllImport("User32.dll")]

public static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); 

public enum ShowState : 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 

}

3,SendMessage

處理序間通訊,接受視窗要有訊息迴圈才行。WM_COPYDATA 

public const int WM_COPYDATA = 0x004A; 

public struct COPYDATASTRUCT 

public IntPtr dwData; 

public int cbData; 

[MarshalAs(UnmanagedType.LPStr)] 

public string lpData; 

[DllImport("User32.dll", EntryPoint = "SendMessage")] 

public static extern int SendMessage( 

IntPtr hWnd, // handle to destination window 

int Msg, // message 

int wParam, // first message parameter 

ref COPYDATASTRUCT lParam // second message parameter 

); 

例子: 

發送方: 

byte[] sarr = System.Text.Encoding.Default.GetBytes(args[0]); 

Winn32.COPYDATASTRUCT copyData = new Winn32.COPYDATASTRUCT(); 

copyData.cbData = sarr.Length + 1; 

copyData.lpData = args[0]; 

copyData.dwData = (IntPtr)100; //這裡隨便寫什麼數字 

Winn32.SendMessage(runningInstance.MainWindowHandle, Winn32.WM_COPYDATA, 0, ref copyData); 

接收方 

protected override void DefWndProc(ref Message m) 

if (m.Msg == Winn32.WM_COPYDATA) 

Winn32.COPYDATASTRUCT copyData = new Winn32.COPYDATASTRUCT(); 

Type type = copyData.GetType(); 

copyData = (Winn32.COPYDATASTRUCT)m.GetLParam(type); 

this.textBox1.Text = copyData.lpData; 

base.DefWndProc(ref m); 

}

4,FindWindow

找到視窗控制代碼 

[DllImport("User32.dll", EntryPoint = "FindWindow")] 

private static extern int FindWindow(string lpClassName, string lpWindowName); 

5,SetLocalTime

設定系統時間 

[StructLayout(LayoutKind.Sequential)] 

public struct SYSTEMTIME 

public ushort wYear; 

public ushort wMonth; 

public ushort wDayOfWeek; 

public ushort wDay; 

public ushort wHour; 

public ushort wMinute; 

public ushort wSecond; 

public ushort wMilliseconds; 

public void FromDateTime(DateTime dateTime) 

wYear = (ushort)dateTime.Year; 

wMonth = (ushort)dateTime.Month; 

wDayOfWeek = (ushort)dateTime.DayOfWeek; 

wDay = (ushort)dateTime.Day; 

wHour = (ushort)dateTime.Hour; 

wMinute = (ushort)dateTime.Minute; 

wSecond = (ushort)dateTime.Second; 

wMilliseconds = (ushort)dateTime.Millisecond; 

public DateTime ToDateTime() 

return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond); 

[DllImport("kernel32.dll")] 

public static extern bool SetLocalTime(ref SYSTEMTIME Time); 

6,SHGetFileInfo

擷取執行檔案的表徵圖icon 

[Flags] 

enum SHGFI : int 

/// <summary>get icon</summary> 

Icon = 0x000000100, 

/// <summary>get display name</summary> 

DisplayName = 0x000000200, 

/// <summary>get type name</summary> 

TypeName = 0x000000400, 

/// <summary>get attributes</summary> 

Attributes = 0x000000800, 

/// <summary>get icon location</summary> 

IconLocation = 0x000001000, 

/// <summary>return exe type</summary> 

ExeType = 0x000002000, 

/// <summary>get system icon index</summary> 

SysIconIndex = 0x000004000, 

/// <summary>put a link overlay on icon</summary> 

LinkOverlay = 0x000008000, 

/// <summary>show icon in selected state</summary> 

Selected = 0x000010000, 

/// <summary>get only specified attributes</summary> 

Attr_Specified = 0x000020000, 

/// <summary>get large icon</summary> 

LargeIcon = 0x000000000, 

/// <summary>get small icon</summary> 

SmallIcon = 0x000000001, 

/// <summary>get open icon</summary> 

OpenIcon = 0x000000002, 

/// <summary>get shell size icon</summary> 

ShellIconSize = 0x000000004, 

/// <summary>pszPath is a pidl</summary> 

PIDL = 0x000000008, 

/// <summary>use passed dwFileAttribute</summary> 

UseFileAttributes = 0x000000010, 

/// <summary>apply the appropriate overlays</summary> 

AddOverlays = 0x000000020, 

/// <summary>Get the index of the overlay in the upper 8 bits of the iIcon</summary> 

OverlayIndex = 0x000000040, 

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] 

public struct SHFILEINFO 

public SHFILEINFO(bool b) 

hIcon = IntPtr.Zero; 

iIcon = 0; 

dwAttributes = 0; 

szDisplayName = ""; 

szTypeName = ""; 

public IntPtr hIcon; 

public int iIcon; 

public uint dwAttributes; 

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] 

public string szDisplayName; 

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] 

public string szTypeName; 

}; 

[DllImport("shell32.dll", CharSet = CharSet.Unicode)]//路徑有中文字元,要用unicode

public static extern int SHGetFileInfo( 

string pszPath, 

int dwFileAttributes, 

out SHFILEINFO psfi, 

uint cbfileInfo, 

SHGFI uFlags); 

例子: 

private static Icon GetIcon(string strPath, bool bSmall) 

SHFILEINFO info = new SHFILEINFO(true); 

int cbFileInfo = Marshal.SizeOf(info); 

SHGFI flags; 

if (bSmall) 

flags = SHGFI.Icon | SHGFI.SmallIcon | SHGFI.UseFileAttributes; 

else 

flags = SHGFI.Icon | SHGFI.LargeIcon; 

Win32API.SHGetFileInfo(strPath, 256, out info, (uint)cbFileInfo, flags); 

return Icon.FromHandle(info.hIcon);

}

7,GetWindowThreadProcessId

得到控制代碼的進程和線程ID,返回的是線程ID,ref返回的是進程ID 

[System.Runtime.InteropServices.DllImport("User32.dll")] 

private static extern int GetWindowThreadProcessId(int Hwnd, ref int OutPressId); 

例子:殺死excel進程 

int processID = 0; 

int threadID; 

threadID = GetWindowThreadProcessId(excelApp.Hwnd, ref processID); 

if (processID > 0) 

System.Diagnostics.Process process = System.Diagnostics.Process.GetProcessById(processID); 

if (process != null) 

process.Kill(); 

}

 

Windows API常用函數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.