台灣最大程式設計社群網站
線上人數
971
 
會員總數:243297
討論主題:188078
歡迎您免費加入會員
討論區列表 >> VB.NET >> 用SendMessage對Monitor on/off (對特定螢幕)
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
用SendMessage對Monitor on/off (對特定螢幕)
價值 : 50 QP  點閱數:1068 回應數:5

樓主

Andy
門外漢
0 4
124 3
發送站內信

小弟想請問關於用 SendMessage 對 Monitor on/off 的功能

目前小弟已經可正常使用這功能,如果我有接兩台螢幕,使用這功能這兩台螢幕會同部 turn on/off

如果想對其中一台 Monitor on/off ,小弟不知道要怎麼做(以GOOGLE過,也不知道如何找到定螢幕的hwnd)

這是使用的程式碼片段,如果想對其中一台 Monitor on/off,而不是全部螢幕同部 turn on/off

請知道的大大教學一下,如果有完整程式碼更好 謝謝您



搜尋相關Tags的文章: [ Monitor on/off ] , [ SendMessage ] ,
本篇文章發表於2014-10-23 09:30
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

JoJo
檢舉此回應
您電腦的顯卡,可以延伸顯示不同的畫面嗎?如果可以,試著把另一個Form,拉到另一個螢幕,Me.Handle值,應該就會不一樣,就不會同時開關了...
本篇文章回覆於2014-10-23 10:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Andy
檢舉此回應
謝謝JoJo 回覆

小弟試了一下,還是不行...還是我的寫法錯誤了?

看了a與b的值確實不同,把form2移到非主畫面的延伸螢幕,

但是開啟關閉還是兩台螢幕同步...


本篇文章回覆於2014-10-23 11:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

Andy
檢舉此回應
請問有人知道嗎?
本篇文章回覆於2014-10-23 14:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

風燭殘年
捐贈 VP 給 風燭殘年 檢舉此回應
看了一下 SendMessage


hWnd 指的是 A handle to the window, 並不是 Display..
所以透過這個方式時,是對 Window 來處理,而這個 Window 是所有 Display 共有的
因此下了 Off 的指令就會對所有的 Display 動作
這是我的理解啦..
或許別的大大有別的見解..
本篇文章回覆於2014-10-24 15:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
Ref:

[code]
DISPLAYCONFIG_PATH_INFO* PathArray;
DISPLAYCONFIG_MODE_INFO* ModeArray=NULL;

GetDisplayConfigBufferSizes(QDC_ALL_PATHS, &PathArraySize, &ModeArraySize);

PathArray = (DISPLAYCONFIG_PATH_INFO*)malloc(PathArraySize * sizeof(DISPLAYCONFIG_PATH_INFO));

memset(PathArray, 0, PathArraySize * sizeof(DISPLAYCONFIG_PATH_INFO));

ModeArray = (DISPLAYCONFIG_MODE_INFO*)malloc(ModeArraySize * sizeof(DISPLAYCONFIG_MODE_INFO));

memset(ModeArray, 0, ModeArraySize * sizeof(DISPLAYCONFIG_MODE_INFO));

ret = QueryDisplayConfig(QDC_ALL_PATHS, &PathArraySize, PathArray, &ModeArraySize, ModeArray, NULL);

// #define ERROR_SUCCESS 0
// #define ERROR_INVALID_PARAMETER 87
// #define ERROR_NOT_SUPPORTED 50
// #define ERROR_ACCESS_DENIED 5
// #define ERROR_GEN_FAILURE 31
// #define ERROR_BAD_CONFIGURATION 1610
if(ret != ERROR_SUCCESS)
{
AfxMessageBox(_T("Error on QueryDisplayConfig"));
return (ret);
}
//...
SetDisplayConfig(0, NULL, 0, NULL, (SDC_APPLY | SDC_TOPOLOGY_EXTERNAL));
//...
for(unsigned int i=0; i<PathArraySize; i++)
{
if (!(PathArray[i].targetInfo.targetAvailable)) continue;
_tcscpy_s(device_path, getMonitorDevicePathFromTarget(PathArray[i].targetInfo.adapterId, PathArray[i].targetInfo.id));
if ((DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI == PathArray[i].targetInfo.outputTechnology) && (0 == PathArray[i].sourceInfo.id) )
{
PathArray[i].flags |= DISPLAYCONFIG_PATH_ACTIVE;
} else {
PathArray[i].flags &= ~DISPLAYCONFIG_PATH_ACTIVE;
}
}
SetDisplayConfig(PathArraySize, &PathArray[0], ModeArraySize, &ModeArray[0], SDC_APPLY | SDC_ALLOW_CHANGES | SDC_USE_SUPPLIED_DISPLAY_CONFIG );
//.....

[/code]
本篇文章回覆於2017-12-12 17:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.