Win32API質問箱 Build59at TECH
Win32API質問箱 Build59 - 暇つぶし2ch159:158
07/11/17 08:39:59
URLリンク(i-bbs.sijex.net)
上の画像は、出ないのでコチラ?

160:158
07/11/17 08:46:25
画像は、サンプルです。実際は単純な○△◇等です。
言語は、Vidual c++ 6.0以降
ダイヤログから出発、ボタンを押すと各図形を表示
宜しくお願いします

161:デフォルトの名無しさん
07/11/17 08:53:38
何が分かっていて、何がわからないの?
CあるいはC++はわかるならプログラミングWindowsでも読め。



162:158
07/11/17 09:16:18
ダイアログからダイアログの飛ばし方が分からないです。
とばすのに必要なのは?

ダイアログでも図形は、書けるものなのか?
それに必要なのは?

とりあえずこの2点の知識お願いします。

163:デフォルトの名無しさん
07/11/17 09:30:39
>ダイアログからダイアログの飛ばし方が分からないです。
ダイアログを親ウィンドウにしてダイアログを生成する

>とばすのに必要なのは?
お前のプログラミング知識

>ダイアログでも図形は、書けるものなのか?
描ける (書けるって何だよ)

>それに必要なのは?
お前のプログラミング知識

164:デフォルトの名無しさん
07/11/17 09:44:40
宿題か

>ダイアログからダイアログの飛ばし方が分からないです。
>とばすのに必要なのは?

DialogBox
URLリンク(msdn.microsoft.com)

これだとダイアログリソースが必要になる

CreateWindowExでも書けると言えば書ける
URLリンク(www.sm.rim.or.jp)

こちらは普通にウィンドウを作るのでリソースは必要ない

>ダイアログでも図形は、書けるものなのか?
>それに必要なのは?

例示された奴をとりあえず書けって言われたら
BeginPaint、EndPaint、GetStockObject、FillRect、LineTo、MoveToEx、SetPixel辺りで書くかな

訳分からなければWin32 API入門の30章あたりまで読め

165:デフォルトの名無しさん
07/11/17 10:49:57
やさしいインタネッツだな

166:デフォルトの名無しさん
07/11/17 11:03:22
ダイアログにその画像貼っとけ

167:158
07/11/17 11:36:02
>>164様 他
有難う御座います・・・
読んだけど、分け分から無いです。
取りあえず”Win32 API入門”を買って読みます。
必死なので、また来ます。
それでは、宜しくお願いします。

168:デフォルトの名無しさん
07/11/17 11:36:50
つーかMFCだろスレ違い

169:デフォルトの名無しさん
07/11/17 11:43:41
>>167
Win32 API入門って「サイト名」なんだけどね

>>168
少なくとも164に上がってんのはほぼ全部API

170:デフォルトの名無しさん
07/11/17 12:05:01
リソースとして埋め込んだビットマップを
普通にファイルからビットマップ読み込んだ時のように
CreateDIBSectionする方法って無いでしょうか?

リソースとして埋め込んだビットマップで
アルファブレンド等をしたいのでピクセル列が欲しいんです、W98SEです

171:デフォルトの名無しさん
07/11/17 12:10:19
とりあえず、LoadImageにLR_CREATEDIBSECTION使っとけばいいんじゃね?
暇なら、FindResourceから始める、という手もあるけど。

172:デフォルトの名無しさん
07/11/17 12:29:05
今時98SEかよ

173:デフォルトの名無しさん
07/11/17 12:30:55
>>171
どうもありがとう、両方試してみます

174:デフォルトの名無しさん
07/11/17 12:38:48
アクティブなウインドウのファイル名を取得するコードを書いてます。
ネットではぴったりのコードがなく、つなぎ合わせで
なんとかこんな感じでまとめたのですが、よくわからない
のもあって、うまく動きません。
環境はBCB WinXPです。
/*
//URLリンク(m--takahashi.com)
1) GetWindowThreadProcessId() で HWND から ProcessID を得る
2) OpenProcess() で ProcessID から hProcess を得る
3) EnumProcessModules() で hProcess から hModule を得る
4) hProcess / hModule を使って GetModuleFileNameEx() でヤッター!!
*/
DWORD dwPID;
DWORD dwProcessID = GetWindowThreadProcessId(GetForegroundWindow(), &dwPID);
DWORD ProcessIDs[1000]; /* プロセスIDの一覧 */
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, 0, dwProcessID);

DWORD ReturnSize; /* プロセスID一覧の取得結果のサイズ */
EnumProcesses(dwProcessID, sizeof(dwProcessID), &ReturnSize);//この行は?
if(handle)
{
HMODULE hMod;
DWORD size;
char fname[MAX_PATH];
EnumProcessModules(handle, &hMod, sizeof(hMod) ,&size);
GetModuleFileNameEx(handle, hMod, fname, sizeof(fname));
CloseHandle(handle);
ShowMessage(fname);
}


175:デフォルトの名無しさん
07/11/17 12:45:03
GetWindowThreadProcessIdの返り値はスレッドID

176:デフォルトの名無しさん
07/11/17 12:45:50
途中で送信しちまった

GetWindowThreadProcessIdの返り値はスレッドIDなのに
OpenProcessにスレッドID渡してるぞハゲ

177:デフォルトの名無しさん
07/11/17 12:48:17
EnumProcessesの第一引数

178:デフォルトの名無しさん
07/11/17 12:49:33
そもそもEnumProcessesいらないだろこの場合
HWNDからProcessID取るって言ってんだから

179:デフォルトの名無しさん
07/11/17 12:59:47
なんかもうアレ

180:デフォルトの名無しさん
07/11/17 13:12:37
DWORD dwPID;
DWORD dwProcessID = GetWindowThreadProcessId(GetForegroundWindow(), &dwPID);

噴いたwww

181:デフォルトの名無しさん
07/11/17 14:47:18
wiodwsXP
visual studio .net
にてwindowアプリケーションを作っておりますが、
Heap corruption detected at 038A9008(最後の数字は毎回変わる)
のような文章が「出力」の欄に出て警告もなしに勝手に終了します。

ググッた結果、どうやら領域確保あたりが怪しいらしく
mallocやfree関数を調べましたが、おかしな点は見当たりませんでした。

他にどこらへんが怪しいと思いますか?

182:デフォルトの名無しさん
07/11/17 14:49:22
mallocやfree周辺

183:デフォルトの名無しさん
07/11/17 15:00:56
使ってるOSがおかしいよ

184:デフォルトの名無しさん
07/11/17 15:06:36
ヒープオーバーランだろ

185:デフォルトの名無しさん
07/11/17 15:09:28
>>181
プログラムのどこかで、メモリの確保した範囲外に書き込みをして、ヒープを破壊しまったんだ
プログラムのどの部分がどこに影響を与えるとかほとんど予測できないから、
問題が出なくなるまで怪しい場所をひとつずつコメントアウトして原因を絞っていくしかない

186:デフォルトの名無しさん
07/11/17 15:18:37
初心者は文字列用のバッファが怪しい
終端NULLが良くオーバーランしてる

187:デフォルトの名無しさん
07/11/17 15:22:52
ヌル文字はNULと書くようにしようぜ

188:デフォルトの名無しさん
07/11/17 15:23:45
>>181
>>181の頭が怪しい

189:デフォルトの名無しさん
07/11/17 16:20:32
APIスレに来てmallocとかfreeとか言ってるのが気に入らない
HeapAlloc使えよ

とかいう冗談はさておきWin32API関係ない。C初心者スレいってソースすべてうpすれば早く片付くかもね

190:デフォルトの名無しさん
07/11/17 16:34:58
>>185
ありがとう。めんどくさそうだけど頑張ります。

>>186
参考にしてみます。ありがとうございます。

191:デフォルトの名無しさん
07/11/17 17:17:43
>>171のFindResource()のほうから調べながら試していたんですが
(BITMAPFILEHEADER)LockResource()
(BITMAPINFO)LockResource()
とヘッダとインフォのメモリへのポインタを取得して
インフォからCreateDIBSection()でHBITMAPを作成する所まではできたんですが
DIBSectionのほうで使用するメモリに
読み込んだリソースの方のメモリをコピーする所で躓きました

LockResource()でピクセル列の先頭ポインタを取得するために
どういうキャストをすれば良いのかが分からないので困っています
思いつくことを試しながらCopyMemory()しましたがどれも強制終了してしまいます

192:デフォルトの名無しさん
07/11/17 17:38:41
windows XP
VC++ 2003
SetWindowRgnでウィンドウスタイルが変わらないようにするには
どうすればいいですか?
SetWindowRgnしなければXPスタイルなのに、関数を呼ぶと
コマンドプロンプトと同様のスタイル(クラシック?)になります
ウィンドウはVC++2003のWin32プロジェクトで新規作成した
雛形そのままです

193:デフォルトの名無しさん
07/11/17 18:11:14
ANSIビルドのプログラムで、ウィンドウ内に作成したエディットコントロールに
ユーザーによって入力されたテキストを取得して、それをUNICODE形式のファイルに保存しようとしています。

処理の流れとして、エディットコントロール内のテキストの長さ(バイト単位)を取得して
→ 動的にメモリ確保
→ WideChatToMultiByteでUNICODE文字列に変換
→ WriteFile でファイルの先頭2バイトにBOMを書き込み
→ 変換後の文字列をWriteFile ファイルに書き込む

こういう風にしています。
ただ、エディットコントロール内のテキストの長さを取得する段階でつまづいてしまって。。
なんだか、2バイト文字が正確に数えられていないようなんです。
エディットコントロール内のテキストが、「こんにちはwindows」のようになっていた場合。
この文字列「こんにちはwindows」のサイズ(バイト数)を正確に掴むためにはどうすればいいんでしょうか?

ちなみにMFCはわかりません。

194:デフォルトの名無しさん
07/11/17 18:23:31
GetWindowTextLength(のA)でいけるぞ。

comctl32.dllバージョン6使っていたらUTF-16単位での文字数になるかもしれないが、
そのときには、そもそもNT系のはずで、W系APIを直接使って
UNICODE文字列を取得してしまえばいい。

195:193
07/11/17 18:51:26
lstrlen()でも同じ症状になるんですが、
例えば

