Win32API質問箱 Build40

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。

過去スレ、関連リンクは>>2-5くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで。
2デフォルトの名無しさん:2006/02/03(金) 00:26:38
3デフォルトの名無しさん:2006/02/03(金) 00:27:42
32 ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/
31 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
30 ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
29 ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
28 ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
27 ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
26 ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
25 ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
24 ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
23 ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
22 ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
21 ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
20 ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
19 ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
18 ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
17 ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
16 ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/
15 ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/
14 ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
13 ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
12 ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
11 ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
10 ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
9 ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
8 ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
7 ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
6 ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
5 ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
4 ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
3 ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
2 ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
1 ttp://pc.2ch.net/tech/kako/991/991576947.html
4デフォルトの名無しさん:2006/02/03(金) 00:29:41
5デフォルトの名無しさん:2006/02/03(金) 00:33:31

  / ̄/   /   ̄/   ̄/ /  / / ̄  / ̄   ̄/ / ̄/ / ̄/
  /  /   / / ̄   ̄/   ̄/    ̄/ / ̄/   / / ̄/   ̄/
   ̄         ̄   ̄         ̄    ̄       ̄
6デフォルトの名無しさん:2006/02/03(金) 00:39:09
母「おい、おまいら!!夕食ができますた。リビングに集合しる!」
父「詳細キボーヌ」
母「今日はカレーですが、何か?」
兄「カレーキターーーーーーーーー」
妹「キターーーーーーーーーー」
姉「カレーごときで騒ぐ奴は逝ってヨシ」
母「オマエモナー」
父 --------終了-------
兄 --------再開-------
妹「再開すなDQNが!それより肉うpキボンヌ」
母「ジャガイモうp」
姉「↑誤爆?」
兄「タマネギage」
父「ほらよ肉>家族」
妹「神降臨!!」
兄「タマネギage」
母「糞タマネギageんな!sageろ」
兄「タマネギage」
姉「タマネギage厨uzeeeeeeeeeeee!!」
母「ageって言ってればあがると思ってるヤシはDQN」
セールスマン「イタイ家族がいるのはこの家ですか?」
母「氏ね」
父「むしろゐ`」
兄「タマネギage」
妹「兄 、 必 死 だ な ( 藁 」
7デフォルトの名無しさん:2006/02/03(金) 02:18:51
winsockのrecv関数を使ってWebサーバからデータ受信したら
CrLfがCrCrLfに変換されているように見えますが
生データを受け取ることは出来ないの?
8デフォルトの名無しさん:2006/02/03(金) 04:42:40
勝手に変換なんかされねーよ
てめーで使ってるファイル入出力ライブラリが変換してるだけだ
おめーはprintf("\r\n")でCRLFLFが出力されるのが不満なのか?
9デフォルトの名無しさん:2006/02/03(金) 10:25:04
イヤです
10デフォルトの名無しさん:2006/02/03(金) 10:46:23
>>旧スレ995
もう見てないか・・・・

>ファームアップデートした段階で応答なくなっちゃうんです(死
>で、再起動するには抜き差し……と。
実際にデバイスマネージャからやってみればわかるが、デバイスの無効・有効や、削除・変更
スキャンでは、デバイスの電源は落ちない。
したがって、デバイス側マイコンのパワーオンリセットを期待しているならNG。

デバイスドライバでPoRequestPowerIrp()を用いて電源をオフする手法もあるが、一部ハブや
ルートハブでは、電源オフされないものあり。

したがって、
>ファームアップデートした段階で応答なくなっちゃうんです(死
をなんとかするしかない。
11デフォルトの名無しさん:2006/02/03(金) 15:53:04
ちょっくら他プロセス(自作、ウィンドウあり)から、少量の情報が欲しい状況です。

SendMessageをネストさせて
1. 情報が欲しいと思った
2. 自分=>相手に適当にSend
3. 相手=>自分にWM_COPYDATAをSend
4. 自分のCOPYDATAハンドラでデータを保存
5. 処理続行

とすると名前付きカーネルオジェクトも不要で、簡単で良いと思いました。
3.と4.の処理が重いと危険な匂いがしますが、これらが充分少量な処理ならば
これは設計としてアリでしょうか?
12デフォルトの名無しさん:2006/02/03(金) 16:11:24
>>11
4は3への返答をさっさとしてからゆっくりやればいい。
安定性を過度に求めるんでなければ別に問題はないぞ。
13デフォルトの名無しさん:2006/02/03(金) 16:45:35
アリじゃねーの?
昔っから使われてる手法だし
14デフォルトの名無しさん:2006/02/03(金) 17:25:21
>>1
otu
1511:2006/02/03(金) 18:18:48
>>12
>>13
お返事ありがとうございます!
ネストするのはちょっと不安だったんですが、安心しましたです
16デフォルトの名無しさん:2006/02/03(金) 19:50:28
親ウィンドウの中に別スレッドで子ウィンドウを作成することは出来ますか?
17デフォルトの名無しさん:2006/02/03(金) 19:51:31
>11
自分と相手が別スレッドだとデッドロックしないか?
18デフォルトの名無しさん:2006/02/03(金) 19:53:47
>>16
19デフォルトの名無しさん:2006/02/03(金) 19:59:17
>>16
口丁
20デフォルトの名無しさん:2006/02/03(金) 20:00:23
VS.net(VC)でIWebBrowser2つかってプログラム作ろうとしてるんですが、
Debug構成でコンパイルして実行すると下のようなエラーが出て動作しません。

------------------------------------------------------------------------------
Debug Assertion Failed!



Program: ...ttings\umimi\デスクトップ\test\test2.exe

File: c:\program files\microsoft visual studio .net\vc7\atlmfc\include\atlcom.h

Line: 3534



Expression: !InlineIsEqualGUID(*m_plibid, GUID_NULL) && "Did you forget to pass the LIBID to CComModule::Init?"



For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)
------------------------------------------------------------------------------

Release構成だと全く正常に動くんですが・・・。
これ解決法ないですか?
デバッガ使えないのはイタイ
21デフォルトの名無しさん:2006/02/03(金) 20:10:43
GetForegroundWindowで取得したウインドウ内でフォーカスの当たってる
コントロールを取得するにはどうすればよいのでしょうか?
22デフォルトの名無しさん:2006/02/03(金) 20:18:10
>>20
>File: c:\program files\microsoft visual studio .net\vc7\atlmfc\include\atlcom.h
>Line: 3534

ここ見ろよ。

>Release構成だと全く正常に動くんですが・・・。

正常に動いているように見えるだけ。
assertが出るって事は、何かミスしてる事を知らせてる。
23デフォルトの名無しさん:2006/02/03(金) 20:22:32
2420:2006/02/03(金) 20:38:20
>>22,23
できました。
どうもありがとうございます。
25デフォルトの名無しさん:2006/02/03(金) 20:42:15
ここで聞いていいのか分かりませんが、
IE7のBeta2が出ているらしいんですが、

IE7が正式リリースされると、コモンコントロールが更新されたり、
PSDKが更新されたりするんでしょうか。

何か面白そうな機能は付かないかな。
26デフォルトの名無しさん:2006/02/03(金) 21:12:34
MSDNの更新API一覧みればいいんじゃね?
27デフォルトの名無しさん:2006/02/03(金) 23:02:52
>>11
>ネストさせて
2.と3.がネストしてて同一スレッドで投げ受けだと
固まるよね?
28デフォルトの名無しさん:2006/02/03(金) 23:22:39
やっぱり Linux で遊ぶより、 Win32API の使いかたとか
勉強してた方が飯の種になるのかな。
29デフォルトの名無しさん:2006/02/03(金) 23:25:42
スレタイy… えーと 生活相談もありか?
30デフォルトの名無しさん:2006/02/03(金) 23:30:35
師ね
31デフォルトの名無しさん:2006/02/04(土) 00:46:52
>>29
不覚にも笑ってしまった
32デフォルトの名無しさん:2006/02/04(土) 08:16:37
>>29
あり
33デフォルトの名無しさん:2006/02/04(土) 12:08:25
>>30
師を探すことにします。どうもありがとうございました。
34デフォルトの名無しさん:2006/02/04(土) 13:01:47
コマンドプロンプトの画面を消去しないで上書きするにはどのようにすればいいでしょうか?
35デフォルトの名無しさん:2006/02/04(土) 13:48:23
>>34
同じ行ならputchar('\r');で先頭カラムに戻る。
#後はしらね。
36デフォルトの名無しさん:2006/02/04(土) 13:56:07
>>35
どうも ん〜なんとかやってみます
わからなかったらまた来るかもしれません
37前869:2006/02/04(土) 14:27:30
前872
|>>869
|英語版も合わせてよく読め。SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE を
|指定するのは、SetForegroundWindowの動作を、95,NT4と同じようにするために
|アプリのインストール時に恒久的に変更する場合のことだ。
アプリのインストール時に恒久的に変更する必要は無い、SetForegroundWindowを
呼び出す直前にFOREGROUNDLOCKTIMEOUTを一時的に変更する方法で問題無いという
指摘と思います。
英語版 KB97925
On Microsoft Windows 98 and Microsoft Windows 2000, SetForegroundWindow
is subject to limitations.
If an application requires that SetForegroundWindow behave the same
on all platforms, the foreground lock timeout value should be changed
when the application is installed.
On Windows 2000, the SystemParametersInfo call fails unless the
calling thread can change the foreground window, so this must be
called from a setup or patch application.
私はこれは、Windows 2000ではSystemParametersInfoでFOREGROUNDLOCKTIMEOUTを
変更するためには呼び出し元のスレッドでフォアグラウンドウィンドウを変更
できる必要があり、そのためにはアプリのインストール時にFOREGROUNDLOCKTIMEOUT
値を恒久的に変更する必要がある(SetForegroundWindowを呼び出す直前に一時的
に変更する方法では駄目)と読み取りました。
そう考えたのは一時的に変更するタイミングでアプリがフォアグラウンドウィンドウ
を変更できる保証は無いが、アプリのインストールプログラムは使用者によって
フォアグラウンドウィンドウにされている状態が必ずあるはずなので
SystemParametersInfoを成功させることができると考えました。
恒久的に変更する必要は無いというのはなぜでしょうか。
38デフォルトの名無しさん:2006/02/04(土) 15:26:47
>>34, 36
\bで文字を消して書きなおす
39デフォルトの名無しさん:2006/02/04(土) 15:39:04
>>17
デッドロックはしない。
他スレッドへSendしている最中のスレッドがSendされると
Windowsがウィンドウプロシージャを直に呼び出す。
詳しくはAdvanced Windows読め。
40デフォルトの名無しさん:2006/02/04(土) 16:49:01
>>35>>38
いろいろやってみたんですが
どうもうまく行きません
カーソルの位置が問題だと思うんですけど・・カーソルのを特定の場所に持ってくるような
エスケープシーケンスがどうもうちの環境じゃあ使えないようです
図というかMAPみたいのを直接上書きとかは無理なんですか?
また、ググってきます
41デフォルトの名無しさん:2006/02/04(土) 16:58:11
>>34
SetConsoleCursorPosition()
42デフォルトの名無しさん:2006/02/04(土) 17:11:23
43デフォルトの名無しさん:2006/02/04(土) 17:32:30
>>41
凄いほとんどちらつかなくなりました
ありがとうございました
44デフォルトの名無しさん:2006/02/05(日) 00:32:32
Advanced Windowsに、
「GUI関係の仕事が無い時、GetMessageはスレッドを眠らせる」
とあるんですが、内部的にはWaitForSingleObjectしてると考えて
良いのでしょうか?

というのは、ウィンドウを必要としないスレッド間(別プロセス)で
同期とって作業しようと思っていて、
(a) イベントオブジェクト(とか) + WaitForSingleObject
(b) あえてウィンドウ作成(不可視) + SendMessage
なんかを思いついたんすけど、(b)を選ぶメリットってあるのかなー
と思っておるのです。(内部動作が等価なら、あえて選ぶ必要はなさそう)
45デフォルトの名無しさん:2006/02/05(日) 02:34:30
内部実装はしらんが、きっとそんなもんじゃなかろうか。

> 内部動作が等価なら

メッセージキューを自作するぐらいなら、
WindowMessage使ったほうがマシだと思う。
46デフォルトの名無しさん:2006/02/05(日) 03:05:33
内部的っつーか
WaitForもGetMessageも、(もちろんその他のI/Oもだけど)
スレッドを「待ち状態」にしてるだけでしょ。

スレッドを待ちにするために
わざわざWaitForなどのユーザーランドから呼び出すAPIを使ってるとは
(俺には)思えないけどね。
47デフォルトの名無しさん:2006/02/05(日) 05:16:49
>>44
不可視のウィンドウを作ってやり取りするのは
Windowsアプリケーションではよく使われる手。

それと、どうしてもウィンドウを作りたくないのならば
ウィンドウ無しでメッセージキューを持つこともできるよ。
48デフォルトの名無しさん:2006/02/05(日) 05:44:25
メッセージキュー自体はウィンドウがあろうがなかろうがAPI呼び出し時に暗黙的に作られるものだけどな。

ttp://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_postthreadmessage.htm
4944:2006/02/05(日) 18:58:13
みなさん、お返事ありがとうございました!

>>45
ええ、「俺キュー」を自作するつもりは毛頭ないです。
処理が比較的単純なんで、キュー(WindowMessage)を使うのは
「襷に長し」かなあと感じたのでした。

>>46
なるほどです。「WaitFor...は、待機状態を実現する唯一の低レベルAPI」という
浅はかな思いこみが私にあった事に気づきました。
最終的に実現される『待機状態』は、GetMessageもWaitFor...も変わりはないですよね?

>>47-48
不可視ウィンドウは常套手段なのですか。ならためらう必要もなさそうです。
ウィンドウ無しのメッセージキューについてですが、PostThreadMessageでも
作られる事を学びました。メッセージループは以下の感じでよろしいでしょうか?

#define MYMSG 0
/* ウィンドウが無いので、TranslateもDispatchも不要 */
while(GetMessage(&msg,NULL,0,0)){
if(msg.message==WM_USER+MYMSG) { /* 俺処理 */ }
else if(msg.message==WM_QUIT) { break; }
}
50デフォルトの名無しさん:2006/02/05(日) 23:36:15
CreateProcessからvbsのファイルを実行するってできますか?
単にvbsのファイル名のみの指定と
「wscript.exe 」を前に付けて実行を試したのですが、実行できません。
51デフォルトの名無しさん:2006/02/06(月) 00:37:41
当然エラーコードは調べたんだろうな?
52デフォルトの名無しさん:2006/02/06(月) 01:04:45
>>50
起こらなかったことじゃなくて起こったことを書かないと
あっそう、で終わる
53デフォルトの名無しさん:2006/02/06(月) 01:54:10
>>49
GetMessageはWM_QUITがきたら0を返すので else if... はいらないと思う

あと、
#define MYMSG 0
の後に
WM_USER+MYMSG
するくらいなら
#define MYMSG WM_USER+0
とした方がソース的に見やすいと思う
54デフォルトの名無しさん:2006/02/06(月) 02:21:32
>>53
#defineに括弧を付けないなんて。
55デフォルトの名無しさん:2006/02/06(月) 02:24:56
>>54
かっこつけてみた
(#define) WM_USER+0
56デフォルトの名無しさん:2006/02/06(月) 02:44:52
格好つけるな!
57デフォルトの名無しさん:2006/02/06(月) 02:56:27
こうだろが
#define MYMSG WM_USER+(0)
58デフォルトの名無しさん:2006/02/06(月) 03:33:14
いや、こうかな?
#define MYMSG WM_USER+0 (笑)
5949:2006/02/06(月) 04:10:32
またまた皆様お返事ありがとうございました。

>>53
おっしゃる通りです、お恥ずかしいです。(普段のコピペがバレバレ)

>>54-58
どうもです(なんだそれ)
60デフォルトの名無しさん:2006/02/06(月) 06:00:37
久々のGetMessageネタなのに、
誰も、GetMessageがエラーのときに-1を返すと突っ込まないなんて!
61デフォルトの名無しさん:2006/02/06(月) 07:11:50
WM_USERって南下と衝突してるんじゃなかったっけ??あいまいだけど。
WM_APPのあと幾らかはユーザー定義しても安全だった気がする。
62デフォルトの名無しさん:2006/02/06(月) 07:27:32
63デフォルトの名無しさん:2006/02/06(月) 07:28:01
コモンコントロールが
WM_USER〜0x2000ぐらいまで使ってた希ガス
64デフォルトの名無しさん:2006/02/06(月) 07:40:22
アクティブアプリケーションのIMEの状態を取得する方法を教えてください
65デフォルトの名無しさん:2006/02/06(月) 08:50:38
WM_APP以降にしろよ
66デフォルトの名無しさん:2006/02/06(月) 09:40:05
ぶっちゃけ、ウィンドウを持ってないスレッドのメッセージなんて
どうでもいいけどな。
67デフォルトの名無しさん:2006/02/06(月) 12:58:34
>>60
GetMessage() が-1を返すのは、ウィンドウハンドルが不正とか
呼び出し側が指定した引数に問題がある場合だけだから、
防御的プログラミングに走る場合以外はチェックしないんじゃないかな。
68デフォルトの名無しさん:2006/02/06(月) 14:04:06
while (GetMessage(&msg, NULL, 0, 0) > 0) {

うーん。場当たり的だ。
69デフォルトの名無しさん:2006/02/06(月) 17:31:47
while ( (GetMessage(&msg, NULL, 0, 0)-1) !< 0)
だっけな。
70デフォルトの名無しさん:2006/02/06(月) 17:32:42
下げ忘れた・・・。
71デフォルトの名無しさん:2006/02/06(月) 17:32:42
>>69
!<
72デフォルトの名無しさん:2006/02/06(月) 17:36:11
>>71
ちがったっけ??
73デフォルトの名無しさん:2006/02/06(月) 17:41:58
何やねん、その演算子は。
74デフォルトの名無しさん:2006/02/06(月) 18:10:04
while ( (GetMessage(&msg, NULL, 0, 0)-1) > 0);
こっちだっけな??
75デフォルトの名無しさん:2006/02/06(月) 18:13:58
また下げ忘れた・・・。
76デフォルトの名無しさん:2006/02/06(月) 18:14:46
おまいそれじゃ>>68タンと一緒じゃまいか・・・(V)(´Д`)(V)
77デフォルトの名無しさん:2006/02/06(月) 18:17:25
ぱぱぱぱ、ぱくりじゃないぞ。
-1がちょっとだけ主張してる。はず。
78デフォルトの名無しさん:2006/02/06(月) 18:18:19
(V)(   )(V) カサカサ・・
79デフォルトの名無しさん:2006/02/06(月) 18:19:36
あ、それあかんわ。
もうぐだぐだ。。。
80デフォルトの名無しさん:2006/02/06(月) 18:20:09
(V)(´Д`)(V) よし認めよう
81デフォルトの名無しさん:2006/02/06(月) 18:20:44
(V)(´Д`;)(V) ぇえええええええええええぅ
82デフォルトの名無しさん:2006/02/06(月) 20:07:04
>>74
それGetMessageがTRUE返してもループ抜けちゃうやん。
83デフォルトの名無しさん:2006/02/06(月) 21:23:49
>>82
TRUE て1ちゃうかったっけ?
84デフォルトの名無しさん:2006/02/06(月) 21:39:31
>>83
だから、1でもループ抜けるやん
85デフォルトの名無しさん:2006/02/06(月) 21:48:22
何で関西弁で進行
86デフォルトの名無しさん:2006/02/06(月) 22:16:49
>>85
関西人だから
87デフォルトの名無しさん:2006/02/06(月) 22:23:19
そやな!
88デフォルトの名無しさん:2006/02/06(月) 22:23:52
GetLastErrorは無しなん?
89デフォルトの名無しさん:2006/02/07(火) 00:06:15
指定のリムーバブルディスクがEJECT対応しているかどうか調べる事って可能ですか?

90デフォルトの名無しさん:2006/02/07(火) 02:38:18
ttp://www.vector.co.jp/soft/win95/util/se375705.html
このようなソフトウェアをつくってみたいと考えているのですが
どのように実装されているのか見当がつきません。

timeGetTime()あたりをHookしているのではないかと思っているのですが
91デフォルトの名無しさん:2006/02/07(火) 02:45:09
見当が付かないなら、そのソフトを落としてみればいいじゃない。
dumpbinやdependency walker等でインポートしているAPIが分かる。
92デフォルトの名無しさん:2006/02/08(水) 11:31:00
サブディレクトリを含むディレクトリをコピーするAPIってありますか?
また、サブディレクトリを含むディレクトリの削除はありますか?
93デフォルトの名無しさん:2006/02/08(水) 11:34:46
>>92
SHFileOperationでできそうな気がする
94デフォルトの名無しさん:2006/02/08(水) 11:34:59 BE:27174072-
SHFileOperationとか。
95デフォルトの名無しさん:2006/02/08(水) 12:02:27
>>93-94
ケコーン
96デフォルトの名無しさん:2006/02/08(水) 12:36:53
>>92
前スレ嫁
97デフォルトの名無しさん:2006/02/08(水) 13:34:15
QueryPerformanceCounter/Frequencyってクロック可変な環境で
正しい時間が計測できないという可能性が指摘されてるんですが、
現実問題そういう環境は実在するんでしょうか?

一般論としてもう使うべきではないんでしょうかね。
98デフォルトの名無しさん:2006/02/08(水) 13:46:19
>>93-94
ありがとう。助かりました。
99デフォルトの名無しさん:2006/02/08(水) 14:04:44
>>97
SpeedStepとかPowerNowとか。
100デフォルトの名無しさん:2006/02/08(水) 14:58:33
スタンバイ状態にする方法を教えてください
101デフォルトの名無しさん:2006/02/08(水) 15:29:39
>>100
SetSuspendState自信無し
102MR大佐||☆:2006/02/08(水) 16:19:39
もう一つのハンガリー表記
実は、ハンガリー表記には未公開の別の表記法が存在(中略)伝統に従って
uType だが、実は内部では fuMB_、つまり、MB_ で始まるフラグ値集合の UINT 型。

この未公開のハンガリー表記が使われた未公開のヘッダを使えば、
エディタで MB_ を入力するだけで(中略)ツールにより文書化を効率化できる。

