- ベストアンサー
呼び出しアプリケーションのCPU使用率を下げる方法
- WinXp上で動作しているVB6SP5/ACCESS2002/Excel2002で構成されたシステムのCPU使用率を下げたいです。
- Excelが利用するCPU使用率が高く、他のアプリケーションの動作を圧迫しており、問題となっています。
- VBから呼び出し先のアプリケーションのCPU使用率を抑える方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
これでいかがでしょうか? Dim hWnd As Long Dim dwProcessId As Long Dim hProcess As Long hWnd = FindWindow("XLMAIN", vbNullString) GetWindowThreadProcessId hWnd, dwProcessId '取得 'hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, dwProcessId) 'Debug.Print Hex$(GetPriorityClass(hProcess)) 'CloseHandle hProcess '設定 hProcess = OpenProcess(PROCESS_SET_INFORMATION, False, dwProcessId) Debug.Print SetPriorityClass(hProcess, IDLE_PRIORITY_CLASS) CloseHandle hProcess ウィンドウを探すことができれば、タスクマネージャから、優先度の設定を行ったことと同じことになると思います。
その他の回答 (1)
- clavia
- ベストアンサー率50% (5/10)
手順はいいと思います。 各宣言については、以下を参考にして下さい。 具体的な動作は、APIのヘルプなどの資料を参照して下さい。 あと、APIを使用していますので、強制終了されないように、エラーを処理してください。 (前回の回答はエラー処理を省いていましたので、、、) またわからないことがあればまた補足して下さい。 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function GetWindowThreadProcessId Lib "user32" _ (ByVal hWnd As Long, _ lpdwProcessId As Long) As Long Private Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long Private Declare Function CloseHandle Lib "kernel32" _ (ByVal hObject As Long) As Long Private Const PROCESS_SET_INFORMATION = &H200 Private Const PROCESS_QUERY_INFORMATION = &H400 Private Declare Function GetPriorityClass Lib "kernel32" _ (ByVal hProcess As Long) As Long Private Declare Function SetPriorityClass Lib "kernel32" _ (ByVal hProcess As Long, _ ByVal dwPriorityClass As Long) As Long Private Const NORMAL_PRIORITY_CLASS = &H20 Private Const IDLE_PRIORITY_CLASS = &H40 Private Const HIGH_PRIORITY_CLASS = &H80 Private Const REALTIME_PRIORITY_CLASS = &H100
お礼
御礼が遅くなり申し訳有りません。 これ以外の作業との絡みで未だ組み込めてはいないのですが、大変参考になりました。 この正月休みにでも組み込みに挑戦してみます。 有難うございました。
補足
回答有難うございます。 手順として 1.FindWindow行で該当のウインドウを探し 2.GetWindowTreadProcessID行でIDを取得後、 3.OpenProcess行で優先度を設定 4.プロセスを開放 …でしょうか。 すいません、一応調べてみたのですが定義した変数に収まる値の正確な内容とりうる範囲が良くわからないです(汗) また、APIの命令が入っている様に思うのですが、これは事前に宣言は不要でしょうか。