ANSIビルド版のプログラムでは
lstrlen(TEXT("hello") = 5
lstrlen(TEXT("こんにちは")) = 10
ですが

UNICODE版では
lstrlen(TEXT("hello") = 10
lstrlen(TEXT("こんにちは")) = 10
となります。

確認してみましたが、GetWindowTextLengthでも同じ結果でした。
バイト数は分かりますが、文字数が分からないに思うんですが・・
確かにメモリ確保にはバイト数だけ分かればいいんですが、そもそもGetWindowTextLengthって文字列の長さ(=文字数)
を取得する関数という認識で間違いないですよね?

UNICODE版は、文字数とバイト数(文字数×2)に何の不思議も無いんですが
ANSI版は、文字数とバイト数がバラバラというか。。
ダブルバイト文字とシングルバイト文字が一緒くたでわかりにくいというか・・


196:193
07/11/17 18:56:10
lstrlen(TEXT("hello") = 5
lstrlen(TEXT("こんにちは")) = 5
でした。

うぉー混乱する000

文字列を取得する関数って、
ANSI版だと、文字列のバイト数
UNICODE版だと、文字列の文字数
になってる??みたいですgあ・・

197:デフォルトの名無しさん
07/11/17 19:02:06
ユーザーが手入力するならたいした文字数じゃないだろうから、
単純にバイト数の倍確保しておけばいいんじゃね?

198:デフォルトの名無しさん
07/11/17 19:07:28
キーボードやマウスのボタンを押した時にはウインドウメッセージが出ますが、
ゲームパッドのボタンを押した時にはWMは出ているのでしょうか?
出ていればそのメッセージを教えて頂きたく思います。

60fpsのゲームループの中にゲームパッド情報取得の「~->GetDeviceState~」を書くと
まれにエラーが出てしまうため、他の方法を模索しています。

199:デフォルトの名無しさん
07/11/17 19:10:23
>>198
あるわけない

200:193
07/11/17 19:18:51
>>197
うーん。そうなんだけどねぇ。
あとMultiByteToWideCharの最後の引数は文字数を指定しろってなってるから、
これが原因なのかどうか分からないけど、UNICODEファイルとして保存したとき
最後にゴミがつくんです。
一応メモリ確保はGlobalAlloc(GPTR, dwSize)とやってますんで、0で初期化されてるはずなんだけど。。
どこがおかしいのかが分からないという。。。

201:デフォルトの名無しさん
07/11/17 19:58:33
>>191
FindResourceの方は半ば冗談だったのだけどな……

LockResourceで先頭のアドレスが取れるのだから、後はそれを手繰っていくだけ。
中身は通常のビットマップのファイルとほとんど一緒。
ただし、BITMAPFILEHEADER部分が省かれているので、その点には注意。

202:デフォルトの名無しさん
07/11/17 20:11:42
ウィンドウのメニュー部分を透明にすることは出来ますかね?

203:デフォルトの名無しさん
07/11/17 20:12:15
C++で静的な仮想関数を使用する方法 or 参考HPを教えてください。

やりたいことは、_beginthreadexでスレッドクラスを作成して、
子クラスで任意の子メソッドを呼び出すことです。
つまづいている点は、_beginthreadexのコールメソッドが、
Staticなため、子クラスがオーバーライドできなくて困ってます。

ちなみに、以下のHPを参照しましたが、
これよりスマートな方法があれば教えてください!

よろしくです!

C++で遊ぼう「静的仮想関数」編
URLリンク(www.ksky.ne.jp)

204:デフォルトの名無しさん
07/11/17 20:18:16
>>203
「スレッドクラス」「子メソッド」「コールメソッド」「子クラスがオーバーライド」の意味が
わかりません。

エスパーカモン。

205:203
07/11/17 20:23:21
203です。スレッドだと話がややこしいのでサンプル書きました。
以下で、BとCクラスのtest()を呼んだとき、BとCのtest1()を読んでほしいという質問です。
よろしくおねがいします。

#include <iostream>
using namespace std;
class A{
public:
static void test1(void){cout << "A" << endl;}
void test(void){test1();}
};
class B : public A{
public:
static void test1(void){cout << "B" << endl;}
};
class C : public A{
public:
static void test1(void){cout << "C" << endl;}
};
int main(int argc, char *argv[]){
B *bbb = new B();
C *ccc = new C();
bbb->test();
ccc->test();
delete bbb;
delete ccc;
return 0;
}
実行結果:
A
A

206:デフォルトの名無しさん
07/11/17 20:32:34
>>203
やりたいのはこういうことじゃないか?
静的な仮想関数なんてわけのわからないものは必要ない

class A{ public: virtual void test1(){ cout << "A" << endl; }};
class B{ public: virtual void test1(){ cout << "B" << endl; }};
class C{ public: virtual void test1(){ cout << "C" << endl; }};

void thread_main(void *p){
 static_cast<A*>(p)->test1();
}

int main(int argc, char **argv){
 B *bbb = new B();
 C *ccc = new C();
 _beginthreadex(NULL, 0, thread_main, bbb, 0, NULL);
 _beginthreadex(NULL, 0, thread_main, ccc, 0, NULL);
 ....
}

207:デフォルトの名無しさん
07/11/17 20:34:14
>>205
static を virtual に変えて終了。

Windows API 関係ないなら C/C++ スレいけば?

208:デフォルトの名無しさん
07/11/17 20:46:05
>>205
thisポインタで自分を取り戻すんだ!

209:203
07/11/17 20:53:03
203です。
>>207,206
_beginthreadexで実行する関数が、GlobalかStaticの制限があるのです。
また、スレッドクラスを継承するクラスは、簡単に使えるようにしたかったのです。
わけあって、MFC等のライブラリを使用できないのです。
>>208
thisを渡す方法も検討したのですが、これも上記Win32APIの理由で・・・

C++すれ逝って来ます。どうもです。

210:デフォルトの名無しさん
07/11/17 20:55:58
>>209
> _beginthreadexで実行する関数が、GlobalかStaticの制限があるのです。

嘘だろ?どこに書いてある?

_beginthreadex のせいでこんなことになってるなら C++ スレに逝っても
迷惑なだけだろう。

211:デフォルトの名無しさん
07/11/17 20:59:00
>>209
>thisを渡す方法も検討したのですが、これも上記Win32APIの理由で・・・ 

どの理由だよ
thread_mainはグローバル関数なんだから制限の範囲内じゃん

212:デフォルトの名無しさん
07/11/17 21:08:43
>>201
カスタムリソースにも興味があったのでFindの方やってみようかなと思って
アドバイスありがとう、やってみます

213:デフォルトの名無しさん
07/11/17 21:32:25
class A {
public:
virtual unsigned threadProc () = 0;
static unsigned threadProcStatic (void * arglist) {
return ((A *)arglist)->threadProc(); }
void Start () {
_beginthreadex(threadProcStatic, this); // 引数適当 }
};
class B : public A {
public:
virtual unsigned threadProc () { // なんか }
};
こんな感じじゃ駄目なのか? >>209

214:203
07/11/17 22:14:30
203です。Win32APIよくわかってなくてスイマセン。

>>210
 _cdeclか_clrcallで渡すことが規約のようです。global or 非staticなメンバ関数を渡せるなら教えてください。
>>211
 混乱しててスイマセン。_beginthreadexとthisをどううまく使えば良いのかわかりませんでした。
>>213
 ありがとうございます!これで動きました!一度staticな関数を噛まして非staticを呼ぶのですね。

皆様どうもありがとうございました。

215:デフォルトの名無しさん
07/11/17 22:32:28
>>214
>213 は >206 と同じことなわけだが。

216:デフォルトの名無しさん
07/11/17 23:28:01
>>195
>ANSI版は、文字数とバイト数がバラバラというか。。
>ダブルバイト文字とシングルバイト文字が一緒くたでわかりにくいというか・・
それが、可変長であるダブルバイト文字列というもの。
それに嫌気がさしたから、UNICODEは1文字が固定長になっている。
#というはずだったが現実そう上手くは行かず。

>>196
ANSIだとchar型、UNICODEだとwchar_t型でどれだけの要素数を占めるのかと考えればよい。

217:デフォルトの名無しさん
07/11/18 00:01:51
>>215
206は再利用ということを考えてないっぽい

218:デフォルトの名無しさん
07/11/18 00:02:44
このようなのを作りたいんですが、どのような関数を使えばできますか?

URLリンク(www.hsjp.net)

219:デフォルトの名無しさん
07/11/18 00:08:52
CreateListViewMitainaControl()

220:デフォルトの名無しさん
07/11/18 00:10:59
>>214
>>210は間違っている気がするな

221:デフォルトの名無しさん
07/11/18 00:12:32
>>219
ありがとう。そんな便利な関数があるんだね
CreateListViewでググって勉強してくる

222:デフォルトの名無しさん
07/11/18 00:12:37
>>219
Mitainaワロタw

223:デフォルトの名無しさん
07/11/18 07:03:24
>>199
やっぱり無いですか。調べても出てこないわけだ
エラー無くす方向で頑張ってみます

224:デフォルトの名無しさん
07/11/18 08:12:52
>>198-199
無いこともない。joySetCaptureでググれ。

といっても、これを使ったところで全く解決にはならないけどな。
結局自分の代わりにポーリングして監視してくれるだけ。

ゲームパッドはキーボードやマウスのようにmake/breakコードを
送信するいわゆる割り込みデバイスではないから、能動的に
状態の変化を受け取るのは不可能。

225:デフォルトの名無しさん
07/11/18 08:47:25
画面上の任意のテキストを右クリックして、文字列を取得するにはどうしたらよいでしょうか。
Babylon URLリンク(www.babylon.com) のような感じで、Webブラウザに表示されたWebコンテンツでも、
ウィンドウのタイトルの文字列でも、自由にテキストを取得できるようにしたいです。
調べた限りでは、クリックした座標を元にウィンドウハンドルを取得し、該当する文字列を*丸ごと*取得することはできます。
しかし、*クリックした付近の文字列*を取得することが必要なのです。何かよい方法はありますでしょうか。

226:デフォルトの名無しさん
07/11/18 09:09:23
先に言っておくが汎用的な方法は無い

テキストが表示されてるのがEDITクラス(エディットコントロール)なら
EM_GETSELで選択範囲を取れるから
WM_GETTEXTでテキストを取ってから選択範囲を切り出せばいい

ブラウザの場合は表示されてるのはキャプションじゃないのでもっと別の方法が必要になる
具体的には
IWebBrowser2→IHTMLDocument::selection→
HTMLElement::createTextRange→IHTMLTxtRange::findText
って感じで取る

まあ無理だろう

227:デフォルトの名無しさん
07/11/18 09:35:55
Babylonは画面上の「画像」をOCRで読み取ってる
だからIEだろうがFirefoxだろうが、画像中の文字だろうが読み取れる

同等の物を作るのは相当な困難が予想されるが、まぁがんばれw

228:デフォルトの名無しさん
07/11/18 10:32:19
>>227
>Babylonは画面上の「画像」をOCRで読み取ってる
これ、まじ?
("O(ptical)"では無いだろうというツッコミは置いといて、)
ほんとに、画像→文字認識してるの?


229:デフォルトの名無しさん
07/11/18 10:38:13
>>228
Babylonの説明にそう書いてあるだろう
例に出してるものくらいちゃんと調べろよw

230:228
07/11/18 10:48:08
>>229
ごめりんこ


231:デフォルトの名無しさん
07/11/18 11:01:02
どこの誰が書いたかわからんヨタかもしれん話をいちいち調べるかよw

232:158
07/11/18 11:05:38
昨日の158です。再び助けて下さい。

URLリンク(i-bbs.sijex.net)
ダイアログのボタンを押して、メッツセージBoxを表示させました。

これを、異なるダイアログを表示させたいです。
例 URLリンク(i-bbs.sijex.net)

表示させる記述と方法がわかりません。
出来れば具体的な記述をしてくれると有り難いです。
どなたか、ご教授お願いします。

233:158
07/11/18 11:09:45
昨日の記述
>>158
>>159
>>160

助けてくれた神
>>164

234:デフォルトの名無しさん
07/11/18 11:12:15
>>231=馬鹿

235:デフォルトの名無しさん
07/11/18 11:18:43
>>232-233
だからMFCはスレチだっつーの

236:デフォルトの名無しさん
07/11/18 11:59:39
>>232
普通にボタンがクリックされたメッセージ処理に、DialogBoxかDialogBoxParamを呼び出せばいいだけじゃないの?
昨日の質問というのは見てないので分からんけど、メッセージボックスだってDLL内でリソース確保して
DialogBoxParam関数を呼び出しているだけのような気がする
モーダルダイアログボックス

237:デフォルトの名無しさん
07/11/18 12:05:44
>>232
ダイアログから複数のモードレスダイアログを開くサンプルを、
C+Win32で書いてみたぞ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
サブダイアログは、管理を楽にするために、
一度作成されると閉じても非表示になるだけの仕様。
宿題のメインはここじゃないのだろうから、こんなもんでいいんじゃね?

238:デフォルトの名無しさん
07/11/18 12:16:12
宿題お願いすると簡単に答えてくれるスレはここですか?

239:デフォルトの名無しさん
07/11/18 12:26:45
宿題スレでやれ

240:158
07/11/18 14:04:35
>>236
>>237様 他
有難う御座います・・・
けれど、駄目だ Orz 分け分からないです。

void CKadai1119Dlg::Onmaru()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
//MessageBox("○の表示");
DialogBox(hInst, (LPCTSTR)IDD_maru, hWnd, (DLGPROC)About);

}

IDD_maru ダイアログを新たに作成し、取りあえず付けました。
当然エラー 
C:\Documents and Settings\あ\デスクトップ\kadai1119\kadai1119Dlg.cpp(178) : error C2065: 'hInst' : 定義されていない識別子です。
C:\Documents and Settings\あ\デスクトップ\kadai1119\kadai1119Dlg.cpp(178) : error C2065: 'hWnd' : 定義されていない識別子です。
C:\Documents and Settings\あ\デスクトップ\kadai1119\kadai1119Dlg.cpp(178) : error C2065: 'About' : 定義されていない識別子です。

241:158
07/11/18 14:08:11
以上のエラーが出ています。
根本的に知識が足りないです。
サンプルプログラムや文献を漁ってみます。

とても、237様に感謝してます。参考にして頑張ります。

242:デフォルトの名無しさん
07/11/18 15:02:06
MFCで無意味にDialogBoxなんてAPIを使おうとする馬鹿初めて見た

>>241
いい加減こっち行けつってるだろ
日本語読めんのか?

■MFC相談室 mfc18d.dll■
スレリンク(tech板)

243:デフォルトの名無しさん
07/11/18 15:02:35
基礎からやれってことだ
横着したって無駄

ここは宿題スレではない

244:デフォルトの名無しさん
07/11/18 16:00:50
俺は、応援してるぞ158w

245:デフォルトの名無しさん
07/11/18 16:07:57
>>244
自演乙

246:デフォルトの名無しさん
07/11/18 16:20:19
      __ 
     /__.))ノヽ
    .|ミ.l _  ._ i.)    
   (^'ミ/.´・ .〈・ リ   
   .しi   r、_) |   しゃぶらないか?
     |  `ニニ' /     
    ノ `ー―i´     
 / ̄    '   ̄ヽ
/   ,ィ -っ、    ヽ  
|  / 、__う人  ・,.y i   
|    /     ̄ | |  
ヽ、__ノ       |  |  
  |     。   | /  
  |  ヽ、_  _,ノ  丿
  |    (つ)   |
  |    / ヽ   |

247:デフォルトの名無しさん
07/11/18 16:23:25
>>240
デスクトップwww

248:デフォルトの名無しさん
07/11/18 18:25:09
がんばれ158w

249:デフォルトの名無しさん
07/11/18 18:54:46
エディットボックスを透明にすることは出来ますかね?

250:デフォルトの名無しさん
07/11/18 18:59:10
非表示にすればいい

251:デフォルトの名無しさん
07/11/18 19:11:18
頭いいな

252:デフォルトの名無しさん
07/11/18 19:25:23
間違えました。
透明な背景を持つようにするにはどうしたらいいですかね?

253:デフォルトの名無しさん
07/11/18 19:34:23
レイヤードウィンドウでカラーキーを設定する

254:デフォルトの名無しさん
07/11/18 21:05:18
透明なエディットボックスって何の役に立つの?

255:デフォルトの名無しさん
07/11/18 21:13:38
仕事中に官能小説でも書きたいんジャマイカ?

256:デフォルトの名無しさん
07/11/18 21:19:35
ググッてるんですが、中々難しいです。
>254
機能的にはなんの役にも立ちません。
しかし、描画してあるビットマップがエディットボックスの背景色と重なるのは少し気になります。

257:デフォルトの名無しさん
07/11/18 21:59:08
1. WS_EX_TRANSPARENTを設定する
2. WM_CTLCOLOREDITでNULL_BRUSHを返す

これで透明にならなければEditコントロール自体の問題だからMSに文句言うか諦める

258:デフォルトの名無しさん
07/11/18 23:32:39
.NETでも探しているのですが、Win32APIでも探しています。

Windowsのユーザーアカウントの一覧リストをプログラム上で表示して
そこからアカウントを選択するようなことをする場合、ユーザーアカウントの
リストを得るためのクラスやAPIがあればうれしいのですが、どのようなものがある
でしょうか?

また、そのリストを、Domain上のユーザーアカウントに対しても取得したい
場合にも有効なクラスやAPIであれば尚ありがたいです。何卒よろしくお願いします。


259:デフォルトの名無しさん
07/11/19 00:07:56
static HBRUSH hBrush;

switch (msg) {
case WM_CREATE:
hBrush = CreateSolidBrush(123);
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT", "",
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL,
100, 10, 200, 25, hWnd, (HMENU)ID_EDIT, hInst, NULL);
SendMessage(hEdit, EM_SETLIMITTEXT, (WPARAM)63, 0);

case WM_CTLCOLOREDIT:
SetBkColor((HDC)wParam, 456);
return ((LRESULT)hBrush);
break;
こうですかね?

260:デフォルトの名無しさん
07/11/19 00:09:20
標準機能では背景を透過させることは出来ない。
以上

261:デフォルトの名無しさん
07/11/19 00:16:47
dllから、そのdllを読み込んだexeにメッセージを渡したいのですが
どちらもウインドウを持たない場合はどのような手段が考えられるでしょうか。

262:デフォルトの名無しさん
07/11/19 00:23:40
メールを送信する

263:デフォルトの名無しさん
07/11/19 01:05:11
メモリマップトファイル
アトム

264:デフォルトの名無しさん
07/11/19 01:26:11
>>261
コールバック関数用意しとけばいいんじゃね?

265:デフォルトの名無しさん
07/11/19 01:55:32
非同期でよければexeからdll呼び出すときに変数のポインタ渡せばいいんじゃない?
コールバックが一番確実だろうけど。

266:デフォルトの名無しさん
07/11/19 02:10:55
>>259
hBrush = CreateSolidBrush(123);
SetBkColor((HDC)wParam, 456);

ナンダコレw

267:デフォルトの名無しさん
07/11/19 07:00:16
Process Explorerでプログラムのsuspendとresumeが可能なんですが
どんなAPIを使ってるんでしょうか?

268:デフォルトの名無しさん
07/11/19 07:18:36
ねいてぃう゛API

269:デフォルトの名無しさん
07/11/19 09:03:22
スレッドを列挙してSuspendThread連打

270:デフォルトの名無しさん
07/11/19 13:18:16
たぶんNtSuspendProcess
調べてもないけど

271:261
07/11/19 14:22:54
>>262-265
レスありがとうございます!
コールバックを実装してみようと思います。

272:デフォルトの名無しさん
07/11/19 17:31:21
リソースからではなく、ファイルからアイコンを取得してイメージリストに
追加したいんですが、どういう方法をとればいけるんでしょうか。

273:デフォルトの名無しさん
07/11/19 17:37:54
LoadLibraryで開いて、LoadIconなりLoadImageなり

274:デフォルトの名無しさん
07/11/19 17:55:20
すいません、dll内のものじゃなくて、iconファイルやbmpからです。

275:デフォルトの名無しさん
07/11/19 18:39:23
LoadImage で LR_LOADFROMFILE

276:デフォルトの名無しさん
07/11/19 19:26:25
>>275
ありがとうございました。
解決しました。

277:デフォルトの名無しさん
07/11/19 20:09:40
透過出来ないのはなぜなんですか?

278:デフォルトの名無しさん
07/11/19 20:11:24
何が?

279:デフォルトの名無しさん
07/11/19 20:15:08
人体

280:デフォルトの名無しさん
07/11/19 20:28:59
人体より衣服を透過したい

281:デフォルトの名無しさん
07/11/19 20:31:50
夜店で売ってるよ

282:デフォルトの名無しさん
07/11/19 20:54:13
>>280
ユーザーモードでは他人の衣服を透過させる事はできない
まずはターゲットに対しての特権取得を行う必要がある

283:デフォルトの名無しさん
07/11/19 21:17:45
>>282
どうあがいても、無理ってことですか?

284:デフォルトの名無しさん
07/11/19 21:39:50
衣服の透過は実装例とか見つからないので詳しくはわからないけど、
管理者権限でも衣服にアタッチできないんなら諦めたほうが素直じゃないか?

285:デフォルトの名無しさん
07/11/19 22:13:16
透過した衣服を着てくれる彼女を作ればいいよ

286:デフォルトの名無しさん
07/11/19 22:22:54
境界線をクリックした時に出る
変な網目のようなバーを描画する関数ってあるんでしょうか?

287:デフォルトの名無しさん
07/11/19 22:27:49
あるといえばあるし、ないと言えばない。
あらゆるプログラムは関数を組み合わせて書く。


288:デフォルトの名無しさん
07/11/19 23:15:04
>>286
DrawFocusRect

289:デフォルトの名無しさん
07/11/20 01:53:40
>>286
白黒のブラシを作って、それで反転させる。

290:デフォルトの名無しさん
07/11/20 06:43:28
1つのアプリでコンソールを複数表示したいのですが、どうすればいいですか?
stderr用とかstdout用とかにわけたいんですが。

291:デフォルトの名無しさん
07/11/20 07:30:24
コンソールは各プロセスに 1 つしか割り当てることができません。
すでにコンソールを持っているプロセスが AllocConsole 関数を呼び出すと失敗します。
FreeConsole 関数を使って現在のコンソールからプロセスを切り離すと、
AllocConsole 関数を呼び出して新しいコンソールを作成することができます。
AllocConsole 関数は、新しいコンソールの標準入力ハンドル、標準出力ハンドル、
標準エラーハンドルを設定することもできます。
標準入力ハンドルはコンソールの入力バッファのハンドル、
標準出力ハンドルと標準エラーハンドルはコンソールの画面バッファのハンドルです。
ハンドルを取得するときは、GetStdHandle 関数を使います。
この関数は主に、グラフィックスアプリケーションでコンソールウィンドウを作成するときに使います。
グラフィックスアプリケーションは、コンソールなしで初期化します。
コンソールアプリケーションは、切り離されたプロセスとして作成する
(CreateProcess 関数を呼び出すときに DETACHED_PROCESS フラグをセットする)
場合を除いて、コンソール付きで初期化するのが普通です。

URLリンク(msdn.microsoft.com)
CreateConsole
AllocConsole
FreeConsole

292:デフォルトの名無しさん
07/11/20 08:25:51
コンソールを持つ子プロセスを複数用意して
CreateProcessの時に親プロセスのstderrやらstdoutをそれぞれのstdinに当ててしまえば可能かも名

293:デフォルトの名無しさん
07/11/20 09:41:19
ブラウザのお気に入りとかのウィンドウのサイズを変える境界線みたいなのってどうやって作るんですか?
境界線を移動できるオプションをウィンドウに設定しても、動くのは一つのウィンドウだけで、
その他のウィンドウはそれに反応してリサイズされないですよね?あの境界線ってどうやって作るのでしょうか?

294:デフォルトの名無しさん
07/11/20 09:47:10
リサイズされるたびに再計算してるだけ

295:デフォルトの名無しさん
07/11/20 10:34:59
>>293
「スプリッタウィンドウ」 で ググれ

296:デフォルトの名無しさん
07/11/20 13:03:37
>>288 >>289
ありがとう、試してみます

297:デフォルトの名無しさん
07/11/20 14:21:09
>>295
ありがとうございます

298:デフォルトの名無しさん
07/11/20 14:24:56
でも画面DCに反転ブラシで書く方法はAeroGlass環境だとクソ重くなるぞ
スプリッタならエクスプローラみたいにダイレクトにサイズ変更するようにしたほうがいい

299:デフォルトの名無しさん
07/11/20 15:48:34
普通はスプリッタウィンドウの中に子ウィンドウを置くだろ

300:デフォルトの名無しさん
07/11/20 20:19:01
スプラッタ?

301:デフォルトの名無しさん
07/11/20 20:52:48
バケラッタ!

302:デフォルトの名無しさん
07/11/20 20:58:28
(/O^)/

303:デフォルトの名無しさん
07/11/20 20:59:44
はらへった

304:デフォルトの名無しさん
07/11/20 23:08:21
hDCはEndPaintで開放されるのでしょうか?


case WM_PAINT:
// クライアント領域を再描画する処理
hDC = BeginPaint(hWnd, &ps);
TextOut(hDC, 0, 0, s, lstrlen(s));
EndPaint(hWnd, &ps);
return 0;

305:デフォルトの名無しさん
07/11/20 23:09:32
そうだよ。PAINTSTRUCTの中にhDCが保持されているので、
そこからEndPaintは解放するデバイスコンテキストを見付ける。

306:デフォルトの名無しさん
07/11/20 23:20:22
なるほど、そういうことだったのですね
デバイスコンテキストはプロシージャを抜けるまでに開放しないと
やばいことになる(どうやばいのかは知りませんが)と聞いていたので
どこで開放してるのか必死になってさがしまつた

307:デフォルトの名無しさん
07/11/21 12:56:48
しかしPAINTSTRUCTの中のhdcと同じもの返すって普通に考えたら謎な実装だな。
文字列系関数で渡したバッファのポインタそのまま返すのと似た感じでコーディング楽にするためなんだろうか。

308:デフォルトの名無しさん
07/11/21 13:54:58
>>307
BeginPaint の動作を勘違いしていると思う・・・

309:デフォルトの名無しさん
07/11/21 14:01:02
そうか?
>>307はpsのメンバにもhdcあるのに、戻り値でも返してるって言ってるだけでは?

310:デフォルトの名無しさん
07/11/21 14:32:29
確かに
別に戻り値は普通にT/Fで良いんだけどな

いいけどさ

311:307
07/11/21 14:37:28
>>308
>>309の通り。

かなりくだらないレベルかもしれんが、PAINTSTRUCTとHDCを両方定義するのが無駄と思って
戻り値は無視(NULLチェックだけ)してPAINTSTRUCTのhdcだけを使うようにしてる。

312:デフォルトの名無しさん
07/11/21 15:24:07
VBのWithのようなものがあったら俺もそうするな。
まあ今でもPAINTSTRUCTの変数名はいつもたった2文字、psだけど。

313:デフォルトの名無しさん
07/11/21 16:42:38
Windows Version 1 の頃の
TextOut(BeginPaint(hWnd, &ps), 0, 0, s, lstrlen(s));
の名残


314:デフォルトの名無しさん
07/11/21 18:43:50
色はつけれるけど、透過ができねぇぇぇえええ!!!

315:デフォルトの名無しさん
07/11/21 18:53:36
つGDI+

316:デフォルトの名無しさん
07/11/21 19:01:43
hdcはWM_PAINTのWPARAMで渡される訳だが

317:デフォルトの名無しさん
07/11/21 19:14:53
>>316
一体いつの時代だ?
URLリンク(msdn2.microsoft.com)
wParam 
This parameter is not used.

318:デフォルトの名無しさん
07/11/21 19:35:11
>>316
それは WM_PRINT じゃ?

319:デフォルトの名無しさん
07/11/21 19:37:50
WM_PRINTと勘違いしてないか?

320:デフォルトの名無しさん
07/11/21 20:28:56
>>317
URL貼るなら最後まで読めよw

> For some common controls, the default WM_PAINT message processing checks the wParam parameter.
> If wParam is non-NULL, the control assumes that the value is an HDC and paints using that device context.

321:デフォルトの名無しさん
07/11/21 20:38:07
そんなイレギュラーな仕様は常用すべきではないだろう

322:デフォルトの名無しさん
07/11/21 20:58:36
>>321
お前英語苦手だろw

もう少し詳しく説明されてる古いWin32SDKヘルプの説明を貼ってやろう
> Handle to the device context to draw in. If this parameter is NULL, use the default device context.
> This parameter is used by some common controls to enable drawing in a device context other than the default device context.
> Other windows can safely ignore this parameter.

323:デフォルトの名無しさん
07/11/21 22:11:02
何にせよまずはBeginPaintが基本ということでいいのでは?

324:デフォルトの名無しさん
07/11/21 23:09:27
>>314
URLリンク(www.microsoft.com)
URLリンク(homepage1.nifty.com)
URLリンク(homepage1.nifty.com)
URLリンク(msdn.microsoft.com)


325:デフォルトの名無しさん
07/11/22 15:20:45
エクスプローラでマイコンピュータを開くと表示される
「ローカル ディスク」や「CD ドライブ」といった文字列を取得するには
どうすればいいのでしょうか?
30分以内に小倉優子ばりのおっとりキャラで答えてください

326:デフォルトの名無しさん
07/11/22 15:23:32
shell32.dllからGetResource

327:デフォルトの名無しさん
07/11/22 15:36:31
SHGetFileInfoで取れぬのか?

328:デフォルトの名無しさん
07/11/22 15:41:26
>>327
おおいけそうな予感
ありがとー☆ミ

329:デフォルトの名無しさん
07/11/22 17:28:11
memo

URLリンク(www.microsoft.com)


330:デフォルトの名無しさん
07/11/22 17:37:49
割り込んで申し訳ないのですが、教えてください。
DirectX全画面のゲームの上から、文字や画像を表示する方法はないでしょうか?
(レイヤードウィンドウとかはダメでした。。。)

331:デフォルトの名無しさん
07/11/22 18:36:06
グラフィックカードに直接アクセスして
描画領域くりぬいてるから駄目なんじゃない?


332:デフォルトの名無しさん
07/11/22 18:42:35
よくチートツール類がやってる方法:

プロセスに潜り込んでIDrectDraw***を乗っ取り、そのBlt()あるいはBltFast()に割り込んで自分で書く。

333:デフォルトの名無しさん
07/11/22 19:19:22
>>330
俺は普通に枠なしウィンドウで文字表示したことあるけど
べつにその画面内に描画したいわけじゃないんだろ

334:デフォルトの名無しさん
07/11/22 19:37:41
330です。
説明不足ですんません&ありがとうございます。

よくMODツールなんかで見かけるやつです。
(レースゲームなんかでスピードメータを追加する改造など)

でもどうやったら、DirectDraw***のオブジェクトを乗っ取れるか?
それができたらやりたい放題ですね。
そこをぜひぜひお願い申し上げます。

(僕のプログラミングレベルでは・・
デバイスコンテキスト取ってDrawText、BitBltぐらいしかできないっす。)

335:デフォルトの名無しさん
07/11/22 19:47:33
そのレベルじゃ厳しすぎるだろ・・・

336:デフォルトの名無しさん
07/11/22 20:06:50
>>334
(1) APIフックで CreateDirectDrawの類をフックして順次wrapperオブジェクトを返す
(2) 途中まで同じで、wrapperは使わず IDirectDraw9Device 等の vtbl を書き換える
のどっちかかな。

APIフックの仕方やvtblの書き替え方を自分で見つけられる程度の実力があれば、
地味にやってけばできるでそ。

337:デフォルトの名無しさん
07/11/22 20:41:49
334です。
>>335 やっぱり?
>>336 ありがとうございやーす。

とりあえず正しい方向へ行けるのでホッとしました。
あとは学習あるのみ・・・

338:デフォルトの名無しさん
07/11/22 21:05:42
>>337
dxwndのソースが参考になるかもな。ならんかも知れんが。

339:デフォルトの名無しさん
07/11/22 21:28:37
DirectDrawって・・・
もう今じゃほとんど使われていないぞ

340:デフォルトの名無しさん
07/11/22 21:29:20
DWMをXPでいぢりたひ

341:デフォルトの名無しさん
07/11/22 21:30:23
>>338
中に「int HookDirectX(TARGETMAP *target)」こんな関数あったよ。
モロです。
地道にやってたら2週間かかってたかも
嬉しいんだけど、ちょっとはずかしい。

342:デフォルトの名無しさん
07/11/22 23:54:47
>>337
ぶっちゃけTaksiが全てのソースを公開してるんだがな

343:デフォルトの名無しさん
07/11/23 00:18:16
CはJavaとかとちがってガベコレがないから
プログラマがすべてリソースの開放をしなければならないと聞いたのですが
どの入門サイトもそれらしいコードがないのですがなぜでしょうか?
最初にメッセージボックスを表示するサンプルが多いようですが
メッセージボックスを開放する処理はどうすればいいのでしょうか?
また、ウインドウを作成したときもPostQuitMessageを送るだけで
その後ウインドウを開放するようなコードがないHPばかりなのですが


344:デフォルトの名無しさん
07/11/23 00:19:51
>>343
ネタだよな?そうだよな?

345:デフォルトの名無しさん
07/11/23 00:44:16
>>343
リソースの解放なんて必要ないよ。
一部の特殊なリソースを除けば、プロセス終了で、OSが全て片づけてくれる。

346:デフォルトの名無しさん
07/11/23 00:45:20
>>343
malloc/freeやnew/deleteというのがあるじゃないか。
GetBufferしたらReleaseBufferしなきゃならないとかもそう。
ファイルは開いたら閉じるのだってリソースの解放だ。

メッセージボックスの件はネタだと信じたい。

347:デフォルトの名無しさん
07/11/23 00:58:25
>どの入門サイトもそれらしいコードがない
>その後ウインドウを開放するようなコードがないHPばかりなのですが
文面から察するに経験豊富というわけではないだろうから、
「それらしい」や「するような」という判断自体が怪しいが
このレスからじゃあどのページをもってそう判断しているのかわからない

>Cは……プログラマがすべてリソースの開放をしなければならない
というのはC言語としての話であってWin32APIの話ではない。たとえば
>その後ウインドウを開放するようなコードがないHPばかりなのですが
の場合、「ウインドウを開放する」というコーディングはWinAPIとして要求してないと思われる。
(これもどのコードについて言っているのか解らないので推測だが)

まともなページであれば、APIとして開放しなければならないリソースはAPIの作法で開放されている。
ただその作法を知らないのであれば開放のコードは見つけられないかもしれない。
( HANDLE hFile = malloc(...) / free(hFile) なんてしないので)

なので勉強しろ。そして調べろ。

348:デフォルトの名無しさん
07/11/23 01:01:17
論文がはかどらなくてムシャクシャして書いた。
開放がすべて誤字であることに気づいたが反省はしていない。あすも平日だがまだがんばる。

349:デフォルトの名無しさん
07/11/23 01:01:27
メインスレッド内でCreateThreadで作成した複数の副スレッドのうちの特定の一つのスレッドを、
メインスレッドから停止(停止っていってもいい?スレッドを消したい)させるにはどうしたらいい?
ExitThreadでは特定スレッドを別スレッドから狙い打ちにできないような???
ねぇどうすればいい??

350:デフォルトの名無しさん
07/11/23 01:12:58
>>348
明日は休日ですよ……

351:デフォルトの名無しさん
07/11/23 01:29:16
hoge.exe: user error (GetClientRect: ヲ」ヲ マ・!ケgY
(error code: 578))
ってどういう意味のエラーなのでしょうか?
一部の文字化けは元からです。
コンパイル環境:mingwで g++ hoge.c -mwindow

352:デフォルトの名無しさん
07/11/23 01:34:04
>>349
ExitThreadは呼び出し元のスレッドを終了させる奴だ
別スレッドを終了させるならTerminateThread

ただ別スレッドで作成したリソースが残る可能性があるから
続行判断用のフラグをCreateThread時に渡しておく方がベターだと思う

その場合はフラグの領域が先に開放されないように注意が要るけど

353:デフォルトの名無しさん
07/11/23 01:36:26
>>351
デバッグしなさいw

354:デフォルトの名無しさん
07/11/23 01:44:19
>>352
TerminateThread、そういう関数がありましたか。。
ExitThreadはc標準の_exitthreadみたいなもんなんですね。

>>352さん指摘どおり、たしかに
「TerminateThread is a dangerous function that should only be used in the most extreme cases.」
ってありますね。

やっぱりパラメーターで渡しておくほうがよさげですね。
でもこのやり方嫌いなんだよなぁw なんか副スレッドがいつ本スレッド内のパラメーターの変更をチェックしてるんだよ、と
渡来してみます。ありがとうございました。

355:351
07/11/23 01:52:37
どういう理由かわからないのですが、
実行ファイルを削除してから再コンパイルすると正常に(?)動作しました。

356:デフォルトの名無しさん
07/11/23 05:14:13
_で始まる関数は標準じゃないぜ
これ知らないと俺みたいな一言居士がうるせーから要注意な

357:デフォルトの名無しさん
07/11/23 07:37:18
>>354
排他制御
アトミックオペレーション

358:デフォルトの名無しさん
07/11/23 09:44:32
読み取りだけなら領域が無効になってなきゃ別にいつだって良いだろ
書き込みなら排他制御すべきだが

359:デフォルトの名無しさん
07/11/23 09:55:36
             ____
          /__.))ノヽ
          .|ミ.l _  ._ i.) 
         (^'ミ/.´・ .〈・ リ  
         .しi   r、_) |     チャリーン
           |  `ニニ' /    __ lヽ,,lヽ
          ノ `ー―i´    | |Θ|(    )
        | ̄ ̄ ̄| ̄ ̄|_ |_|_|と   i
        |___|__|_|  |_|  しーJ

            ____
          /__.))ノヽ
          .|ミ.l _  ._ i.) 
         (^'ミ/.´・ .〈・ リ  <ヘンリーはわしが育てた
         .しi   r、_) | 
           |  `ニニ' /    __ lヽ,,lヽ
          ノ `ー―i´    | |Θ|(    )
        | ̄ ̄ ̄| ̄ ̄|_ |_|_|と   i
        |___|__|_|  |_|  しーJ

