こんばんは
RPGツクール製ゲームのような
「非アクティブになると動作の停止するプログラム」を
「非アクティブ時にも動作させるプログラム」を作りたいと思っています
具体的には、指定のウィンドウを
「Windowモードのゲームで非アクティブ時に画面がとまらない方法」
で紹介されていることをした状態にしたいです
ウィンドウを列挙して選択させるところまでは順調にできたのですが
肝心の「非アクティブ時にも動作させる」部分をどうすればいいのかまるでわかりません...
アドバイスをお願いしたいです
よろしくおねがいします
非アクティブのウィンドウを動作させたい
Re: 非アクティブのウィンドウを動作させたい
返信ありがとうございます
まさにDXライブラリのSetAlwaysRunFlagを使った状態にしたいんですが
自作のゲームにではなくて、現在あるウィンドウを選択してSetAlwaysRunFlagしたいです
DXライブラリについて詳しくないので
指定のウィンドウをSetAlwaysRunFlagする方法があったらすみません
詳しく教えてもらえないでしょうか
ライブラリはおそらく使っていません
コンソールアプリケーションを作成して、ウィンドウを列挙させています
Microsoft Visual C++ 2010 Expressです
よろしくおねがいします
まさにDXライブラリのSetAlwaysRunFlagを使った状態にしたいんですが
自作のゲームにではなくて、現在あるウィンドウを選択してSetAlwaysRunFlagしたいです
DXライブラリについて詳しくないので
指定のウィンドウをSetAlwaysRunFlagする方法があったらすみません
詳しく教えてもらえないでしょうか
ライブラリはおそらく使っていません
コンソールアプリケーションを作成して、ウィンドウを列挙させています
Microsoft Visual C++ 2010 Expressです
よろしくおねがいします
最後に編集したユーザー びす on 2012年1月16日(月) 02:13 [ 編集 1 回目 ]
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 非アクティブのウィンドウを動作させたい
DXライブラリもそうですが、非アクティブで動作停止するプログラムはプログラムがそういう作りになっています。もし強引に動作停止をさせないようにするならプログラムを書き換えるぐらいしか手がないと思います。
紹介されているサイトの技はなんかWindows裏技っぽいですね。ちなみにDXライブラリのソフトはその技でも停止したままみたいです。
紹介されているサイトの技はなんかWindows裏技っぽいですね。ちなみにDXライブラリのソフトはその技でも停止したままみたいです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 非アクティブのウィンドウを動作させたい
返信ありがとうございます
裏技の状態に故意にできれば・・・と思ったんですが、やっぱり難しいですね
プログラムの書き換えですか!ありがとうございます、調べてみます
こちらの環境ではDXライブラリのプログラムでも効くようです
動画もとってみました
よろしくおねがいします
裏技の状態に故意にできれば・・・と思ったんですが、やっぱり難しいですね
プログラムの書き換えですか!ありがとうございます、調べてみます
こちらの環境ではDXライブラリのプログラムでも効くようです
動画もとってみました
よろしくおねがいします
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 非アクティブのウィンドウを動作させたい
私のWindows7(64bit)では、どうにも再現しません。OSのバージョンで動作が違うかも知れませんね。
とりあえず、マウスとキーボードを押したことを仮想的に行う方法を紹介します。
「Windows API - GUI プログラミング編 第2回 ~マウスメッセージとウィンドウ操作~」
http://yukki99.studio-web.net/stage/api_4-02.html
「キーボードイベント」
http://wisdom.sakura.ne.jp/system/winap ... win30.html
「Win32 メッセージ一覧」
http://wisdom.sakura.ne.jp/system/winapi/windata1.html
とりあえず、マウスとキーボードを押したことを仮想的に行う方法を紹介します。
「Windows API - GUI プログラミング編 第2回 ~マウスメッセージとウィンドウ操作~」
http://yukki99.studio-web.net/stage/api_4-02.html
「キーボードイベント」
http://wisdom.sakura.ne.jp/system/winap ... win30.html
「Win32 メッセージ一覧」
http://wisdom.sakura.ne.jp/system/winapi/windata1.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 非アクティブのウィンドウを動作させたい
返信ありがとうございます
載せてくださったURLを参考に、
動作させたいウィンドウへWM_ACTIVATE(アクティブ時に送られるメッセージ)を送りつけたら、
見事に非アクティブ時に動作するようになりました
softyaさん、fimbulさん、ありがとうございました!
載せてくださったURLを参考に、
動作させたいウィンドウへWM_ACTIVATE(アクティブ時に送られるメッセージ)を送りつけたら、
見事に非アクティブ時に動作するようになりました
softyaさん、fimbulさん、ありがとうございました!
#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
BOOL CALLBACK EnumWndProc(HWND hWnd, LPARAM lParam)
{
char buff[256]="";
GetWindowText(hWnd, buff, sizeof(buff)); //ハンドルからウィンドウ名を取得
if(strstr(buff, (char*)lParam) != NULL){ //入力された名前と一致したら、
cout << buff << endl << "アクティブ化" << endl; //アクティブ化
SendMessage(hWnd, WM_ACTIVATE, WA_CLICKACTIVE, (LPARAM)hWnd);
}
return true;
}
int main(int argc, char* argv[])
{
for(;;){
char name[256];
cout << "ウィンドウタイトルを入力" << endl;
cin >> name;
//存在するウィンドウのハンドルを引数にしてEnumWndProcを呼び出す
EnumWindows(EnumWndProc, (LPARAM)name);
}
return 0;
}