過去ログ

                                Page     651
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼画面の解像度  Homes 04/6/1(火) 20:16
   ┗Re:画面の解像度  Homes 04/6/2(水) 11:00
      ┗Re:画面の解像度  Homes 04/6/2(水) 14:55

 ───────────────────────────────────────
 ■題名 : 画面の解像度
 ■名前 : Homes
 ■日付 : 04/6/1(火) 20:16
 -------------------------------------------------------------------------
   Accessとは直接関係無いかもしれませんが、
よろしくお願いします。
画面の解像度が 800 X 600 の状態でアクセスを
起動する際に 1024 X 768 に、終了する際には元に戻す
様にしたいのですが、上手くいきません。
Access VBAで作ってあるAPIサンプルを使ってみたのですが、
まったく動作しませんでした。
http://www.loadsystem.net/api/lsapi14.txt
(参考にさせて頂いたソースです)
使用したい環境は

WindowsNT4.0・Windows2000・WindowsXP
Access2000

です。
尚、上記端末の環境は 1024 X 768 にも対応しています。
申し訳ありませんがご教授お願い致します。

 ───────────────────────────────────────  ■題名 : Re:画面の解像度  ■名前 : Homes  ■日付 : 04/6/2(水) 11:00  -------------------------------------------------------------------------
   http://excelfactory.cool.ne.jp/ExcelVBATips/api/api_2.htm
すみません・・・。参考にしたソースですが、
間違ってました(汗)
元はExcelのソースみたいなのですが、Accessでも使えるかと思い
やってみましたが、できませんでした。
APIを使って解像度の変更を実現されている方いらっしゃいましたら
ご教授お願い致します。

 ───────────────────────────────────────  ■題名 : Re:画面の解像度  ■名前 : Homes  ■日付 : 04/6/2(水) 14:55  -------------------------------------------------------------------------
   自己レスです。
下記にて実現可能となりました。
無理矢理の部分もありますが参考までとおもいまして記述致します。
動作と致しましては、起動時にモニタ解像度を 1024 X 768 に
終了時に 800 X 600 に変更致します。

Public Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As String, ByVal dwModeNum As Long, lpDevMode As DEVMODE) As Long
Public Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As DEVMODE, ByVal dwflags As Long) As Long

Public Const CCHDEVICENAME = 32
Public Const CCHFORMNAME = 32

Public Type DEVMODE
  dmDeviceName As String * CCHDEVICENAME
  dmSpecVersion As Integer
  dmDriverVersion As Integer
  dmSize As Integer
  dmDriverExtra As Integer
  dmFields As Long
  dmOrientation As Integer
  dmPaperSize As Integer
  dmPaperLength As Integer
  dmPaperWidth As Integer
  dmScale As Integer
  dmCopies As Integer
  dmDefaultSource As Integer
  dmPrintQuality As Integer
  dmColor As Integer
  dmDuplex As Integer
  dmYResolution As Integer
  dmTTOption As Integer
  dmCollate As Integer
  dmFormName As String * CCHFORMNAME
  dmUnusedPadding As Integer
  dmBitsPerPel As Long
  dmPelsWidth As Long
  dmPelsHeight As Long
  dmDisplayFlags As Long
  dmDisplayFrequency As Long
End Type

Public ChangeType As Integer


Sub Disp_Change_Open()
'ディスプレイ解像度を 1024 X 768 :16ビット:リフレッシュレートを60 に変更します。
'【注意】モニタが実際に表示できる解像度・ビット数・リフレッシュレートを指定して下さい。
'間違うとモニタが真っ黒になり、表示されなくなります。

  Dim DEV As DEVMODE
  Dim DataCount As Integer
  DataCount = 0
  Do Until EnumDisplaySettings(vbNullString, DataCount, DEV) = 0
      If DEV.dmDisplayFrequency = 60 And DEV.dmBitsPerPel = 16 And _
        DEV.dmPelsWidth = 1024 And DEV.dmPelsHeight = 768 Then
        ChangeType = DataCount
      End If
    DataCount = DataCount + 1
  Loop
  If EnumDisplaySettings(vbNullString, ChangeType, DEV) = 1 Then
    Call ChangeDisplaySettings(DEV, 0)
  End If
End Sub

Sub Disp_Change_Close()
'ディスプレイ解像度を 800 X 600 :16ビット:リフレッシュレートを60 に変更します。
'【注意】モニタが実際に表示できる解像度・ビット数・リフレッシュレートを指定して下さい。
'間違うとモニタが真っ黒になり、表示されなくなります。

  Dim DEV As DEVMODE
  Dim DataCount As Integer
  DataCount = 0
  Do Until EnumDisplaySettings(vbNullString, DataCount, DEV) = 0
      If DEV.dmDisplayFrequency = 60 And DEV.dmBitsPerPel = 16 And _
        DEV.dmPelsWidth = 800 And DEV.dmPelsHeight = 600 Then
        ChangeType = DataCount
      End If
    DataCount = DataCount + 1
  Loop
  If EnumDisplaySettings(vbNullString, ChangeType, DEV) = 1 Then
    Call ChangeDisplaySettings(DEV, 0)
  End If
End Sub

上のソースはコピペでも動作するとは思うのですが、解像度等注意して
行ってくださいね。
もう少し調べればエラーの際は元に戻すといった処理も実現できるのではと
思ってはいるのですが・・・。

ご迷惑をお掛けして申し訳ありませんでした。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 651