360:デフォルトの名無しさん
07/11/23 09:58:40
誰だヘンリーってw

361:デフォルトの名無しさん
07/11/23 10:31:49
ビルゲイツ(本名William Henry Gates III)だろ

362:デフォルトの名無しさん
07/11/23 14:32:39
Win32でメニューバーの色を取得したいのですがどうすればいいのでしょうか?

363:デフォルトの名無しさん
07/11/23 14:40:22
getsystemmetrics

364:デフォルトの名無しさん
07/11/23 14:42:00
DWORD menu_color = GetSysColor(COLOR_MENU);


365:362
07/11/23 14:49:42
>>363-364

>>362です。有難うございました。

366:デフォルトの名無しさん
07/11/23 15:31:59
>>365
誰だよwww

>>363-364
ありがとうございます。

367:デフォルトの名無しさん
07/11/23 15:40:52
ツリービューをダブルクリックでは開閉させたくないんですが、
どういう方法をとればいいんでしょうか。

368:デフォルトの名無しさん
07/11/23 17:13:30
サブクラス化してダブルクリックのメッセージを捕まえてreturn 0;をすればおk

369:デフォルトの名無しさん
07/11/23 19:46:11
>>368
やってみます。
ありがとうございました。

370:デフォルトの名無しさん
07/11/23 20:20:42
すでに起動してるアプリケーションに文字列をSendMessageするにはどうすればいいのでしょうか?
FindWindowをしてWM_APPのLPARAMに文字列を乗せて送信してみたところ
誤ったポインタが届いてしまいました

