tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
スクリーンセーバーの起動を防止する(VB6.0) ( No.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テキスト) の環境で動作確認済み



 [スレッド一覧へ] [親スレッドへ]