如何使用Windows API控制螢幕的相關設定

2021-06-02 06:00:26 字數 2870 閱讀 1059

來自:

1、當顯示卡支援雙螢幕則如何延伸桌面視窗至第二個螢幕和旋轉螢幕的顯示角度:

1-1: 主要使用下列三個windows api:

一、 enumdisplaydevices :取得目前顯示裝置基本資訊

二、enumdisplaysettings:取得特定顯示裝置的引數值

三、changedisplaysetting*** :設定特定顯示裝置的引數值

1-2: 在c#中必須透過dllimport才能使用widnows api的相關函式:

ex: using system.runtime.interopserver;

[dllimport("user32.dll",setlasterror = true)]  

static extern int changedisplaysetting***(

string lpszdevicename,

ref devmode lpdevmode,

intptr hwnd, 

uint dwflags,

intptr lparam

);1-3、設定延伸桌面至第二個螢幕主要將devmode中的dmposition引數,設定的方法如下:

1-3-1、水平延伸:將dmposition.x設定為第乙個螢幕的寬度加一 ,和dmposition.y設為0      

1-3-2、垂直延伸:將dmposition.y設定為第乙個螢幕的高度加一,和dmposition.x設為0

1-4、執行changedisplaysetting***函式之前必須先設定dmfields |= dm_position。

1-5、旋轉螢幕畫面主要是設定dmdisplayorientation 和重新設定dmpelswidth和dmpelsheight

1-5-1: dmdisplayorientation 用來設定螢幕顯示的角度:

(1) 0 (0 degrees)  (2) 1 (90 degrees)   (3) 2 (180 degrees)   (4) 3  (270 degrees)

1-5-2:當進行90 dregrees 和270 dregrees的旋轉時必須將dmpelswidth和dmpelsheight

的數值交換,避免發生解析度不支援的問題。

(ps:在一般的筆電lcd port上的螢幕,無法成功的旋轉螢幕的角度)

1-6、最後執行changedisplaysetting***函式,此外如果要進行儲存和立即更新則必須設定

下列兩個引數:

1、cds_updateregistry : 更新登入檔的資料  

2、cds_reset:立即更新顯示設定

2、如何使用windows api讓螢幕進入省電模式:

2-1、主要使用sendmessage函式來設定螢幕的狀態。

2-2、在c#中必須透過dllimport才能使用widnows api的相關函式:

using system.runtime.interopserver;

[dllimport("user32.dll",setlasterror = true)]

static extern int sendmessage(int hwnd, int hmsg, int wparam, int lparam);

2-3、螢幕可以設定下列三種狀態:

2-3-1 monitor on (-1): 設定螢幕為正常模式

2-3-2 monitor stanby (1):設定螢幕為省電模式 (只有使用lcd port的螢幕才有效)

2-3-3 monitor off(2):設定螢幕為關閉模式

3、如何使用windows api控制螢幕的亮度變化:

3-1、只有lcd port的螢幕可以進行亮度的控制,目前只有在vista以上才可以進行設定。

3-2、主要使用下列二個windows api:

一、createfile函式:建立或開啟file和i/o裝置。

二、deviceiocontrol函式:傳送相關的指令給驅動程式。

3-3、 在c#中必須透過dllimport才能使用widnows api的相關函式:

using system.runtime.interopserver;

[dllimport("kernel32.dll", setlasterror = true)]

static extern intptr createfile(

[marshalas(unmanagedtype.lpstr)]

string strname,

uint naccess,

uint nsharemode,

intptr lpsecurity,

uint ncreationflags,

uint nattributes,

intptr lptemplate

);3-4、控制螢幕亮度的相關的i/o command有下列四個:

3-4-1、ioctl_video_query_supported_brightness:查詢螢幕支援的亮度設定

3-4-2、ioctl_video_set_display_brightness:設定螢幕的亮度

3-4-3、ioctl_video_query_display_brightness:

查詢目前螢幕的亮度設定 (只支援xp)

3-4-4、wmimonitorbrightness class:

查詢目前螢幕的亮度設定和支援的螢幕亮度(只支援vista以上)

02 使用Windows API建立視窗

1 開啟visual studio 2017,其他visual studio版本也可以 2 新建乙個windows桌面嚮導專案,或者win32應用程式專案都可以 3 新建專案時,選擇windows應用程式,並勾上空專案 4 新加原始檔,注意因為windowsapi都是c語言實現,所以,新加檔案的字尾...

如何管控時間?

前言 在寫這篇文章之前,有很多事情在腦海中漂浮,寫這篇文章的意義何在?寫這篇文章有什麼作用?猶豫一下,還是有必要寫的。你一種思想,我一種思想,大家分享出來,我們每人都有兩種思想,這豈不是很好嗎?同時鄙人這希望這篇簡短的文章,能夠幫到迷茫的年輕人,也希望幫到沒有時間管控意識的朋友,如果來訪問這篇文章的...

如何用windows API函式開啟指定視窗

private declare function shellexecute lib shell32.dll alias shellexecutea byval hwnd as long,byval lpoperation as string,byval lpfile as string,byval ...