371:デフォルトの名無しさん
07/11/23 20:26:21
WM_COPYDATA

372:デフォルトの名無しさん
07/11/23 20:36:44
ポインタを別プロセスに送っても無意味
>>371かファイルマッピングを使う

373:デフォルトの名無しさん
07/11/23 20:51:36
テキストファイルから複数行の文字列を取り出し
リストビューに表示させるにはどうしたらいいですか?

374:デフォルトの名無しさん
07/11/23 20:51:37
アトムくんじゃダメなの?

375:デフォルトの名無しさん
07/11/23 20:51:47
>>371-372
出来ました!
こんな便利なのあったのかー
ありがとうございました

376:デフォルトの名無しさん
07/11/23 20:57:38
>>373
そりゃテキストファイル開いて、読んで、リストビューコントロールにに登録すりゃいいんでない?

377:デフォルトの名無しさん
07/11/23 21:19:04
複数のBMPを結合して4GBytes以上のAVIファイルを作成するには
どうしたらいいですか?
できればVideo compressorも使いたい。

378:デフォルトの名無しさん
07/11/23 21:20:49
どのように登録すればいいんですか?

379:デフォルトの名無しさん
07/11/23 22:17:05
まずパソコンの電源を入れます

380:デフォルトの名無しさん
07/11/23 22:24:19
>>379
次は?


