C#调用USER32.DLL的API函数
生活随笔
收集整理的這篇文章主要介紹了
C#调用USER32.DLL的API函数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;namespace WindowsAPI{class CSharp_Win32Api{#region User32.dll 函數(shù)/// <summary>/// 該函數(shù)檢索一指定窗口的客戶區(qū)域或整個屏幕的顯示設(shè)備上下文環(huán)境的句柄,以后可以在GDI函數(shù)中使用該句柄來在設(shè)備上下文環(huán)境中繪圖。hWnd:設(shè)備上下文環(huán)境被檢索的窗口的句柄/// </summary>[DllImport("user32.dll", CharSet = CharSet.Auto)]public static extern IntPtr GetDC(IntPtr hWnd);/// <summary>/// 函數(shù)釋放設(shè)備上下文環(huán)境(DC)供其他應(yīng)用程序使用。/// </summary>public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);/// <summary>/// 該函數(shù)返回桌面窗口的句柄。桌面窗口覆蓋整個屏幕。/// </summary>static public extern IntPtr GetDesktopWindow();/// <summary>/// 該函數(shù)設(shè)置指定窗口的顯示狀態(tài)。/// </summary>static public extern bool ShowWindow(IntPtr hWnd, short State);/// <summary>/// 通過發(fā)送重繪消息 WM_PAINT 給目標(biāo)窗體來更新目標(biāo)窗體客戶區(qū)的無效區(qū)域。/// </summary>static public extern bool UpdateWindow(IntPtr hWnd);/// <summary>/// 該函數(shù)將創(chuàng)建指定窗口的線程設(shè)置到前臺,并且激活該窗口。鍵盤輸入轉(zhuǎn)向該窗口,并為用戶改各種可視的記號。系統(tǒng)給創(chuàng)建前臺窗口的線程分配的權(quán)限稍高于其他線程。/// </summary>static public extern bool SetForegroundWindow(IntPtr hWnd);/// <summary>/// 該函數(shù)改變一個子窗口,彈出式窗口式頂層窗口的尺寸,位置和Z序。/// </summary>static public extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int Width, int Height, uint flags);/// <summary>/// 打開剪切板/// </summary>static public extern bool OpenClipboard(IntPtr hWndNewOwner);/// <summary>/// 關(guān)閉剪切板/// </summary>static public extern bool CloseClipboard();/// <summary>/// 打開清空</summary>static public extern bool EmptyClipboard();/// <summary>/// 將存放有數(shù)據(jù)的內(nèi)存塊放入剪切板的資源管理中/// </summary>static public extern IntPtr SetClipboardData(uint Format, IntPtr hData);/// <summary>/// 在一個矩形中裝載指定菜單條目的屏幕坐標(biāo)信息 /// </summary>static public extern bool GetMenuItemRect(IntPtr hWnd, IntPtr hMenu, uint Item, ref RECT rc);[DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]/// <summary>/// 該函數(shù)獲得一個指定子窗口的父窗口句柄。/// </summary>public static extern IntPtr GetParent(IntPtr hWnd);/// <summary>/// 該函數(shù)將指定的消息發(fā)送到一個或多個窗口。此函數(shù)為指定的窗口調(diào)用窗口程序,直到窗口程序處理完消息再返回。 /// </summary>/// <param name="hWnd">其窗口程序?qū)⒔邮障⒌拇翱诘木浔?lt;/param>/// <param name="msg">指定被發(fā)送的消息</param>/// <param name="wParam">指定附加的消息指定信息</param>/// <param name="lParam">指定附加的消息指定信息</param>/// <returns></returns>public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam); public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref RECT lParam);public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, ref POINT lParam); public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref TBBUTTON lParam); public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref TBBUTTONINFO lParam); public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, ref REBARBANDINFO lParam); public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref TVITEM lParam); public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref LVITEM lParam); public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref HDITEM lParam); public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref HD_HITTESTINFO hti); /// <summary>/// 該函數(shù)將一個消息放入(寄送)到與指定窗口創(chuàng)建的線程相聯(lián)系消息隊列里/// </summary>public static extern IntPtr PostMessage(IntPtr hWnd, int msg, int wParam, int lParam);public static extern IntPtr SetWindowsHookEx(int hookid, HookProc pfnhook, IntPtr hinst, int threadid);[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]public static extern bool UnhookWindowsHookEx(IntPtr hhook);[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]public static extern IntPtr CallNextHookEx(IntPtr hhook, int code, IntPtr wparam, IntPtr lparam);/// <summary>/// 該函數(shù)對指定的窗口設(shè)置鍵盤焦點。/// </summary>public static extern IntPtr SetFocus(IntPtr hWnd);/// <summary>/// 該函數(shù)在指定的矩形里寫入格式化文本,根據(jù)指定的方法對文本格式化(擴(kuò)展的制表符,字符對齊、折行等)。/// </summary>public extern static int DrawText(IntPtr hdc, string lpString, int nCount, ref RECT lpRect, int uFormat);/// <summary>/// 該函數(shù)改變指定子窗口的父窗口。/// </summary>public extern static IntPtr SetParent(IntPtr hChild, IntPtr hParent);/// <summary>/// 獲取對話框中子窗口控件的句柄/// </summary>public extern static IntPtr GetDlgItem(IntPtr hDlg, int nControlID);/// <summary>/// 該函數(shù)獲取窗口客戶區(qū)的坐標(biāo)。/// </summary>public extern static int GetClientRect(IntPtr hWnd, ref RECT rc);/// <summary>/// 該函數(shù)向指定的窗體添加一個矩形,然后窗口客戶區(qū)域的這一部分將被重新繪制。/// </summary>public extern static int InvalidateRect(IntPtr hWnd, IntPtr rect, int bErase);/// <summary>/// 該函數(shù)產(chǎn)生對其他線程的控制,如果一個線程沒有其他消息在其消息隊列里。/// </summary>public static extern bool WaitMessage();/// <summary>/// 該函數(shù)為一個消息檢查線程消息隊列,并將該消息(如果存在)放于指定的結(jié)構(gòu)。/// </summary>public static extern bool PeekMessage(ref MSG msg, int hWnd, uint wFilterMin, uint wFilterMax, uint wFlag);/// <summary>/// 該函數(shù)從調(diào)用線程的消息隊列里取得一個消息并將其放于指定的結(jié)構(gòu)。此函數(shù)可取得與指定窗口聯(lián)系的消息和由PostThreadMesssge寄送的線程消息。此函數(shù)接收一定范圍的消息值。/// </summary>public static extern bool GetMessage(ref MSG msg, int hWnd, uint wFilterMin, uint wFilterMax);/// <summary>/// 該函數(shù)將虛擬鍵消息轉(zhuǎn)換為字符消息。/// </summary>public static extern bool TranslateMessage(ref MSG msg);/// <summary>/// 該函數(shù)調(diào)度一個消息給窗口程序。/// </summary>public static extern bool DispatchMessage(ref MSG msg);/// <summary>/// 該函數(shù)從一個與應(yīng)用事例相關(guān)的可執(zhí)行文件(EXE文件)中載入指定的光標(biāo)資源./// </summary>public static extern IntPtr LoadCursor(IntPtr hInstance, uint cursor);/// <summary>/// 該函數(shù)確定光標(biāo)的形狀。/// </summary>public static extern IntPtr SetCursor(IntPtr hCursor);/// <summary>/// 確定當(dāng)前焦點位于哪個控件上。/// </summary>public static extern IntPtr GetFocus();/// <summary>/// 該函數(shù)從當(dāng)前線程中的窗口釋放鼠標(biāo)捕獲,并恢復(fù)通常的鼠標(biāo)輸入處理。捕獲鼠標(biāo)的窗口接收所有的鼠標(biāo)輸入(無論光標(biāo)的位置在哪里),除非點擊鼠標(biāo)鍵時,光標(biāo)熱點在另一個線程的窗口中。/// </summary>public static extern bool ReleaseCapture();/// <summary>/// 準(zhǔn)備指定的窗口來重繪并將繪畫相關(guān)的信息放到一個PAINTSTRUCT結(jié)構(gòu)中。/// </summary>public static extern IntPtr BeginPaint(IntPtr hWnd, ref PAINTSTRUCT ps);/// <summary>/// 標(biāo)記指定窗口的繪畫過程結(jié)束,每次調(diào)用BeginPaint函數(shù)之后被請求/// </summary>public static extern bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT ps);/// <summary>/// 半透明窗體/// </summary>public static extern bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref POINT pptDst, ref SIZE psize, IntPtr hdcSrc, ref POINT pprSrc, Int32 crKey, ref BLENDFUNCTION pblend, Int32 dwFlags);/// <summary>/// 該函數(shù)返回指定窗口的邊框矩形的尺寸。該尺寸以相對于屏幕坐標(biāo)左上角的屏幕坐標(biāo)給出。/// </summary>public static extern bool GetWindowRect(IntPtr hWnd, ref RECT rect);/// <summary>/// 該函數(shù)將指定點的用戶坐標(biāo)轉(zhuǎn)換成屏幕坐標(biāo)。/// </summary>public static extern bool ClientToScreen(IntPtr hWnd, ref POINT pt);/// <summary>/// 當(dāng)在指定時間內(nèi)鼠標(biāo)指針離開或盤旋在一個窗口上時,此函數(shù)寄送消息。/// </summary>public static extern bool TrackMouseEvent(ref TRACKMOUSEEVENTS tme);/// <summary>/// /// </summary>public static extern bool SetWindowRgn(IntPtr hWnd, IntPtr hRgn, bool redraw);/// <summary>/// 該函數(shù)檢取指定虛擬鍵的狀態(tài)。/// </summary>public static extern ushort GetKeyState(int virtKey);/// <summary>/// 該函數(shù)改變指定窗口的位置和尺寸。對于頂層窗口,位置和尺寸是相對于屏幕的左上角的:對于子窗口,位置和尺寸是相對于父窗口客戶區(qū)的左上角坐標(biāo)的。/// </summary>public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int width, int height, bool repaint);/// <summary>/// 該函數(shù)獲得指定窗口所屬的類的類名。/// </summary>public static extern int GetClassName(IntPtr hWnd, out STRINGBUFFER ClassName, int nMaxCount);/// <summary>/// 該函數(shù)改變指定窗口的屬性/// </summary>public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);/// <summary>/// 該函數(shù)檢索指定窗口客戶區(qū)域或整個屏幕的顯示設(shè)備上下文環(huán)境的句柄,在隨后的GDI函數(shù)中可以使用該句柄在設(shè)備上下文環(huán)境中繪圖。/// </summary>public static extern IntPtr GetDCEx(IntPtr hWnd, IntPtr hRegion, uint flags);/// <summary>/// 獲取整個窗口(包括邊框、滾動條、標(biāo)題欄、菜單等)的設(shè)備場景 返回值 Long。/// </summary>public static extern IntPtr GetWindowDC(IntPtr hWnd);/// <summary>/// 該函數(shù)用指定的畫刷填充矩形,此函數(shù)包括矩形的左上邊界,但不包括矩形的右下邊界。/// </summary>public static extern int FillRect(IntPtr hDC, ref RECT rect, IntPtr hBrush);/// <summary>/// 該函數(shù)返回指定窗口的顯示狀態(tài)以及被恢復(fù)的、最大化的和最小化的窗口位置。/// </summary>public static extern int GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT wp);/// <summary>/// 該函數(shù)改變指定窗口的標(biāo)題欄的文本內(nèi)容/// </summary>public static extern int SetWindowText(IntPtr hWnd, string text);/// <summary>/// 該函數(shù)將指定窗口的標(biāo)題條文本(如果存在)拷貝到一個緩存區(qū)內(nèi)。如果指定的窗口是一個控制,則拷貝控制的文本。/// </summary>public static extern int GetWindowText(IntPtr hWnd, out STRINGBUFFER text, int maxCount);/// <summary>/// 用于得到被定義的系統(tǒng)數(shù)據(jù)或者系統(tǒng)配置信息./// </summary>static public extern int GetSystemMetrics(int nIndex);/// <summary>/// 該函數(shù)設(shè)置滾動條參數(shù),包括滾動位置的最大值和最小值,頁面大小,滾動按鈕的位置。/// </summary>static public extern int SetScrollInfo(IntPtr hwnd, int bar, ref SCROLLINFO si, int fRedraw);/// <summary>/// 該函數(shù)顯示或隱藏所指定的滾動條。/// </summary>public static extern int ShowScrollBar(IntPtr hWnd, int bar, int show);/// <summary>/// 該函數(shù)可以激活一個或兩個滾動條箭頭或是使其失效。/// </summary>public static extern int EnableScrollBar(IntPtr hWnd, uint flags, uint arrows);/// <summary>/// 該函數(shù)將指定的窗口設(shè)置到Z序的頂部。/// </summary>public static extern int BringWindowToTop(IntPtr hWnd);/// <summary>/// 該函數(shù)滾動指定窗體客戶區(qū)域的目錄。/// </summary>static public extern int ScrollWindowEx(IntPtr hWnd, int dx, int dy,ref RECT rcScroll, ref RECT rcClip, IntPtr UpdateRegion, ref RECT rcInvalidated, uint flags);/// <summary>/// 該函數(shù)確定給定的窗口句柄是否識別一個已存在的窗口。/// </summary>public static extern int IsWindow(IntPtr hWnd);/// <summary>/// 該函數(shù)將256個虛擬鍵的狀態(tài)拷貝到指定的緩沖區(qū)中。/// </summary>public static extern int GetKeyboardState(byte[] pbKeyState);/// <summary>/// 該函數(shù)將指定的虛擬鍵碼和鍵盤狀態(tài)翻譯為相應(yīng)的字符或字符串。該函數(shù)使用由給定的鍵盤布局句柄標(biāo)識的物理鍵盤布局和輸入語言來翻譯代碼。/// </summary>public static extern int ToAscii(int uVirtKey,int uScanCode, byte[] lpbKeyState, byte[] lpwTransKey,int fuState);#endregion}}
來源:https://blog.csdn.net/qq_30122639/article/details/61620211
總結(jié)
以上是生活随笔為你收集整理的C#调用USER32.DLL的API函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#编程语言之MD5加密的两种方式
- 下一篇: 数据库SQL Server 2019安装