エラーコードをセットする処理は、配布時には不必要かもしれない。
Won98では、エラーコード設定に以下の関数を使う。
103MR大佐||☆:2006/02/08(水) 16:21:00
WON_NOIMPLマクロは、コンパイル時に実装されていないという(中略)
英語圏の人は、この変数名の意味が読める。
#define WON_NOIMPL(it) \
typedef char it##_is_not_implemented_in_this_API; \
typedef int it##_is_not_implemented_in_this_API;
WON_NOIMPLFAIL マクロはエラーコード ERROR_CALL_NOT
104MR大佐||☆:2006/02/08(水) 16:23:08
(略)これらのマクロは、WINVER、_WIN32、_WIN32_IE などのマクロと
対をなして、プログラムの下位互換性を定義する。
型変換時の間違いを防ぐため、新たにLOWORD_INTとHIWORD_INTが追加された:
#define LOWORD_INT(dw) ((INT)(SHORT)LOWORD(dw))
...
MR は、Won2K 以降 UniBulls をサポートしていません。
MR は、法令を遵守する極めて「ノーマルな」集団であり、2006年1月現在、RudeEvilとは無関係です。
MR は、「間違った手段」による Counter Smith Revolution を支持しません。
ソフトウェア開発は、日々進化しています。美しく勝利してください(ajax!)。
105デフォルトの名無しさん:2006/02/08(水) 17:13:14
SetDIBitsToDevice()って(0,0)以外から転送するとおかしくならない?
106デフォルトの名無しさん:2006/02/08(水) 17:20:23
ならない。
107105:2006/02/08(水) 17:21:48
BitBltとおなじパラメータでやると変になるんだ
108デフォルトの名無しさん:2006/02/08(水) 17:37:33
>>107
ならない
というか実物見ないと(ry
109105:2006/02/08(水) 17:42:45
検証用ソース
// ここを適当に変えて
のところで適当に座標値を
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=1628
110デフォルトの名無しさん:2006/02/08(水) 17:56:11
>>109
見れネ
111105:2006/02/08(水) 17:58:55
スレが見れないってこと?コピペでもだめですか?
ソースは添付ファイルです
112デフォルトの名無しさん:2006/02/08(水) 18:04:27
113105:2006/02/08(水) 18:09:00
それです
114デフォルトの名無しさん:2006/02/08(水) 18:11:53
>>100
呼び出し側プロセスには SE_SHUTDOWN_NAME特権が必要。
@NT、2000などでExitWindowsEx() or ExitWindows()するサンプルをどっかから
拾ってくる
A以下の一行書き換える。
//ExitWindowsEx( ... );
SetSystemPowerState( TRUE, FALSE );
115デフォルトの名無しさん:2006/02/08(水) 18:12:41
特定アプリ(例えばメモ帳など)のキーをフックするにもdllからじゃないとできませんか?
116デフォルトの名無しさん:2006/02/08(水) 18:14:54
ハンドル捕まえてサブクラス化は?
117デフォルトの名無しさん:2006/02/08(水) 18:19:01
他のアプリのボタンをクリックしたいのですが、
SendMessageで送るメッセージは何にすれば良いのでしょうか?
WM_???
118デフォルトの名無しさん:2006/02/08(水) 18:30:13
>>117
PostMessage(hButton, WM_LBUTTONDOWN, 0, 0);
PostMessage(hButton, WM_LBUTTONUP, 0, 0);
これでやったらできたけど正しいかはわからない
119デフォルトの名無しさん:2006/02/08(水) 18:30:56
>>117
SPYで捕まえて、それと同じやつを送れ
120117:2006/02/08(水) 18:39:01
>>118
でけました。
WM_LBUTTONUPは盲点でした。
121デフォルトの名無しさん:2006/02/08(水) 18:42:51
それが盲点なようじゃまだまだだな
122デフォルトの名無しさん:2006/02/08(水) 18:47:16
人の盲点を予測できないようじゃまだまだだな
123デフォルトの名無しさん:2006/02/08(水) 18:49:21
>>122
とりあえずレーザーで盲点は作れるからおk
124デフォルトの名無しさん:2006/02/08(水) 19:01:16
自分が開始した訳でもないフックDLLを止めるにはどうしたらいい?
125デフォルトの名無しさん:2006/02/08(水) 19:13:24
>>116
あ、すみません、それするとdllいらずでできそうですか?
ちなみにどんなふうにかけばいいですか?
126デフォルトの名無しさん:2006/02/08(水) 19:19:55
キーボードのグローバルフックはプロセスに注入することなく使えるからDLL使わなくてもできる・・・
というのをどこかで聞いたことがある
127デフォルトの名無しさん:2006/02/08(水) 19:21:39
>125
サブクラス化でぐぐれ!
128デフォルトの名無しさん:2006/02/08(水) 19:21:57
どこだか教えてください!!!
129デフォルトの名無しさん:2006/02/08(水) 19:26:01
GetAsyncKeyStateを使ってキー情報をタイマーで監視し続けるんだ!
130デフォルトの名無しさん:2006/02/08(水) 20:40:40
>>109
SetDIBitsToDevice の cScanLines っぽいけど。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpgdi/html/_win32_setdibitstodevice.asp
> lpvBits パラメータが指す配列中に含まれている DIB の走査行の数を指定します。

g_img の走査行の数は IMG_H では?
131デフォルトの名無しさん:2006/02/08(水) 22:25:02
別プロセスのウィンドウはサブクラスか出来ないけどな
132デフォルトの名無しさん:2006/02/08(水) 23:00:34
SetTimerでTimerProcを設定しました、
その後TimerProcのVBでいうIntervalを変更したいんですが、
なにか方法があれば教えてください。
133デフォルトの名無しさん:2006/02/08(水) 23:04:06
>>132
SetTimer()とKillTimer()しかないわけだから、KillしてSetしなおすしか
ないだろうね。
134デフォルトの名無しさん:2006/02/08(水) 23:04:55
>>132
KillTimerして再度作るのが妥当かと
135デフォルトの名無しさん:2006/02/08(水) 23:08:01
KillTimerする必要は無いな。
136デフォルトの名無しさん:2006/02/08(水) 23:11:46
>>135
kwsk
削除しないと永遠に発生するもんじゃなかったっけ・・・?
137デフォルトの名無しさん:2006/02/08(水) 23:18:23
kwskもへったくれも無い。ヘルプ嫁。
138133:2006/02/08(水) 23:18:58
>>136
同じWindowで同じIDを指定すれば、上書きされる。
139デフォルトの名無しさん:2006/02/08(水) 23:30:59
132です。
TimerProc内でSetTimerを再定義したらそれらしくなりました、
どうもありがとうございます。
140デフォルトの名無しさん:2006/02/09(木) 01:56:45
初歩的な質問ですいません。
WM_COMMANDは、コントロール作成時にも送られてくるのですか?
141デフォルトの名無しさん:2006/02/09(木) 02:08:38
クリップボードの変更は取得できたんですが
ペーストを検出する方法を教えてください。
142デフォルトの名無しさん:2006/02/09(木) 02:18:14
>>126
GetKeyStatとかでできるが、どのキーがどのプロセスで押されたか判断するのは多分無理。

>>129
どうやってプロセスを判断するのかな??^^

143デフォルトの名無しさん:2006/02/09(木) 02:23:16
>>142
キーイベントはプロセス相手ではなくスレッドに属するウィンドウ相手じゃまいか?
getforegroundwindow()でどのウィンドウが対象か調べればいいかとおもお
144デフォルトの名無しさん:2006/02/09(木) 02:31:45
>>143
話の流れをよく嫁。
145デフォルトの名無しさん:2006/02/09(木) 03:07:21
146デフォルトの名無しさん:2006/02/09(木) 04:24:34
>>115
DLLインジェクション使え


>>145
必死だなチンカス

147デフォルトの名無しさん:2006/02/09(木) 08:15:15
ああ必死だな>>146=>>115-
148デフォルトの名無しさん:2006/02/09(木) 08:20:55
>>140
送られてきません
説明読めよ
149デフォルトの名無しさん:2006/02/09(木) 08:28:08
WININETってどうなん?
150デフォルトの名無しさん:2006/02/09(木) 11:03:11
どちらかといえば道北
151デフォルトの名無しさん:2006/02/09(木) 11:43:52
>>150
何故、道央・道東を差しおいて「どちらか」と言うのか?
152デフォルトの名無しさん:2006/02/09(木) 11:47:00
>>150-151
この道産子どもめが!!
153デフォルトの名無しさん:2006/02/09(木) 11:51:17
道産子、道産子言うからどさん子ラーメン食べたくなったじゃねーか
154105:2006/02/09(木) 12:22:00
>>130
お、本当だ!
ありがとう!
155デフォルトの名無しさん:2006/02/09(木) 14:57:18
>>153
お、本当だ!
ありがとう!
156デフォルトの名無しさん:2006/02/09(木) 17:41:42
>>147
証拠を提出してください。
157デフォルトの名無しさん:2006/02/09(木) 18:16:11
急激にスレのしt(ry
158デフォルトの名無しさん:2006/02/09(木) 18:16:24
嫉妬
159デフォルトの名無しさん:2006/02/09(木) 18:43:39
SendInputを使って絶対座標でマウスカーソルを動かしてるんですが、
マルチモニタ環境での場合の絶対座標の指定方法がよくわかりません。

SendInput に渡す MOUSEINPUT 構造体の x, y には 0 から 65535 の数値を指定するようにされているのですが、
その範囲ではプライマリモニタ内でしかカーソルは移動しません。
その値を +65535 するとセカンダリモニタ内でカーソルが移動したり
するのですが、そういう考え方でいいのでしょうか?

つまり、0-65535 の値はプライマリモニタの物理座標(例えば 1024x768)
にマップされ、セカンダリモニタなどはそのプライマリにマップされた
大きさで計算する必要があるという事でしょうか?

説明が下手ですみません。
160デフォルトの名無しさん:2006/02/09(木) 21:18:04
SetPixel(またはSetPixelV)を使うより、メモリを直接制御したほうが早いと、どこかのサイトで見たのですが
そのサイトでは、詳しくは説明されておらず、自分でもできる限り検索などしてみましたが解決できませんでした
SetPixel(またはSetPixelV)が内部的にどのような動作をしているのかを解説したサイトなどご存知の方おられませんか…
よろしくお願いします
161デフォルトの名無しさん:2006/02/09(木) 21:23:17
>>160
つDIBSection
162160:2006/02/09(木) 21:42:21
>>161
失礼しました、SetPixelの実際の使用は

HDC hdc=CreateDC("DISPLAY",NULL,NULL,NULL);
SetPixelV(hdc,1,1,color);

といった感じなので、DIBSectionでは解決できそうにないです。
失礼しました
163デフォルトの名無しさん:2006/02/09(木) 21:59:29
>>162
・・・え?
164デフォルトの名無しさん:2006/02/09(木) 22:07:44
たしかにDIBSectionじゃ画面に直接はかけない罠。
165デフォルトの名無しさん:2006/02/09(木) 22:12:34
何やってんのこのバカ・・・
166デフォルトの名無しさん:2006/02/09(木) 22:36:13
一旦DibSectionに書いてからコピー。
つーか、DibSection相手だとSetPixelしてもそこそこ速かったりするんだけどな。
167デフォルトの名無しさん:2006/02/09(木) 23:34:49
DDB < DIBだから、DIBの方でやった方がいい。
ロードする時、ピクセルにアクセスする場合は、
DDBだけじゃなく、DIBとしてもロードしておく。
168デフォルトの名無しさん:2006/02/10(金) 11:24:21
その不等号は何を比べているんだ?
169デフォルトの名無しさん:2006/02/10(金) 14:40:43
縮小転送するときStretchDIBits関数やSetDIBitsToDevice関数を使うとドライバによってノイズのような輪郭線が出てしまうのですがこれも一旦DIBSectionに自前の縮小アルゴリズムで描いて転送という方法をとるのが一般的なんでしょうか
170デフォルトの名無しさん:2006/02/10(金) 14:44:14
>>169
SetStretchBltMode使って気に入らなきゃ自前でやっちゃって良いんでない?
171169:2006/02/10(金) 14:59:47
>>170
SetStretchBltModeでHALFTONEを指定してブラシ原点の設定(0,0)を行ってもだめでした
表示内容の変更のたびに一度転送を挟むのは無駄な気もしますけど
しょうがないんですね…
172デフォルトの名無しさん:2006/02/10(金) 17:13:26
強いんだよ
173デフォルトの名無しさん:2006/02/10(金) 17:40:20
環境はXPsp2で処理系はBCC5.5.1を使用しています

ところで、デバッグの為にDOS窓を出してそこに結果を出力させたいのですが
fprintf(stderr,"....");としても何も得られません
そこでDOS窓を制御するにはどの様なAPI、または手法が考えられるのでしょうか
174デフォルトの名無しさん:2006/02/10(金) 17:56:00
>>173
AllocConsole();
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
175デフォルトの名無しさん:2006/02/10(金) 18:31:32
wがイヤです
176デフォルトの名無しさん:2006/02/10(金) 18:54:35
w
177デフォルトの名無しさん:2006/02/10(金) 19:25:44
freopen("CONOUT$", "a", stdout);
178デフォルトの名無しさん:2006/02/10(金) 19:43:04
#define wwwwwwww "w"
179デフォルトの名無しさん:2006/02/10(金) 20:08:31
>>173
OutputDebugString
180デフォルトの名無しさん:2006/02/10(金) 20:51:38
質問です。
ヤフーメッセンジャーの話すボタンを押しっぱなしにするツールがありますが
あれはどうやってやってるんでしょうか?

ボタンにWM_LBUTTONDOWNメッセージを送ってやってもマウスをぐりぐり
やってると解除されてしまいます。親ウィンドウにマウスオーバすると確実に駄目。
ボタンへのメッセージを全てフックしてフィルタかけるとか面倒な事をやらなければ
駄目なんでしょうか?
よろしくお願いします。
181デフォルトの名無しさん:2006/02/10(金) 21:05:14
>>180
つ spy++

でまあ、気になったから自分でも調べてみたわけだが、
"話す"ボタンに、BM_SETSTATEを投げているみたい。

実際にメッセージ投げて確かめたわけじゃないけど。
182デフォルトの名無しさん:2006/02/10(金) 21:29:42
>>181
サンクス。
それやって見ます。
あと、SPY++使ってみます。
183デフォルトの名無しさん:2006/02/10(金) 21:36:36
ヤフーメッセンジャーって使ったことないけど
「話す」ボタンが押下された状態はどういうタイミングでクリアされるの?
それを外部から判断できれば、クリアされるたびにメッセージ送れば
押しっぱなしの状態になるけど・・・
184デフォルトの名無しさん:2006/02/10(金) 21:41:22
>>181
バッチリですたd(゚∀゚)b
185デフォルトの名無しさん:2006/02/10(金) 21:43:18
186デフォルトの名無しさん:2006/02/10(金) 21:56:54
>>183
それがあんまりハッキリしないみたい。親ウィンドウにマウスオーバすれば確実に
ボタンは戻るんだけど、そのままボタンのうえにもっていくと押された状態になる。
親ウィンドウにマウスオーバしなくても勝手に戻ったりもする。内部的なイベントが
いろいろ有ると思うし…。

>>185
サンクス。
たまたまヤフーメッセンジャーのIMの話すボタンの実装がそうなっていたとか
使われているRADツール?のボタンコントロールのデフォルトコードがそうなってるのか
とかそんなような事ですかね?

サンクス>>ALL
187デフォルトの名無しさん:2006/02/11(土) 06:45:38
プロセスのメインモジュールのファイル名が与えられた場合にその保持する全ウィンドウのハンドルを取得する方法にはどのようなものがあるでしょうか?

私が今やっている方法は以下の通りです。

1.まず、ツールヘルプで全プロセスを列挙してその中から該当のもののプロセスIDを取得する。

2.GetWindow()を使ってDesktopWindowの子すべてにGetWindowProcessThreadId()をして調べる。

3.2.で見つかったウィンドウの子孫すべてをGetWindow()で取得。

もっといい方法はあるでしょうか?
188デフォルトの名無しさん:2006/02/11(土) 08:17:02
つ EnumThreadWindows
189デフォルトの名無しさん:2006/02/11(土) 18:46:46
エクスプローラ等で選択したファイル名をコンテキストメニューからDragQueryFileを
通じて取得しているのですが、.lnk等のショートカットだとリンク先のファイル名
になってしまいます。.lnkのファイル名を取得する方法を教えてください。

現状は↓の動作結果になっています。
1: .lnk一つだけ選択 → リンク先のファイル名
2: .lnkとそれ以外の拡張子を選択し、.lnk上で右クリック → リンク先のファイル名のみ
3: .lnkとそれ以外の拡張子を選択し、.lnkでないファイル上で右クリック → .lnkのファイル名とそれ以外のファイル名
190デフォルトの名無しさん:2006/02/11(土) 19:44:10
>コンテキストメニューから
?
WM_DROPFILESのハンドラから取得すると普通にC:\... .lnkになってるけど。
逆にリンク先のファイル名にする方法聞きたい。
191デフォルトの名無しさん:2006/02/11(土) 20:42:39
WM_DROPFILESのハンドラじゃなくて
IShellExtInit::InitializeでCF_HDROPを取って、DragQueryFileすると
>>189のようになってる希ガス
192デフォルトの名無しさん:2006/02/11(土) 22:44:27
SetForegroundWindow
SetActiveWindow
SetFocus
BringWindowToTop
の違いとはなんでしょうか?
193デフォルトの名無しさん:2006/02/11(土) 22:58:53
>>192
つMSDN
194デフォルトの名無しさん:2006/02/11(土) 23:02:50
SetForegroundWindow→スレッドごと一番前に持ってくる

SetActiveWindow→呼び出し元アプリ内でのみアクティブになる(フォアグラウンドになるとは限らない)

SetFocus→SetActiveWindowと似たような動きだが、ウィンドウに送られるメッセージが違う

BringWindowToTop→よくわからんけどSetForegroundWindowとたぶん似た感じ
195デフォルトの名無しさん:2006/02/11(土) 23:29:53
つれますか?
196デフォルトの名無しさん:2006/02/11(土) 23:31:29
>>195
うんこは寝て(r
197デフォルトの名無しさん:2006/02/11(土) 23:32:18
次のコードが手元のWin2kでは動くのに、Win98では動きません。

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HDC hdc = CreateCompatibleDC(NULL);
HFONT font = CreateFont(32, 0, 0, 0, 400, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, "MS ゴシック");
HFONT fontOld = (HFONT)SelectObject(hdc, font);

GLYPHMETRICS gm;
ZeroMemory(&gm, sizeof(gm));
static const MAT2 mat = {{0,1}, {0,0}, {0,0}, {0,1}};
DWORD size = GetGlyphOutline(hdc, 'A', GGO_GRAY8_BITMAP, &gm, 0, NULL, &mat);

if(size == GDI_ERROR){
MessageBox(NULL, "GDI_ERROR!!", "ERROR", MB_OK);
}
SelectObject(hdc, fontOld);
DeleteObject(font);
DeleteDC(hdc);
return 0;
}

ちなみにMAT2の前のconstを消すと動きます。これって何なんでしょう。
環境はVS2005とVC6で確認しました。
198デフォルトの名無しさん:2006/02/12(日) 00:26:19
SendNotifyMessageとかPostMessageでウィンドウに送ったメッセージって
たまに届かないとき無いですか?
ウィンドウを移動中とかに送ると届いて無いことが結構ありますよね?
199198:2006/02/12(日) 00:33:57
たぶんメッセージキューがあふれてメッセージが削除されてしまったのだと思うのですけど
こういう場合ってどうしたらいいでしょうか?
別スレッドから重要なメッセージを送ったのに勝手に削除されたら困るんですが
200デフォルトの名無しさん:2006/02/12(日) 01:41:42
NT系だとメッセージキューのキャパはデフォで10000位あって
そう簡単に溢れないと思ったが。
201デフォルトの名無しさん:2006/02/12(日) 08:30:49
ウィンドウ移動終了後に遅れて届いているんじゃね?
202デフォルトの名無しさん:2006/02/12(日) 12:16:11
>199
戻値を確認すればいいんじゃ?
203189:2006/02/12(日) 14:55:28
>>190
>>191の説明通りです。説明不足ですみません。

>>191
仕様ですかね…?
でもこれって条件次第では、例えばユーザが選択したファイルのウィルスチェックが
出来ないことになるわけで(実際に某ソフトで確認済み)、「穴」な気がしますが。
…これでいいのかWindows?
204デフォルトの名無しさん:2006/02/12(日) 16:24:22
>>203
Win の責任なのか?
ある程度知識がある人にはショートカットとリンク先が別物なのは常識だし、
無い人は AutoProtect とか使ってるだろうから、リンクを逆参照した時点で発見出来るじゃん。
205デフォルトの名無しさん:2006/02/12(日) 17:01:08
>>203
WM_DROPFILES を使えばおっけーって事じゃないのか?
206デフォルトの名無しさん:2006/02/12(日) 17:05:32
わざわざショートカット先のファイル名を取得する方法でやっといて、
これでいいのかWindowsも無いもんだ
207デフォルトの名無しさん:2006/02/12(日) 20:27:16
話がかみ合ってない気がする
208デフォルトの名無しさん:2006/02/12(日) 23:45:30
WIN32_STREAM_ID sid;
ZeroMemory(&sid, sizeof(WIN32_STREAM_ID));
DWORD dwStreamHeaderSize = (LPBYTE)&sid.cStreamName - (LPBYTE)&sid+ sid.dwStreamNameSize;


これっておかしくないですか?
209デフォルトの名無しさん:2006/02/12(日) 23:50:29
質問です。
「すれ立てるまでもない〜」でも書き込ませていただきました。

特定のプロセスの起動を制御したいのですが、
そのスマートな方法が思いつきません。

私としては、このプロセスが起動するとき、はじめからスレッドを止めておき、
ユーザーに許可を求めてからスレッドを走らせるようなことをしたいのです。

自分で思いついた方法は

 Kernel32 の代わりのライブラリ Xernel32 をインポートさせる
 このとき、この特定のプロセスはクラック

 Snapshot によってまず起動しているプロセスを取得し、
 その全てのプロセスの CreateProcessA/W を
 DLL遠隔実行+NTヘッダ書き換え方式でフックして、監視する方式

というものですが、上はプログラムに直接手を加え、
下はシステムの誤動作につながる可能性があることからできれば使いたくないと考えております。

どなたか上記以外の方法をご教授願えませんでしょうか?
よろしくお願いいたします。

210デフォルトの名無しさん:2006/02/13(月) 00:14:35
>>208
なにが???

DWORD dwStreamHeaderSize
  = ( (DWORD)(&(sid.cStreamName)) - (DWORD)(&sid) + sid.dwStreamNameSize );

にしろってこと?

211デフォルトの名無しさん:2006/02/13(月) 00:15:12
何?ウイルススキャナの出来損ないでも作ってるの?
そのプロセスのEXEのエントリポイントでも書き換えれば。
212デフォルトの名無しさん:2006/02/13(月) 00:19:39
>>211
先にクラックしておくという意味でしょうか?
213デフォルトの名無しさん:2006/02/13(月) 00:42:55
それをクラックと称するのはどうかとも思うが、そういうこと。
214デフォルトの名無しさん:2006/02/13(月) 00:54:10
>>213
ファイルシステム 上のプログラムは手を加えたくないのです。
わがままですが…。

できれば、そのプログラム起動時には命令を一つも実行させず、
スレッドを止めた状態でユーザーに確認を求め、スレッドを走らせるということをしたいのです。

そのため、CreateProcessA/W、Kernel32 プロキシによるフックを思いついたのですが、
その特定のプログラムが、どのような方法で起動したとしても、
ユーザーの確認を求めることができる状態にしたいのです。

やはりこれ以外の方法はないのでしょうか?
215デフォルトの名無しさん:2006/02/13(月) 01:47:12
で、どのネットゲーをクラックしたいのか
216デフォルトの名無しさん:2006/02/13(月) 05:31:28
話の腰を折るかもしれませんが二つ質問です。

@別のプロセスにある Rich Editに色やフォントを指定して、
文字列を(クリップボード経由ではない方法で)転送するやり方が
知りたいのですが、わかれば教えてください?
ただ文字列を転送することはできましたが、これ以上進みません。

例:ワードパッドに明朝体で青い字を表示させる。

A別のプロセス中でサブクラス化されたコントロールを
解除する方法がわかれば教えてください。

例:「スタートボタン」はサブクラス化されていますが、これを解除する。

両方とも高度な質問だとはわかっていますがよろしくお願いします。
217デフォルトの名無しさん:2006/02/13(月) 08:07:21
>>208

先に0で埋めてるでしょ
0をいくら計算しても0では
218デフォルトの名無しさん:2006/02/13(月) 08:42:54
>>209
要件満たさないけど、ポリシーいじれるなら
起動の抑止は出来たと思う。

ポリシーって内部で何やってんだろうね。
219デフォルトの名無しさん:2006/02/13(月) 08:48:21
>>217
アドレスは0じゃないよ
220≠217:2006/02/13(月) 08:55:49
>>219
サイズの値は0だね。
221デフォルトの名無しさん:2006/02/13(月) 09:20:17
足す意味がないってことか
222デフォルトの名無しさん:2006/02/13(月) 09:24:16
WIN32_STREAM_ID構造体のcStreamNameの直前までのサイズは正しく求められてるけど、
確かに、最後の「+sid.dwStreamNameSize」は意味が無いな
223デフォルトの名無しさん:2006/02/13(月) 15:37:08
ListViewにFocusが北のを簡単に知るには
サブクラス化してWM_SETFOCUS捕まえる以外は方法茄子?
224デフォルトの名無しさん:2006/02/13(月) 15:52:41
つ NM_SETFOCUS
225デフォルトの名無しさん:2006/02/13(月) 15:57:42
ぬああああ、そうだった、そう言えばそんなのあった

どう考えても健忘です
本当にありがとうございました
226デフォルトの名無しさん:2006/02/13(月) 16:13:35
>>208

ttp://www.microsoft.com/japan/msdn/windows/windows2000/ntfs5.asp
MSのサンプルコード鵜呑みにしないように
227デフォルトの名無しさん:2006/02/13(月) 16:50:34
atomとmutexとsemaphoreがあるけど、それぞれどんな用途に使うべきなのか?
二重起動チェックにmutex使ってるけど、いんだろうか?
228デフォルトの名無しさん:2006/02/13(月) 16:53:12
別に悪いことはない
229デフォルトの名無しさん:2006/02/13(月) 19:55:33
こんばんは、
EPSファイルを、GIFファイルに、変更するフリーのDLLないでしょうか。

できれば、EPSを読み込んだあと、GetPixel()とかできるのがよいです・・。



(初心者にC++を教えるスレとの重複投稿です。解決したら、両方のスレに報告させていただきます)
230デフォルトの名無しさん:2006/02/13(月) 19:59:54
(゚д゚)
231デフォルトの名無しさん:2006/02/13(月) 20:00:42
ぼくはまるちしたけどわるくないもん!
232デフォルトの名無しさん:2006/02/13(月) 20:17:32
ぼくはうんちしたけどわるくないもん!
233デフォルトの名無しさん:2006/02/13(月) 20:19:47
うんちした子は家には入れません!
外で反省しなさい!!
234デフォルトの名無しさん:2006/02/13(月) 21:02:10
うんちぽすと
235デフォルトの名無しさん:2006/02/13(月) 21:19:46
>>227
マルチスレッドプログラミング相談室で質問した方が良いんじゃないかとは思うが…。
ttp://pc8.2ch.net/test/read.cgi/tech/1130984585/l50

atomってのが何か知らないけど(critical section?)
mutex
 1つのスレッドだけでロックしたいところが複数あるとき使う。
 複数のスレッドで共有している連結リストに追加する関数と削除する関数がある場合とか。
semaphore
 例えば3つしかないリソースがあって
 A,B,Cがそれぞれ持ってった後にDが欲しいって言ってきたら
 A,B,Cの誰かが返しに来るまで待たせるとか。

つか、本買え、本。


>>229
マルチ云々よりスレ違いの方が問題だろう(しかも両方!)。

>232-234
うんちうんちってそんな楽しいか?ガキだな…。
236デフォルトの名無しさん:2006/02/13(月) 21:38:47
誰だって誰かの子供だよ!
237デフォルトの名無しさん:2006/02/13(月) 21:54:55
>>235
Win32APIのスレに居るくせにATOMってのが何かわからないって・・・本気かおまえ
RegisterClass(Ex)とか使ったことねぇのか
238デフォルトの名無しさん:2006/02/13(月) 22:05:40
正直ATOMはWIN16の範疇だとおもう。
239デフォルトの名無しさん:2006/02/13(月) 22:15:46
>237
は?atomとmutexとsemaphoreが並んで書かれてたから
マルチスレッド絡みの単語で知らないのがあるのかと思っただけだろ。
小文字で書いてあるしな。

大文字小文字の区別は言語仕様の範疇だぞ。
240デフォルトの名無しさん:2006/02/13(月) 22:19:52
うはwwww
241デフォルトの名無しさん:2006/02/13(月) 22:23:08
すごい言い訳w
242デフォルトの名無しさん:2006/02/13(月) 22:43:08
>>239
C/C++と英語・日本語では大文字小文字の使い分け方も違います。

http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/dataexchange/atoms/atomreference/atomfunctions/addatom.asp

> The AddAtom function adds a character string to the local atom table and returns a unique value (an atom) identifying the string.
"an atom"
243デフォルトの名無しさん:2006/02/13(月) 23:27:05
てつわん
244デフォルトの名無しさん:2006/02/13(月) 23:35:44
うんこは寝て食えってば
245デフォルトの名無しさん:2006/02/14(火) 00:35:27
>>229
マルチに回答するのはアレだが、ちょっと気になる話題なので・・・。

GIFに直接変換するものは知らないが、ifepsgs.spiというSusieプラグインならある。
動作にはGhostscriptが必要。ファイル名を渡した場合には一応動くが、
メモリ上のファイルイメージを渡したときにはバグって動かない、
メモリを2回deleteするバグあり、プレビュー付きEPSだと扱えないなど
いくつか問題があった。
しょうがないので、自分でパッチを書いてみたが・・・まあ、マルチだし。
246デフォルトの名無しさん:2006/02/14(火) 00:35:56
チョコのAPI下さい
247デフォルトの名無しさん:2006/02/14(火) 00:39:18
>>246
今年は中止だよ
248デフォルトの名無しさん:2006/02/14(火) 00:43:33
249デフォルトの名無しさん:2006/02/14(火) 00:44:45
SetProcessWorkingSetSize関数について質問があります。
第2第3引数に-1を指定してすることによりメモリの使用量を一時的に減らすことが出来たのですが
これはMSDNに書かれているようにスワップアウトしているだけで
実際の使用量については一切変わっていないのでしょうか?
それとも不必要な部分を解放してくれているのでしょうか?
250デフォルトの名無しさん:2006/02/14(火) 00:50:04
そう書いてあるんだからそうなんだろ
251デフォルトの名無しさん:2006/02/14(火) 00:51:33
質問です。

アクティブウインドウにキー入力を送信するのに
SendInput や keybd_event などがありますが、
一部のウインドウに対しては全く動作してくれません。
SendMessage WM_KeyDownなどでもだめでした。
(おそらくDirectInputで入力を拾っているためだと思います)

しかし、JoyToKeyというフリーソフトではそのようなウインドウに対しても
キー入力を送信できているので、なにかしらいい方法があるはずです。
どのような方法を使えばキー入力を行うことができると思いますか?
252249:2006/02/14(火) 01:10:05
>>250
いやまあそうなんですけど
色々な人がメモリの使用量を抑えるために使っているので
内部では何かされているのかなと。
253デフォルトの名無しさん:2006/02/14(火) 01:30:54
ようするにdeleteやfreeでプログラムからは開放したつもりでも
Windowsからはまだ割り当てたままのヒープブロックがあるわけだ。
スワップアウトする時はそれを最適化する作業がおまけで付いてくるってこと。
254デフォルトの名無しさん:2006/02/14(火) 09:00:30
>>252
> 色々な人がメモリの使用量を抑えるために使っているので

それは、どこでどれだけのサンプルを取って言っているのだ?
最低限、統計学的に見て問題のないサンプル数を取ってのセリフか?
255デフォルトの名無しさん:2006/02/14(火) 09:24:28
お世話になりました
256デフォルトの名無しさん:2006/02/14(火) 09:51:09
お構いもしませんで
257デフォルトの名無しさん:2006/02/14(火) 10:57:47
システムへの負荷度合いを測るAPIって無いですか?
いま、タスクマネージャで計ってるんですが、わかりづらくて。
出来れば時間を追ってログに吐き出したりしたいんですけど。
どうでしょう?
258デフォルトの名無しさん:2006/02/14(火) 11:29:33
>>257
つ NtQuerySystemInformation
259デフォルトの名無しさん:2006/02/14(火) 11:33:29
ご苦労
260デフォルトの名無しさん:2006/02/14(火) 14:24:53
セロで割った例外とかはどうすれば捕まえられますけ?
261デフォルトの名無しさん:2006/02/14(火) 14:26:01
>>260
板違い
262デフォルトの名無しさん:2006/02/14(火) 14:36:38
263デフォルトの名無しさん:2006/02/14(火) 14:40:31
セロで割るってなんだ?
264デフォルトの名無しさん:2006/02/14(火) 14:46:28
on error goto でエラートラップ掛けられます
265デフォルトの名無しさん:2006/02/14(火) 14:46:57 BE:29115353-
>>263
昔、EL&Pとかのプログレバンドが演奏後にギター叩き壊したりしてたろ。
あれのセロ版。オーケストラのチェロ奏者が演奏後に叩き割るんだよ。
266デフォルトの名無しさん:2006/02/14(火) 15:05:29
ELPは鍵盤にナイフを刺す。
267デフォルトの名無しさん:2006/02/14(火) 15:06:51
>>265
セロ「で」割る
268デフォルトの名無しさん:2006/02/14(火) 15:11:12
EL&Pはキーボード、ベース、ドラムの3人組だよ
269デフォルトの名無しさん:2006/02/14(火) 15:12:27
>>265
昔って、、、昔杉w
270デフォルトの名無しさん:2006/02/14(火) 15:30:16 BE:40761173-
>>267
オーケストラのチェロ奏者が演奏後に(セロで他の楽器を)叩き割るんだよ。
271デフォルトの名無しさん:2006/02/14(火) 15:54:40
マジレスするとロマンス諸語の一部では0をCeroと読む。
272デフォルトの名無しさん:2006/02/14(火) 19:00:00
StretchBltで縮小すると、画像がめちゃくちゃ汚いいんですが、こんなときどうしましょう?
273デフォルトの名無しさん:2006/02/14(火) 19:02:28
>>272
プログラム作る前にグラフィックソフトの使い方勉強しれ
274デフォルトの名無しさん:2006/02/14(火) 19:07:05
>>272
StrechBltModeを変更しよう
275272:2006/02/14(火) 19:11:06
>273
>プログラム作る前にグラフィックソフトの使い方勉強しれ
このような的を得ていないつっこみへの対処は、どうしましょう?
276デフォルトの名無しさん:2006/02/14(火) 19:13:19
>>275
手前で的知ってるなら わざわざ質問するなってことだ
277デフォルトの名無しさん:2006/02/14(火) 19:15:51
きたな・いい 【汚いい】

(形)
(1)よごれていていい感じを与える。
「画像がめちゃくちゃ―」

        民明書房提供「大痔林 第二版」より
278デフォルトの名無しさん:2006/02/14(火) 19:20:48
DirectMusic使いたいんですが、
サンプルをコンパイルしようとすると、
未解決の外部シンボル __imp__CoInitialize@4 が…
のエラーが出ます。
CoInitialize()使うのに必要な.h or .lib って何ですか?
279272:2006/02/14(火) 19:25:02
>274
>StrechBltModeを変更しよう
「SetStretchBltMode」で「HALFTONE」を与えることで綺麗になりますた。
ありがとうございます。
280デフォルトの名無しさん:2006/02/14(火) 19:28:14
>>278
なんでMSDNライブラリ見ないの?
281デフォルトの名無しさん:2006/02/14(火) 19:36:32
そもそもSDKのサンプルにはプロジェクトファイルも付いてないか?
282278:2006/02/14(火) 19:45:04
>>280 MSDN内も探しているのですが、どうも見つかりません。。。
>>281 サンプルをビルドしてみたんですが同様のエラーが…。
283278:2006/02/14(火) 19:50:42
すみません。自己解決しました。
ole32.libなんですね。
どっかに.libの一覧表とか無いんでしょうかねぇ。。。
284デフォルトの名無しさん:2006/02/14(火) 19:53:13
MSDNのCoInitializeのところにしっかり書いてあるけど
285デフォルトの名無しさん:2006/02/14(火) 19:53:43
MSDNからCOMのドキュメントがなくなったのかと思って慌てて
見にいっちゃったよ。ちゃんとあってよかった。ε-(´ー`;)
逆にどんな探し方したら見つからないのか知りたい。
286デフォルトの名無しさん:2006/02/14(火) 21:03:08
>>278
MSDNに書いてあるだろ
287デフォルトの名無しさん:2006/02/14(火) 21:58:05
すみません。教えてください。
今、メインのウィンドウ(ダイアログでない)にチェックボックスをベタ貼りするプログラムを書いています。
チェックボックスはCreateWindowでウィンドウクラスを"BUTTON"として生成できることはわかりました。
またスタイルの指定でチェックボックスになることもわかりました。
ただ、どうしても背景色が灰色になってしまうのです。
俺はメインのウィンドウの背景色に合わせたいのですが。
このような場合、チェックボックスの背景色を変える(もしくは透明にする)方法はないのでしょうか。
メインのウィンドウのWM_CREATE:でチェックボックス(hButton)を生成後
HDC hdc = GetDC(hButton);
SetBkColor(hdc, RGB(0,0,0));
のようなことをしても背景色は変わりませんでした。
調べてみるとオーナードローという方法が使えそう(?)ですが、ちょっと大変そうです。
どなたか、簡単に背景色を変える方法を、ヒントだけでも教えてもらえないでしょうか。
よろしくお願い致します。
288287:2006/02/14(火) 22:00:50
すみません。書き忘れました。
環境はWindowsXP、VS2003です。
また、MFCは使わず、SDKで作っています。
289デフォルトの名無しさん:2006/02/14(火) 22:01:51
>>287
「コントロール 背景色 変更 Win32」でググるとかしないの?
290デフォルトの名無しさん:2006/02/14(火) 22:03:01
Windows Picture and FAX Viewer をコントロールしたいのですが、
Preview 1.0 Type Library(shimgvw.dll)を使ってできませんか。

メソッドの使い方はある程度予測つきますが、Previewクラスへ
オブジェクトを得る方法が分かりません。

破損したファイルを読み込むと次の画像に進むボタンの位置が動いて
うまく制御できないので困ってます。

VB板で聞いたらレスつきませんでした。
291デフォルトの名無しさん:2006/02/14(火) 22:41:28
>>289
うるせー、この糞。わかんねーから質問スレで質問してんだろうがよ。
われこそ知らねーなら黙っときや。
292デフォルトの名無しさん:2006/02/14(火) 22:42:24
そういえばgoogleの表紙、まだバレンタインだった?
怖くて見れないんだけど・・・
293デフォルトの名無しさん:2006/02/14(火) 22:43:21
>>292
OK見てくる



アイススケートだった
294デフォルトの名無しさん:2006/02/14(火) 22:44:24
普通のに戻ってるよ
295デフォルトの名無しさん:2006/02/14(火) 22:47:19
>>287
チェックボックスの文字の背景はスタティックコントールの色になってるみたい。
だからWM_CTLCOLORSTATICでブラシを戻すとよいようだよ。
296デフォルトの名無しさん:2006/02/14(火) 22:48:03
>>287-288
WM_CTLCOLOR*

>>291
おまえ287じゃないだろ?
297287:2006/02/14(火) 23:00:18
>>295
ありがとうございました。STATICでうまくいきました。

>>289
誰が読んでも、これは糞。もう出てくんなよ。
298デフォルトの名無しさん:2006/02/14(火) 23:30:13
>>297
糞っていうからどんな検索結果が出てくるのか気になってやってみたけど、
それなりに質問の答えになってるような気がする・・・

http://www.google.co.jp/search?hl=ja&q=%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB+%E8%83%8C%E6%99%AF%E8%89%B2+%E5%A4%89%E6%9B%B4+Win32&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
299デフォルトの名無しさん:2006/02/14(火) 23:39:02
>>298
確かに答えになってるね。
287=291=292=297で、この時期googleが見れないから質問したってとこか。
300デフォルトの名無しさん:2006/02/14(火) 23:40:01
キレる若者!多発する少年犯罪!眠らない街歌舞伎町!!!
301デフォルトの名無しさん:2006/02/14(火) 23:40:16
誰かわかる方教えて頂けないでしょうか。

マウスカーソルについてなんですが、エクスプローラなどでctrlキーを押しながらドラッグアンドドロップするとカーソルに[+]記号が追加されますが、あれはどのように実現しているかわかる方いませんか?
302デフォルトの名無しさん:2006/02/14(火) 23:44:46
298=299=300
303299:2006/02/14(火) 23:54:26
>>302
残念!299は別人でした。しかしそう見えるなw
これだけだとあれなので、ついでに回答。
>>301
LoadCursorとかじゃないかな。
304デフォルトの名無しさん:2006/02/14(火) 23:59:01
>>301
追加されんるじゃなく、[+]がついたカーソルを使っているだけ。
普段は矢印で、ちょっと時間がかかる処理では、砂時計とかに変えたことは
ないの? SetCursor() だと思ったけど。
305デフォルトの名無しさん:2006/02/15(水) 00:00:45
>>301
アレと同じ形のカーソルリソースを用意して
WM_SETCURSORでSetCursorを呼び出す
306デフォルトの名無しさん:2006/02/15(水) 00:08:43
MessageBoxのOKだけ出るダイアログに独自のボタンを一つ追加して、
そのボタンを押したら何かこちらで処理できるようなことは可能ですか?
307デフォルトの名無しさん:2006/02/15(水) 00:11:26
>>304-305
[+] は*.lnkと一緒であとから追加されてると思われ。
そんなカーソル見当たらんし。
308デフォルトの名無しさん:2006/02/15(水) 00:13:39
>>306
MessageBoxを独自に作るのが一番早いかと
309デフォルトの名無しさん:2006/02/15(水) 00:14:15
>>308
わかりました。
ありがとうございました。
310デフォルトの名無しさん:2006/02/15(水) 00:20:48
>>302
はい、300も別人でした。
これだけだとあれなので、ついでに回答。

>>306
要らないと思うけど一応こんなのもあるみたい。
A reverse-engineered MessageBox()
http://www.codeproject.com/dialog/xmessagebox.asp
311301:2006/02/15(水) 00:22:33
>>304, 305
システム標準のマウスカーソルの形を変えても、
エクスプローラでは、その変えたカーソルにも[+]記号が追加されるので、
ImageListかなにかかと思ったんですけど違いますか?
ベッキー等では、システム標準のカーソルに関係なく、決まった形の
アイコンに[+]が付いてくるので、それはそのやり方なのかなと思いますが。。

わかる方いませんでしょうか?


312デフォルトの名無しさん:2006/02/15(水) 01:23:28
Sleipnir2 みたいなマウスを重ねると青い枠が出てくるような
ボタンとかメニューは自前での実装ですか?
それともWindowsでそうゆうコントロールを用意してるんでしょうか?
313デフォルトの名無しさん:2006/02/15(水) 01:39:51
>>312
自前です。
314デフォルトの名無しさん:2006/02/15(水) 03:01:28
ファイル名を渡してExplorerのコンテキストメニュー出すAPI教えてください。
315デフォルトの名無しさん:2006/02/15(水) 08:43:06
質問です。

Handle= CreateWindowEx(
WS_EX_CLIENTEDGE,WC_LISTVIEW,NULL,
WS_CHILD|LVS_REPORT|LVS_EDITLABELS,
PosX,PosY,Width,Height,
GetDesktopWindow(),(HMENU)id,
GetModuleHandle(NULL),NULL);

でリストビュー作った後にSetParent( Handle, ParentHandle )で
親指定するとWM_NOTIFYメッセージを親に渡してくれないんですが
なんか他にセットすることがあるんでしょうか?
WM_PARENTNOTIFYは渡してるみたいなんですが……。
316デフォルトの名無しさん:2006/02/15(水) 14:38:38
ネットワークの接続状態はどうやって確認したらいいの?
317デフォルトの名無しさん:2006/02/15(水) 15:20:05
>>311
ショートカットのアイコンは編集しているみたいだから、カーソルも作ってるのでは
ないか。LoadCursorFromFile() などあるから編集してロードして表示できるのは
確か。編集は bitmap が作れれば、アイコンやカーソルにするのはそんなに面倒でも
ない。
318デフォルトの名無しさん:2006/02/15(水) 15:32:37
メニューやウィンドウのタイトルバー等に使われている
フォントについての情報を取得する方法はありますか?
319デフォルトの名無しさん:2006/02/15(水) 16:03:20 BE:122283779-
GetFont
320デフォルトの名無しさん:2006/02/15(水) 16:28:13
>>315
WM_NOTIFY は SetParent() の実行にかかわらずコントロール作成時の親に送信される。
WM_NOTIFY の送信先を変更する一般的な方法はおそらく存在しない。
321デフォルトの名無しさん:2006/02/15(水) 17:05:10
>>316
IP Helperを使う。接続しているアダプタ一覧は以下のようにして得る
DWORD size;
GetIfTable(NULL, &size, FALSE);
PMIB_IFTABLE pIf = malloc(size);
GetIfTable(pIf, &size, FALSE);
for(DWORD i = 0; i < pIf->dwNumEntries; i++){
if (pIf->table[i].dwOperStatus == MIB_IF_OPER_STATUS_CONNECTED){
printf("CONNECTED Interface: %s\n", pIf->table[i].bDescr);
}
}
free(pIf);
322315:2006/02/15(水) 17:09:37
>>320
ありゃーそうなのか。
じゃあ親はあらかじめ渡すようにします。
モヤモヤが解消されたので安心。ありがとうございました。
323デフォルトの名無しさん:2006/02/15(水) 17:42:47
なぜ最初から親を指定しないのか・・・
324デフォルトの名無しさん:2006/02/15(水) 17:46:23
いいじゃないですか。
325デフォルトの名無しさん:2006/02/15(水) 18:01:58
>>318
SPI_GETNONCLIENTMETRICS
326318:2006/02/15(水) 19:23:28
>>325
まさにそれです。ありがとうございました。
327306:2006/02/15(水) 20:27:31
>>310
ありがとうございます!
ばっちり使えました。
328デフォルトの名無しさん:2006/02/15(水) 21:17:53
質問です。
アプリケーションのメインアイコンを変更するには
そのアプリのリソースを追加・変更するしか方法がないのでしょうか?
アイコンを外部ファイルとして持っておきたいのですが。
329デフォルトの名無しさん:2006/02/15(水) 21:20:25
あ、質問の内容が不完全でした。
アプリケーションというか、
エクスプローラー等から見えるそのアプリのexeファイルの
アイコンを変えたいのです。
330デフォルトの名無しさん:2006/02/15(水) 21:53:42
>>316
ネットに接続されているか確認するだけなら、HTTPハンドルを使って適当なサイトに接続すればいい。
接続できればネットにつながってると。
331デフォルトの名無しさん:2006/02/15(水) 21:56:12
332デフォルトの名無しさん:2006/02/15(水) 22:28:40
サブストリームの名前がMAX_PATHを超えることはありますか?
333287:2006/02/15(水) 23:23:37
はげしく遅レスだしもうどうでもいいけど。
>>298
>それなりに質問の答えになってるような気がする・・・
答になってねーよ。どこにチェックボックスのことが書いてあるよ?マヌケ。
おまえ>>289だろ。心を入れ替えてくだらんレスはやめとけ。
334デフォルトの名無しさん:2006/02/15(水) 23:29:33
>>333
遅漏の上に粘着と来たか・・・
そうとう腐ってるな?
335デフォルトの名無しさん:2006/02/15(水) 23:32:33
>>287さん
>>298==>>299==>>300さん
>>334さん
荒らすのやめましょうよ。
336デフォルトの名無しさん:2006/02/15(水) 23:39:22
指定のドライブが書き込み可能かどうか調べる方法ってありますか?
337デフォルトの名無しさん:2006/02/15(水) 23:51:29
GetFileAttributes("c:\\")
338デフォルトの名無しさん:2006/02/16(木) 00:19:14
>>337
ありがとうございました。
339デフォルトの名無しさん:2006/02/16(木) 02:06:54
>>331
それ使うのダイアルアップ接続の画面出たりしてマズくね?
340デフォルトの名無しさん:2006/02/16(木) 08:37:52
>>332

ない
341デフォルトの名無しさん:2006/02/16(木) 10:55:05
>>339
でるの?俺常時接続なもんでわからなくて。
342デフォルトの名無しさん:2006/02/16(木) 11:09:57
>>341
PPPoEなダイヤルアップで今試したら出た。
343デフォルトの名無しさん:2006/02/16(木) 17:41:55
>>342
InternetGetConnectedState()だとどうでそ。
344デフォルトの名無しさん:2006/02/16(木) 18:52:45
じゃぁおれはpingでも進めてみるka
345デフォルトの名無しさん:2006/02/16(木) 19:16:32
316が求めてるのは
1)どのインターフェースでもいいからインターネットに接続されているか知りたい
2)各インターフェースのうちどれがインターネットかどうか関係なく接続状態なっているか知りたい
3)各インターフェースのうちどれがインターネットに接続されているか知りたい
どれなんだろ?
1)なら>>342、2)なら>>321じゃないかと思うんだが、とりあえず316を待ってみね?
346デフォルトの名無しさん:2006/02/16(木) 19:18:27
本人はそんなこともわかっていないと思われ。
347デフォルトの名無しさん:2006/02/16(木) 19:18:33
げ、アンカーミスった。1)なら>>343な。無駄レスすまん
348デフォルトの名無しさん:2006/02/16(木) 19:19:51
ネットワークと書いてあるようだけど
349デフォルトの名無しさん:2006/02/16(木) 20:17:36
MessageBoxのMB_ICONINFORMATION、MB_ICONSTOPとかで出てくるアイコンを自前作ったダイアログで表示させたいんだけども、
参考になるサンプルでもないでしょうか?
よろしくお願いします。
350デフォルトの名無しさん:2006/02/16(木) 20:40:31
ちょっと印刷のことで質問を。
Crystal Report 4.6の帳票印刷してるのですが、
指定した用紙サイズで印刷されない、フォントが急に大きくなるなどの現象に苦しんでいます。
環境は
・プリンタはドット
・帳票の種類が多く、用紙のサイズも多様。
・共有プリンタで複数端末から印刷ジョブを送る。OSは2000/XP中心に色々。
 印刷をする頻度もかなり高い。
・印刷時にダイアログを出して用紙を選択させるのはNG
SetPrinterで用紙を変更しているんですが、3行目に書いたような現象が出て死に掛けました。

用紙サイズの変更とかトラブルなく行うのってどうやればいいんですかね・・・
ちょっとしたアドバイスとか、参考文献の紹介とかでもいいのでなんかお願いします・・・
351デフォルトの名無しさん:2006/02/16(木) 20:43:37
>>349
user32.dllから取り出せば?
352デフォルトの名無しさん:2006/02/16(木) 21:13:58
>>349
LoadIcon()のヘルプ見れ
例えばIDI_ASTERISKとか
353デフォルトの名無しさん:2006/02/16(木) 21:20:51
そこでIDI_INFORMATIONと言わずIDI_ASTERISKというところがなんとも
354デフォルトの名無しさん:2006/02/16(木) 21:27:51
>>342
うは。サンクス。ちょと修正してくる。

>>343
それ試してみる。
355デフォルトの名無しさん:2006/02/17(金) 15:25:25
>>332

上限無しじゃない
少なくとも512文字は作れた
356デフォルトの名無しさん:2006/02/17(金) 16:10:27
ウィンドウを最小化する時
アニメーション(枠線がタスクバーに収まるやつ)させたくないんですが
何か方法ありますか?
357デフォルトの名無しさん:2006/02/17(金) 16:17:36
>>356
デスクトップを右クリックしてプロパティ(以下略
358デフォルトの名無しさん:2006/02/17(金) 16:26:32
>>357
APIでどうにかしたいんです
というか、
自己解決しかけてます

WM_COMMANDのSC_MINIMAIZEで
消せばいいかもしれない
359デフォルトの名無しさん:2006/02/17(金) 16:28:23
>>358
そのアプリケーションだけUIが違うっていうのがそもそも間違いかと
もし不可視にしようとしてるなら、やめておいたほうが良いぞ
360デフォルトの名無しさん:2006/02/17(金) 16:31:10
よく考えたら
最小化どうでもよかった。

DelphiかBuilderアプリってそんな感じなので
別にいいかと思った

おしまい。
361デフォルトの名無しさん:2006/02/17(金) 16:35:10
っ [タスクトレイ]
362デフォルトの名無しさん:2006/02/17(金) 16:41:41
つ ダミーウィンドウ?
363デフォルトの名無しさん:2006/02/17(金) 16:54:16
>>362
これに近いかな?

隠し親ウィンドウ
364デフォルトの名無しさん:2006/02/17(金) 17:08:32
リストボックスで、現在選択中の項目が何番目かって、どう知ればいいですか?
365デフォルトの名無しさん:2006/02/17(金) 17:17:11
>>364
げtくrせl
366& ◆faj.9Iowjo :2006/02/17(金) 17:35:23
>>365
-1が返ってくる
367デフォルトの名無しさん:2006/02/17(金) 17:35:31
何かと思った。「げっとかーせる」だなw
368デフォルトの名無しさん:2006/02/17(金) 17:36:05
-1なのは未選択状態
369364:2006/02/17(金) 17:41:38
できた。ありがとう。
370デフォルトの名無しさん:2006/02/17(金) 17:42:06
>>366
LB_GETCURSEL
Send an LB_GETCURSEL message to retrieve the index of the currently selected item, if any, in a single-selection list box.

LB_GETCURSEL
wParam = 0; // not used; must be zero
lParam = 0; // not used; must be zero

Parameters
This message has no parameters.

Return Values
In a single-selection list box, the return value is the zero-based index of the currently selected item. If there is no selection, the return value is LB_ERR.

371364:2006/02/17(金) 18:00:37
もう1つ聞きたいんだけど、
環境変数をセットする時みたいなリストって、
あれはなんていうの?
2次元配列的にリスト作れるやつ。
372デフォルトの名無しさん:2006/02/17(金) 18:06:09
環境変数をセットするダイアログを見に行ってしまった・・・
あれはリストコントロールのレポートビューだよ
373デフォルトの名無しさん:2006/02/17(金) 18:07:44
>>372
おまえエスパーだろ
>>371が何を伝えようとしてるのかわからなかったぞ…
374371:2006/02/17(金) 18:25:59
>>372
ありがとう、わかりました。
375371:2006/02/17(金) 19:38:08
また質問。
コモンダイアログの「名前を付けて保存」で、
lpstrFileに保存名を入れると思うんだけど、
入力した文字列をどうやって取得したらいいですか?
376デフォルトの名無しさん:2006/02/17(金) 19:41:25
ハァ?
strcpyでもなんでもしろや
377375:2006/02/17(金) 19:50:13
>>376
何を参照すればいいのかわからないため、strcpyできんのです。
378デフォルトの名無しさん:2006/02/17(金) 19:52:07 BE:62112184-
MSDN見ろよ
379デフォルトの名無しさん:2006/02/17(金) 19:52:10
同じ物を参照汁
380375:2006/02/17(金) 20:06:27
>>379
同じものとは?すみません、本当にわからなくて困ってます。
381デフォルトの名無しさん:2006/02/17(金) 20:11:16 BE:139752689-
Pointer to a buffer that contains a file name used to initialize the File Name edit control. The first character of this buffer must be NULL if initialization is not necessary.

When the GetOpenFileName or GetSaveFileName function returns successfully, this buffer contains the drive designator, path, file name, and extension of the selected file.
382親切な俺:2006/02/17(金) 20:16:05
ファイル名を含むバッファへの指針は以前はよくFile Nameエディット・コントロールを初期化していました。
初期化は必要でないなら、このバッファの最初のキャラクタがNULLであるに違いありません。

GetOpenFileNameかGetSaveFileName機能が首尾よく戻るとき、このバッファは選択された
ファイルのドライブ指示子、経路、ファイル名、および拡大を含んでいます。
383は@ c178.016.c3-net.ne.jp ◆cplnFO9T0I :2006/02/17(金) 20:21:16 BE:121046764-
指定したフォルダからファイルリストを取得する方法ってありますか?
出来たら作成日時とかも取得できるといいです。
384デフォルトの名無しさん:2006/02/17(金) 20:26:55
>>383
王道としてはFindFirstFile方面>ファイルリスト
385デフォルトの名無しさん:2006/02/17(金) 20:41:46
파일 이름을 초기화하기 위하여 이용되는 파일 이름을
포함하는 완충기에 포인터는 통제를 편집한다.
초기 설정이 필요하지 않으면 이 완충기의 첫번째
특성은 무효 이어야 한다.
GetOpenFileName또는GetSaveFileName기능이
성공적으로 돌려보낼 때, 이 완충기는 선정한
파일의 드라이브 지명자, 경로, 파일 이름,
및 연장을 포함한다.
386デフォルトの名無しさん:2006/02/17(金) 20:51:20
意味不明なきちゃない記号が表示されてるよ
387デフォルトの名無しさん:2006/02/17(金) 20:51:59
>>385
それ、なんて日本語?
388デフォルトの名無しさん:2006/02/17(金) 21:10:50
>>386
謝罪と賠償を要求する
389デフォルトの名無しさん:2006/02/17(金) 22:14:31
エクスプローラーの機能を拡張することってできますか?
390デフォルトの名無しさん:2006/02/17(金) 22:21:55
>>389
シェルエクステンション
391デフォルトの名無しさん:2006/02/17(金) 23:36:05
http://www.print-driver.com/
ここで販売されているような、
あたかも通常のプリンタで印刷するかの操作で、
GIFファイルを作成できるようなプリンタドライバ(?)を
作りたいと考えております。(スレ違いでしたら、申し訳御座いません。)

どなたか、上記のような所謂バーチャルプリンタとでもいいましょうか、
そのようなアプリケーション又はドライバ又はiniファイルなどの作り方、導入方法をご存知な方がいらっしゃいましたら、
教えてください。おながいします。

スレ違いでしたら、導いてください○rz...
392デフォルトの名無しさん:2006/02/17(金) 23:55:36
>>391
DDK
393は@ c178.016.c3-net.ne.jp ◆cplnFO9T0I :2006/02/18(土) 00:24:47 BE:282442087-
>>384
最初どの様に結果が出るのか解らなかったんですが、
2番目の引数に設定したWIN32_FIND_DATA型で帰ってくるんですね。
瞬答ありがとうございました。
394デフォルトの名無しさん:2006/02/18(土) 00:56:10
VisualStudioで、非MFCで、C++なアプリの場合、文字列クラスはどうするもんなんですか?
atlstr.h(CString) でも string でも好きな方使えやって感じでしょうか?
395デフォルトの名無しさん:2006/02/18(土) 00:57:43
オープンしたソケットで利用中のNICのMACアドレスを得る方法はありますでしょうか?
接続元、接続先のMACアドレスどちらでもかまいません。
396デフォルトの名無しさん:2006/02/18(土) 00:57:50
スレ違い。
397デフォルトの名無しさん:2006/02/18(土) 02:09:34
WinAPIは永遠に不滅です。
398は@ c178.016.c3-net.ne.jp ◆cplnFO9T0I :2006/02/18(土) 02:23:33 BE:70610472-
ふと気になったんですが、FindNextFileでファイルの情報を見ていった後
全部のファイルを列挙し終わったことを検知するのにはどうすればいいんでしょうか?
399デフォルトの名無しさん:2006/02/18(土) 02:30:34
MSDNに書いてるだろ
400デフォルトの名無しさん:2006/02/18(土) 02:33:08
もしくは、ぐぐれ
401デフォルトの名無しさん:2006/02/18(土) 03:40:11
列挙中にディレクトリに新規ファイルを作成するなどしてハマッただけだろ。
402デフォルトの名無しさん:2006/02/18(土) 07:53:09
リストビューコントロール(SysListView32)を単独でCreateWindowして使っています。何かの子ウィンドウにはしていません。

A) 現在選択されているアイテムのインデックス番号を取得するにはどうしたらよいのでしょうか? (LVS_SINGLESELでたった一つしか選択できないようにしています。)

リストボックスの場合はLB_GETCURSELメッセージで取得できました。

でもリストビューにはそれに相当するものが見当たりません。

思いつくのはLVM_GETITEMメッセージで全アイテムを一つ一つstate & LVIS_SELECTEDチェックする、というものですが、ちょっとバカみたいな気がするのですが・・・

B) あと、カラムヘッダの部分を右クリックすると暴走してしまうんですが、これはCOMCTL32のバグなんでしょうか? リストビューを他のウィンドウの子ウィンドウにしていると暴走しないみたいなんですが・・・Win98+IE5.5でもWin2000+IE6.0でもそうなります。

以下、選択アイテム検出部がリストボックスのものになっています。

#include <windows.h>
#include <stdio.h>
#include <commctrl.h>
void main(){
  HINSTANCE hInst = GetModuleHandleA(NULL);
  InitCommonControls();
  HWND hwnd = CreateWindowA("SysListView32", "LIST", WS_VISIBLE | LVS_REPORT | LVS_SINGLESEL, 20, 20, 200, 180, NULL, NULL, hInst, NULL);
  if (hwnd == NULL){
    printf("CreateWindow() error\n");
    exit(-1);
  }
403デフォルトの名無しさん:2006/02/18(土) 07:57:03
  SendMessageA(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
  LVCOLUMNA column;
  column.mask = LVCF_TEXT | LVCF_WIDTH;
  column.cx = 48;
  column.pszText = "No.";
  SendMessageA(hwnd, LVM_INSERTCOLUMNA, 0, (LPARAM)&column);
  column.pszText = "Name";
  SendMessageA(hwnd, LVM_INSERTCOLUMNA, 1, (LPARAM)&column);
  LVITEMA item;
  item.iItem = 0;
  item.iSubItem = 0;
  item.mask = LVIF_TEXT;
  item.pszText = "0";
  SendMessageA(hwnd, LVM_INSERTITEMA, 0, (LPARAM)&item);
  item.iItem = 1;
  item.pszText = "1";
  SendMessageA(hwnd, LVM_INSERTITEMA, 0, (LPARAM)&item);
  item.iItem = 2;
  item.pszText = "2";
  SendMessageA(hwnd, LVM_INSERTITEMA, 0, (LPARAM)&item);
404デフォルトの名無しさん:2006/02/18(土) 07:57:38
 item.iSubItem = 1;
  item.pszText = "a";
  SendMessageA(hwnd, LVM_SETITEMTEXT, 0, (LPARAM)&item);
  item.pszText = "b";
  SendMessageA(hwnd, LVM_SETITEMTEXT, 1, (LPARAM)&item);
  item.pszText = "c";
  SendMessageA(hwnd, LVM_SETITEMTEXT, 2, (LPARAM)&item);
  MSG msg;
  for(;;){
    GetMessage(&msg, NULL, 0, 0);
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    if ((msg.message == WM_KEYDOWN) && (msg.wParam == VK_RETURN)){
      LRESULT index = SendMessageA(hwnd, LB_GETCURSEL, 0, 0);
    }
    if (msg.message == WM_SYSCOMMAND){
      if (msg.wParam == SC_CLOSE){
        exit(0);
      }
    }
  }
}
405デフォルトの名無しさん:2006/02/18(土) 08:04:19
>>402
> A) 現在選択されているアイテムのインデックス番号を取得するにはどうしたらよいのでしょうか? (LVS_SINGLESELでたった一つしか選択できないようにしています。)
LVM_GETNEXTITEM
406デフォルトの名無しさん:2006/02/18(土) 08:12:38
>>402
子ウィンドウじゃないなんてアリエナイ
407デフォルトの名無しさん:2006/02/18(土) 08:14:42
コンソールアプリとして作ってるとか、バカじゃねーの・・・
408デフォルトの名無しさん:2006/02/18(土) 08:15:42
メッセージループも無駄が多いな
409デフォルトの名無しさん:2006/02/18(土) 08:49:19
>>394

LPTSTR
410デフォルトの名無しさん:2006/02/18(土) 10:00:12
>>394
WinAPIスレとしてはstd::stringを使うなら、
それよりもstd::basic_string<TCHAR>を使えと言っておく。
411デフォルトの名無しさん:2006/02/18(土) 15:41:19
ttp://msdn.microsoft.com/library/en-us/vccore/html/_core_.2f.section_link.asp?frame=true
section name に使える文字と字数の上限は何でしょうか?
412デフォルトの名無しさん:2006/02/18(土) 16:24:53
>>411
ASCII8byteじゃなかったかな
413デフォルトの名無しさん:2006/02/18(土) 19:42:30
// 画面消去
HBRUSH oldbr = (HBRUSH)SelectObject(g_hdcOff, g_hbrBg);
SelectObject(g_hdcOff, GetStockObject(WHITE_BRUSH));
Rectangle(g_hdcOff, -1, -1, CLIENT_WIDTH+1, CLIENT_HEIGHT+1);
SelectObject(g_hdcOff, oldbr);


でうまく画像が消去できません」。
ヘルプ
414デフォルトの名無しさん:2006/02/18(土) 19:46:13
>>413
左上は(0,0)の筈だが(-1,-1)ってどこから書きたいんだ?
415デフォルトの名無しさん:2006/02/18(土) 19:49:26
>>413
FillRectはつかわんの?
416デフォルトの名無しさん:2006/02/18(土) 19:58:52
ExtTextOut
417デフォルトの名無しさん:2006/02/18(土) 19:59:38
まずは各APIの戻り値を調べるべきだな。
418デフォルトの名無しさん:2006/02/18(土) 20:57:20
SetWindowsHookExのWH_SHELLを用いて
ウィンドウの作成/破棄されたかどうか調べているのですが、
一部のアプリケーションについては、
HSHELL_WINDOWCREATEDは送られてくるのですが、
HSHELL_WINDOWDESTROYEDは送られてきません。
また、両方とも送られてこないアプリケーションも存在します (例えば cmd.exe)。

送られてこない原因は何なのでしょうか?
また他の方法でウィンドウの作成/破棄を調べることはできるでしょうか?
419418:2006/02/18(土) 21:19:31
WH_SHELLの代わりにWH_CBTで試してみましたが、結果は変わりませんでした。
420デフォルトの名無しさん:2006/02/18(土) 22:06:57
TextOut(g_hdcOff, i2*cs, i*cs, str, (int)strlen(str));


で文字が正常に表示されません!
低い確率で、ちゃんと表示さてるときはあります。
ヘルプー
421デフォルトの名無しさん:2006/02/18(土) 22:08:05
帰れカス
422デフォルトの名無しさん:2006/02/18(土) 22:10:56
>>420
引数のそれぞれが適切な値か確かめてみる。
GetLastErrorで何が返ってくるか確かめる。

これくらいをまずやってから来い。
423デフォルトの名無しさん:2006/02/18(土) 22:15:56
あと「正常に表示されない」じゃなく、症状を具体的に他人にもわかるように書く事。
「腹が痛い」だけで原因を突き止められる医者はいないだろ?
424デフォルトの名無しさん:2006/02/18(土) 22:26:31
文字化けみたいなかんじで、表示される文字が変わってしまいます。

http://read.kir.jp/file/read38074.txt
ソースです
425デフォルトの名無しさん:2006/02/18(土) 22:35:07
CreateFontのパラメータが良くない可能性が高い。
特に理由が無い限りCreatePointFontを使う方が確実で簡単。
426デフォルトの名無しさん:2006/02/18(土) 22:47:34
falseとFALSEを混同するのはよくないよ。
427デフォルトの名無しさん:2006/02/18(土) 22:54:56
な直りましt!!!!!!!!!!!!!!!!!!!!!

どうやら確保していた変数の量を超えていたらしいです!


オーバーフローっていのかな?


うぉぉぉぉ!!!!
俺っておばかチン!


ハッハッハハハハハハッハア
正義は勝つ!!
428デフォルトの名無しさん:2006/02/18(土) 23:00:04
( ゚キリル゚) ・・・
429デフォルトの名無しさん:2006/02/18(土) 23:02:58
だから死ねって
430デフォルトの名無しさん:2006/02/19(日) 00:06:09
窓出してメモコントロール表示するところまではいったんですが
ウィンドウの下側に貼り付ける方法とスプリッターの出し方がわかりません。
これってどちらもウィンドウのリサイズとかを検出して
自前で実装する物なんでしょうか?
431デフォルトの名無しさん:2006/02/19(日) 00:38:22
editコントロールで数字のみ入力を受け付けることができるようにするには、
どうすればいいですか?
432デフォルトの名無しさん:2006/02/19(日) 00:42:21
すぐ上にSTATICコントロールを置いておき
「↓数字だけ入れてね」とでも書いておく
433デフォルトの名無しさん:2006/02/19(日) 00:51:20
>>431
スタイルにES_NUMBER付けとけばとりあえず数字以外の入力の抑止はできるが
コピペは抑止できないので、後はごにょごにょする。
めんどくさければ432の如く
434デフォルトの名無しさん:2006/02/19(日) 00:56:59
>>432 は天才だと思う
435431:2006/02/19(日) 01:14:13
432さん、433さんありがとうございます。
一応432さん提案のコメントも置いておきますが、
無法者もいるとおもいますので、
433さんにごにょごにょを教えていただきたいです。
436デフォルトの名無しさん:2006/02/19(日) 02:04:15
サブクラス化
437433:2006/02/19(日) 02:09:24
>>435
貼り付けで考えられるのは
1.Ctrl+Vで貼り付け
2.右クリックメニューから貼り付け
3.別のプログラムからWM_SETTEXTで無理やり入力

1.WM_CHARで数字以外の入力は全てはじく
(CTRL+Vは抑止できるが、CTRL+C,CTRL+X,CTRL+Zも使えなくなるので
 その動作を残したければその点も考慮にいれて書く)
2.WM_CONTEXTMENUで抑止してしまう(コピー等もできなくなるが・・・)
3.これは考えなくてもいいと思うけど一応

あと、EN_CHANGEでチェックするのもありか?

MFCベースのサンプルがいろいろあるから
あとは適当に参考にしてやってください。
ttp://www.codeproject.com/editctrl/
438431:2006/02/19(日) 02:23:46
ありがとうございました。
結構手間がかかるようですが、
なんとかやれそうです。
439デフォルトの名無しさん:2006/02/19(日) 02:23:46
>>430
どちらもAPIでは用意されていない。
440デフォルトの名無しさん:2006/02/19(日) 02:25:21
コントロールに表示されるフォントの種類やサイズはどうすれば変えられますかね?
SelectObjectを使ってできたりするんでしょうか?
441デフォルトの名無しさん:2006/02/19(日) 02:26:02
>>391
>>392も書いてるけど要DDKだし
↓あたりで
【WDM】Windows Driver Model相談室【デバドラ】
http://pc8.2ch.net/test/read.cgi/tech/1063453024/
442デフォルトの名無しさん:2006/02/19(日) 08:14:24
>>440
CreateFont
あとは自分で
443デフォルトの名無しさん:2006/02/19(日) 10:21:50
MFCや.NET Frameworkは使わず、
API直使用でMDIのアプリ(と言ってもMDIのフレームとドキュメントウィンドウが出るだけ)を作りました
そのフレームにCreateToolbarExでツールバーをつけたのですが、
その状態でドキュメントウィンドウを作ると、初期位置でタイトルバーがツールバーの下に隠れてしまいます。

ツールバー付きのMDIアプリって、どうやって位置調整してるのでしょうか?
やっぱりMDICLIENTのサブクラス化ですかね?
444デフォルトの名無しさん:2006/02/19(日) 12:45:13
>>440
WM_SETFONT
445440:2006/02/19(日) 14:51:53
>>444
うひょー
ありがとう
446デフォルトの名無しさん:2006/02/19(日) 16:08:59
>>443
猫でも分かる...に例がある。tool bar の高さで調整したと思う。
SizeWindow() で加味したはず。
この部分は何年も前のソースを今も使いまわしていて、どうしているか
気にもしなくなった。
447443:2006/02/19(日) 18:35:17
>>446
ありがとうございます、後で見てみます
448デフォルトの名無しさん:2006/02/19(日) 19:32:37
警告 W8057 first.cpp 31: パラメータ 'hPrevInst' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
警告 W8057 first.cpp 31: パラメータ 'lpsCmdLine' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_main' が未解決(F:\PROGRAM FILES\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
上のような警告やエラーが出てきてexeファイルが作られません。
どうすればいいでしょう。ソースは猫でもわかる...のwebサイトからとってきたので間違いはないと思います。
449デフォルトの名無しさん:2006/02/19(日) 19:35:46
450448:2006/02/19(日) 19:46:11
>>449
ありがとうございました。解決しました。
451デフォルトの名無しさん:2006/02/19(日) 20:06:50
>>448
その警告はC++ならこのように仮引数の名前を与えなければよい。
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE, PSTR, int nCmdShow)
452デフォルトの名無しさん:2006/02/19(日) 23:48:48
FILE, fopen, fgets, EOFに相当するAPIってありますか?
Cなのにこれらの関数が使えません><
453デフォルトの名無しさん:2006/02/19(日) 23:57:01
>>452
何故使えない?
それはともかくそれぞれAPIでやるとなると
HANDLE, CreateFile, ReadFile(行単位でなくfreadに近い), ReadFileを呼んで判断するとなる。
454デフォルトの名無しさん:2006/02/20(月) 00:49:55
なぜ使えないのか凄く興味あるw
#include<stdio.h>してる?パスは通っている?
あと質問するは、なんてエラーが出てるか書こうね。
455デフォルトの名無しさん:2006/02/20(月) 06:57:56
おそらくWindowsCEだな。
本見るとつかえるようなつかえないようなよくわからん表現になってるw
だから、とりあえず使わないでおこうかってなるw
456デフォルトの名無しさん:2006/02/20(月) 08:33:02
そういうコーディング規約のプロジェクトなのかも
457デフォルトの名無しさん:2006/02/20(月) 12:37:48
HTMLのフレームの様にウィンドウを分割する方法を教えて下さい。
MFCにはそれっぽいものがあるようなのですが……。
ベタのAPIだと機能として提供はされていないのでしょうか?
458デフォルトの名無しさん:2006/02/20(月) 12:43:20
>>457
自前で作るしかない
459デフォルトの名無しさん:2006/02/20(月) 12:58:17
素直にMFC使え。ウィザードで一発。
460デフォルトの名無しさん:2006/02/20(月) 13:00:17
TSplitter
461デフォルトの名無しさん:2006/02/20(月) 13:11:25
457じゃないけどWin32APIの素プリッ他のサンプルってないですかね
462デフォルトの名無しさん:2006/02/20(月) 13:14:14
・ウィンドウAに子ウィンドウBと子ウィンドウCをフレーム分の間をあけて貼り付ける。
・フレーム部分でマウスドラッグが発生したらBとCのウィンドウサイズ・位置を適当に調整する。

だけ。
463デフォルトの名無しさん:2006/02/20(月) 13:14:16
>>461
MFCのソース
464デフォルトの名無しさん:2006/02/20(月) 13:31:04
>>462
まぁ、確かにその通りなんだが、
・スプリッタ自身がリサイズされた時の子ウィンドウの再配置
・上記のときのスプリッタの位置の調整
・3分割もサポートするか。3分割はスプリッタのネストにするか。
・子ウインドウのワクを、どのように(どんなデザインで)描くか。
とか考えながら再利用できるものにしようとすると、えらくめんどくさくなる。
この手のWidget、もう2,3回書いた気がする。

C++から使える、MFCじゃないウィジェットセット、どこかに無料で転がってないもんだろか。
look&feelはMFC互換で。
465デフォルトの名無しさん:2006/02/20(月) 13:33:55
457です。
とりあえず>>462さんに従って適当にやってみます。
どうもありがとうございました。
466デフォルトの名無しさん:2006/02/20(月) 13:49:47
>>464
【C++】マイナーGUIツールキット
ttp://pc8.2ch.net/test/read.cgi/tech/1065627704/

MFC的つーとwxWidgetあたりか
467デフォルトの名無しさん:2006/02/20(月) 14:02:35
Qtは大分違うしなぁ
468デフォルトの名無しさん:2006/02/20(月) 14:03:06
>>457

VC のチュートリアルに載っているでしょ。
469デフォルトの名無しさん:2006/02/20(月) 14:04:30
ダメでした。
470デフォルトの名無しさん:2006/02/20(月) 14:12:34
>>469
何が?
471デフォルトの名無しさん:2006/02/20(月) 14:16:01
>>469
人生はリセットボタンはなくても電源ボタンならあります
気が向いたら試してみてください

っ П
472デフォルトの名無しさん:2006/02/20(月) 14:16:34
ぽちっとな
473デフォルトの名無しさん:2006/02/20(月) 15:23:50
>>457-466
WTLを忘れるな。
474デフォルトの名無しさん:2006/02/20(月) 15:45:22
>>473
WTLは確かにすばらしいけど、ATLがなければ使えないから。
無料で〜という条件にあたらない。

まあ、Windowsな以上、
VCが、さまざまな点において、最適だとは思うけど。
475デフォルトの名無しさん:2006/02/20(月) 16:07:22
VC Express に WTL つっこんで、サンプルビルド出来たんだが
476デフォルトの名無しさん:2006/02/20(月) 16:08:07
MFCWTLATLなんてお呼びじゃねーんだよ
477デフォルトの名無しさん:2006/02/20(月) 16:37:46
SDKだけでコーディングするのはいいんだけど、標準的なメッセージのハン
ドラが記述してなかったり、時間のかかる処理をスレッド化してなくて、
ウィンドウが真っ白になるようなアプリケーションは組まないで頂きたい。

いまどき、クラスも理解できなくて、C+SDKで生産性の低いコーディング
スタイルしかできないのを棚に上げて、MFCや、WTL,ATLの所為にされても
なぁ。
478デフォルトの名無しさん:2006/02/20(月) 17:53:50
MFCWTLATLみたいな生産性低いの使わないで.NET Framework使え。
479デフォルトの名無しさん:2006/02/20(月) 17:55:54
>>474
ATLって無料で配布しているような…
480デフォルトの名無しさん:2006/02/20(月) 18:22:07
>>478
あんなクソフレームワーク誰が使うか
自分で作ったほうが数倍軽いわ
481デフォルトの名無しさん:2006/02/20(月) 18:54:31
>>477は勘違いでいっぱいのような気がする。
482デフォルトの名無しさん:2006/02/20(月) 19:33:07
>>480
論点がずれてます
483デフォルトの名無しさん:2006/02/20(月) 20:02:01
論点なんて関係ありません
484デフォルトの名無しさん:2006/02/20(月) 20:10:13
まずはもちついてスレタイ100回嫁と
485デフォルトの名無しさん:2006/02/20(月) 20:13:21
はい、だから.NETなんてイラネといいました
486デフォルトの名無しさん:2006/02/20(月) 20:24:36
暇人同士仲良くしろよ
487デフォルトの名無しさん:2006/02/20(月) 20:31:22
>>486 がいいこといった。
よろしく頼むぜ >>486
488デフォルトの名無しさん:2006/02/20(月) 20:40:45
GetModuleFileNameやGetModuleFileNameExを使って取得されるパスの長さって_MAX_PATHより長くなることってあるんですか?
_MAX_PATH以内確定ってことでプログラムしてるんですが、まずいですか?
489デフォルトの名無しさん:2006/02/20(月) 20:45:21
あるよん。

\\?\
で始まる形式のとき。

詳しくはmsdnみるよろし。


ま、普通は考慮せんでもええけどね。
490デフォルトの名無しさん:2006/02/20(月) 20:47:26
いい加減Windowsから char[]とかchar*とか追放しろよ。
そんなことだからいつまでも安定動作しないんだよ。
491デフォルトの名無しさん:2006/02/20(月) 20:50:27
ハァ?
492デフォルトの名無しさん:2006/02/20(月) 20:59:33
char *shineyo490;
493デフォルトの名無しさん:2006/02/20(月) 21:01:50
>>488
_MAX_PATHはCRTの定数。WindowsSDKはMAX_PATH。
494デフォルトの名無しさん:2006/02/20(月) 22:26:21
Cの関数とWindowsAPIの両方とも使っているとき、
_MAX_PATHとMAX_PATHのどっちを使うべきか悩む。
_UNICODEとUNICODEとか・・・。
495デフォルトの名無しさん:2006/02/20(月) 22:34:02
#define _MAX_PATH_ MIN(_MAX_PATH,MAX_PATH)
#define _UNICODE_ _UNICODE&&UNICODE
496デフォルトの名無しさん:2006/02/20(月) 22:38:02
>>495
#define _UNICODE_ _UNICODE||UNICODE
の間違いじゃないか?
497デフォルトの名無しさん:2006/02/20(月) 22:52:25
つーかstdafx.hでどっちもdefineしときゃ問題ないねん
498デフォルトの名無しさん:2006/02/20(月) 22:53:48
Windowsのどこかのヘッダにこんなことをしている箇所がある。
「_UNICODEが定義されているけれどUNICODEが定義されていなければUNICODEを定義する。
UNICODEが定義されているけれど_UNICODEが定義されていなければ_UNICODEを定義する。」
だから混同してもまあいいかという気持ちでいる。

またUNICODE(TCHAR)に関しては、CRTとWinAPIを比べたら
まず間違いなくWinAPIでお世話になることが多いから、UNICODEを俺は使うことにしている。
どうせ<tchar.h>は標準でもなんでもないし。

それに合わせて_MAX_PATHではなくMAX_PATHを使う。

あと_MAX_PATHはVC++独自。標準C/C++に存在するのはFILENAME_MAX。
499デフォルトの名無しさん:2006/02/20(月) 23:06:03
MSDNにかかれているWindowsAPIの引数で_TCHARを使ってるのなんてないだろ。いずれもTCHAR。
MAX_PATHもWindowsAPIでは標準なものだ。
500デフォルトの名無しさん:2006/02/21(火) 10:58:32
CreateWindowの前でSetLastError(ERROR_SUCCESS)としておいて
WM_CREATEメッセージでGetLastErrorでエラーコードを調べると
ERROR_FILE_NOT_FOUNDが返ってくるのですが・・・。
これは気にしないで構わないでしょうか?
ちなみにWinXP SP1だと問題なく(ERROR_SUCCESSが返ってくる)、
Win2k SP4で発生しています。
501デフォルトの名無しさん:2006/02/21(火) 11:10:45
>>500
そのGetLastErrorの値は意味が無い。
GetLastErrorでエラー情報が取れると明記されたAPIの呼び出し直後のみ、意味がある値が取れる。
502デフォルトの名無しさん:2006/02/21(火) 12:38:35
>>501
気にしないことにします。
ありがとうございました。
503デフォルトの名無しさん:2006/02/21(火) 15:09:29
ファイルを完全に削除する方法はないですか?
deletefile関数はダメでした。
504デフォルトの名無しさん:2006/02/21(火) 15:13:03
>>503
何がやりたいかわからない
何がどうダメなのか書け
505デフォルトの名無しさん:2006/02/21(火) 15:15:22
完全という意味がわからないか?
悲しいな、逝ってよし。
506デフォルトの名無しさん:2006/02/21(火) 15:16:48
何時代の人間だ
507デフォルトの名無しさん:2006/02/21(火) 15:18:41
>>503
NTなら、MoveFileEx()を使う。
9xなら、WININIT.INIを使う。

詳しくはMSDNのMoveFileExの説明に載っている。
508デフォルトの名無しさん:2006/02/21(火) 15:20:33
説明不足でした、すみません。
deletefileを使用すると、ゴミ箱にはファイルは入らないのですが
ファイル復活ツール(ノートンのゴミ箱)だとしっかり復活できて
しまいます、早い話が復活できないようにファイルを削除したいのです。
509デフォルトの名無しさん:2006/02/21(火) 15:23:31
sageもせず、大文字小文字の区別すら出来ないヤツは信用できん
510デフォルトの名無しさん:2006/02/21(火) 15:24:10
ファイルのサイズ分だけ0で埋めてから消せば?
511デフォルトの名無しさん:2006/02/21(火) 15:25:01
>>508
よからぬことを考えてるヨカーン
512デフォルトの名無しさん:2006/02/21(火) 15:26:43
>>508
ノートンはいろいろと面白いことをごにょごにょしているからね。
だいたい、ノートンがなくても、結局HDDに残って入れば、復旧できる可能性はあるわけだし。


まずまず信頼性の高い方法
 ファイル全体に対して、ランダムな値を何度か書き込んだ後、削除すること。

完全を求める場合
 HDDを物理的に破壊する。

513デフォルトの名無しさん:2006/02/21(火) 16:12:58
>>508
とりあえず、これに返事した方がいいよ
http://forums.belution.com/ja/vc/000/350/26s.shtml
514デフォルトの名無しさん:2006/02/21(火) 16:34:21
>>513
ワロス。少なくとも3か所にマルチポストか。
HM3さんよ、マルチポストはダメですよ。
515デフォルトの名無しさん:2006/02/21(火) 16:45:51
ち、マルチかよ。
答えて損した
516デフォルトの名無しさん:2006/02/21(火) 16:47:17
これは非道ぃ
517デフォルトの名無しさん:2006/02/21(火) 17:02:50
一体マルチのどこが悪いのかわからない。
複数のスレに質問することでレイテンシが最小に抑えられるし
複数のレスが得られれば情報の確度も飛躍的に向上する。
忌むべきはレスをもらった後に放置することでありマルチ自体ではないはずだ。
518デフォルトの名無しさん:2006/02/21(火) 17:03:07
はずれ
519デフォルトの名無しさん:2006/02/21(火) 17:04:14
>>517
無知にして無恥
520デフォルトの名無しさん:2006/02/21(火) 17:06:03
>>517
お前は銀バエの鼻くそより価値が無い
521デフォルトの名無しさん:2006/02/21(火) 17:17:30
百歩譲ってマルチ自体が悪くないとしても、マルチするヤツは概して
まともな後始末できないから結局ダメ。
522デフォルトの名無しさん:2006/02/21(火) 17:18:39
いつか答える側になればわかる
523デフォルトの名無しさん:2006/02/21(火) 17:20:59
一般的に言って質問する側は緊急度が高く
答える側はたいてい暇なことが多い。
また答えが重複したところでコミュニティの大きさが十分大きければ
その無駄も相対的に0に等しい。
よってマルチの価値は高く、反面実害はほぼ0であることが証明された。
524デフォルトの名無しさん:2006/02/21(火) 17:22:49
仮定の上に話を進めて何が証明か
525デフォルトの名無しさん:2006/02/21(火) 17:23:17
2:ごくまれな反例をとりあげる
4:主観で決め付ける
20:条件の包含関係を間違える
526デフォルトの名無しさん:2006/02/21(火) 17:27:41
>>517 >>523
これでも読んでろ
ttp://www.ippo.ne.jp/g/53.html
527デフォルトの名無しさん:2006/02/21(火) 17:29:13
>>523
裸の自作自演王
528デフォルトの名無しさん:2006/02/21(火) 17:31:54
>>526
掲示板、特に質問と冠されたもの質問する側の人間の為に存在する物だ。
そのような主客の転倒した論調には首肯しかねる。
529デフォルトの名無しさん:2006/02/21(火) 17:32:19
ていうかパソコンの仕組みを勉強した方がいいような
530デフォルトの名無しさん:2006/02/21(火) 17:36:07
>>528
じゃぁ一片首折ってみる?
531デフォルトの名無しさん:2006/02/21(火) 17:36:24
同じ質問をいくつもの掲示板に投稿するのは、
その掲示板に集まる人を自分の質問に答えるための道具のように扱っていると思われても仕方ありません。
そのような扱いを受ければ誰だって気分を害します。
質問への回答は善意から行なわれるもの
532デフォルトの名無しさん:2006/02/21(火) 17:40:15
質問は蓄積されて、後から見る人間に役に立てば良いんだが・・
ま、2chにあるうちは無理だろうなぁ
533デフォルトの名無しさん:2006/02/21(火) 17:43:48
>>531
そんなの、513みたいな暇人が指摘しなければ気がつかんよ
534デフォルトの名無しさん:2006/02/21(火) 17:44:02
かつてインターネットといえばネットニュースだった時代、同じ記事を複数のニュースグループに投稿するという行為は普通に行われていた。
しかしネットニュースにはクロスポストというシステムがあり、これを使っている限り複数のグループに投稿された記事は同じものとして扱われ、
適切なクライアントソフトを使っていれば何度も同じ記事を読まされるということはなかった。

マルチポストをするなというのはその時代の名残。決して同じ記事を複数の場所に投稿すること自体を禁じるものではない。
535デフォルトの名無しさん:2006/02/21(火) 17:46:36
マルチタスクは体に良くないってのが起源だろ?
536デフォルトの名無しさん:2006/02/21(火) 17:48:36
>複数のレスが得られれば情報の確度も飛躍的に向上する。
そんなことでしか情報の確度とやらを上げられない^^;
>答える側はたいてい暇なことが多い。
回答者は日々勉強した知識で答えているのに、それを「暇」だって?

回答者やってみろよ。まともに答えたことないだろ?
537デフォルトの名無しさん:2006/02/21(火) 17:57:58
マルチしても、それぞれ質問した場所で答えている人間に重複が多ければ
それは無駄になる割合が高いと言える。(その割合と言うのがどれくらいかは知りようが無いけれど)

答える人間も答えたくてうずうずしていてあちこちを回っているかもしれない、というより俺がそうだ。
だからマルチしなくてもいいのに、と俺は思っている。
538デフォルトの名無しさん:2006/02/21(火) 18:01:13
知ったかぶりの517を笑うスレだと聞いてやってきました。
539デフォルトの名無しさん:2006/02/21(火) 18:38:12
505 :デフォルトの名無しさん :2006/02/21(火) 15:15:22
完全という意味がわからないか?
悲しいな、逝ってよし。

508 :デフォルトの名無しさん :2006/02/21(火) 15:20:33
説明不足でした、すみません。
540デフォルトの名無しさん:2006/02/21(火) 20:56:53
WM_CREATE内に重い処理があったので、
最初ウインドウが現れるまでに時間がありました。
ウインドウが現れてからその処理をするように変えたいのですが、
どうしたらいいのでしょうか?

ウインドウが表示されるタイミングっていつですか?
541デフォルトの名無しさん:2006/02/21(火) 20:59:48
WM_CREATEで適当なメッセージを自分にPOSTするという手はある。
ただ、どっちにしろメッセージループを回さないと、ウインドウは固まってしまうけど。
542デフォルトの名無しさん:2006/02/21(火) 21:03:54
スレッドを使え
543540:2006/02/21(火) 21:06:40
>>541
以下のようには試してみたんですが、
ダメでした・・・
(ウインドウが表示されるまでに時間がかかる)

なぜなんですかね?
541さんが言っているのは全然別のことですか?

switch (msg) {
case WM_CREATE:
SendMessage(hWnd,WM_PAINT,0,0);
SendMessage(hWnd,WM_USERDEFINE,0,0);
break;
case WM_USERDEFINE:
// 重い処理
break;
case WM_PAINT:
// 描画処理
break;
}
544デフォルトの名無しさん:2006/02/21(火) 21:11:41
SendじゃなくてPostじゃね?
545デフォルトの名無しさん:2006/02/21(火) 21:13:57
>>543
WM_CREATEからWM_PAINTをSendMessageすんなバカ

SendMessageは対象ウィンドウのウィンドウプロシージャを直接呼び出して、
メッセージの処理が終了するまで呼び出し元に返ってこないから、
それだとWM_CREATEに重い処理書いてるのと一緒だ

>>541がわざわざPOSTすると言ってるのに何やってんだよ


ウィンドウが表示されるタイミングは、ShowWindowなどによってウィンドウの表示状態が「表示」にセットされた時
メッセージで知りたいならWM_SHOWWINDOW
546540:2006/02/21(火) 21:16:13
>>544、545
ご、ごめんよ・・・
一つ賢くなったよ。
ありがとう

とりあえず、postで実装してスレッドに進化してみます。
547デフォルトの名無しさん:2006/02/21(火) 21:17:53
>>546
今の貴方にスレッドは・・・


うーん・・・
548デフォルトの名無しさん:2006/02/21(火) 21:20:28
>>543
あとWM_PAINTはSendするものでもPostするものでもない。
InvalidateRectなんかを使え。
549デフォルトの名無しさん:2006/02/21(火) 21:21:38
処理を1つの関数にまとめといて、
CreateWindow → ShowWindow → 関数呼び出し
とやった方が今の>>540には優しいかもしらん
550デフォルトの名無しさん:2006/02/21(火) 21:22:16
期待として(今WM_PAINTを処理したい)、それにプラス、UpdateWindow、なのかなー。
551540:2006/02/21(火) 21:38:48
スレッドってもしかして・・・
グローバル変数とか使えなくなりますか?
メモリが共有できないとか?
552デフォルトの名無しさん:2006/02/21(火) 21:40:01
共有できるからこそ問題にもなる。
553540:2006/02/21(火) 21:41:21
あれ、グローバルは使えますよね。
これまでWM_CREATEメッセージ時に呼んでた関数を、
スレッドから呼んだらエラーになるようになったんですけど・・・
あー、なんて質問していいのかもわかんね
554540:2006/02/21(火) 21:42:11
>>552
同期に関してはある程度分かってるつもりなんだけど、
これまで机上だったもんで、
スレッドわかんね
555デフォルトの名無しさん:2006/02/21(火) 22:02:58
どーせC++のメンバ関数が呼べないとかそんな話だろ。
556デフォルトの名無しさん:2006/02/21(火) 22:13:00
おまいのやりたいことは本当にスレッドで行うべきなのか?
WM_CREATE 中の「重い処理」とやらを見直すべきかも知れない。
起動に時間が掛かることを許容すべきかも知れない。
557デフォルトの名無しさん:2006/02/21(火) 22:30:25
>>540はGUIより先にスレッドの使い方覚えろ。
両方同時に覚えたら収集付かないぞ。
558540:2006/02/21(火) 22:59:56
やってることはDDE通信なんです。
グローバル変数のクラスの関数内で、
DdeInitialize()を行うんですが、
それがエラーになってしまうようになりました。
559デフォルトの名無しさん:2006/02/22(水) 02:40:46
>>556
どっかの本のコピペだな。
560デフォルトの名無しさん:2006/02/22(水) 03:54:15
CreateProcess でプロセスが作れ、作った方を親、作られた側を子と呼び、
親がCloseHandleすれば子と縁が切れる(デタッチ)ところまで理解しました。

デタッチすれば、親を先に終了しても子には全く関係無し(実行されつづける)
つう理解でOKですか?
561デフォルトの名無しさん:2006/02/22(水) 07:12:15
WIN32でデタッチといえば、デバッグ関係だとおもっていた。
CreateProcessで作られた子供が親の寿命と同期して自動的に
死ぬってことは、ないんじゃないかなー。
562デフォルトの名無しさん:2006/02/22(水) 10:10:25
そもそもプロセスの親子関係なんてWindowsには無かった希ガス。
563デフォルトの名無しさん:2006/02/22(水) 10:23:50
いや。CreateProcess()の説明読め。ちゃんと親子関係はある。
564デフォルトの名無しさん:2006/02/22(水) 12:13:55
WIN32APIなんか詳しくなってもしかたねぇじゃん。
それで大金稼いだりできりゃ多少の救いは有るが
忘れたくても忘れられないまま墓まで付き合いたくねぇよ。
なるべく覚えないでかつうまく捜して使いこなすのがコツだな。
565デフォルトの名無しさん:2006/02/22(水) 12:14:49
何か嫌な事でもあったのか
566デフォルトの名無しさん:2006/02/22(水) 12:27:39
セディール効くなぁ…
567デフォルトの名無しさん:2006/02/22(水) 12:38:36
>>564=馬鹿の真骨頂

みなさん、真似しないように。
568デフォルトの名無しさん:2006/02/22(水) 14:36:32
>>523
緊急度が高いならいつ返事が来るかもわからず信頼性も不明な掲示板で聞かずに、メーカーに直接聞けや
569デフォルトの名無しさん:2006/02/22(水) 16:01:25
ずっと隠してた事をここで言います。
俺。中卒だから関数とか習ってません。
ありがとう。
570デフォルトの名無しさん:2006/02/22(水) 16:09:18
その関数って、f(x) の関数か
571デフォルトの名無しさん:2006/02/22(水) 17:16:10
中学でも関数は習うだろ。
572^ω^ ◆8vOv.D2p4. :2006/02/22(水) 18:36:48
Winsockについて聞いてもいい?
573デフォルトの名無しさん:2006/02/22(水) 18:40:35
ネットワークスレ池
574^ω^ ◆8vOv.D2p4. :2006/02/22(水) 18:41:02
>>573
わかった
575デフォルトの名無しさん:2006/02/22(水) 23:58:24
CreateThreadや_beginthreadで作成するスレッドにデータを渡さなくてもオケですか?
_beginthread(Thread, 0, 0);とか
576デフォルトの名無しさん:2006/02/23(木) 00:26:53
>>575
そりゃもちろんできる。
577デフォルトの名無しさん:2006/02/23(木) 01:27:10
_beginthread を使っちゃいけない理由って何だったっけ?
578デフォルトの名無しさん:2006/02/23(木) 01:37:27
CreateThreadでCRTの話か?
579デフォルトの名無しさん:2006/02/23(木) 04:02:35
勝手にスレッドのハンドルをクローズしちゃうことじゃなかったっけ。
580デフォルトの名無しさん:2006/02/23(木) 09:44:18
メモリリークだった気が
581デフォルトの名無しさん:2006/02/23(木) 09:49:07
すみません、win32APIの初心者です。
ダイアログの中でCreateWindowを使って釦を作成しました。
その釦のタイトルフォントとサイズを変えたいのですが、どうすればいいのか分かりません。
.rcのソースリストからでは簡単に出来るのですが、APIではどうすればいいのでしょう。
ご存知の方、よろしくご教示ください。
582デフォルトの名無しさん:2006/02/23(木) 10:00:17
WM_SETFONT
583デフォルトの名無しさん:2006/02/23(木) 10:04:31
http://pc8.2ch.net/test/read.cgi/tech/1131603113/から誘導

あっちで物知らずの池沼がスレ違いの話題をして困っています。
だれか2k以降のSleepの精度が駄目駄目でSleep(1)とSleep(10)が等価な事、
timeBeginPeriodやQueryPerformanceCounterを使えば回避できることを
優しく丁寧に、莫迦に分かるように教えてやって下さい。
584デフォルトの名無しさん:2006/02/23(木) 10:20:37
>>583
Sleep(1)を1000回ほど繰り返すロジック書いて実測しろと。
585デフォルトの名無しさん:2006/02/23(木) 10:42:10
>>582
早速のご教示、ありがとうございます。
しらべて見ます。
586デフォルトの名無しさん:2006/02/23(木) 14:50:23
窓の話だけど

Sleepの精度が低い環境があるのは事実。
timeBeginPeriodで精度を上げられるのも事実。
timeBeginPeriodが他のプログラムに影響するのも事実。

他のプログラムが、精度の低いSleep(1)を期待している
もしくは精度が低いとは知らずに利用している場合は問題となる。

Sleepは0以外の値が指定されたときに、
指定された時間"以上"スレッドを中断させる。
587デフォルトの名無しさん:2006/02/23(木) 14:52:17
誤爆った
588デフォルトの名無しさん:2006/02/23(木) 15:17:10
Win32APIなあたり、あながちゴバクとも言えないこの不思議
589デフォルトの名無しさん:2006/02/23(木) 16:12:41
ディレクトリ内にファイルがいくつあるか返すAPIを教えてください
590デフォルトの名無しさん:2006/02/23(木) 16:15:04
FindFirst/NextFileでカウント汁
591デフォルトの名無しさん:2006/02/23(木) 16:29:10
やっぱそうかぁ〜
答えを見る前に既に作ってた
592デフォルトの名無しさん:2006/02/23(木) 16:51:31
>>589
APIはないが、popen("dir <target directory>", "r")とでもして数えてみたらどうだろう。
593デフォルトの名無しさん:2006/02/23(木) 16:58:19
ファイルがあるかどうかをチェックするだけなら、
PathIsDirectoryEmptyってのもあるな
594デフォルトの名無しさん:2006/02/23(木) 17:57:39
>>592-593
ちょ、おまwwwwwwwwwwww
その2つをちょっと調べてみます!
595デフォルトの名無しさん:2006/02/23(木) 18:12:31
VIP臭いお(;^ω^)
596デフォルトの名無しさん:2006/02/23(木) 18:17:05
オマエモナー( ´∀`)
597デフォルトの名無しさん:2006/02/23(木) 18:19:49
この板でもVIP臭いを導入したのかと思ってシマタ。
598デフォルトの名無しさん:2006/02/23(木) 18:27:30
>>589
dir /b の結果を取り込めばOK
599デフォルトの名無しさん:2006/02/23(木) 18:29:55
int iFileCnt = `ls -1 hogehoge | wc -l`;
600デフォルトの名無しさん:2006/02/23(木) 20:30:04
あるアプリが、立ち上げ時にどんなファイルやどんなDLLをどんな順番で触っているかを
ログファイルに書き出したい。
APIフックとか使えば何とかなるんでしょうが、
既存のツールでなんかないですか?
なお、「あるアプリが」という条件がつくとキツい、というなら、
単に、NTFSのファイルリード関数をフックして、
すべてのファイルアクセスをロギングするツールでもOKです。
ただ、データファイルへのアクセスだけではなく、
DLLファイルや関連アプリファイルへのアクセスもロギングできるとうれしいです。
601デフォルトの名無しさん:2006/02/23(木) 20:40:25
ここはツールをクレクレする板ではなく、自分でプログラムを作る板です。
602デフォルトの名無しさん:2006/02/23(木) 20:46:45
windows2000上のVC++のVer6.0でプログラムしてます。

CWinThread *tAcFlash[TCP_SOCK_NO+1];
for( i=0;i<TCP_SOCK_NO+1;i++){
tAcFlash[i]=AfxBeginThread(AcceptSock,this,THREAD_PRIORITY_NORMAL,NULL,NULL,NULL);
if(tAcFlash[i] == NULL){
Ercount++;
sprintf(wkText,"%d番目のスレッドを開始できませんでした",i);
AddLog(wkText);
}else{
count++;
Sleep(5);
}
}
みたいな感じでスレッドを立ち上げていくんですが、
1992個でスレッドの開始ができなくなります。
マシンはCeleron 666MHz mem256MBとDuron1.2GHz mem128MBのマシンの
両方で実験してみましたけど、時間が違うだけで立ち上がる数は一緒でした。

スレッドの最大数って何によって制限されるのでしょうか?
また、スレッドのエラーの取得方法はどうすればよいでしょうか?
603デフォルトの名無しさん:2006/02/23(木) 20:57:50
>>601


イジワルいわずにおしえてよ。
つーか、このスレがスレ違いならどこがいーんだYO!。
604デフォルトの名無しさん:2006/02/23(木) 21:04:31
>>600
>>601
>>603

ねーねーね、おしえてよーーーん。
ぶーすかぶー。おしえてーーー。
605デフォルトの名無しさん:2006/02/23(木) 21:05:59
visual c++.netというコンパイラがあるようですが無料ですか?有料ですか?
606デフォルトの名無しさん:2006/02/23(木) 21:12:40
607デフォルトの名無しさん:2006/02/23(木) 21:13:42
>>602
まずそんなにスレッドを起こして何をするのかはっきりしる
返答によっては当局に通報する
608デフォルトの名無しさん:2006/02/23(木) 21:36:23
>>602
普通はOSのバージョンで変わるもの
ハンドル数とかもな
609デフォルトの名無しさん:2006/02/23(木) 21:47:12
>>600=603
失せろよ精神障害
610デフォルトの名無しさん:2006/02/23(木) 21:56:07
>>605
そんなコンパイラはありません
611デフォルトの名無しさん:2006/02/23(木) 22:18:36
>>605
こちらへどうぞ
Visual Studio 2005スレ Part11
http://pc8.2ch.net/test/read.cgi/tech/1140652366/
612デフォルトの名無しさん:2006/02/23(木) 22:19:50
>>600
デバッガでプロセスにアタッチ
613602:2006/02/23(木) 22:29:12
>>600の人気に嫉妬

>>607
ソケットのコネクトをポーリングで待ち受けてます。
1ポートでマルチコネクトを実現する場合、スレッドで立ち上げるものじゃないんでしょうか?

>>608
つ〜ことは、OSが起動しているスレッドやハンドルを減らさないと、
スレッドでマルチコネクトは1992までしか確率できないって事でしょうか?orz

windowsでマルチコネクトを実現する手法ってどんななんだろ?
614デフォルトの名無しさん:2006/02/23(木) 22:37:44
>>613
それは同時接続数が少ないときのやり方。
同時接続数を大きく取りたいのなら、IOCP or 1つのスレッド当り32個くらいの
ソケットを同時に処理するように作ると世ろし。
615デフォルトの名無しさん:2006/02/23(木) 22:40:56
>>613
基本的にはスレッドでいいと思うが、入り制御をしないと
死ぬほど接続しに来たときにそういうこと(スレッド生成不可)になっちゃうね
最大数を超える分はエラーで弾くか、キューイングするかかな
616615:2006/02/23(木) 22:42:53
ぬ かぶったスマソ
617602:2006/02/23(木) 22:47:56
>>614
IOCP調べてみた。難しそうだけど頑張ってみる
ありがとう

>>615
条件が2000コネクトで、サンプルで動いていると言われて貰ったプログラムが
1992個以降のスレッド作成でこけてたわけです。
(サンプルは、エラー出力してないからわからなかったんだと思う)
Linuxの場合は、無駄は多いけどワーッとプロセス立ち上げて対処できた気がする
とりあえず、ありがとう
618デフォルトの名無しさん:2006/02/23(木) 22:51:16
>>613
I/O完了ポート なら個数制限に悩まない。
でも、切断でバグらないようにするのが大変だったりもする。
619デフォルトの名無しさん:2006/02/23(木) 23:10:43
>Linuxの場合は、無駄は多いけどワーッとプロセス立ち上げて対処できた気がする
Windowsでもできるがな
620602:2006/02/23(木) 23:18:28
>>618
IOCP難しい。とりあえず、サンプルプログラム探してる。

>>619
プロセスなら数に制限ないのか〜。
どうしても駄目ならそっちに逃げます。
621デフォルトの名無しさん:2006/02/23(木) 23:20:23
>617
スタックサイズの制限はかけてる?
スレッドひとつに1MB割り付けば、それで2GBいく。
仮想メモリの上限が2GB.
622602:2006/02/23(木) 23:31:06
>>621
前に調べてかけた気がするけど、現状、どこでかけるか忘れて試せない。
仮想メモリの上限が2Gとしても、同じプログラムで物理メモリが違うマシンで実行して
同じ数しか起動できないのは、別の問題な希ガス。
623デフォルトの名無しさん:2006/02/23(木) 23:36:41
どっちにしろ、CPUが何千個もあるわけじゃないんだから、
現状で、スレッドを何十何百と作るのは間違っているだろ。


>>620
IO完了ポートについて解説した、ただで読める文章は、ほとんどない。
たしかCodeProjectに、サンプルコードがあったはず。。
それと、SysInternalsに、IO完了ポートの詳細な説明がある。

まあ、基本的にはスレッドプーリングという考えだから、
Advanced Windowsも多少は参考になるかと。
624デフォルトの名無しさん:2006/02/23(木) 23:41:11
32bitの壁にぶち当たってるんだから、物理メモリの搭載量が4GBだろうが16GBだろうが関係ない。
ふつーの32bitプロセスが使えるメモリ量は2GB−α。
625デフォルトの名無しさん:2006/02/24(金) 00:04:37
物理メモリの搭載量に関係なくWin32アプリケーションにはプロセス毎に4GBのアドレス空間が与えられる。
そのうち2GBはシステムが予約しているのでアプリ側で使用可能なのは2GB。
ただし、Windows Serverでは設定によってアプリが使用可能なアドレス空間を3GBまで拡張可能。

これとは別に、物理メモリ搭載量+ページファイルの上限サイズでシステム全体の使用可能なメモリ量が決定される。
626602:2006/02/24(金) 00:18:43
>>623
それも調べて見ます。
とりあえず間違いなのはわかったけど、サンプルの間違いを指摘するなら、
原因は別かなと思っただけです。
win32マルチスレッドプログラミングって本にもあるらしいから、
土日にでも本屋にいってみます。

>>624
なるほど。そういう事ですか。納得。
windows2000の仮想メモリは可変だったと思うけど、
最大値を超えて変更されたりしますか?
しないなら、32bitの壁以前に、物理メモリ+仮想メモリの限界が
32bitの壁以前に来るので、原因ではなさそう。
627602:2006/02/24(金) 00:22:23
>>625
通常であれば、メモリ128M、仮想メモリ最大値の設定256Mであれば
2G+128M+256Mがシステム最大のメモリ使用量と考えてOKですか?
ん〜、なんか難しいです。
単純に、メモリ不足のダイアログが出てないから全然疑っていませんでした。
628デフォルトの名無しさん:2006/02/24(金) 00:23:59
>>627
っ[とりあえず仮想メモリを仲間にしてあげて]
629デフォルトの名無しさん:2006/02/24(金) 00:26:19
っ[完全に誤爆した]
630デフォルトの名無しさん:2006/02/24(金) 00:29:18
ポップアップメニューにフォーカスが無くなった時に閉じる方法ってありますか?
どのようにすればいいかご教示ください。
631630:2006/02/24(金) 00:42:31
SetForegroundWindow(hwnd);
でできました。すみません、ありがとうございました。
632デフォルトの名無しさん:2006/02/24(金) 00:54:10
>>631
( ´・∀・`)へーthx
633デフォルトの名無しさん:2006/02/24(金) 04:28:05
TLSの制限かなと思ったけど違うか>大量スレッド
それだと1088が上限だしねぇ。
634デフォルトの名無しさん:2006/02/24(金) 07:27:15
>>602
GetLastErrorの値は?
635デフォルトの名無しさん:2006/02/24(金) 07:56:20
>>627
そのアドレス空間はアドレスの空間であって実際のメモリではない。
636デフォルトの名無しさん:2006/02/24(金) 10:34:16
なるべくメモリ使用量の少ないアプリを作っています。
窓を開けただけで1800KBほどのメモリを食っているのですが、
メモリを削っていく方法ってないですか?
Delphiで書いていてメモリを食うので、今はCで書いているのですが、
実行ファイルサイズは小さくなったのですが、メモリ使用量は
あまり小さくなりませんでした。
このパラメータをこれにしたら小さくなるというようなのがあれば、
教えてください。
637デフォルトの名無しさん:2006/02/24(金) 10:48:10
InvalidateRect関数を頻繁に使うと画面がちらつくのですが、
画面がちらつかない方法ってないですか?

画面上の更新したい部分だけ更新とかってできないものでしょうか?
638デフォルトの名無しさん:2006/02/24(金) 11:01:01
InvalidateRect
      ~~~~~~
639デフォルトの名無しさん:2006/02/24(金) 11:05:35
640デフォルトの名無しさん:2006/02/24(金) 11:06:41
メッセージの送信元のスレッドを調べるにはどうしたらいいの?
641デフォルトの名無しさん:2006/02/24(金) 11:08:41
ごめんちゃい。

もう一つ質問。
タイマーのイベントでタイマーの間隔以上の処理をしたらどうなりますか?

例えば、
1000ms間隔でタイマーを作っといて、
そのタイマーイベントで3000msの処理をした時など。

やりたいことは、
3000ms処理→1000ms休む→3000ms処理→1000ms休む・・・

メッセージ処理内でSleepなんか使うとメッセージ処理できなくなりますよね?
スレッドを作ったりするしかないですか?
642デフォルトの名無しさん:2006/02/24(金) 11:41:21
タイマーメッセージはその処理が完了しない限り、
新たなメッセージがキューに積まれないようになっている。
長時間占有するような処理を書くなら普通は別のスレッドを使う。
643デフォルトの名無しさん:2006/02/24(金) 11:45:49
>>642
ありがとうございます。

スレッドを使ってやりたいのですが、
スレッド内でDDE通信を開始すると、
そこで登録した割り込みが入って来ないんです・・・

スタックが別であることが問題となっているのでしょうか?
644デフォルトの名無しさん:2006/02/24(金) 11:47:46
DDEなんかじゃなくてもいいんじゃないの
645デフォルトの名無しさん:2006/02/24(金) 11:55:52
そこでMsgWaitForMultipleObjects
646デフォルトの名無しさん:2006/02/24(金) 12:06:00
>>644
すでにあるアプリと通信するためにDDE通信を使う必要があるんです。

>>645
どういう意味でしょうか?

スレッド内でDDE通信登録

ホットリンクなので値が変わると割り込みがくるはずが来ない

647デフォルトの名無しさん:2006/02/24(金) 12:10:42
別スレッド側からSendMessageを投げて、ユーザメッセージとして処理する。
648デフォルトの名無しさん:2006/02/24(金) 12:12:57
>>646
DDE はウィンドウメッセージベースでの通信なので、
ウィンドウをCreateWindow したスレッドでしか使えません。

ウィンドウを持つほうのスレッド(UIスレッドなどと言う)側で
DDE の処理を行って、ワーカスレッドではそういうことは
しないようにしましょう。

っていうかDDEごと別スレッドにもっていったんじゃ、
結局時間のかかる処理中にDDEに反応できなくなって、
DDE ブロードキャスト使ってる他のアプリが迷惑する。
649デフォルトの名無しさん:2006/02/24(金) 12:22:12
>>648
わかりづらくてすいません。

結局やりたいことは、DDE通信だけなんです。
ただTOPICが300ほどでITEMもできれば30000ほど登録したいと思ってます。
(これはDDE通信する相手のアプリの仕様です)

時間のかかる処理っていうのは、
DDE通信のための接続処理なんです。
だいたい20秒ほどかかってしまうので、
それをどうしたらスマートなのか悩んでいます。
650デフォルトの名無しさん:2006/02/24(金) 12:24:06
645さんと647さんは同じことを言っているのでしょうか?

ユーザメッセージとして処理するのは何の処理ですか?
割り込みで行う処理内でメッセージを投げて、
本来行いたい処理をユーザメッセージ処理内で行うという意味ですか?
651デフォルトの名無しさん:2006/02/24(金) 14:05:27
>>626
完全に出遅れてしまった…

CreateThread
http://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_createthread.htm
> 解説
>  1 つのプロセスが作成できるスレッドの数は(ry
652640:2006/02/24(金) 14:19:35
>メッセージの送信元のスレッドを調べるにはどうしたらいいの?
これってどんなもんでしょ?
653デフォルトの名無しさん:2006/02/24(金) 14:24:31
>>636
IMEを一切使わないのなら、ImmDisableIME。
654636:2006/02/24(金) 15:18:53
>>639
SetProcessWorkingSetSizeは有用ですね!!
400Kくらいで安定するようになりました!
ありがとうございます。

>>653
IME使わないだけで60%くらいにできました!
ありがとうございます。
655デフォルトの名無しさん:2006/02/24(金) 16:21:24
SendMessageをコールするとたちどころに処理されてreturnされるけど、
これを、ワンクッション置いてから処理するようにしたいのだけど、可能ですか?
656デフォルトの名無しさん:2006/02/24(金) 16:23:07
>>655
何やりたいのかわからん
とりあえずsendmessageを内部で呼ぶラッパー関数でも作ってみたら?
657655:2006/02/24(金) 16:47:45
説明ぶそくですいません。
今考えてるのは、SendMessageから受けたリクエストを即座に処理をするのではなくて、バッファに貯めて処理をせずにreturn
タイマーで定期的にバッファを確認し、貯まってるようだとそれを処理する。
って感じで実装を考えてますけど、そのような事をやってるくれるAPIは無い物かと思いまして。
SendMessagePoolのようなものが無いかと。。。
658655:2006/02/24(金) 16:49:51
あれ、PostMessage
でいいのかな?
659デフォルトの名無しさん:2006/02/24(金) 16:50:57
>>657
そんなAPIは内と思う。自分でキューを作れ。
660デフォルトの名無しさん:2006/02/24(金) 17:01:40
俺も無い(似たようなのはあるかもしれないけど、完全に仕様を満たすものは無い)と思う
postmessage()使っても良いけど、その代わりポインタへ読み書きするようなメッセージは全てできなくなる
そのためのsendmessage()なんだから
661655:2006/02/24(金) 17:28:48
>660レスどうもです。
そう、今それを質問しようとしたんですけど、パラメータでポインターを渡したとき誰がdeleteしてくれるのかと。。。
BSTRとか、ComPtrで渡せば勝手に解放してくれるのかしら?
662デフォルトの名無しさん:2006/02/24(金) 18:14:15
>>660
> その代わりポインタへ読み書きするようなメッセージは全てできなくなる

それはプロセスを跨いだ時だろ?

>>661
> パラメータでポインターを渡したとき誰がdeleteしてくれるのかと。。。

メモリ管理はプログラマの責任で!
663デフォルトの名無しさん:2006/02/24(金) 18:22:23
Window枠の、現在の色を取得するAPIって何でしたっけ
枠の色とは、XPより前のでいう、明るい灰色の部分(デフォルト)の事です

GetSysColor(COLOR_3DSHADOW)
だと思っていたのですが、今やってみたら微妙に違う感じで
664デフォルトの名無しさん:2006/02/24(金) 18:33:55
VC++2005Expressにて、ポップアップメニューのオーナードローを行っています。

だいたい出来たんですが、メニューの外枠(3D)が邪魔だと思うようになりました。
これをどうにか消したいんですが、調べた所サンプルが見つかりませんでした。

もともと外枠のないポップアップメニュー(フラットなの)を作れたら一番良いのですが、ポップアップメニューのHWNDからGetWindowDCできれば何とかなりそうだと思いました。
ポップアップメニューのHWNDはどうやって取得したら良いでしょうか。

実験として、右クリックした時にGetCursorPosして、その時のPOINT構造体を元にWindowFromPointしてもだめでした。

CreatePopupMenuした後のHMENUからHWNDを逆引きするとか、そんなイメージで考えています。

よろしくお願いします。
665デフォルトの名無しさん:2006/02/24(金) 18:37:41
>>633
COLOR_3DSHADOW
       ~~~~~~~~~
明るいわけないじゃん。
666デフォルトの名無しさん:2006/02/24(金) 18:38:33
>>665
とりあえず落ち着け
667デフォルトの名無しさん:2006/02/24(金) 18:52:12
落ち着いた。すまなかった。

>>663
最も明るい色 COLOR_3DHILIGHT
ちょっと明るい色 COLOR_3DLIGHT
668デフォルトの名無しさん:2006/02/24(金) 18:54:59
>>664
元々そういうことをするようにはできてないんで、1から自分でポップアップメニュー互換のウィンドウ作ったほうがはやい。
669デフォルトの名無しさん:2006/02/24(金) 19:29:27
>>664
XPではメニューをオーナードローするときのDCはオフスクリーンDCで、
α付き透過ウィンドウとしてスクリーンに表示されます。
(メニューの影とふわっと出てくる視覚効果のため)。

メニューのHWNDが得られたからそのGetDCして何でも描けるかというと
それはかなり難しい。
670デフォルトの名無しさん:2006/02/24(金) 19:31:00
>>669
そういう情報はどこから手に入れてくるのか希望します
671デフォルトの名無しさん:2006/02/24(金) 19:38:28
>>670
日本語でお願いします
672デフォルトの名無しさん:2006/02/24(金) 19:42:50
そういう情報はどこから手に入れてくるのか希望します

Such information is hoped for though doesn't know where to obtain it.

もっとも情報が望まれているそのようなものは、どこでそれを得るかを知りません。
673デフォルトの名無しさん:2006/02/24(金) 19:49:15
もっとも情報が望まれているそのようなものは、どこでそれを得るかを知りません。

As for such the one that information is hoped for, it doesn't know where to obtain it most.

情報が期待されるくらいのものに関して、それは、どこでそれを最も得るかを知りません。
674デフォルトの名無しさん:2006/02/24(金) 20:16:27
日本語でOK
675デフォルトの名無しさん:2006/02/24(金) 20:19:21
英語では王系
676デフォルトの名無しさん:2006/02/24(金) 20:20:26
馬鹿ばっか
677デフォルトの名無しさん:2006/02/24(金) 20:23:26
>676
一番バカっぽく見えるお
678デフォルトの名無しさん:2006/02/24(金) 20:24:56
馬鹿ばっか

Only foolishness

愚かだけ

只愚笨

ただ馬鹿なだけ
679663:2006/02/24(金) 20:30:30
>>665-667
失礼コピペミス。正しくは GetSysColor(COLOR_3DFACE) でした
COLOR_3DLIGHTと同じ色みたいです

GetSysColor(COLOR_3DFACE)で取った値を、そのままDIBのメモリに
入れていたら微妙に変だったのですが、ビットのRとGを入れ替えたら上手く行きました
スレ汚し失礼
680デフォルトの名無しさん:2006/02/24(金) 20:50:57
681664:2006/02/24(金) 22:06:22
うーわー、やっぱ無理なんですか。惜しい所まで行ったのになぁ…残念です。

回答ありがとうございました。
682デフォルトの名無しさん:2006/02/24(金) 23:31:48
GetSysColor(COLOR_3DFACE)
               ~~~~~~~

どう見ても表面の色です、本当にありがとう御座いました
683デフォルトの名無しさん:2006/02/25(土) 02:40:34
スレ伸びるの早すぎ
684デフォルトの名無しさん:2006/02/25(土) 07:21:04
Win98/Win2000を使っています。
Platform SDKなんですが、Win98用(?)とかWin2000用(?)はもう落とせないんでしょうか?
あと、昔はPlatform SDKの各部分が必要なものだけ落とせるようになっていたと思うのですが、もうそういうことはないのでしょうか?(というか各CABの内容リストをどこかに書いておいてくれればいいのに・・・)
685デフォルトの名無しさん:2006/02/25(土) 08:51:51
>Platform SDKなんですが、Win98用(?)とかWin2000用(?)はもう落とせないんでしょうか?
SDKのヘッダファイルを覗いてみれば解決することでしょう。

>あと、昔はPlatform SDKの各部分が必要なものだけ落とせるようになっていたと思うのですが、
ダウンロードした後に自分が必用なものを抽出すれば解決することでしょう。
686デフォルトの名無しさん:2006/02/25(土) 08:56:33
新しいPlatfrom SDKは以前のものを包容している。
WINVERなどを適切に設定してヘッダをインクルードすれば平気。
687デフォルトの名無しさん:2006/02/25(土) 13:32:07
WindowsMeでは、GetKeyState(VK_LBUTTON)は使えないのでしょうか?
マウスの左ボタンを押しても押さなくても、0が返ってきます。
WindowsMeのマシンが2台あり、両方で試してみたのですが、そうなりました。
688687:2006/02/25(土) 13:51:16
すみません、よく調べたらウィンドウプロシージャとは別のスレッドから
GetKeyStateを呼び出していたのが原因のようです。
689デフォルトの名無しさん:2006/02/25(土) 17:09:56
ウィンドウハンドルとかインスタンスハンドルって
グローバル変数にしちゃっていいかしら?
690デフォルトの名無しさん:2006/02/25(土) 17:20:19
イイヨイイヨー
691デフォルトの名無しさん:2006/02/25(土) 17:57:13
あまりお勧めしない
692デフォルトの名無しさん:2006/02/25(土) 17:59:11
スレ違い
693デフォルトの名無しさん:2006/02/25(土) 18:36:58
DLL が2つあるとして、呼び出し側、 DLL それぞれが別々の処理系で作られているとして、
それぞれが自分のメモリ確保ルーチンとか使っても大丈夫なのでしょうか?
開放は、確保したDLL なりが行います(別のランタイムで開放したりはしません)。

bcc32 5.6.4 と、VC++ Express Edition で試したのですが、特に問題が無いようでした。

ランタイムのつくりによるのでしょうか?
それとも、Win32 にそういうことを可能にする仕組みなり規約なりがあるのでしょうか?


または適切なスレへの誘導をお願いします・・・
694デフォルトの名無しさん:2006/02/25(土) 18:59:45
ダイアログボックスからテキストを入力して、それをウィンドウのクライアント領域
に表示したいのですがどうやればいいですか?

次のようにやってみましたが、駄目でした。表示したいテキストはSTLのリストに入れてます。
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
if(!lst.empty()) {
p = lst.begin();
TextOut(hdc, 1, 1, p->title, lstrlen(p->title));
}
EndPaint(hwnd, &ps);
break;

同じコードでWM_PAINTでなく、WM_COMMANDからメニューボタンが押されたら表示
みたいにすればうまくいったのですが、どこがまずいかお願いします。
695デフォルトの名無しさん:2006/02/25(土) 19:03:28
つ 再描画
696デフォルトの名無しさん:2006/02/25(土) 19:10:52
>>693
大丈夫。つーかそれがダメだったら、kernel32.dllとかuser32.dllとか使えないじゃん。
697デフォルトの名無しさん:2006/02/25(土) 19:22:50
std::listにchar*を入れるのはどーなんだろーなー
698694:2006/02/25(土) 20:00:56
もうすこしヒントお願いします。
WM_COMMANDから表示したものも、最小化、最小化から復帰で
消えてしまうのでWM_PAINT内が機能してないみたいなんですが。。
UpdateWindow()は呼んでます。
699デフォルトの名無しさん:2006/02/25(土) 20:12:51
>>698
InvalidateRect()
700デフォルトの名無しさん:2006/02/25(土) 20:21:08
700ゲット
701694:2006/02/25(土) 20:28:49
解決しましたTHX。InvalidateRect()は呼んでましたが、
仮想ウィンドウに書き込んで、WM_PAINT内でコピーにしたら出来ました。
WM_PAINT内でTextOut()って駄目なんですか。
702デフォルトの名無しさん:2006/02/25(土) 20:35:18
WinInetを使用してPOSTを使用するプログラムを作っています。
その中で、InternetConnect関数を使用しているのですが、
第二引数が実際に存在してないサーバー名でも、
関数が失敗せずに値を返してしまいます。
エラー処理はできないのでしょうか?
703デフォルトの名無しさん:2006/02/25(土) 20:41:06
>>701
>WM_PAINT内でTextOut()って駄目なんですか。 

だめなわけ無いだろ。
おまいさんの処理がおかしいだけだよ。
704デフォルトの名無しさん:2006/02/25(土) 20:43:12
>>702
内容が↓に酷似しているのは気のせいか
ttp://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200509/05090002.txt
705デフォルトの名無しさん:2006/02/25(土) 20:43:42
まともなアプリなら、メモリDCに描き溜めといて
WM_PAINT時はメモリDC→デバイスDCへのBitBltしか呼ばんと思うけどね
706デフォルトの名無しさん:2006/02/25(土) 20:48:39
これはまた、とんだ「まともな」論ですな。
707デフォルトの名無しさん:2006/02/25(土) 21:04:57
リモート接続ではかえって遅くなるから、ちゃんと判定してね、
ってレイモンドが言ってた記憶がある。
708デフォルトの名無しさん:2006/02/25(土) 21:10:31
>>704
酷使してますね。
解決方法がいまいちよくわからないです。
結局、何か送らないことにはわからないってことですか??
709デフォルトの名無しさん:2006/02/25(土) 21:19:07
>>706
GUIプログラミングの定石だお
710>>708:2006/02/25(土) 21:25:21
>>708
存在しないアドレスを指定しても、何かポインタが返ってくるのは
proxy 経由の場合?それとも直接接続?
711デフォルトの名無しさん:2006/02/25(土) 21:36:50
>>710
直接接続の場合です。
試しにProxy経由でもやってみましたが、
結果は同じで、ハンドルに値がかえってきました。
712デフォルトの名無しさん:2006/02/25(土) 21:39:33
>>706
なるべくデバイスDCに直接描画しないのは当然だよ。
応答速度が速いアプリはみなメモリDC使ってるはず。

最近はVNCとかRDP経由で使う場合も増えてきたし、
データ転送量低減のためにも余計な書き換えはしない。
Officeとかダイアログ系アプリでよくあるけど直接描画していく
類のソフトは、通信でブロック転送される際に更新矩形が
正常に転送されず、イメージを取りこぼす場合が多い。
RDPソフト側のバグなのかもしれないけど
BitBltが安定してるのは確か。
713デフォルトの名無しさん:2006/02/25(土) 21:43:27
メモリDCを使うのは問題ない
重要なのはそこではない
714デフォルトの名無しさん:2006/02/25(土) 21:56:47
>>705 >>712
おれは706じゃないが、なんでもかんでも「メモリDC->BitBlt」というのには反対。

InvalidateRect()で必要なところだけ無効化し、WM_PAINTで必要なところだけ
再描画できるロジックが組める内容の場合には、そのほうがメモリDCより高速。

いまでこそCPUが早くなってビデオカードのアクセラレータなんて2Dではあまり
気にしなくなったが、メモリDCだとこれが効かない。

メモリDCが良いかどうかは、ケースバイケースでしょ。
715694:2006/02/25(土) 22:02:07
>>713
一応言っとくと、、上の方々は俺じゃないっすよ。俺がNOOBなのはわかってます。
716デフォルトの名無しさん:2006/02/25(土) 22:08:15
>>705
世の中のどれだけのアプリケーションが「まとも」かどうかわからない。
717デフォルトの名無しさん:2006/02/25(土) 22:16:13
ある、キー入力を受け付けるソフトがあるのですが、それにソフト的に
入力を与えたいです。
たとえば、「K」を入力すると、10ms間隔で順番にA,B,Cとそのソフトに
入力するなどです。
Win32APIを駆使してこのようなプログラムを作成する場合、
どのような方針、アルゴリズムで進めていけば良いでしょうか??
718デフォルトの名無しさん:2006/02/25(土) 22:19:17
アルゴリズム・・・
719デフォルトの名無しさん:2006/02/25(土) 22:25:48
Kを入力すると順番にA〜Kまでってことか?
720717:2006/02/25(土) 22:28:47
>>719
はい、そんなかんじです。
「K」を受けてタイマーで順番に「A」、「B」、「C」・・・と処理していけばイイとは思うのですが、
それを他のアプリケーションにどうやって渡せば良いか検討がつきません。
721デフォルトの名無しさん:2006/02/25(土) 22:37:33
>>720
WM_KEYDOWN
WM_KEYUP
722デフォルトの名無しさん:2006/02/25(土) 22:48:35
>>720
SendInput
723デフォルトの名無しさん:2006/02/25(土) 23:09:59
まぁ、PostMessageかSendInputだな
724717:2006/02/25(土) 23:12:37
>>721
それは分かるのですが・・・
>>722
>>723
ありがとうございます。
それでやってみます m(_ _)m
725デフォルトの名無しさん:2006/02/26(日) 11:46:48
CDドライブを開閉するにはどうしたらいいでしょうか?
いろいろ探してみるとASPIやらなんやら出てきましたが、
肝心な情報にヒットしなくて困ってます
726デフォルトの名無しさん:2006/02/26(日) 11:54:07
>>696
ありがとう。
727デフォルトの名無しさん:2006/02/26(日) 11:57:20
>>725
単純にあけたかったら、MCI使えばいい。
set cdaudio door open

こんなんだっけ?
728デフォルトの名無しさん:2006/02/26(日) 12:05:18
ejectじゃないか
729デフォルトの名無しさん:2006/02/26(日) 12:07:44
VisualC++6.0のSDK使ってるんですが
Winampのスキンのように、ウインドウの外見を変える方法を教えてください
730デフォルトの名無しさん:2006/02/26(日) 12:12:42
>>729
自前実装してください。

ただ、しっかりと作らないと、
Windowsが用意してくれているGUIより貧弱で、
使い勝手が悪いものが出来上がります。
Winampもそのひとつ。

はい、次の人
731デフォルトの名無しさん:2006/02/26(日) 12:27:10
>>725
DeviceIoControl
732デフォルトの名無しさん:2006/02/26(日) 12:28:02
>>730
WS_POPUPで、縁やタイトルの部分は画像を使うっていう方法でいいのですか?
733デフォルトの名無しさん:2006/02/26(日) 13:04:39
>>732
ケースバイケース。好きなようにやれ。
734デフォルトの名無しさん:2006/02/26(日) 13:14:38
DirectXを使わないで(そこまで出来ないので・・)所謂オフスクリーン/ダブルバッファリングを実装したいのですが、
これはCreateCompatibleDC()関数なんかでメモリデバイスコンテキストを作成して、そこに描画してBitBlt()で転送
という形でいいんでしょうか
735デフォルトの名無しさん:2006/02/26(日) 13:24:40
>>734
訊く前に自分なりにやってみて玉砕しろ。経験だ。
736デフォルトの名無しさん:2006/02/26(日) 13:32:17
>>734
1つだけキーワードをあげよう
CreateDIBSection
737デフォルトの名無しさん:2006/02/26(日) 13:32:25
馬鹿は答えなくていいよ
738デフォルトの名無しさん:2006/02/26(日) 13:34:13
DIBSectionは必ずしも必要じゃないけどな。
便利だけど。
739デフォルトの名無しさん:2006/02/26(日) 13:34:48
バッファ領域を直接操作(ポインタで)しないならOKと思う。
740デフォルトの名無しさん:2006/02/26(日) 13:42:44
DirectXを出してきたから、画像処理系と勝手に脳内補完してしまったけど
そんなことどこにも書いてないか。

たんにGDIの描画をバッファしたいだけなら、CreateCompatibleBitmapでいい。
ただ、これはメモリDC使って作成するとモノクロビットマップを作るから要注意。
俺はつい最近それでハマった。
741デフォルトの名無しさん:2006/02/26(日) 15:01:39
hdc = BeginPaint(hWnd,&ps);
memDC = CreateCompatibleDC(hdc);
として
例えばFillRect(memDC , &rect , (HBRUSH)GetStockObject(BLACK_BRUSH));
としてhdcへBitBltしてみたのですが何故か転送されません
ただしHBITMAPを取得してSelectObject(memDC, hBmp);と選択して転送するとそのビットマップがきちんとhdcに転送されているようです。(描画された)
もう何なんでしょうか(´・ω・`)
742デフォルトの名無しさん:2006/02/26(日) 15:10:56
描画結果を保存する先がないから。
743デフォルトの名無しさん:2006/02/26(日) 15:20:06
>>742
試しに500x500のHBITMAPを作成してSelectObjectでメモリデバイスコンテキスト(以下memDC)に選択させてから
memDCにFillRectで矩形を描画してみたら上手くいきました。
しかしなんか無理やり感があるのでもっと調べたいと思います
すみませんでした
744デフォルトの名無しさん:2006/02/26(日) 15:21:03
>>742
それは間違い。
1x1、モノクロのビットマップがある。
転送されていないんじゃなくて、気付かないだけ。

>>741
適切な大きさ、色深度のビットマップを作成し、Selectしろ。
745デフォルトの名無しさん:2006/02/26(日) 15:23:52
>>744
わかりました、わざわざありがとうございます
746デフォルトの名無しさん:2006/02/26(日) 16:16:33
ttp://www.uploda.org/uporg322480.c.html

左クリック・右クリックを検出して、その座標に図形を描画してます。
クリックされる毎にこれまで描画した位置の図形は消されます。
作れたのはいいんですが、改めて考えるとと、どうして図形が消されるのか
分かりません……。
確かにクリック時一発目のInvalidateRect()では図形のある位置に再描画要求
をかけてますが、「消える」のはおかしいような……。
二回目のInvalidateRect()でクリック位置に描画されるのは納得なんですが。

下らない質問ですいません。
747デフォルトの名無しさん:2006/02/26(日) 16:34:05
ヒント
つ InvalidateRectは、即座に再描画されるわけではない
748デフォルトの名無しさん:2006/02/26(日) 16:35:25
>>746
WM_PAINTで描かないから消える。
749デフォルトの名無しさん:2006/02/26(日) 16:46:52
( ゚д゚)ポカーン
750デフォルトの名無しさん:2006/02/26(日) 16:58:03
( ゚д゚)ポンカーン
751デフォルトの名無しさん:2006/02/26(日) 17:03:41
タイーム( ゚д゚)ボカーン
752デフォルトの名無しさん:2006/02/26(日) 18:01:03
リソースのpng画像をロードして、HBITMAPの形にするAPI
(LoadImageのpngバージョン)がありましたら教えてください。
使用コンパイラは、VC6、BCCです。
753デフォルトの名無しさん:2006/02/26(日) 18:06:58
ヒント:ライブラリ
754デフォルトの名無しさん:2006/02/26(日) 18:07:42
pnglib
755752:2006/02/26(日) 18:22:33
ありがとうございます。
imgctl.dllは知っていたんですが、
外部ファイル名専用みたいなので、
リソースの場合はどうすればいいのかなと。
pnglibを調べてみます。
756デフォルトの名無しさん:2006/02/26(日) 18:25:17
libpngじゃなかったか?

それはともかく、gdiplusというものもある。
757752:2006/02/26(日) 18:31:37
ありがとうございます。
758デフォルトの名無しさん:2006/02/26(日) 18:33:20
libpngはいつからリソースを扱えるようになりましたか?
759デフォルトの名無しさん:2006/02/26(日) 18:40:24
最初から。
760デフォルトの名無しさん:2006/02/26(日) 18:41:19
>>759
kwsk
761752:2006/02/26(日) 19:06:54
んっ、無理なんですかね。
imgctlを作るのにlibpngを利用したみたいですので、
多機能なimgctlにその機能がないという事は、
元のlibpngにもなかったらからとも考えられる。
762デフォルトの名無しさん:2006/02/26(日) 19:09:10
全然無理じゃないからやってみろ。
763デフォルトの名無しさん:2006/02/26(日) 19:14:50
>>762
むりです(><)
764デフォルトの名無しさん:2006/02/26(日) 19:19:55
リソースから読み取ったバイナリを、ストリームに流すだけで展開できる。
直接読み取る関数が無いかだけで、出来ないと決めつけるのは無能にも程がある。
765デフォルトの名無しさん:2006/02/26(日) 19:20:14
見当違いの考察は無用。
さっさと手を動かせ。
766752:2006/02/26(日) 19:21:46
むりです(><)
俺の頭のスペックではむりです(><)
767デフォルトの名無しさん:2006/02/26(日) 19:22:05
libpngでメモリ上のPNGイメージを展開する例。
ttp://www.kcrt.net/program/uselibpng_read.html
768752:2006/02/26(日) 19:38:41
>>764
ありがとうございます。LPVOIDを渡している
関数がありますが、そこら辺りですかね。
769752:2006/02/26(日) 19:40:18
>>767
ありがとうございます。
770デフォルトの名無しさん:2006/02/26(日) 20:09:50
ちと大雑把で迷惑な質問かもれしませんが…。
SPY++とかウィンドウエクスプローラ(WINMAP.EXE)のように
画面上のオブジェクトを細かく追っかけていくには
どのようなAPIを用いればいいでしょうか?
何がしたいかと言うと、例えばヤフーメッセンジャーとかの
Internet Explorer_serveクラスのrコンポーネントを弄りたいのです。
よろしくお願いします。
771デフォルトの名無しさん:2006/02/26(日) 20:22:52
弄るな
772デフォルトの名無しさん:2006/02/26(日) 20:30:49
弄ぶ
773デフォルトの名無しさん:2006/02/26(日) 20:33:08
>>770はイジリー岡田
774デフォルトの名無しさん:2006/02/26(日) 20:44:01
何この流れ。
775デフォルトの名無しさん:2006/02/26(日) 21:10:58
現在、特定のプロセスを監視するプログラムを作ろうと考えています。
具体的には、ゲーム等のexeが起動したら、それを強制終了させるものです。

そこで、質問なのですが
どうすればプロセスを特定できるでしょうか?
よろしくお願いいたします。
776デフォルトの名無しさん:2006/02/26(日) 21:33:58
PSAPI か パフォーマンスモニタ か
777デフォルトの名無しさん:2006/02/26(日) 21:39:15
>>775
ポリシーで起動禁止にする手もある
778760:2006/02/26(日) 21:51:23
>>764
なるほど、「libpngで」リソースから読めるわけじゃないのね。
#それなら余りに当たり前だ。
##てっきり、元質が>752だからリソースから直接読めるのかと思っちまったぜ。
779デフォルトの名無しさん:2006/02/26(日) 21:58:23
>>775
っ[WMI使ってみる?]

WinAPIなのにWMIをすすめる俺の凄さ
780デフォルトの名無しさん:2006/02/26(日) 22:14:54
direct*なDLLをみんなつぶしてしまう
781デフォルトの名無しさん:2006/02/26(日) 22:52:19
>>746
InvalidateRect()の最後の引数をTRUEにするとWM_PAINTが呼ばれた
瞬間に内容を消去するからじゃない?ここをFALSEにしてみては。
782デフォルトの名無しさん:2006/02/26(日) 22:56:10
質問です。XP、VC++ 2005 です。
C/C++ スレから誘導されて着ました。

フォントのビットデータを取得しようとしています。
以下のコードは、まずデータ取得に必要なサイズを調べているところですが、
GetGlyphOutline に失敗します。

 UINT uChar = 'a';

 GLYPHMETRICS gm;
 uChar &= 0x0000ffff;
 MAT2 mat = {{0,1}, {0,0}, {0,0}, {0,1}};

 // フォントを取得
 HDC hDC = CreateCompatibleDC(0);
 DWORD size = GetGlyphOutline(hDC, uChar, GGO_GRAY8_BITMAP, &gm, 0, NULL, &mat);
 if (size == GDI_ERROR)
  return false; // ここで失敗

GetGlyphOutline を呼び出す直前に各変数の値を調べてみましたが、特に異常な値は見当たりません。
にも関わらず、GetGlyphOutline がエラーを返してくれます。
何が原因か分からないでしょうか。
よろしくお願いします。
783デフォルトの名無しさん:2006/02/26(日) 23:00:07
>>781
ウィンドウを動かさない、かつ他のウィンドウを被せない、って事ならそれでもいいだろうけど…
784デフォルトの名無しさん:2006/02/26(日) 23:03:26
>>782
フォントを設定しないと駄目なんじゃない?
785782:2006/02/26(日) 23:06:53
>>784
しまった、デフォルトのフォントが選んであると思い込んでました。
やってみます。ありがとうございました。
786デフォルトの名無しさん:2006/02/26(日) 23:08:24
こんばんは。
ウィンドウの削除をしてもプロセスが残ってしいます。

WinMainからメイン処理用関数を呼んでその中で
永久ループを回しているのですが、ループの中で

while(1){
(いろんな処理)
if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}

としてWINDOWSメッセージを受け取れるようにして
処理を行っています。

コールバックの部分での終了処理は

case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;

としています。

プロセスが残る原因がわからないのですが、永久ループを抜ける
処理を何か入れてあげなければならないのでしょうか?
原因がわかる方いらっしゃいましたらお願いいたします。
787デフォルトの名無しさん:2006/02/26(日) 23:09:42
で、そのwhileループを抜ける処理はどこにあるんだ?
788デフォルトの名無しさん:2006/02/26(日) 23:16:36
>>781
いえ、前の図形は消したいので、現状の動きが実現したい動きでいいんです。

ただ、クリックが検知された時、一回目のInvalidateRect()のredraw_rectの
値は前にクリックした場所で、実際に○や□があるところ。
ここでWM_PAINTが呼び出されても、消すような処理はしてないように思えて……。
ちなみに第3引数をFALSEにしても同じで、前までの位置の図形はきえます。
>>747では非同期ということですが、だから「消える」という理由になっている
のでしょうか……。
混乱してきました。NULLで全画面描画にすれば悩むこともなかったのに……。
789デフォルトの名無しさん:2006/02/26(日) 23:27:08
>>787
やはり抜ける処理がいりますよね?
PostQuitMessage(0); でそこらへんも勝手に抜けて
終わらせてくれるのかなぁと思ったのですが・・・。

永久ループのとこのPeekMessageでWM_CLOSEが着てたら
抜けるように良いのかな…。
790・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/26(日) 23:33:23 BE:163805928-
else { break; }


てか、なんでそこで「いろいろな処理」やる必要あるんだ
791デフォルトの名無しさん:2006/02/26(日) 23:33:39
>>788
第3引数って片方のInvalidateRectだけFALSEにしたとか?
792デフォルトの名無しさん:2006/02/26(日) 23:37:21
>>789
WinMainでやる場合には、PeekMessageを使わずにGetMessageを使って
while (GetMessage(....
とするのが簡単。
PeekMessageを使う場合には、WM_QUITが来たらループを抜ける。
793デフォルトの名無しさん:2006/02/27(月) 00:02:57
>>785
モノクロビットマップなのに、第3パラメータでグレースケールの指定をしているからかもしれん。
試してみんとわからんけど。
794デフォルトの名無しさん:2006/02/27(月) 00:03:20
>>788
WM_ERASEBKGND
795デフォルトの名無しさん:2006/02/27(月) 00:09:00
>>790
ゲームのメインループでここでタイマーの計算とかして
一定時間起きにInvalidateRectして画面更新、とかやって
いるのです。

>>793
PeekMessageのあとにmsg.messageの内容見てbreak;
させるようにしたらちゃんと終了できるようになりました。

どうもありがとうございました。
796デフォルトの名無しさん:2006/02/27(月) 00:46:05
>786
伝統的なPM_NOREMOVE + GetMessageも薦めてみる
while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
 int gmr = ::GetMessage(&msg,NULL,0,0);
 if ((gmr == 0) || (gmr == -1))
  return msg.wParam;
 ::TranslateMessage(&msg);
 ::DispatchMessage(&msg);
}
797746:2006/02/27(月) 01:57:58
>>794
なるほど……!
私の疑問を解決するのに、その一言で必要十分でした。
InvalidateRect()を行うと、WM_ERASEBKGND→WM_PAINTの順番でメッセージが
来るんですね。そのメッセージを掴んでなかったからDefWindowProc()にて
背景塗りつぶしが行われて……。
勉強になりました。感謝感謝です。
798デフォルトの名無しさん:2006/02/27(月) 03:01:13
昨日始めたばかりの者です。
「未解決の外部シンボル_imp_MessageBoxA@16が関数_WinMain@16で参照されました。」
とエラーがでたのですが、解決方法がわかりません・・・
winmainの中は
{MessageBox(NULL , TEXT("message") , TEXT("message") , MB_OK);} だけです。
何がいけないのでしょうか?
ちなみに、使っているのはVisualStadio2005でc++です。
799デフォルトの名無しさん:2006/02/27(月) 03:12:40
何を参考にしているのか知らんが、参考書が悪いか、ちゃんと読まないお前が悪いかのどちらかだ。
800デフォルトの名無しさん:2006/02/27(月) 03:27:23
1. カーソルキーを押し続けると滑らかにスクロール(キーリピート時のようにカクカクせずに)、
2. カーソルキーを離すと滑らかにスクロールストップ(現在位置が目標位置に漸近するように)、
3. カーソルキーを短く押して離すと1コマ分スムーズにスクロールしてストップ、
ということをやりたくて以下のようにしてみたんですが、
概ね実現できたものの、3のときに例えばカーソルキーを連打すると、
「連打した回数」滑らかスクロール&ストップを繰り返してウザイデス。
このキーリピートのような振る舞いをなくしたいのですが、いい知恵ないでしょうか。

case WM_TIMER: {
 switch (wp) {
  case TIMER_KEYACCEPT: { // 例えば100msec間隔
   if (HIBYTE(GetAsyncKeyState(VK_UP))) scroll(VK_UP); // カーソルキーを押し続けるとスクロール
   else if (HIBYTE(GetAsyncKeyState(VK_DOWN))) scroll(VK_DOWN);
   break;
  }
 }
}

case WM_KEYUP: {
 switch (wp) {
  case VK_UP:
  case VK_DOWN: {
   while (!smooth_stop(wp)) { // ←カーソルキーを離したら滑らかにスクロールストップ
    InvalidateRect(hwnd, 0, true); // 「少し移動して描画」を繰り返す。移動幅は段々小さく。
    UpdateWindow(hwnd);
   }
  }
 }
}
801デフォルトの名無しさん:2006/02/27(月) 03:46:24
>>798
うわ〜こりゃひどいわ。直すべきところはいろいろあるけど、
まずすぐ質問すればいいやという根性を直すのが最初だな。
・・・MSDNでMessageBoxを調べてみるんだね。十分に調べて、
それでわからなかったら、おまいさんにはまだ早すぎたってことだ。
802デフォルトの名無しさん:2006/02/27(月) 03:56:40
>>800
スクロール停止処理後に
while( PeekMessage(&msgtemp,hwnd,WM_KEYFIRST,WM_KEYLAST,PM_REMOVE) );
でキーメッセージを握りつぶすとか。
803800:2006/02/27(月) 04:49:07
>>802
どうもありがとう。
そういう風にするのって普通にアリなんでしょうか(ひょっとして定石!?)
そもそもWM_KEYUPが続けて呼ばれる理由がよく分からないので
その辺はっきりさせる必要がある気もしつつ。
804デフォルトの名無しさん:2006/02/27(月) 05:22:19
WM_TIMERを使わないと無理じゃないか?
滑らか処理を始めるかどうかを知るためのタイマーと、
滑らか処理そのもののタイマー。
タイマーコールバック内でGetAsyncKeyState()を使い
キーアップされたかどうか調べてキーアップしているようならタイマー削除。
805デフォルトの名無しさん:2006/02/27(月) 06:10:21
>>803
キーを押して離したらその回数だけメッセージが来る。
処理してなかったら後から当然のように呼ばれるだけで。
806798:2006/02/27(月) 09:08:13
>>799 >>801
けっこう調べたんだけどわかんないってことは、自分にはまだ早いってことですね。
出直してきます。ありがとう
807デフォルトの名無しさん:2006/02/27(月) 12:57:46
>>803
メッセージがキューに溜まっているからじゃないかな?
>>806, 798
見ているかわからんけど、MSDNにはどんなライブラリが必要か書いてあったよね?
過去にC++でコードを書いたことがあれば、SDKを使ったことなくても、あんな感じのエラーが
どういう状態ででるか経験するはず。VS使わずエディタとコマンドラインからコンパイルしながら
練習してごらん。
808デフォルトの名無しさん:2006/02/27(月) 13:12:06
※厨房に武器は与えないようにしましょう
809デフォルトの名無しさん:2006/02/27(月) 13:24:42
転職システム

厨房LV5以上 → 知ったか厨
810デフォルトの名無しさん:2006/02/27(月) 13:37:19
Lv1 → Lv2 (環境整備) 必要Exp 4,294,967,295
811デフォルトの名無しさん:2006/02/27(月) 18:17:17
>>771-773
ネタじゃないんですが…。
よろしくお願いします。
WSHとかじゃうまく掴んないんでAPI使って捕まえたいんですよ。
812デフォルトの名無しさん:2006/02/27(月) 18:22:39
何が目的でそういうことをしたいのかを書くと
もっと有益なレスが得られるかもしれない。
813デフォルトの名無しさん:2006/02/27(月) 18:36:09
>>811
誰がネタって言ったよ
弄るなって言ってんだ
814デフォルトの名無しさん:2006/02/27(月) 18:37:27
>>811
>>770見ても意味がよくわからんかったんだけど、
・EnumChildWindows, GetWindowなんかで子ウィンドウをなめていく
・GetClassName, GetWindowLongなんかでそのウィンドウの情報を取得
ってことか????
815デフォルトの名無しさん:2006/02/27(月) 19:35:06
自分のIPアドレスを設定(変更?)するにはどういう関数を使ったらよいのでしょうか?
OSはwindowsXP、開発環境はwindows2000かXPで、
コンパイラはVC++6かボーランドCです。
ググって見たけど、うまい検索ワードがわからなくなて見つからず、
WSAStartup()した後に、gethostbyname()して、
strcut hostentのh_addr_listを直接書き換えるのも駄目だったので。
よろしくお願いいたします。
816デフォルトの名無しさん:2006/02/27(月) 19:42:50
ローカルかグローバルかも書けないクズはもうくんなよ
//ローカルかグr−バルか改めて書き込まなくてもいいからな、吊れよ
817デフォルトの名無しさん:2006/02/27(月) 19:45:11
>>816
今月最高のバカ
818デフォルトの名無しさん:2006/02/27(月) 19:47:07
悔しそうだな
819デフォルトの名無しさん:2006/02/27(月) 19:48:32
釣りかと思ったら、マジでこんな間抜けなこと書いてるのか。
820デフォルトの名無しさん:2006/02/27(月) 20:00:08
>>815
ネットワークアプリの経験はあまりないんだけど、ググッて5分以内に
目的の関数が見つかったんだけど・・・
それ用のAPIがあったよ。Aから始まるAPIで。ググれば見つかるから、
もうちょっと頑張ってみたら?特別なキーワードじゃなくて見つかるよ。
821デフォルトの名無しさん:2006/02/27(月) 20:05:48
AddIPAddress
822デフォルトの名無しさん:2006/02/27(月) 20:08:50
IEコンポーネントのウィンドウをロード中に閉じようとすると
たまにメモリリークを起こすのは仕様ですか?
823デフォルトの名無しさん:2006/02/27(月) 20:41:43
>>810
知ったかは環境持ってなくても聞きかじりの知識で首を突っ込んでくるぞ
824デフォルトの名無しさん:2006/02/27(月) 21:06:20
>>822仕様なのでしょうがないです
825デフォルトの名無しさん:2006/02/27(月) 21:06:58
それはそれは
どうしようもないでしね
826デフォルトの名無しさん:2006/02/27(月) 21:08:11
我慢しよう
827デフォルトの名無しさん:2006/02/27(月) 21:09:29
イヤです。
828デフォルトの名無しさん:2006/02/27(月) 21:10:19
ちくしよう
829デフォルトの名無しさん:2006/02/27(月) 21:15:22
自己解決しました
830デフォルトの名無しさん:2006/02/27(月) 21:26:59
すげー
831デフォルトの名無しさん:2006/02/27(月) 21:39:42
やっぱり駄目でした
832デフォルトの名無しさん:2006/02/27(月) 21:55:12
やっぱり、事故解決していました
833デフォルトの名無しさん:2006/02/27(月) 22:02:12
>>820 >>821
ありがとうございました。
検索の仕方が下手なのか、結構頑張ったつもりなのですが・・・
windowsとIPアドレスと設定で検索かけると、
普通にネットワークのプロパティから設定しているものが沢山かかったので、
それを見ているだけで時間を食ってました。
APIとかwin32とかwinsockとかを検索ワードに入れればよかったんですね
834820:2006/02/27(月) 22:18:08
>>833
そっかー自力で見つかった方がいいかなって思ったんだけど、
うまくいかなかったら仕方なし。検索は慣れなのかな?
使ったキーワードは、"windows api ipアドレス 変更"そのまんま。
2ページ目に「ソフトでPCのIPを変更〜」みたいなのが出てくるから、そっから辿ればよし。
835デフォルトの名無しさん:2006/02/27(月) 22:21:32
ちょっと困ってます。
836デフォルトの名無しさん:2006/02/27(月) 22:31:16
だからなに!
837デフォルトの名無しさん:2006/02/27(月) 22:58:26
生活に困ってます
838デフォルトの名無しさん:2006/02/27(月) 23:00:50
それじゃあ、仕方がないな。
839デフォルトの名無しさん:2006/02/28(火) 01:30:10
840デフォルトの名無しさん:2006/02/28(火) 01:38:06
API は大文字でなきゃイヤです ><
841デフォルトの名無しさん:2006/02/28(火) 04:46:41
>>814
サンクス。それやってみます。
842デフォルトの名無しさん:2006/02/28(火) 10:40:11
ファイルが他のプロセスが使用中の為コピー出来ない場合があって、それを次回リセット後コピーするようにしたいんですけど、
APIでサポートがありますか?
よろしくお願いします。
843デフォルトの名無しさん:2006/02/28(火) 10:45:39
リセットって何よ
844デフォルトの名無しさん:2006/02/28(火) 10:55:33
>>842
MoveFileEx()


次回起動時、という意味でリセットを使っているのならな。
845842:2006/02/28(火) 11:21:12
>844
レスありがとうございます。
>次回起動時、という意味でリセットを使っているのならな。
そうでした、説明不足ですいません。

MoveFileEx()
まさにこれでした、ありがとうございます。
846デフォルトの名無しさん:2006/02/28(火) 11:24:00
>>845
本当に説明不足だと思っての? 脳が足りないだけだろ 氏ねよ
847デフォルトの名無しさん:2006/02/28(火) 12:09:51
mutexについてなんですが、
CreateMutex(NULL,TRUE,"unique");
こんな感じでmutexを作成後、エラーなどでmutexを解放しないでプロセスが終了した場合、mutexはどなってしまうんでしょう?
848デフォルトの名無しさん:2006/02/28(火) 12:23:09
>>847
一度プロセス無理矢理終了させた後もう一度作り直してみれば分かる。
849デフォルトの名無しさん:2006/02/28(火) 12:39:11
>>847
解放されると思うけど、試してみるのが早い
850デフォルトの名無しさん:2006/02/28(火) 13:47:07
>>846
なぜそんなに怒っているんだ・・
851デフォルトの名無しさん:2006/02/28(火) 14:34:24
Visual Studio .NET (C++)。
ある無料アプリケーションのオマケ機能で、アプリケーションの主機能でできたデータを CD/DVD に焼く機能を付けようとしています。
CD/DVD 双方書き込めるドライブの情報を取得しようとすると、CD のほうしか取得できていないようです (実際、CD でしか焼けません)。
「CD のほうしか」というのは、ドライブの ID のうしろに「CD-R/RW」と付くのです。
市販の焼きアプリケーションなどでは、同じ ID のうしろに「CD-R/RW」が付く場合と「DVD-RAM」が付く場合とあるので、
恐らく別々に取得できるのではないかと憶測しています。
憶測を含め、間違いがあったら、忌憚なく訂正してください。
お願いします。
852デフォルトの名無しさん:2006/02/28(火) 14:51:48
DVD焼く機能はOSに付いていないはずだが。
オマケ機能なら、CD-Rに限定しておく方が吉。
853デフォルトの名無しさん:2006/02/28(火) 14:52:28
ReadProcessMemoryで他プロセスから4byte取得しているのですが

int A;

ReadProcessMemory( hWnd , (LPCVOID)0x... , A , 4 , &Read );
printf( "%d" , A );
これだとうまく数字が表示されます。しかし

int A;
char buf[256];

ReadProcessMemory( hWnd , (LPCVOID)0x... , A , 4 , &Read );
wsprintf(buf , "%d" , A);
MessageBox(NULL , buf , "" , MB_OK);
で表示させてやると正常な値が出力されません。
何か根本的なところで詰まっているのでしょうか・・・。
854デフォルトの名無しさん:2006/02/28(火) 14:55:44
すみません、正しくは
ReadProcessMemory( hWnd , (LPCVOID)0x... , &A , 4 , &Read );
です。スレ汚し申し訳ない。
855デフォルトの名無しさん:2006/02/28(火) 14:58:17
>>853
読み取ったメモリ内容を表示させたいのだったら、
どちらもうまく表示されないと思うけど。

>ReadProcessMemory( hWnd , (LPCVOID)0x... , A , 4 , &Read );
hWnd ってのも何だか変だし、A じゃなくて &A としないとダメだし。
856デフォルトの名無しさん:2006/02/28(火) 15:26:41
レスありがとうございます。
〜の部分はGetWindowThreadProcessIdとOpenProcessでハンドルは取得しています。
前者のソースではうまく表示されているのですが・・・。後者のソースを

char A[4];
int B;
char buf[256];

ReadProcessMemory( hWnd , (LPCVOID)0x... , A , 4 , &Read );
memcpy(&B , A , sizeof(int));
wsprintf(buf , "%d" , B);
MessageBox(NULL , buf , "" , MB_OK);
にしてもダメでした。
857デフォルトの名無しさん:2006/02/28(火) 15:29:33
なんか君は色々とダメだなあ
858デフォルトの名無しさん:2006/02/28(火) 15:34:09
>>856
全く同じプログラムで、前者の
>printf( "%d" , A );

>char buf[256];
>wsprintf(buf , "%d" , A);
>MessageBox(NULL , buf , "" , MB_OK);
にすると表示が変ということですか?

他所のプロセスなので実際に値が違っている可能性も
あると思いますが、そこは確認しましたか?
859デフォルトの名無しさん:2006/02/28(火) 15:40:19
wsprintf使うならTCHAR buf[256]にしとけ。
860デフォルトの名無しさん:2006/02/28(火) 16:27:07
>>847
カーネルによって、自動的にミューテックスオブジェクトの参照カウンタがデクリメントされる。
ほかに、"unique"という名前のミューテックスオブジェクトを参照しているプロセスがない場合、
自動的に破棄される。

CloseHandle()せずにプロセスが終了すると、リークするんじゃないか、
などという心配は無用。
861デフォルトの名無しさん:2006/02/28(火) 16:29:32
解決しました。そしてレス下さった方ありがとうございます。
下記のソースでハンドルの取得にミスがありました。
プロセスハンドルhWndと書いていることからお察し下さいorz お騒がせしました。
862デフォルトの名無しさん:2006/02/28(火) 18:03:50
>857
ワラタ。
863デフォルトの名無しさん:2006/02/28(火) 18:07:49
>859
>wsprintf使うならTCHAR buf[256]にしとけ。
wsprintf使うならwchar_t buf[256]にしとけ。
_stprintf使うならTCHAR buf[256]にしとけ。
なのでは?
864デフォルトの名無しさん:2006/02/28(火) 18:12:32
>>863
wsprintfはWindowsAPIだ
865デフォルトの名無しさん:2006/02/28(火) 18:13:17
>>863みたいなのが絶えないのは、
MSが安直にwsprintfなんて*API*を作ってしまったせいだ。
866デフォルトの名無しさん:2006/02/28(火) 18:15:41
>>863

int wsprintf(
  LPTSTR lpOut, // 出力バッファ
867デフォルトの名無しさん:2006/02/28(火) 18:21:22
wsprintfとswprintfは紛らわしいな。
868デフォルトの名無しさん:2006/02/28(火) 19:53:05
ATL/WTLのスレから誘導されてきました。
質問は次の内容になります、何方か情報ありましたらよろしくお願いします。

> VBやJScriptのようCOMを#importなどを使わずに動的に呼び出したいんですけど、例えば次のように、
>
> VBの場合、
> Set fso = CreateObject("Scripting.FileSystemObject")
>
> JScriptの場合、
> fso = new ActiveXObject("Scripting.FileSystemObject");
>
> 方法ご存じでしたらよろしくお願いします。
869デフォルトの名無しさん:2006/02/28(火) 20:07:35
CoCreateInstanceは動的ではなかったのか・・・
870デフォルトの名無しさん:2006/02/28(火) 20:46:37
LoadLibraryして、DllGetClassObjectから始めるのかもしれない。
871デフォルトの名無しさん:2006/02/28(火) 22:07:05
>>868
COMのディスパッチインターフェースとオートメーションを勉強してきてね。
872デフォルトの名無しさん:2006/02/28(火) 22:14:31
>>868
#import でも多分>>868が必要としている程度には動的だから、
おとなしく #import を使うのが良いと思う。
873デフォルトの名無しさん:2006/02/28(火) 22:34:02
>>868
もちろんそれ以上に動的になんでもやれる方法はある。(>>871)
しかしあまりにも面倒すぎてわけわからないから、
868が混乱をきたさないよう敢えて皆触れずにいるということに気付け。
874デフォルトの名無しさん:2006/02/28(火) 22:35:20
お前らは868サンの凄さを知らない…
875デフォルトの名無しさん:2006/02/28(火) 22:38:50
>>871
IDispatchは簡単でよいけど、C++ が VB に負けるのはシャクだから
ここはやはりITypeInfoからインタフェイス情報を得てアセンブラコード経由で
vtableインタフェイスで呼び出すべき。

ん?VBのvtable呼び出しはearly bindingだったか・・・
876デフォルトの名無しさん:2006/02/28(火) 22:53:19
>>868
こ、こうかな・・・

ifstream vbs("com.vbs");
vbs << "Set fso = CreateObject(\"Scripting.FileSystemObject\")" << endl;
vbs.close();
system("com.vbs");



CoInitializeとかCoCreateInstanceとかのあたりかな・・・
877デフォルトの名無しさん:2006/02/28(火) 22:53:47
メニューやツールバーのボタンの上にマウスを持って行くと、
ステータスバーに説明が表示されるアプリが良くありますが、
あれってどうやって実装してるんでしょうか?
878デフォルトの名無しさん:2006/02/28(火) 22:57:47
>>875
IDispatch経由でしかメソッド・プロパティを公開しないdispinterfaceというものもある。
879デフォルトの名無しさん:2006/02/28(火) 23:00:46
>>877
ツールチップ
880デフォルトの名無しさん:2006/02/28(火) 23:04:57
>>877
SB_SETTEXT
かなあ…
881デフォルトの名無しさん:2006/02/28(火) 23:21:33
>>879
いえ、それはまた別のものです、はい

>>880
SB_SETTEXTでステータスバーに文字列を出す部分は分かるのですが、
問題は、そのタイミングをどうやって知るのかわからなくて
WM_MENUSELECTはポップアップメニューを開いた時しか来ませんでしたし・・・
NOTIFYメッセージも数有りすぎて良く分からないのが現状です・・・orz
882デフォルトの名無しさん:2006/02/28(火) 23:38:19
>>881
>WM_MENUSELECTはポップアップメニューを開いた時しか来ませんでしたし・・・

普通のコマンドメニューでもセパレータでも来ますよ。
前に使ったことあるし、今Spy++でも確認しますた。
883デフォルトの名無しさん:2006/02/28(火) 23:55:28
>>877
MFCのソース見れ
884800:2006/03/01(水) 00:03:18
>>802-807

結局以下のようにして解決ということにしました。
どうも〜。

TIMER部分
if (HIBYTE(GetAsyncKeyState(VK_UP))) scroll(VK_UP), flag=false;

KEYUP部分
if (flag==false) {
 while (!smooth_stop(wp)) {
  ...
 }
}
flag=true;
885・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/03/01(水) 00:03:46
MFCのソースってPro以上じゃないと見れなくね?

WTLでも使えるがソースよく読んだことないや
886デフォルトの名無しさん:2006/03/01(水) 00:11:24
>>877
MenuHelpっていうAPIで全部勝手にやってくれる。
887デフォルトの名無しさん:2006/03/01(水) 01:00:53
そのアプリがアクティブになっていなくても
マウスやキーボードの入力を監視して
必要なら自分で処理してその入力を握りつぶすような処理は
どうやってやればいいんでしょうか?
888デフォルトの名無しさん:2006/03/01(水) 01:01:10
>>885
2003スタンダード版には付いてたぞ。
889デフォルトの名無しさん:2006/03/01(水) 01:30:15
インスタンスハンドルって、EXEを実行した毎に変わるもんじゃないの?
同じEXE複数同時に実行しても同じ値しかでないんだけど。気のせいかな。

ソースはこんな感じです。

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{

char A[10];

sprintf(A,"%d",hInstance);
MessageBox(NULL,A,"インスタンスハンドルの値",MB_OK);

return 0;
}
890デフォルトの名無しさん:2006/03/01(水) 01:31:55
そのインスタンスハンドルが変わってたのはWin16まで。
891デフォルトの名無しさん:2006/03/01(水) 01:45:59
>>890
Win32ではインスタンスハンドル変わらなくていいんですか?
売ってた本には
「インスタンスハンドルはOSがそれぞれのインスタンスを識別するために〜」
的なことが書いてあったんですが。
892デフォルトの名無しさん:2006/03/01(水) 02:24:19
>>887
フック
893デフォルトの名無しさん:2006/03/01(水) 02:27:34
OSはXPsp2で処理系はBCC5.5.1です

エントリーポイントがWinMainではなくmainの場合
どうしてもDOS窓が出現してしまいます。
もしmainの場合このDOS窓を出現させる事をさせなくする手法はありますか?
894デフォルトの名無しさん:2006/03/01(水) 02:33:13
windowsでウィンドウをクラス化する時に、GetWindowLongPtrの、GWLP_USERDATAに
自分のポインタを突っ込む方法が使われてたと思うのですが、
64bit版では使えなくなってしまいました。

他の何か良いアイデアで解決された方居ませんか?
895デフォルトの名無しさん:2006/03/01(水) 02:38:00
>>893
すまんが意味がまったく分からん
もうすこし説明を頼む
896デフォルトの名無しさん:2006/03/01(水) 02:42:10
>>894
Set/GetProp
897・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/03/01(水) 02:45:26
>>893
コンソール上で動くからコンソールアプリケーションなの。
素直にWinMainで始まるアプリ使いましょう。

mainの前処理に、コンソールウィンドウを作成・割り付ける処理が入ってるから
それをどうにかするのは無理。

ただ、あとで隠す方法はあるにはある。


ただし、こんなことやったら大目玉食らうぜ

   ShowWindow(GetForegroundWindow() , HW_HIDE);

まさに邪道
898894:2006/03/01(水) 02:47:04
>>896
ありがとうございました。
899・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/03/01(水) 02:48:09
訂正

ShowWindow(GetForegroundWindow() , SW_HIDE);


こんなことやったら、自分でコマンドプロンプト開いてコマンドラインから呼び出した時に
コンソール画面が消えちゃうからね。
だから、絶対やらないの。
900デフォルトの名無しさん:2006/03/01(水) 02:48:43
>>897
はぁそうですか
901デフォルトの名無しさん:2006/03/01(水) 02:52:47
>>899
はいはい、ワロスワロス
902デフォルトの名無しさん:2006/03/01(水) 03:12:40
>>891
インスタンスハンドルってのは、実はモジュールのベースアドレスを指す
ポインタそのもの。

Win16では全てのプロセスが同じメモリ空間で動いていたから、各プロセスは
お互いに重なり合わないように別のアドレスにロードされていたので、
プロセスごとにインスタンスハンドルが異なっていた。

Win32ではプロセスは自分専用のメモリ空間を持っていて、プロセスごとに
リロケート(再配置)する必要がないので、通常は実行可能ファイルに記載された
ベースアドレス通りに読み込まれる。

インスタンスハンドルはプロセス内でのモジュールを識別するためのもので、
異なるプロセス間でのやり取りに使われる物ではないので、同じプロセス内で
一意であれば問題ない。

同じ実行ファイルの別インスタンスを識別するには、プロセスハンドルを使う。
(プロセスハンドルまで必要になるのは稀で通常はウィンドウハンドルで十分)
903デフォルトの名無しさん:2006/03/01(水) 08:28:52
>>882
あれ、そうですか・・・?
やり方悪かったかなぁ・・・
もう一度やってみます

>>886
MenuHelpは、Inset表示にしてても勝手にプレーンな表示されちゃうんでちょっと・・・
904デフォルトの名無しさん:2006/03/01(水) 12:39:01
>>877
うろ覚えだけど
WM_NCHITTEST
じゃねーの?
これのHITTESTCODEみる
自前処理ならって前提
905デフォルトの名無しさん:2006/03/01(水) 12:41:53
>>894の話は本当?
俺は使えなくなったなんて話、聞いたことがない。
906デフォルトの名無しさん:2006/03/01(水) 12:50:35
>>897
せめてFreeConsole()を使おうぜ……。
907デフォルトの名無しさん:2006/03/01(水) 12:51:11
>>894みたいに勝手に勘違いしてデマを広める救いようのない人間が、
堀江メール事件のような事件を起こすんだろうな。
908デフォルトの名無しさん:2006/03/01(水) 12:54:49
>>893
BCCでできるかは知らんけどsubsystemとエントリーポイントが
別々に指定できるのなら可能。
909デフォルトの名無しさん:2006/03/01(水) 13:59:04
あるプロセスに DLL から SetWindowsHookEx(WH_GETMESSAGE, GetMessageProc, ...) で
フックを欠けたのですが、この場合、まずプロセスの本来のメッセージ処理ルーチンを通ってから、
フックした GetMessageProc に来るので正しいでしょうか?
だとしたら、この順番を逆に、まず自前の GetMessageProc を通るようにすることはできますか?
910デフォルトの名無しさん:2006/03/01(水) 13:59:07
>>893
ILINK32を使い、C0X32.OBJを渡しておきながら/aaを指定すればよい。
BCC32からは無理だと思う。

こういうことは本当はBCCのスレへ行け。
911デフォルトの名無しさん:2006/03/01(水) 14:02:08
>>909
それ、逆
912デフォルトの名無しさん:2006/03/01(水) 14:14:52
main()ではじめてもコンパイラ(リン化)へのオプションで
コンソールアプリじゃなくできないのか?
てかランタイムやローダの問題と思うのだが…。
WinMainはやっぱ不自然。
913デフォルトの名無しさん:2006/03/01(水) 14:17:50
>>912
だからできるってば。
914デフォルトの名無しさん:2006/03/01(水) 14:53:16
>>912
> WinMainはやっぱ不自然。
そうは言ってもな、おとなしくWindowsの流儀に従っておくが吉。
argc,argvが使いたいというのなら、VCの場合は、それと同じ
内容を持つグローバル変数がある。(__argc,__argvだっけ?)
BCは知らん。
915251:2006/03/01(水) 14:54:14
レスが貰えず、自力でも解決できなかったので
もう一度だけ書き込みます。
何か分かることがあればご教示願います。

> アクティブウインドウにキー入力を送信するのに
> SendInput や keybd_event などがありますが、
> 一部のウインドウに対しては全く動作してくれません。
> SendMessage WM_KeyDownなどでもだめでした。
> (おそらくDirectInputで入力を拾っているためだと思います)

> しかし、JoyToKeyというフリーソフトではそのようなウインドウに対しても
> キー入力を送信できているので、なにかしらいい方法があるはずです。
> どのような方法を使えばキー入力を行うことができると思いますか?
916デフォルトの名無しさん:2006/03/01(水) 14:56:48
>>915
JoyToKeyの作者に聞くという方法はどうだろう。
917デフォルトの名無しさん:2006/03/01(水) 15:05:30
>>912
嫌ならそうMSに要望でも出しとけば?
他人の作ったもの使っておいてその流儀が嫌だとか言われてもな
918デフォルトの名無しさん:2006/03/01(水) 15:19:08
>>915
それね、
JoyToKeyは、keybd_eventを使っているが、
まあ、これからはそういうコードを書くべきではない。
SendInput()を使うべき。


で、DirectInputとかはどうすればいいのかって話だけど。
KEYBDINPUT構造体の説明をしっかり読んでいれば、簡単にわかるはず。
まあ、ここは自分も苦労したしね。

答えは、スキャンコードで指定すること。
Windowsで、普通使うのは、仮想キーコードだから、
スキャンコードに変換してやらなければならない。
直接やってもいいけど、MapVirtualKey()というAPIがある。
919デフォルトの名無しさん:2006/03/01(水) 15:22:52
>>918
え? JoyToKey は keyboard mini driver 経由じゃないのか?
920918:2006/03/01(水) 15:26:00
>>919
昔、ごにょごにょして調べてみたら、keybd_event()使っていた。
で、引数に渡している値が変だったから、調べてみたら、スキャンコード使っていた。

keybd_event()でスキャンコード指定ができるというのは、
確かMSDNには書かれていないんだけどね。

ちゃんと明示されている、SendInput()を使うのか吉。
921デフォルトの名無しさん:2006/03/01(水) 15:29:26
>>920
おお thx

>keybd_event()でスキャンコード指定ができるというのは、
>確かMSDNには書かれていないんだけどね。
平気でスキャンコードおくってたけど…
確かに載って無いなw (bScan が NOT USE になってるし)


明示されてる SendInput() を使うべきだろうね
922デフォルトの名無しさん:2006/03/01(水) 15:33:34
>>918
そういえば、MapVirtualKey()ってカーソルキーが上手く
変換できなかった記憶があるけど、なんでだろう?

だいぶ前の記憶なんて曖昧だが、たしかVK_RIGHT等を渡すと
テンキーのコードが返ってきた気がする。
923デフォルトの名無しさん:2006/03/01(水) 16:18:09
>>922
NumLock との兼ね合いで 多対1対応 になるからじゃね?
924デフォルトの名無しさん:2006/03/01(水) 16:28:23
困ります
925デフォルトの名無しさん:2006/03/01(水) 16:40:19
勝手に困ってろ
926915:2006/03/01(水) 16:55:47
回答ありがとうございます。
頂いた情報を元にコードを組んでみたのですが、万事解決とまでは行きませんでした。
delphiで申し訳ないですけど、下記のように書いたところ
一般のプログラムではキー入力が行われますが、DirectInputっぽいソフトでは
うまく動きません。何かおかしいでしょうか?

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i: Integer;
  a: array[0..1] of TInput;
begin
  for i := 0 to 1 do begin
    a[i].Itype := INPUT_KEYBOARD;
    a[i].ki.wVk := Ord('C'); // SCANCODE使用時は無視される
    a[i].ki.wScan := MapVirtualKey(Ord('C'), 0);
    a[i].ki.dwFlags := $08; //KEYEVENTF_SCANCODE
    if i = 1 then a[i].ki.dwFlags := $08 or $02; //KEYEVENTF_SCANCODE or KEYEVENTF_KEYUP
    a[i].ki.time := 0;
    a[i].ki.dwExtraInfo := GetMessageExtraInfo();
  end;
  SendInput(2, a[0], SizeOf(a[0]));
end;
927894:2006/03/01(水) 17:34:49
>>905
>>907
ポインタでもハンドルでもない、GWLP_USERDATAの値が64ビットに拡張されたという情報は見つけられませんでした。
もし情報があるなら教えて頂けると助かります。
928デフォルトの名無しさん:2006/03/01(水) 17:44:51
929デフォルトの名無しさん:2006/03/01(水) 18:07:34
>>927
なんのためのGet/SetWindowLong「Ptr」だと思っている。
930918:2006/03/01(水) 18:13:02
>>926
よりによってDel厨か……。
個人的に、PASCALの文法は、あまり好きになれないな。

文法をよく知らないから、間違っているのかもしれないが……

 >if i = 1 then a[i].ki.dwFlags := $08 or $02; //KEYEVENTF_SCANCODE or KEYEVENTF_KEYUP
これが気になる。
これひょっとして、

if (i == 1)
  a[i].ki.dwFlags = KEYEVENTF_SCANCODE ;
else
  a[i].ki.dwFlags = KEYEVENTF_KEYUP ;

こういう意味なんじゃないのか?
だったら、動かないのは当然だが。

>dwFlags
>Specifies various aspects of a keystroke. This member can be certain *combinations* of the following values.

キーをあげるときは、こうする。
dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP ;

それからもひとつ。
キーを押し下げてから、あげるまでに、ディレイが必要なこともある。
特に、ゲームなどだと、キーが押し下げられた時間などが、必要なことが多いし。
931デフォルトの名無しさん:2006/03/01(水) 18:16:26
横からだが or は論理or だろ
932デフォルトの名無しさん:2006/03/01(水) 18:17:23
> 文法をよく知らないから、間違っているのかもしれないが……
ああ、間違ってる
933918:2006/03/01(水) 18:20:57
間違っていたから無視してくれ。

キーの押し下げ押し上げの間に、適当にディレイをはさんでもダメだったら、わからない。
934デフォルトの名無しさん:2006/03/01(水) 19:22:42
>>926
SendInputの戻り値は?
935デフォルトの名無しさん:2006/03/01(水) 19:31:01
>>927
間違えたときには誤ろうよ。
936デフォルトの名無しさん:2006/03/01(水) 19:43:27
間違えたのならそれはすでに誤っている。
937926:2006/03/01(水) 20:59:43
>>934
SendInputの戻り値は 0 なので、「ほかのスレッドによって入力が
すでにブロックされている」らしいですが、具体的な意味が分かりません。

適当にDelayを入れてみたり、得意じゃないけどC++で
書き直してみたりしたんですが、やはり思ったようには動作していないです。
GetLastErrorを呼ぶと 127 が返って来ていたので
エラーメッセージを取得しようとFormatMessageの使い方を
調べていたというのが今の状況です。
938デフォルトの名無しさん:2006/03/01(水) 21:16:46
>>911
あれ、逆でしたか。実際にDLLつくって試したところ、
本来来ているはずのWM_ACTIVATEやWM_KILLFOCUSなどが全然捕まらなかったので、
てっきり元のプログラムが吸い取っているのかと・・。
なにか勘違いしているようなので、調べ直してみます。
ありがとうございました。
939デフォルトの名無しさん:2006/03/01(水) 21:19:28
940デフォルトの名無しさん:2006/03/01(水) 21:36:02
>>937
127 : 指定されたプロシージャが見つかりません。
941デフォルトの名無しさん:2006/03/01(水) 23:01:46
>>938
>本来来ているはずのWM_ACTIVATEやWM_KILLFOCUSなどが全然捕まらなかった
それはメッセージがsendされるか、postされるかの違いかと思われ。
確か、WH_GETMESSAGEはpostされるメッセージを補足する
ようだった気がする。
942デフォルトの名無しさん:2006/03/01(水) 23:14:50
あるウィンドウが受け取る全てのメッセージに絡みたいなら、SetWindowsHookExで目的のウィンドウが属するプロセスにDLLを仕込んだ後、
適当なメッセージをPostMessageし、そのメッセージ処理で目的ウィンドウをサブクラス化。

じゃなかったか?
943デフォルトの名無しさん:2006/03/02(木) 02:27:56
キーの組み合わせで登録したアプリケーションを起動するランチャーを作っています
今はPeekMessageでメッセージループを回して、メッセージがないときに
GetAsyncKeyStateでキーボードの状態をチェックしていますが、
この方法ではCPUにかなり負荷がかかってしまいます。
適当にSleepさせればある程度押さえられるのですが、この場合
キーボードの状態をチェックし損なう確率が高くなってしまいます。
何かいい方法はありませんでしょうか?
944デフォルトの名無しさん:2006/03/02(木) 02:35:59
アクセラレータじゃ駄目なんか?
945デフォルトの名無しさん:2006/03/02(木) 02:54:24
フック、ストレート、アッパー!
946デフォルトの名無しさん:2006/03/02(木) 03:23:19
MDIについて質問です。
子ウインドウを新規で作るときに最大化しようと重いmdicreate.styleにWS_MAXIMIZEを指定しました。
そうすると、メニュー書き換えのときに子ウインドウのアイコンが2個表示されたりします。

メニューの書き換えは子ウインドウプロシージャにWM_MDIACTIVATEがきたら
WM_MDISETMENUで書き換えてます。

なにか解決策はないでしょうか?
947デフォルトの名無しさん:2006/03/02(木) 03:28:43
基本はジャブ
948デフォルトの名無しさん:2006/03/02(木) 03:58:18
>>943
ランチャがアクティブでないときにもキーを受け付けたいなら
RegisterHotKey()を使うといいかと。
949デフォルトの名無しさん:2006/03/02(木) 12:44:28
>>943
キーフックと言う手も
950デフォルトの名無しさん:2006/03/02(木) 13:01:33
>>948
ありがとうございます!
それならなんか出来そうな気がするのでやってみます
>>949
キーフック、聞いたこないですけどとりあえずググって試してみようと思います。。
951デフォルトの名無しさん:2006/03/02(木) 19:48:17
自前アプリをタスクマネージャで監視すると、常に「Page Fault Delta」が発生していてパフォーマンスが著しく低下してしまうんですが
回避方法はありませんか?
よろしくお願いします。
952デフォルトの名無しさん:2006/03/02(木) 19:57:13
SetProcessWorkingSetSize
953デフォルトの名無しさん:2006/03/02(木) 20:05:46
メモリをもっと積むんだ。
んでもって、ページファイルの設定をなしにするんだ。
954デフォルトの名無しさん:2006/03/02(木) 21:17:30
疑問なんですが、上のほうにちらっと出てきたキーフックだけど、グローバルフックしてる最中にアプリがシボンヌしたらどうなるんでしょ。
その辺の回避策として、アプリが死んでもちゃんとデタッチできる様にDLLじゃないとできなくなってるんでしょうか?
955デフォルトの名無しさん:2006/03/02(木) 21:42:35
そういうこと
956デフォルトの名無しさん:2006/03/02(木) 22:09:59
LONGLONGの変数をLONG2つ(上位と下位)に分けるときってどうやってる?
957デフォルトの名無しさん:2006/03/02(木) 22:14:45
manifestがあると、
ユーザの側でLUNAが有効無効にかかわらず、GetBkColor()が白を返すです。

どうして表示されてるダイアログは灰色なのに白が返ってくるですか?
958デフォルトの名無しさん:2006/03/02(木) 22:17:07
>>956
LARGE_INTEGER
959デフォルトの名無しさん:2006/03/02(木) 22:45:38
HILONG LOLONG
960デフォルトの名無しさん:2006/03/02(木) 22:58:27
POTELONG
961デフォルトの名無しさん:2006/03/02(木) 23:35:58
どなたか>>946の解決策わかりませんでしょうか?

あと書き忘れてましたが、プログラミングWindows第\5版についてたMDIサンプルプログラムで同様のことをためしても同じ現象が発生しました。
962デフォルトの名無しさん:2006/03/02(木) 23:56:47
タスクトレイのアイコンって16*16以上のものを表示するのは無理でしょうか?
たとえば、32*16のように横長表示にして、6文字くらいの文字列(主に数字)をしたいのですが。
963デフォルトの名無しさん:2006/03/03(金) 00:09:02
TOPMOSTなウィンドウ作った方が使いやすいだろ。
あるいはTClock2chのエリアを間借りさせてもらうとか。
964デフォルトの名無しさん:2006/03/03(金) 00:36:24
わっかりました、親方。
965デフォルトの名無しさん:2006/03/03(金) 00:40:38
>>964は左官屋のタメ
966デフォルトの名無しさん:2006/03/03(金) 00:51:46
>>963
やはりフックしないと無理ですか・・・。
なるべく目立たないプログラムを作ろうとしてたんですが、
TOPMOSTなウインドウで我慢します。
967デフォルトの名無しさん:2006/03/03(金) 00:53:14
シンナーに気をつけてフックしな
968デフォルトの名無しさん:2006/03/03(金) 05:07:57
GetIconInfo()について質問です。

GetIconInfo()で取得したICONINFO構造体のhbmMaskとhbmColorは
DeleteObject()しないといけないんでしょうか?
969デフォルトの名無しさん:2006/03/03(金) 08:53:23
>>957
っmanifestを削除する
970デフォルトの名無しさん:2006/03/03(金) 11:02:51
>>968
MSDNに書いてあるがな
971デフォルトの名無しさん:2006/03/03(金) 11:05:08
質問させていただきます。

既製のゲームの補助ツールを作りたいと考えています。
ツールからでゲーム内の情報を参照したい (所持金、現在位置など) と
思っているのですが、検索エンジンで調べてみても、他プロセスの変数は
基本的に参照できないという情報しか得られませんでした。
しかし、実際にそのようなツールは存在するわけでして……

自分で作ったプロセス間で通信する方法はわかるのですが……

どのようにして実装しているのか、わかる方がいらっしゃいましたら、
どうかご教授お願いします。
972デフォルトの名無しさん:2006/03/03(金) 11:33:44
そういうツールは人に質問しなきゃ作れないやつが手を出す物ではないな。
973デフォルトの名無しさん:2006/03/03(金) 11:35:06
>>971
変数は参照できないわな

逆アセンブルとかで
見たい変数がどこのアドレスにあるかを調べて、
ReadProcessMemoryかけてるだけ
974971:2006/03/03(金) 11:45:21
ありがとうございます。
方法すらわからなかったもので……

もっと精進します。ありがとうございました。
975デフォルトの名無しさん:2006/03/03(金) 12:57:02
>>974
間違った方向に精進するなよ。
976デフォルトの名無しさん:2006/03/03(金) 13:12:18
>>970
すみません、日本語の方しか見ていませんでした。
英語の方にちゃんと書いてあるとはorz
977デフォルトの名無しさん:2006/03/03(金) 13:37:23
ウインドウの形状を変えたいのだけど、レイヤーウインドウでなくて、98やMEでも動くマスクウインドウみたいのがあったと思うんですけど、
情報ありましたら教えてください、サンプルなどあると助かります。
よろしくお願いします。
978デフォルトの名無しさん:2006/03/03(金) 13:40:55
WMP9みたいなのか?うざす。
よけいなお世話だと思うが。
979977:2006/03/03(金) 13:46:13
>978
だいじょぶです、うざく無いの作りますから。
そして、僕もうざく無いです。
980デフォルトの名無しさん:2006/03/03(金) 13:47:59
>>977,979
SetWindowRgn()でどうだ?
981977:2006/03/03(金) 13:52:32
>980
>SetWindowRgn()でどうだ?
GIFとかの抜きカラーみたいにして抜けるやつがいんですが。
ご存じないでしょうか?
982デフォルトの名無しさん:2006/03/03(金) 13:55:44
>>981
自前でシコシコどうぞ。

というか、いまさら9xなんて考えたくないな。
MSすら捨てているし。
983977:2006/03/03(金) 14:12:51
>980
失礼!、SetWindowRgn()で実現できそうでした。
これ参考になりそうです。
http://www.codeproject.com/dialog/CRegionCreator.asp
http://www.codeproject.com/dialog/BitmapHandling.asp
984980:2006/03/03(金) 14:13:17
>>981
マスクカラーで型抜きするのは自分で実装するのでは?
ビットマップでスキン画像用意して
それを走査してリージョン作ってSetWindowRgn()するんだと思うけど。

codeprojectでSetWindowRgnで検索
ttp://www.codeproject.com/dialog/CRegionCreator.asp
ttp://www.codeproject.com/dialog/BitmapHandling.asp
ttp://www.codeproject.com/gdi/rgncreator.asp
中身確かめてないけどたぶん参考にはなるでしょ
985977:2006/03/03(金) 14:21:25
↑すげぇ、偶然にも同じとこ見てた。
980さん、ありがとうございます。
986デフォルトの名無しさん:2006/03/03(金) 14:28:02
おれは>>981を見た時点で、SetWindowRgn()でいけるのに、うざいやつだな


と思った
987デフォルトの名無しさん:2006/03/03(金) 17:45:08
ウインドウスタイルの「WS_EX_TOOLWINDOW」でタスクバーへの表示を、on/off出来るようにしたんだけど直ぐには反映されず、
ALT+TABでアプリ切り替えなどをすると初めて表示される、これをたちどころに反映させるようにしたいんですけど、
どのようにすればいんでしょうか?
あと、これも同じ現象なんですが「WS_VISIBLE」でも同じような事が発生します。
よろしくお願いします。
988デフォルトの名無しさん:2006/03/03(金) 18:40:35
よくわからんけど、
hide/showしてみるとか
SHChangeNotify投げてみるとか
多分違うけどSHAppBarMessage
989デフォルトの名無しさん:2006/03/03(金) 18:55:04
SetWindowLong() を使っているんなら、解説に書かれていることは問題ないかい?
「SetWindowPos 関数を呼び出すまでは〜」ってあたり。
9909xユーザ:2006/03/03(金) 20:37:53
>>982
(´・ω・`)
991デフォルトの名無しさん:2006/03/03(金) 20:51:29
スレ残り少ないですが・・・
Unicode変換で困っています。
SJISのfromからUnicodeのtoへ変換はできたのですが、
動的確保したtoの解放でエラー(HEAP CORRUPTION DETECTED)が発生してしまいます。
これは別に解放する必要はないってことでしょうか?

詳しい方教えてください。
以下プログラムの一部です

DWORD len;
char from[] = "変換対象";
LPTSTR to;

len = MultiByteToWideChar(CP_ACP, 0, from, sizeof(from), NULL, 0);
to = (LPTSTR)malloc(len);
MultiByteToWideChar(CP_ACP, 0, from, sizeof(from), to, len);
free(to);
992デフォルトの名無しさん:2006/03/03(金) 20:58:53
>>991
ヒープをぶっ壊してる。
to = (LPTSTR)malloc(len * sizeof(WCHAR));
993デフォルトの名無しさん:2006/03/03(金) 21:17:34
>>992
あ、すっごい初歩的なミスでした・・・
どうもすみません。
994デフォルトの名無しさん:2006/03/03(金) 21:39:30
sizeof(from)も微妙に気になるな。
995デフォルトの名無しさん:2006/03/03(金) 21:58:42
strlen(from)
996デフォルトの名無しさん:2006/03/03(金) 22:04:55
CP_ACP, CP_OEMCPの使い分けが分からない。
コードページは何を指定するのが普通?
997デフォルトの名無しさん:2006/03/03(金) 22:05:50
sizeof(from)がダメな理由がわからへんので教えてよん
998デフォルトの名無しさん:2006/03/03(金) 22:09:45
sizeof(from) で合っている。
char *from = "変換対象"; だったら、sizeofじゃだめだけどな。
999デフォルトの名無しさん:2006/03/03(金) 22:11:25
合ってないよ。
10001000:2006/03/03(金) 22:13:36
>>1-999
とりあえず「Advanced Windows」嫁♥
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。