381:デフォルトの名無しさん
07/11/23 22:25:06
入れました。

382:デフォルトの名無しさん
07/11/23 22:29:17
そしてスタートボタンをクリックします

383:デフォルトの名無しさん
07/11/23 22:31:46
>>373
これって、リストビュー1つのアイテムに複数行表示させるってこと?
ならオーナードローかな、LVS_OWNERDRAWFIXEDあたり

384:デフォルトの名無しさん
07/11/23 22:42:45
>>383
いえ、
テキストファイルから一行ずつ項目を追加したいです。

385:デフォルトの名無しさん
07/11/23 22:49:55
うるせーばかどっかいけ

386:デフォルトの名無しさん
07/11/23 22:51:55
リストビュー使うのにリストビューアイテムの追加の仕方なんて
人に聞くことじゃないでしょ。。。
調べろ禿で終わり

387:デフォルトの名無しさん
07/11/23 22:55:05
あなたがここに書いたとおりに実装すればよい
ただし、そのために何のどのような設計が必要かを検討する
さらにそのために何のどのような設計が必要か検討する これを繰り返す。
言語や実装方法依存しない設計であること、この繰り返しで疑問の余地がなくなるまでコーディングを開始しないことが重要

これが完了すればコーディングなんて一瞬で終わるし、再コーディングなんて手戻りはまず発生しない

388:デフォルトの名無しさん
07/11/23 22:58:36
ここでのレスを参考に分割ウィンドウ作っていたんですが
スクロールバーってオーナードローできないんでしょうか?
境界線を自力描画したせいか普通に置くと
境界線がスクロールバーの下をくぐるんです

389:デフォルトの名無しさん
07/11/23 23:00:37
コーディングして実際に確認しないと、言語や実装方法依存しないことが確認できない。
理論だけで集結するなら、実験をする科学者はいない。
太平洋で核実験をする国もない。

390:デフォルトの名無しさん
07/11/23 23:02:34
>>388
クライアントに直接書かずにウインドウを作ればいい。

391:デフォルトの名無しさん
07/11/23 23:03:09
ReadLinesToListviewItems()

392:デフォルトの名無しさん
07/11/23 23:44:38
>>388
MFCかWTLのソースでも見ろよ

393:デフォルトの名無しさん
07/11/24 00:08:57
フックについて詳しく書かれた書籍はありますか?
ネット上の情報ではあまり身につかないと思うので・・

394:デフォルトの名無しさん
07/11/24 03:38:42
すべてを詳しく網羅したものはない

395:デフォルトの名無しさん
07/11/24 04:35:45
Advanced Windows かなあ

396:デフォルトの名無しさん
07/11/24 10:32:43
フックなんて大して覚えることねーだろ

MSDNの説明読めば各フックが呼び出される状況は把握できるし
そしたらあとは自分で応用方法を考えるだけ

397:デフォルトの名無しさん
07/11/24 10:34:51
APIフックかも知れんよ?

398:デフォルトの名無しさん
07/11/24 10:39:45
>>395
あの分厚いやつですね
本屋でちょっと覗いてこよう

399:デフォルトの名無しさん
07/11/24 15:51:48
タブコントロールをCreateWindowで作成する際に、
TCS_RIGHTJUSTIFYを指定しているのですが、タブが最大まで拡大されません。
どういう原因が考えられますか?

400:デフォルトの名無しさん
07/11/24 18:34:22
マイクロソフトヘルプのhxsファイルはテキストなどに変換できませんか?

401:デフォルトの名無しさん
07/11/24 18:36:30
純正以外のgrepツールや全文検索のインディックスを作りたいんですが
htmlに変換することも難しいです シェアでABC Amber HxS Converter
というのがあるんですが日本語無理で、まとめて変換も出来ずつかえません

402:デフォルトの名無しさん
07/11/24 18:54:02
純正とは?

403:デフォルトの名無しさん
07/11/24 19:02:25
MSDNライブラリをインストールすると入っているMicrosoft Developer Networkが純正ツールです

404:デフォルトの名無しさん
07/11/24 19:50:44
s_hIml = ImageList_LoadImage(hInstance, MAKEINTRESOURCE(IDB_HEADER), 7, 0, CLR_DEFAULT, IMAGE_BITMAP, LR_LOADTRANSPARENT);
Header_SetImageList(ListView_GetHeader(s_hListView), s_hIml);

このようにして登録しておいたリストビューのヘッダのImage(14 x 6)を切り替えようと以下のような関数を作りました。
ところが何度呼び出しても切り替わってくれません…
一体全体どこが間違っているのでしょうか?

BOOL SetColumnState(void)
{
 HWND hHeader = ListView_GetHeader(s_hListView);
 int i;

 for(i = 0; i < Header_GetItemCount(hHeader); ++i)
 {
  HDITEM hdi = {HDI_FORMAT | HDF_IMAGE};
  Header_GetItem(hHeader, i, &hdi);

  if(hdi.fmt & HDF_IMAGE)
  {
   hdi.iImage = 1;
   return Header_SetItem(hHeader, i, &hdi);
  }
 }

 return FALSE;
}

405:デフォルトの名無しさん
07/11/24 20:01:12
すみません自己解決しました
hdi.maskに入れないといけないんですね
1時間も悩んでたのになんてこった…

406:デフォルトの名無しさん
07/11/24 20:39:04
簡単なウェブブラウザ作りたいんですが、何から手を付けたらいいかわかりません。

407:デフォルトの名無しさん
07/11/24 20:41:54
おまいが作るまでも無い。既存のもので充分だ。

ちなみに、下手なウェブブラウザ作るとw3c厨に命を狙われるから覚悟しとけ。

408:デフォルトの名無しさん
07/11/24 20:45:07
>>406
独自レンダリングはどこからやっても簡単にはならないだろうなw
IEコンポーネント使っていいならIEコンポーネントの使い方から調べたらいいなじゃないかな?

409:デフォルトの名無しさん
07/11/24 20:58:50
>>407
目の前の人に厳しくなるってのは、自分の足が引っ張られるからとか、正当化のための理由は確かにあり得ると思うんだけど、こういうアカの他人に厳しい人ってのは、どういう倫理感を持ってるんだか、おれには非常に不思議だ。

410:デフォルトの名無しさん
07/11/24 21:02:31
下手に穴のあるもの作られて
それが原因でウィルスやワームばらまかれて
結局は足を引っ張られることになってる

一番低能で一番迷惑な連中がMSの糞ソフト


411:デフォルトの名無しさん
07/11/24 21:08:48
>>410
それは>>406本人ですか?

412:デフォルトの名無しさん
07/11/24 21:14:30
windows使わなきゃいいじゃん

413:デフォルトの名無しさん
07/11/24 21:27:19
自分は使わなくても世間が使うとその割合が増えて
ウィルスがそっちから流れ込んでくるだろ

最近はやったSARSみたいに
自国だけ閉鎖しててもどうにもならんのだよ

おれはWindows使わないっていうスタンスで
影響受けずに済むのは
ヒッキーだけ


414:デフォルトの名無しさん
07/11/24 21:29:35
>>413
目の前の人に厳しくなるってのは、自分の足が引っ張られるからとか、正当化のための理由は確かにあり得ると思うんだけど、こういうアカの他人に厳しい人ってのは、どういう倫理感を持ってるんだか、おれには非常に不思議だ。

415:デフォルトの名無しさん
07/11/24 21:45:37
>>399どなたかわかりませんか?

416:デフォルトの名無しさん
07/11/24 21:49:31
>>415
使い方を間違っている


417:407
07/11/24 21:50:03
アカの他人に厳しい人って、まさかと思うけど俺のことじゃないよね?
単にコピペネタなのかもしれんが。

418:デフォルトの名無しさん
07/11/24 22:06:10
>>413
mac使えば良いんじゃない?

感染のリスクは比較的低いと思うよ

