我想在Delphi 7中使用ChangeDisplaySettingsEx來將特定的監視器設置爲主。 在Windows.pas,它被定義爲在Delphi中使用ChangeDisplaySettingsEx來設置主監視器
function ChangeDisplaySettingsEx(lpszDeviceName: PChar; var lpDevMode: TDeviceMode;
wnd: HWND; dwFlags: DWORD; lParam: Pointer): Longint; stdcall;
在MSDN,對ChangeDisplaySettingsEx文檔有LPDEVMODE這樣的評論:「如果LPDEVMODE爲NULL,所有的註冊表值,目前將用於顯示器設置。」
我的目標是改變一個系統上的主顯示器與兩個活動監視器,而不會改變其他任何東西 - 分辨率,位深度等,應該都保持不變。它看起來像傳遞lpDevMode作爲null(nil)是提供的方法來完成此操作。
但是,在Delphi的Windows.pas中,lpDevMode被定義爲打包記錄類型(TDeviceMode),而不是指針類型。顯然,Windows API的Delphi接口執行到Windows API'幕後'使用的指針的轉換。
我打過電話這樣的:
var
alldevs : array[0..maxdev] of TDisplayDevice;
lpDevMode : pointer;
begin
lpDevMode := nil;
lparam := nil;
my_hwnd := nil;
{... snip....}
with alldevs[NewPri] do
ChangeDisplaySettingsEx(devicename,TDeviceMode(lpDevMode),my_hwnd,CDS_SET_PRIMARY,lparam);
這給了我一個無效的類型轉換錯誤的 「TDeviceMode(LPDEVMODE)」。我如何將一個空指針傳遞給ChangeDisplaySettingsEx?還是有更好的方法來做到這一點?
感謝您的建議。這確實編譯,但它並不實際工作。 ChangeDisplaySettingsEx返回0(成功),但主監視器保持不變。 – tim11g 2009-06-05 19:35:01