サンプル投稿用掲示板 VB2005 〜 用トップページ VB6.0 用 トップページ
- 日時: 2013/07/07 19:10
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[システム関係][][] * キーワード:スクリーンセーバー , , , , , *********************************************************************************** タイトル : スクリーンセーバーの解除 記 事 No : 14228 投 稿 日 : 2009/11/06(Fri) 17:31 元質問者 : ジョニー
ずっと以前に納めたソフト(NT4)をXPに移行することになり、そのままのコードで流用していたのですが スクリーンセーバーの解除ができない現象に悩まされています
下記の一連のスレッドをご覧ください。 http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=14228&page=0
----------------------------------------------------------------------------------- 記事No : 14230 投稿日 : 2009/11/06(Fri) 19:32 回答者 : オショウ -----------------------------------------------------------------------------------
'------------- Module1 に記入 ---------------- Option Explicit
Declare Function CallWindowProc Lib "user32" Alias _ "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _ ByVal hMainWnd As Long, ByVal Msg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias _ "SetWindowLongA" (ByVal hMainWnd As Long, _ ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Const GWL_WNDPROC As Long = -4 Public Const WM_SYSCOMMAND As Long = &H112& Public Const SC_SCREENSAVE As Long = &HF140& Private lpPrevWndProc As Long Private hWndBack As Long
Public Sub Hook(ByVal hMainWnd As Long) hWndBack = hMainWnd lpPrevWndProc = SetWindowLong(hMainWnd, GWL_WNDPROC, AddressOf WndProc) End Sub
Public Sub Unhook() Dim temp As Long temp = SetWindowLong(hWndBack, GWL_WNDPROC, lpPrevWndProc) End Sub
Public Function WndProc(ByVal hw As Long, ByVal uMsg As _ Long, ByVal wParam As Long, ByVal lParam As Long) As Long Select Case uMsg Case WM_SYSCOMMAND If wParam = SC_SCREENSAVE Then WndProc = 1 Exit Function End If End Select WndProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam) End Function
'------------- Form1 に記入 ----------------
Option Explicit
Private Sub Form_Load() Call Hook(Me.hWnd) End Sub
Private Sub Form_Unload(Cancel As Integer) Unhook End Sub
上記実行中は、スクリーンセーバーが起動しません。 尚、上記コードは、サブクラス化しておりますので、サブクラス化についての知識のない方は使用しないように して下さい。
Windows 7 / Visual Basic 6.0(SP6)(スクリーンセーバーは、3Dテキスト) の環境で動作確認済み
|