419:デフォルトの名無しさん
07/11/24 22:09:08
>>413
macなら、ウィルスが流れ込んで来ても、
たいていはWin用だから、せいぜい自分は感染せずに済む

420:デフォルトの名無しさん
07/11/24 22:12:14
>>417
お前の同僚がお前のために作ったツールが穴だらけなのは迷惑かもしれないが、
赤の他人が勉強のためか、vectorに登録するためか、もしくは仕事で作ったのかしらないけど、
彼がどの程度のものを作るのかわかってもいないうちから足を引っ張ろうとするのは倫理的にどうかと思うぞ。
お前に直接迷惑がかかるわけじゃないし、
仮に彼一人が作るのをやめたところで全体的には大して変化はないだろう。
それどころか彼の向上意欲やチャンスすら奪ってしまうことになりかねない。
お前は彼に責任を取れるのか?
文句を言いたいなら実際に迷惑を被った場合だけにしろ。

421:デフォルトの名無しさん
07/11/24 22:13:47
(゚Д゚)ハァ?

422:デフォルトの名無しさん
07/11/24 22:37:47
子ウィンドウをWM_LBUTTONDOWNで親ウィンドウの下に置いて
WM_LBUTTONUPで親の上に戻そうと思ってSetWindowPos()を弄ってるんですが
もしかして親ウィンドウの下に子ウィンドウを置く事はできませんか?
全然下がらなくて困っています

423:デフォルトの名無しさん
07/11/24 23:20:19
>>420
彼乙彼

424:デフォルトの名無しさん
07/11/24 23:45:33
>>416
どういう事でしょうか?

hTabCtrl = CreateWindowEx(0, WC_TABCONTROL, NULL,
   WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | TCS_RIGHTJUSTIFY,
   100, 100, 400, 100,
   hwnd, (HMENU)HTABCTRL, GetModuleHandle(NULL), NULL);

こんな感じで指定するのではないですか?

425:デフォルトの名無しさん
07/11/25 00:16:29
GroupViewスタイルのListViewでグループの開閉(図参照)ってどうやればできるか誰かわかります?
LVGS_COLLAPSEDあたりかと思って試してみたけど変化なし・・・

図 URLリンク(www.youlost.mine.nu)

426:デフォルトの名無しさん
07/11/25 01:37:37
そりゃLVGS_***ったらGroupItemのスタイルだろ常考

コモンコントロールからの通知はWM_NOTIFYとLVN_***のはず

427:デフォルトの名無しさん
07/11/25 03:06:19
逆引きリファレンスがほしいのですが
URLリンク(www.amazon.co.jp)
を使ってる人いませんか?
ポチるかどうか悩んでるのですが
立ち読みしにいける環境じゃないので困ってまつ

428:デフォルトの名無しさん
07/11/25 03:28:07
C言語スレか推薦図書スレか買ってはいけない書籍スレで聞け

429:デフォルトの名無しさん
07/11/25 09:41:35
なんでこの程度の質問にも答えていただけないのですか?
しかも何故命令口調?
あなたに命令される覚えはありませんが?

430:デフォルトの名無しさん
07/11/25 09:48:01
スレタイ嫁よ白雉

431:デフォルトの名無しさん
07/11/25 09:48:26
スレ違い

432:デフォルトの名無しさん
07/11/25 09:52:24
いや>>428は凄く親切だと思うぞw

普通ならスレ違いの一言で切って捨てられる所を
適切な質問先を示してるんだから。

433:デフォルトの名無しさん
07/11/25 12:48:39
>>427
良書だよ
VC++版とあわせて両方かっとけ

434:427
07/11/25 13:28:26
なんで>>429みたいな成りすましがいるのこのスレ
お前らだまされてるの?
それともだまされてるフリしてんの?

435:デフォルトの名無しさん
07/11/25 13:55:13
鳥が付いてるわけでもなし

なりすましかどうかなんて誰も分からん

436:427
07/11/25 14:04:24
なんでわからないの?

437:デフォルトの名無しさん
07/11/25 14:16:24
>>424
URLリンク(msdn2.microsoft.com)
>TCS_RIGHTJUSTIFY
>The width of each tab is increased, if necessary, so that each row of tabs fills the entire width of the tab control.
>This window style is ignored unless the TCS_MULTILINE style is also specified.

438:427
07/11/25 14:17:09
俺が本物だ

439:427
07/11/25 14:31:13
そもそもTCS_RIGHTJUSTIFYって
#define 0x0000
だった希ガス

440:デフォルトの名無しさん
07/11/25 14:36:07
コンソールで GetKeyboardState を実行しても戻り値は成功になりますが
引数バッファには結果は何も押していない状態になります。(もちろん色々押しています) 
ただ GetKeyboardState の直前に GetKeyState( 0 ) を実行すると
GetKeyboardState は正常な値が取得できます。
関数説明を見てもさっぱり挙動が理解できません、、
そもそも GetKeyboardState はコンソールで使用できないのでしょうか?

441:427
07/11/25 14:52:09
GetKeyboradStateもGetKeyStateも
メッセージキューが所有する仮想キー情報からキーの状態を取ってくる

メッセージキューはスレッドがUSER32.DLLに属するAPIを最初に呼び出した時に作成される

したがって初めにGetKeyboradStateを呼んだときは
キューが作られた直後なので仮想キー情報は真っ白

442:425
07/11/25 15:23:32
>>426
いや、コードから開閉したいんじゃなくて、開閉できるスタイルに設定したいんです。
>>425の画像のソフト以外で見たことないし自前でやってるのかな?

443:デフォルトの名無しさん
07/11/25 15:35:24
URLリンク(msdn2.microsoft.com)

>state
>Currently, it can only be the following.

>LVGS_NORMAL
>Groups are expanded, the group name is displayed, and all items in the group are displayed.

どうも使えないっぽい
.NET2.0では利用可能な模様

444:デフォルトの名無しさん
07/11/25 15:37:44
>>441
ありがとうございます。
説明不足でないですが、上記処理は何度も実行するループ部分でして
GetKeyState を入れるか入れないかで、
GetKeyboradState の動作がかわるのが、わけがわからないのです。
どちらもメッセージキューが必要ということは、
やはりコンソールではどちらも使用してはいけないのでしょうか?
_getch だと処理が止まってしまうので回避をしたいのが目的です。

445:デフォルトの名無しさん
07/11/25 15:54:40
GetAsync~の方を使ってみたら?

446:425
07/11/25 15:57:42
>>443
サンクス。こっちでは何も書いてないんだけど、やっぱ無理かな?
URLリンク(msdn2.microsoft.com)
使い方は合ってるはずなのにできないってことは無理なのかもしれませんが

447:デフォルトの名無しさん
07/11/25 15:58:09
>>444
コンソールで入力街に入るのを回避したいなら
_kbhitでチェックしてから_getchが常道かと

448:デフォルトの名無しさん
07/11/25 17:14:34
>>437
おぉありがとうございます。TCS_MULTILINEも指定しないと無視されるようですね。
また一つ勉強になりました。しかし、>>439を見て調べたのですがTCS_RIGHTJUSTIFYは
0x0000と定義されてました。これって指定できないということなんですかね???
いくら>>424のようにしても、TCS_RIGHTJUSTIFYはあってもなくても変わりませんよね?
0と論理和とっても変化なしですしね・・・どうすれば・・・

449:440
07/11/25 18:17:38
>>445
同時キーや引数をいっぱい変えて GetAsyncKeyState を実行しまくるのが非効率でしたので
GetKeyboradState が理想でしたが、いろいろ無理そうですので素直に諦めます。

>>447
_getch よりも Get~による同時押しも欲しかったのですが
いろいろ問題ありそうですんで諦めます 。
アドバイスありがとうございました。

450:デフォルトの名無しさん
07/11/25 19:16:31
>>425
それってツリービューじゃ駄目なの?

451:デフォルトの名無しさん
07/11/25 20:20:21
>>448
デフォルトでそういう動作っていう意味だろう

452:425
07/11/25 20:55:11
>>450
表示の切り替え(アイコンとか詳細とか)が必要なんです。
何とかならんかなぁ

453:デフォルトの名無しさん
07/11/25 20:57:57
>>452
予め自分でデータを持っておいて、ListViewがクリックされた時にその位置に挿入/削除して
擬似的にツリービュー的な動作を再現すればいいと思うが。

ネットで見かけるTreeListViewのサンプルとかがそういう事をしている。

454:425
07/11/25 21:10:19
う~ん、そうするしかないようですね。

455:デフォルトの名無しさん
07/11/25 22:05:50
或いは詳細表示の時だけTreeViewに切り替えるとか。

456:デフォルトの名無しさん
07/11/26 02:09:51
比較的大きなドキュメントを読み込むときに、一気に読み込まず、一定のサイズごとに
シーケンシャルに読み込んでいくプログラム、例えばIE、でデータの読み込みにしたがって
右側のスクロールバーのスクロールボックスの大きさが小さくなっていく
ああいう動作はどうやって実現してるんだ?
スクロールバーの操作や、つまみ(スクロールボックス)のサイズの調整はできるんだが
読み込み中はスクロールバー自体が消えたようになってしまう。

ファイル読み込み(例えば256Byteずつ)のループ
{
ファイルの読み込み処理
行数を調べて
SetScrollInfo関数で、新しい範囲の設定
}

これでスクロールバーは更新されるはずなんだが・・ダメだ
ファイル全体の読み込み処理の終了の後、ウィンドウ全体を再描画させるとスクロールバーも出現する。

ちなみにクライアント領域の右側につく(WS_VSCROLL)、標準スクロールバーの話です。
SDK

457:デフォルトの名無しさん
07/11/26 02:16:02
>これでスクロールバーは更新されるはずなんだが

されねえよw
それだとループしてる間はWM_PAINTが発生しないから再描画されるわけないだろ

手っ取り早いのは副スレッドで読み込みとスクロールバーの設定をしてInvalidateRectする
そうすればメインスレッドは滞りなく再描画する

458:デフォルトの名無しさん
07/11/26 02:32:52
>>456
ウインドウメッセージを処理してやらなきゃ駄目だよ。
普通はマルチスレッド化、どうしてもスレッドが嫌ならループ内に
メッセージ処理を組み込む。

459:デフォルトの名無しさん
07/11/26 02:34:26
RDW_FRAME
RDW_UPDATENOW
SWP_DRAWFRAME

辺りでぐぐれ

460:デフォルトの名無しさん
07/11/26 02:34:58
それだけならDispatchMessageはさむだけで良さそうだけど
副作用出てくるような操作するときはマルチスレッドにするべき


461:デフォルトの名無しさん
07/11/26 02:36:09
こんな時間に何してんだお舞ら

462:デフォルトの名無しさん
07/11/26 02:41:05
質問に回答してるだけだが、何か?

463:デフォルトの名無しさん
07/11/26 02:45:46
>>446
まだ見てるか分からんけど
URLリンク(msdn.microsoft.com)

>LVGS_COLLAPSIBLE 状態フラグを使用すると、グループを折りたたんだり展開したりできるようになります。
>グループを折りたたむと、グループに属するリストビュー項目が非表示になります。
>プログラムで LVGS_COLLAPSED 状態フラグを使用すると、グループを折りたたむことができます。

464:456です。
07/11/26 05:27:46
一応、副スレッドでの読み込みでも同じようにやってみたけど×だったorz

>>457
スマソ
書き忘れた
SetScrollInfo();
InvalidateRect();
UpdateWindow();

と、きちんとやってるんだが
もちろんファイルから読み込んだ内容は順次表示されていく
だけど、スクロールバーが消えてしまう
で、これがなぜかわからない

一応ループ部分のソース(つっても分かりにくいと思う。)
do{
ZeroMemory(lpTemp, CHUNK_SIZE);
bRet = ReadFile(hFile, lpTemp, CHUNK_SIZE, &dwRead, NULL);

lstrcat(lppms->lpString, lpTemp);

iLines = StrChrCount(lppms->lpString, TEXT('\n')) + 1;//行数の取得
SendMessage(lppms->hwnd, WM_MY_SETRANGE, 0, (LPARAM)iLines); //メインスレッド内にある、ウィンドウプロシージャに範囲の設定の指示
//LPARAMで範囲の最大値を渡してる
InvalidateRect(lppms->hwnd, NULL, TRUE);
UpdateWindow(lppms->hwnd);
Sleep(100);
}while(dwRead && !lppms->bKill);

465:デフォルトの名無しさん
07/11/26 05:28:24
で、主スレッド内でのメッセージの受け取り
case WM_MY_SETRANGE:
si.fMask = SIF_RANGE;
si.nMin = 0;;
si.nMax = (int)lParam;
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
return 0;

466:デフォルトの名無しさん
07/11/26 07:11:19
スクロールバーに再描画送ってない

467:デフォルトの名無しさん
07/11/26 08:44:59
スレッドがスリープなりして使用権を返却していない。

468:デフォルトの名無しさん
07/11/26 10:37:47
>>466だと思う

469:デフォルトの名無しさん
07/11/26 11:18:55
仮想リストビューにアイテムを追加するときは
LVN_GETDISPINFOメッセージを監視して自分で追加していくのは解るのですが
どうやってLVN_GETDISPINFOメッセージを発生させるのでしょうか?
通常のリストビューのようにListView_SetItemでいいのでしょうか?

470:デフォルトの名無しさん
07/11/26 11:26:36
アイテム数をLVM_SETITEMCOUNTで設定すれば
画面の更新が必要になると勝手に飛んでくる

471:デフォルトの名無しさん
07/11/26 11:41:54
ある自作メインアプリケーションに「ログイン」の機能を持たせ、
それを起動している最中は他の自作アプリケーションが
そのログインユーザの情報にアクセスできるようにしたいと思っています。
(メインアプリケーション終了時にログインユーザの情報も消す)

そうなると、メインアプリケーション内のログインユーザの情報を
アプリケーション間で共有できるようにしなければいけないとは思うのですが、
このようなグローバルな情報はどのように共有するものなのでしょうか。

感覚的には、「OS内で唯一のインスタンスがあって、みんなでextern参照」
といった使いかたをしたいのですが、
Mutexみたいなものを使って実現できるものなのでしょうか。
なにかよいサンプルなどがあれば、教えていただけると嬉しいです。
よろしくお願いいたします。

472:デフォルトの名無しさん
07/11/26 11:50:55
ファイルマッピングオブジェクト(メモリマップトファイル)

データが短いならグローバルアトムで十分

473:471
07/11/26 12:37:48
>>472
情報ありがとうございます。
両方調べさせていただきました。

メインアプリケーションのプロセスに聞きに行くのではなく、
各アプリケーションがそれぞれ任意のタイミングで
「メインアプリケーションがどこかにセットした現在のユーザ情報」を
自分で見に行くという動きを考えているので、
メモリマップトファイルよりはグローバルアトムのほうが
それに適した実装ができそうですかね。
こっちの方法を勉強してみようと思います。

474:デフォルトの名無しさん
07/11/26 12:48:39
>[メインアプリケーションがどこかにセットした現在のユーザ情報」を
>自分で見に行くという動きを考えているので、
>メモリマップトファイルよりはグローバルアトムのほうが
>それに適した実装ができそうですかね。

たぶん逆
その用途ならメモリマップトファイルの方が楽

アトムだと中身にアクセスするには生成した識別子(=一定ではない)を
SendMessageか何かで他のプロセスに渡さなきゃいけない

メモリマップトファイルは名前(=一定の値)でカーネルオブジェクトを呼び出せるから
何かを渡したりとかは必要ない

475:471
07/11/26 12:56:12
>>474
アトムの識別子って決めうち文字列じゃなかったんですね。
一時的なレジストリみたいなものだと勘違いしてました。
間違った方向に進むところでした。ありがとうございます。

476:デフォルトの名無しさん
07/11/26 13:00:46
>>470
なるほど
数だけ教えてあげれば勝手にやってくれるんですね
解決できました、ありがとうございました

477:デフォルトの名無しさん
07/11/26 13:12:10
>>475
ちなみにその「一時的なレジストリ」を使って実現してもいいんだよ

478:425
07/11/26 13:15:48
>>463
情報サンクス。でもLVGS_COLLAPSIBLEの値がわからないです。
誰か分かる方います?

479:425
07/11/26 13:17:14
てかvista以降って書いてない?

480:471
07/11/26 13:27:29
>>477
レジストリだと、実行中にレジストリエディタで簡単に書いたり消したりできますよね。
もちろんアトムやメモリマップトファイルでも、
本格的にセキュリティ対策するならそのまま使うわけにはいかないでしょうけど、
OS付属のエディタで読み書きできてしまうことくらいは避けておきたいなと思いまして。

481:デフォルトの名無しさん
07/11/26 13:36:04
>>479
じゃあVista以降なんだろう。残念だな。

482:425
07/11/26 13:40:42
そうなんでしょうね、諦めます。
で、次の質問なんですが、ListViewでマウスホイールが回転されたことを取得したいんですけど、
サブクラス化するしかないですよね?

483:デフォルトの名無しさん
07/11/26 13:43:19
他にも方法はあるけど、サブクラス化が一番楽でコストも低いような

484:425
07/11/26 13:54:04
おk、サンクス

485:デフォルトの名無しさん
07/11/26 16:48:58
URLリンク(software.nikkeibp.co.jp)
ここのPart3のFileCopyプログラムですが
表示されるべきのメニューが表示されません。。。

COPYやEXITなどのメニューを表示するようにするには
どうすればいいですか?

486:デフォルトの名無しさん
07/11/26 17:03:18
リソースファイル (*.rc) をコンパイルしてリンクしたか?

487:デフォルトの名無しさん
07/11/26 17:38:18
>>486
ご指摘のように
リソースファイルをプロジェクトに追加するのを
忘れていたのが原因だったようです。

表示するようになりました。ありがとうございます。

488:デフォルトの名無しさん
07/11/26 18:56:47
文字列置換や文字列検索に使える関数ってSDKにない?

489:デフォルトの名無しさん
07/11/26 19:01:02
検索や置換のダイアログの表示なら
FindTextやReplaceTextで可能です。

490:デフォルトの名無しさん
07/11/26 19:14:03
>>489
ありがとうございます
FindTextとReplaceTextについて調べてみよ

491:デフォルトの名無しさん
07/11/26 20:10:01
デバッガAがDebugActiveProcessでプロセスBにアタッチした後、
デバッガCがデバッガAのアタッチを強制的にデタッチして
プロセスBにアタッチしなおすことって、出来るんでしょうか?

その過程の間、プロセスBは停止したらダメ、という条件で。

ちょっと分かりにくいですが、要するにデバッガAをデバッガCに
差し替えてしまうことができるか、ということです。(AはCに
ついては何も知らないプログラムなので、連携した動作は
ありません)

デバッガAを強制的に終了するとプロセスBも終了してしまう
ようで、一見すると不可能っぽいのですが。OSは2000~Vista
です。よろしくお願いします。

492:491
07/11/26 20:11:58
すみません、上げさせてください。

あと、「プロセスBは停止したらダメ」というのは、ようするに
終了は不可と言うことで、ブレーク状態になるのは構いません。

493:デフォルトの名無しさん
07/11/26 20:17:20
XP以降ならDebugActiveProcessStopってのがある。

494:デフォルトの名無しさん
07/11/26 20:34:23
>>493 どうもありがとう

495:491
07/11/26 21:14:53
教えてもらったので早速実験してみました。

WinMain(){
DebugActiveProcessStop(GetCurrentProcessId());
 :
 :
 :
}

ってやってデバッグ実行開始したら、デバッガ(VC8)が
外れると期待したのですが、外れずにそのまま下に
行っちゃいました。

もしかしてDebugActiveProcessStopはデバッグ対象じゃなくて
デバッガのプロセスIDを渡すのかしら? それとも自プロセスが
デバッガから強制離脱することはできない…?

あるいはDebugActiveProcessを呼んだあとに、そのプログラムが
デバッグ対象を切り離す用途で使うのかも。それだと>>491
外部からのデバッガの差し替えはできませんね。

憶測ばかりで申し訳ないですが、このAPI、ググっても細かい
ところがよく分かりませんでした。


496:デフォルトの名無しさん
07/11/26 22:04:52
コレ見た感じだと DebugActiveProcess 呼んだデバッガが自分で
デタッチするときに使うような感じっぽくない?

URLリンク(msdn2.microsoft.com)

497:デフォルトの名無しさん
07/11/26 22:30:55
ある特定のトップレベル・ウィンドウを、最前面に持ってくるのってSetWindowPos関数?
ほかにも何かいい方法ありますか?

498:491
07/11/26 22:30:58
>>496
情報ありがとう

499:デフォルトの名無しさん
07/11/26 22:57:02
>>497
BringWindowToTopはどう?

500:497
07/11/26 23:48:53
>>499 トン
これもいいな
コードがすっきりした

表に持ってきたウィンドウの再描画が完了したのを検地したのを知る方法ってある?
タイマーで1秒くらい待ってから、ってやってるけどエレガントじゃない

501:デフォルトの名無しさん
07/11/27 00:09:25
FindWindow

502:デフォルトの名無しさん
07/11/27 04:34:26
プログラムの実行中に、ウィンドウが常に最前面に表示されるようにウィンドウスタイルを変更したいです。
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_TOPMOST);
SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
うまくいきません。助けてケロ

503:デフォルトの名無しさん
07/11/27 05:10:48
てかWS_EX_TOPMOSTが付いてれば後ろに引っ込んだりしないだろ

…他にWS_EX_TOPMOSTを持ってるウィンドウがなければ

504:デフォルトの名無しさん
07/11/27 05:17:10
>>502
なんでそこまでいっておいて、SetWindowPosを調べないんだ?
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
これだけでいい。

SetWindowLongはいらない。

505:デフォルトの名無しさん
07/11/27 09:26:31
SetWindowLong入らない?

506:デフォルトの名無しさん
07/11/27 09:39:24
XPの制限ユーザー上で実行するとはProgramFiles以下に書き込めません。
Vistaではこのようなファイル操作はVirtualStoreにリダイレクトされるようです。

実際のプログラムで設定ファイルを保存する場合は、
実行されたパスが読み書き可能なものであるか? Yes→実行されたパスに書き込み
No↓
ユーザーディレクトリ(AppDataなど)を取得し、そこに書き込み

このような動作が必要だと思います。
これをどのwindowsでも確実に動作させるにはどのようなAPIを使えばいいのでしょうか。


507:デフォルトの名無しさん
07/11/27 09:45:01
>>505
CreateWindowExの段階でWS_EX_TOPMOST付けてるなら要らないと思うけど

508:デフォルトの名無しさん
07/11/27 09:45:53
>>506
常にユーザディレクトリに書けばいいやん

509:デフォルトの名無しさん
07/11/27 11:04:14
>実行されたパスが読み書き可能なものであるか? Yes→実行されたパスに書き込み
この考えがそもそも間違い
ユーザーディレクトリに置くかレジストリを使用すべき

510:デフォルトの名無しさん
07/11/27 11:33:00
共用というのであれば、それなりのアクセス権もってAll Usersに置けばいいし。

511:デフォルトの名無しさん
07/11/27 11:37:09
どうしてもやりたければOSのバージョンを取得してやればいいんじゃね

512:デフォルトの名無しさん
07/11/27 12:38:15
>>500
InvalidateRectしてからUpdateWindowすればWM_PAINTが完了するまで待てるけど
あれって他プロセスのウィンドウに使えたかな?

513:デフォルトの名無しさん
07/11/27 12:40:47
WH_CALLWNDPROCRETを見てればWM_PAINTの処理が終わったかは分かる

こんなことでフックするなんて蛇足にも程がある気がするけど

514:デフォルトの名無しさん
07/11/27 13:42:59
この場合、InvalidateRectが無くてもいいでしょう。
UpdateWindowだけで再描画されなくても、WM_PAINTは抜けてるって事だし。

515:デフォルトの名無しさん
07/11/27 14:24:24
インストールせずにスタンドアローンで使うことを想定しているのですが、
万が一ユーザーがProgramFiles以下に置いた場合でも正常に動作させられるようにしたいのです。

516:デフォルトの名無しさん
07/11/27 14:26:44
ユーザーがProgramFiles以下に置いた場合でも置かない場合でも、
常にユーザディレクトリに書いとけばいつでも正常に動作する

517:デフォルトの名無しさん
07/11/27 14:27:36
だったらなおさら、どこに配置されようとAppDataを使うべきだろ
System32に入れる奴だっているかもしれないんだし(もっともXP以前ならそこでも読み書きできるが)

518:デフォルトの名無しさん
07/11/27 14:28:28
>>515
たぶん、あなたが言いたいそれを「スタンドアローン」とは言わないと思う。
Readme にでも注意書きを書いておけば、わざわざ Program Files に
配置するスキルがあるユーザなら、意味をくみ取ってくれるんじぇね?

519:デフォルトの名無しさん
07/11/27 14:31:25
専用のインストーラ・アンインストーラを設けないなら、
ユーザフォルダやレジストリに情報残すと削除がめんどいってのは同意するけども。

520:デフォルトの名無しさん
07/11/27 16:18:05
>>515
気持ちは分かるけど、妙な俺様仕様を作らないほうがいいよ。
OSが推奨する共通の方式に従ったほうが
安全だしセキュアだし管理しやすいし将来の互換性も期待できるし
結果ユーザにとっても使い勝手が良いから。

521:デフォルトの名無しさん
07/11/27 17:35:43
>>503-505
レスありがとう
解決した。
だけど、SetWindowPos に指定するフラグで、HWND_TOPMOSTはドキュメントに載ってるが
HWND_NOTOPMOSTはヘッダー見て初めて知った
最前面化:SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
最前面化解消:SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
でOKだた

522:デフォルトの名無しさん
07/11/27 17:36:45
そういやexeあるフォルダのの下にファイル作るプログラム、そのままVistaでちゃんと動いてるなと思って
ファイル探したら、ユーザーの下のVirtualStore\Program Files (x86)\xxx の下にできてたわ。
勝手にマッピングしてくれるみたいだな。

523:デフォルトの名無しさん
07/11/27 17:56:19
>>520
MSが互換性に気をつけると思っているのですか

524:デフォルトの名無しさん
07/11/27 18:02:56
実際気をつけてるよ

525:デフォルトの名無しさん
07/11/27 18:17:32
>>522を下位互換性と呼ばずになんと呼ぶと?

526:デフォルトの名無しさん
07/11/27 18:18:56
>>525
新機能

527:デフォルトの名無しさん
07/11/27 18:28:47
GetSysColorBrush(COLOR_***)の結果と、HBRUSH(COLOR_*** + 1) って使用上で何か違うの?

528:デフォルトの名無しさん
07/11/27 18:46:04
>>524
なぜIEとFirefoxでは表示が異なるのですか?

529:デフォルトの名無しさん
07/11/27 18:51:40
Firefox の仕様準拠度が低いからだな

530:デフォルトの名無しさん
07/11/27 19:06:03
>>527
GetSysColorBrush はブラシのハンドルが返る
HBRUSH(COLOR_*** + 1) ってのは、WNDCLASSEX 構造体のメンバーに入れてると思うが
これはRegisterClassExを呼んだ先でインデックスかブラシのハンドルか判断して
内部でGetSysColorBrushに相当するものを呼んでるだけだろう。
+1なのはインデックス0とNULLを区別するためだなw

531:デフォルトの名無しさん
07/11/27 19:28:39
FillRectとかでHBRUSH(COLOR_*** + 1)入れても動くよな?

532:デフォルトの名無しさん
07/11/27 19:37:24
>>529
違います。
IEの独自仕様のためですよ。

533:デフォルトの名無しさん
07/11/27 19:42:46
違います
仕様が曖昧だからですよ

534:デフォルトの名無しさん
07/11/27 19:43:23
IEの仕様解釈がおかしいのは認めるが、Firefoxも解釈おかしいよ

535:デフォルトの名無しさん
07/11/27 19:53:09
>>532
えーと実際に Firefox で Acid2 とか試したことありますか?


536:デフォルトの名無しさん
07/11/27 19:55:09
ある文字列(改行含む)から、最長行の文字数を返す関数ってあります?
UNICODE/ANSIどっちでも対応できるもので、マルチバイト文字もうまく扱ってくれるもの

前に便利な文字列操作関数っていうサイトを見た希ガスるんだけど、見つからん

537:デフォルトの名無しさん
07/11/27 19:57:02
>>535
Acid2なんて飾りだよ

538:デフォルトの名無しさん
07/11/27 19:58:06
>>536
Win32API に、ですよね。
そういう関数はありません。

539:デフォルトの名無しさん
07/11/27 19:58:23
>>536
等幅フォント?

540:デフォルトの名無しさん
07/11/27 20:06:27
指定したフォルダにあるファイルのファイル名を全て取得する関数ってありますか?

541:デフォルトの名無しさん
07/11/27 20:11:12
>>540
FindFirstFile FindNextFile FindClose

542:デフォルトの名無しさん
07/11/27 20:13:54
>>539
そうです。

>>538
別にAPIになければ、APIじゃなくてもいいです。
自作するのはちょtっとミリなので

543:デフォルトの名無しさん
07/11/27 20:13:54
>>541
ありがとうございます。貴方のおかげで道が開けまんた。

544:デフォルトの名無しさん
07/11/27 20:23:18
>>542
なぜ自作するのが無理なんだ?

int line = 0;
int maxlen = 0;
int i = 1;
while (fgets(s, ...)) {
 int len = strlen(s);
 if (maxlen < len) {
  line = i;
  maxlen = len;
 }
 i++;
}
こんな感じでどうにかなるだろ。

545:デフォルトの名無しさん
07/11/27 20:32:00
>>542
size_t maxCharsInLine(LPCTSTR p)
{
 size_t maxLen = 0;
 size_t len = 0;
 while (*p) {
  switch (*p) {
   case 0x0d: case 0x0a:
    len=0; break;
   default:
    if (maxLen < ++len) maxLen = len;
  }
  p = (LPCTSTR) CharNext(p);
 }
 return maxLen;
}

546:鈴木
07/11/27 20:41:03
164 名前:鈴木[who@am.i] 投稿日:2007/11/27(火) 13:12:56

MiniDumpWriteDump をつかって、Dumpを出力しているのですが、
どのようにしてファイルの中身は見れるでしょうか?

547:デフォルトの名無しさん
07/11/27 20:42:50
>>546
よう鈴木、こないだ貸した5000円返せよ

548:鈴木
07/11/27 20:43:36
>>547
しゃ、借用書はあるのかっ!

549:デフォルトの名無しさん
07/11/27 21:01:46
>>531
そうなのか。
それも内部でブラシ取得してるんだろう。
ハンドルかインデックスかは、上位ワードが
0かどうかを見てる気がする。

550:デフォルトの名無しさん
07/11/27 21:16:30
質問です。

windowsで流れているサウンドをフックすることは可能でしょうか?
もし方法があれば、調べれば良いポイント・キーワードなどを教えていただけないでしょうか。

551:デフォルトの名無しさん
07/11/27 21:21:47
そういうことを質問する前に最低限、
録音プログラムぐらいは作ったことがあるんだろうな?

552:デフォルトの名無しさん
07/11/27 21:23:57
>>551
Windowsでサウンドプログラミングの経験があります。

553:デフォルトの名無しさん
07/11/27 21:34:15
>>550
「サウンドをフックする」っていうのがわからない。

途中で加工したい?
それとも覗ければ(キャプチャできれば)十分?
audio 関連の filter driver を書けばいいと思うんだけど、
Vista 以前の OS だと色々なパスがあって面倒だと思う。

特定のアプリが対象なら話は遙かに簡単になるけど。

554:デフォルトの名無しさん
07/11/27 21:35:57
>>553
> それとも覗ければ(キャプチャできれば)十分?
はい、覗けるだけで十分です。
加工して戻すということは想定していません。

555:デフォルトの名無しさん
07/11/27 21:36:23
>>552
録音するプログラムを組んだことがあるのか無いのか聞いているんだが、ニホンゴワカリマスカ?

556:デフォルトの名無しさん
07/11/27 21:39:58
>>555
録音するプログラムを書いたことがあります。

557:デフォルトの名無しさん
07/11/27 21:41:24
>>556
じゃあ既に問題は解決している。

558:デフォルトの名無しさん
07/11/27 21:42:21
新規質問です。
Beep関数で、XPでは音が出るもののVistaでは音がでません。
プログラムはVisualStudio2005のC++でコンパイルしています。
VistaではBeep関数を使えないのでしょうか?

559:デフォルトの名無しさん
07/11/27 21:44:42
>>558
MessageBeep を使ってみてはいかが?

560:デフォルトの名無しさん
07/11/27 21:47:04
>>558
マザーボード上の内蔵Beepデバイスから出ているのなら、
物によってはマザーボードからスピーカーに繋げなければ音が出ない。
XPだと逆にドライバがなかったから、サウンドデバイスから出力されていただけでは?
そもそもAPIとは何の関係もない。

561:デフォルトの名無しさん
07/11/27 21:48:06
>>559
確かに、MessageBeepは使えますが、自由にメロディを設定したいのでBeep関数が使いたいのです。

562:デフォルトの名無しさん
07/11/27 21:53:16
>>561
PlaySoundでwavを鳴らせばいいだろ

563:デフォルトの名無しさん
07/11/27 21:55:15
>>554
DDKを使って、カーネルモードのフィルタドライバを書いてオーディオドライバの
上側のAPI(のようなもの)をフックすることになると思います。

この「オーディオドライバ」ってのが色々あるのがXPまでのOSでの難点・・・
URLリンク(www.microsoft.com)
Vista からは UAA (Universal Audio 何とか) に統一されてるんだけど。

セキュアオーディオパスってのがあって、DRM処理された音源の再生時には
署名されていないフィルタドライバは割り込めなかったような気もする。

そうして僕の知るところ、これをやってる例は聞いたことがない。
オーディオカードの出力から入力へループバックする方が遙かに簡単だから。

特定のアプリが対象で、どんなAPIで鳴らしてるのか見当が付くなら、
単純なAPIフックで実装できるわけですが。

564:デフォルトの名無しさん
07/11/27 22:05:38
リダイレクトに相当するものを録音するだけ。
ドライバを作る必用もなければ、APIをフックする必用など微塵もない。

565:デフォルトの名無しさん
07/11/27 22:16:40
サウンドカード(デバイス)が対応してればそれが一番簡単でしょうね。


566:デフォルトの名無しさん
07/11/27 22:28:14
リアルタイムでエフェクトでもかけたいんでね?

567:デフォルトの名無しさん
07/11/27 22:31:56
用途が分からんがDirectShowでキャプチャで十分な希ガス

568:デフォルトの名無しさん
07/11/27 22:34:36
サウンドデバイスをフックしてDRM解除するソフトでも作りたいのだろ

569:デフォルトの名無しさん
07/11/27 22:40:14
>>566
お前は他人の話を聞かない奴だとよく言われるだろ。

570:sage
07/11/27 22:45:54
録音はwaveInXXXで実装できるが、何らかの音が鳴り始めた瞬間というのは、
ユーザーモードでは特定できないはず。
しかし、WAVEデバイス指定のmciSendCommandやwaveOutWriteをAPIフックしたとなれば、
それを期に録音を開始することで再生バイトを取得できるかもしれない。
これらの関数には、MM_MCINOTIFYのような再生終了の通知メッセージがあったから、
メッセージフックでそれを取得すれば録音終了のタイミングも図れるのではないだろうか。
デバイスオープンの関数が通知を指定していないのであれば、
その関数もフックして通知フラグを立ててしまえばいい。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch