Win32API質問箱 Build36

このエントリーをはてなブックマークに追加
1 :東トルキスタンと言ってみるテスト:
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。

  ∧_∧
 ( ´∀`) < 0x23

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

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

-前スレ
Build35:http://pc8.2ch.net/test/read.cgi/tech/1125850096/l50
2 :デフォルトの名無しさん:2005/10/10(月) 22:40:43
0x24じゃないの?
3 :デフォルトの名無しさん:2005/10/10(月) 22:49:20
4 :デフォルトの名無しさん:2005/10/10(月) 22:50:09
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
5 :デフォルトの名無しさん:2005/10/10(月) 22:51:16
6 :デフォルトの名無しさん:2005/10/10(月) 23:32:14
>>1
otu
7 :デフォルトの名無しさん:2005/10/10(月) 23:34:10
8 :デフォルトの名無しさん:2005/10/10(月) 23:40:39
9 :デフォルトの名無しさん:2005/10/11(火) 00:40:08
>>8
えらい力技だな
10 :デフォルトの名無しさん:2005/10/11(火) 00:41:33
突然ですみません。
DirectX以外の方法で、ほぼ正確に1/60毎にコールバック関数を呼ぶAPIはありますか?

いろいろ試してみたのですが、マルチメディアタイマーを使用すると、1/60秒から少しずれてしまい(整数msの分解能のため)
1/60秒での処理ができません。
これだとfpsに直すと62fps(16msの場合)になりますよね?
これをほぼ正確に60fpsにしたい場合、何か方法はないでしょうか
11 :デフォルトの名無しさん:2005/10/11(火) 00:43:59
>>10
QueryPerformanceCounter
12 :デフォルトの名無しさん:2005/10/11(火) 01:39:56
WaitVBlank
13 :デフォルトの名無しさん:2005/10/11(火) 02:14:30
前回との差分をとって16msと17msをいったりきたり
14 :デフォルトの名無しさん:2005/10/11(火) 02:38:31
SendInputでキーストロークを送るプログラムを書いてみたのですが、
いくつかのゲームでは、なぜかキーストロークを送ることができません。
どうすればいいのでしょうか?
15 :デフォルトの名無しさん:2005/10/11(火) 03:36:15
>>14
升ツール作りたいならゲ製板にでも逝け。
16 :デフォルトの名無しさん:2005/10/11(火) 03:41:53
17 :デフォルトの名無しさん:2005/10/11(火) 05:00:01
非クライアント領域の無効領域ってどうやったら取得できるのでしょうか?
18 :デフォルトの名無しさん:2005/10/11(火) 09:45:24
Windowsのスクリーン上マウスポイントX,Yから
そこの色情報を取り出すAPIとかないでしょうか?
19 :デフォルトの名無しさん:2005/10/11(火) 10:02:15
デスクトップのDC使ってGetPixelすれば?
20 :デフォルトの名無しさん:2005/10/11(火) 10:06:04
>>19
別WindowHandleのマウスポイントの色もとりたいのです。
後、窓枠とかの色も取得したいので、出力されている色すべて取れないでしょうか?
21 :デフォルトの名無しさん:2005/10/11(火) 10:21:08
いやだからデスクトップの……
22 :デフォルトの名無しさん:2005/10/11(火) 10:53:57
>>21
hWnd=0でいけるのですねすいません。
ありがとうございます。
23 :デフォルトの名無しさん:2005/10/11(火) 11:26:22
RegisterHotkeyを使って、何らかの入力があったらウィンドウをアクティブにし、
Unregistしてから色々な処理をした後に非アクティブ化してから
再びRegistして入力を待つ…といった事をやっています。

が、2回目のRegisterHotkey後にキーボードを叩いても反応がありません。
確認したのは
・2回目のRegistは成功した(返り値確認)
・2回目のRegist以降はWM_HOTKEYメッセージすら届いていない

という事なんですが、RegisterHotkeyが成功してるのに
メッセージが通知されないというので悩んでます。
思い当たる原因など何かないでしょうか。
24 :デフォルトの名無しさん:2005/10/11(火) 16:31:16
現在Win2000SP4+VS2003にて、MFCを利用したWindowsアプリケーションを
作成しています。

その中で、リストビューの自前描画を行おうと試み、クライアント領域に関しては
オーナードローで実現できたのですが、スクロールバーはオーナードローでも
手の届かない領域です。

そこで、スクロールバー部は非クライアント領域の描画で無理やりしてるのですが、
この描画の直前に、一瞬だけコモンコントロールがデフォルトで描画している
素のスクロールバーが表示されてしまいます。

これを避けるためには、WM_SETREDRAW では効果はなく、
唯一 LockWindowUpdate だけが描画を抑制することができるようなのですが、
どうやらこの API にはバグがあるらしく、デスクトップ上の全てのウィンドウに対し
WM_PAINT が送信されるというとんでもない自体が発生してしまいます・・・
(しかも、タイミングによっては起きたり起きなかったり)。

似た症例のアーティクルを検索してみたのですが、どれも決定的な解決法はないようで・・・

ttp://pullup.net/technical.html
ttp://www.adras.com/BUG-in-LockWindowUpdate-UnlockWindowUpdate.t288-27.html
ttp://groups-beta.google.com/group/borland.public.delphi.nativeapi/browse_frm/thread/4b212ed3eb974c59

もしも似たような経験がある方がいらっしゃいましたらご助言頂けませんでしょうか。
よろしくおねがいいたします。
25 :デフォルトの名無しさん:2005/10/11(火) 16:45:47
そこまでやるならリストビュー的なコントロールを1から自製したほうが早くね?
26 :24:2005/10/11(火) 16:58:31
>>25 様、レスありがとうございます。
完全自前も少しは考えたのですが・・・
SYSLISTVIEW32 が実装している領域計算などの機能はかなり多く
(言い換えれば自作するにはかなりの機能をエミュレートする必要がある)、
さらにもともとコモンコントロールに対し実装していたコードからの
移植性も高いということで上記の方法を採用しました。
27 :デフォルトの名無しさん:2005/10/11(火) 17:08:50
若干すれ違いかもですが、教えてください。
regsvr32でcomの登録についてなんですが、

regsrv32 hoge.dll
自分のマシンでは、これで登録できるんですが、ほかのマシンにもっていくとエラーが発生し登録出来ません、
「hoge.dll」で使用してるコンポーネントやDLLが不足している為だと思うんですが、
具体的に、どのコンポーネント/DLLで失敗してるか見つける方法はありませんでしょうか?
よろしくお願いします。
28 :デフォルトの名無しさん:2005/10/11(火) 17:44:59
ビルドがXPでエラーの出たターゲット環境が2kとかで、
でもってビルドオプションにATL_MIN_CRTが定義されて無かったりとか。

エラーメッセージも環境も何も書いてないので、わかりまへん。
さらにスレ違いだとおもいます。
29 :24:2005/10/11(火) 17:45:52
>>27 さん
もしも開発環境がインストールされていれば、
dumpbin または Dependency Walker で依存している DLL が確認することが
可能かと思われます。
参考になりますでしょうか。
30 :デフォルトの名無しさん:2005/10/11(火) 18:16:57
SetWindowText()を用いてエディットコントロール内の文字列を
変更しようとしているのですが、

[ ほげ ]
 ↓
SetWindowText(Edit , TEXT("はげ")) ;
 ↓
[ ほげはげ ]

のように、それまで入っていた文字に追加される形になってしまいます。
猫等のサイトで色々と調べてみると、
特にエディットコントロール内の文字列を
削除する手続き等は取っていないようにしか見えないのですが、
こういった文字列を削除する関数やメッセージはありますか?

ちなみにSETSEL→CLEARでも消えてくれません…
31 :デフォルトの名無しさん:2005/10/11(火) 18:27:13
追加じゃなくて上書きだから消す必要ない
32 :デフォルトの名無しさん:2005/10/11(火) 19:44:39
普通は追加の仕方がわからなくて悩むんだがな。
33 :デフォルトの名無しさん:2005/10/11(火) 21:20:56
HTREEITEM構造体を関数の引数にすると
構文エラーが出てしまいます。
どうしてなんでしょうか。
34 :デフォルトの名無しさん:2005/10/11(火) 21:27:29
たぶん構文エラーじゃないかな?
35 :デフォルトの名無しさん:2005/10/11(火) 21:39:15
>>33
構文が間違ってるから
36 :デフォルトの名無しさん:2005/10/11(火) 21:40:31
>>33
ちゃんとしたコンパイラを使ってるんなら構文エラーなんだろうなw
真剣に質問したいのならもう少し詳しく(関数名やエラー内容など)書いた方が‥‥釣りだと思われますよ?
とりあえず、その関数付近のソースを書いてみたら?
37 :デフォルトの名無しさん:2005/10/11(火) 21:47:13
>>36
釣りのつもりはないのですが...。

void name(HTREEITEM hTree);
といった関数を宣言してもエラーになります。
TC_ITEMとかでもなりました。
38 :デフォルトの名無しさん:2005/10/11(火) 22:01:20
エラー内容がわからんのでなんともいえんが‥‥
ツリービューもコモンコントロールだからcommctrl.hをインクルードしてcomctl32.libを
プロジェクトに加えないといけないよ?
39 :デフォルトの名無しさん:2005/10/11(火) 22:02:14
だから出たエラーをコピペくらいしろってんだ
俺らはエスパーじゃねぇんだよ
40 :デフォルトの名無しさん:2005/10/11(火) 22:15:35
じゃあ頑張ってエスパーになってください。
41 :デフォルトの名無しさん:2005/10/11(火) 22:27:24
>>40
人間に自分の考えを伝えられないのに、
機械に伝える事なんて出来ない。
42 :デフォルトの名無しさん:2005/10/11(火) 22:34:35
>>40
ヤダ
43 :33:2005/10/11(火) 22:35:25
どうやらヘッダーの書き方がおかしかったみたいです。
>>38-39
すみませんでした。
44 :デフォルトの名無しさん:2005/10/11(火) 23:05:44
ある処理をwhileの無限ループで行っています。
この無限ループの処理自体はアプリ終了まで続けたいのですが、このまま終了してしまうとこの部分でメモリリークが起きてしまいます。

そこで、アプリ終了時にwhile文を抜ける方法(メッセージなど)があったら教えていただきたいです。
45 :デフォルトの名無しさん:2005/10/11(火) 23:10:48
>>44
マルチスレッド? シングルスレッド?
シングルスレッドだとwhileを抜けない限りは強制終了しかないわけなんだが…
46 :デフォルトの名無しさん:2005/10/11(火) 23:11:04
おーいエスパー。お呼びだぞ
47 :デフォルトの名無しさん:2005/10/11(火) 23:40:03
>>17
WM_NCPAINTのwParam
48 :デフォルトの名無しさん:2005/10/11(火) 23:44:08
>>44
終了すれば全部解放されるからループ内でメモリ使用量が
どんどん増えたりしてなければ気にすることはない
49 :デフォルトの名無しさん:2005/10/11(火) 23:44:11
エスパーなんて居ない!
50 :44:2005/10/12(水) 00:04:03
>>48
どうもありがとうございます。

しかし、
while(1){
}
とやっただけでもデバッガがメモリリークを検出してしまいます。
これは問題ないのでしょうか?
51 :デフォルトの名無しさん:2005/10/12(水) 00:10:29
>>50=>>44
> デバッガがメモリリークを検出してしまいます

それ、何てデバッガ?
52 :デフォルトの名無しさん:2005/10/12(水) 00:13:07
デバッガについては明らかにスレ違い。
53 :44:2005/10/12(水) 00:15:52
>>51
Visual Studio標準です。
54 :デフォルトの名無しさん:2005/10/12(水) 00:19:19
>>50
何を持ってメモリリークと言ってるんだ?
そもそも、メモリリークの意味判ってるのか?
55 :デフォルトの名無しさん:2005/10/12(水) 00:20:37
56 :デフォルトの名無しさん:2005/10/12(水) 00:23:52
57 :エスパー魔美:2005/10/12(水) 05:41:34
呼んだ?
58 :デフォルトの名無しさん:2005/10/12(水) 06:23:50
呼んでないけど、とりあえず脱いでください。
59 :デフォルトの名無しさん:2005/10/12(水) 09:32:07
FindFirstChangeNotificationとGetFileTimeを使って指定したディレクトリ下の
ファイル(サブディレクトリの中のファイルも含む)の新規作成や上書き保存を
検出するソフトを作ろうとしているのですが, ファイル数やディレクトリの深さが
大きくなるほど時間がかかってしまいます.

見つけたディレクトリにかったぱしからFindFirstChangeNotificationを仕掛けるという方法も考えたのですが
ちょっとかっこよくない気がします

フィルタドライバ的なものでしかできないのでしょうか?(もちろんドライバを書く技量は持ってません...)
一発で更新されたファイル名のパスを教えてくれるAPIはありませんか?
60 :デフォルトの名無しさん:2005/10/12(水) 18:47:04
はい。
いいえ。
61 :デフォルトの名無しさん:2005/10/12(水) 18:59:55
ReadDirectoryChangesW

ディレクトリで発生した変更を記述した情報を返します
62 :デフォルトの名無しさん:2005/10/12(水) 19:20:17
>>44
メモリリークはおいといて・・・
アプリ終了時にループを打ち切るようにすればいいじゃないか。

その無限ループの中で、
アプリ終了したいよフラグを定期的にチェックして、
フラグが立っていたら、ループを抜けて、後片づけをして、
アプリ終了してもいいよフラグを立てる。

メインスレッドでは、
アプリ終了したいよフラグを立てて、
アプリ終了してもいいよフラグが立つのを待ってから終了する。


ただし、
アプリ終了してもいいよフラグについては、
単にvolatileなbool変数でやると、ダサすぎるので、
適切なロックオブジェクトを使ったほうがいいでしょう。
63 :デフォルトの名無しさん:2005/10/12(水) 20:27:33
64 :デフォルトの名無しさん:2005/10/12(水) 21:11:51
9x24だろと1を罵りたい
65 :デフォルトの名無しさん:2005/10/12(水) 21:32:02
9x?
66 :デフォルトの名無しさん:2005/10/12(水) 23:10:47
>>64
0x24の間違いなら>>2
67 :デフォルトの名無しさん:2005/10/12(水) 23:18:49
彼は九の段のことを言ってるんだよ
68 :デフォルトの名無しさん:2005/10/12(水) 23:45:50
VC6sp5/WindowxXPsp2環境で作成しています。
SwitchToThread()関数を使おうとしていますが使えません(外部参照が未解決になる)。
winbase.hはincludeしていますし、kernel32.libもリンクしました。
何がまずいのでしょうか。初歩的なことを見落としているように思うのですが・・・
69 :デフォルトの名無しさん:2005/10/12(水) 23:56:07
>>68
コンパイルオプションの問題、又はWINVERの定義の問題。
WINVERの他にも似たようなマクロが有ったような気がするけど思い出せない。
70 :デフォルトの名無しさん:2005/10/12(水) 23:59:16
>>68
MSDNにはこんなことが書いてある。
  Windows NT: バージョン 4.0 以降を使います。
  Windows: サポートされていません。
というわけでWindows.hのインクルードの前に#define _WIN32_WINNT 0x400とでも書く必要がある。
(Windows.hの中でWinbase.hはインクルードされるのでWinbase.hは自分でインクルードする必要はない)

もちろんこんなことをすると9xを捨てることになる。
捨てたくなければ今回はSleep(0);が代わりになる。
71 :68:2005/10/13(木) 00:19:06
>>70さん
_WIN32_WINNTを定義してませんでした。
Windows.hじゃなくてWinbase.hをincludeしてました。
いま手元に環境がないので明日にでも試してみます。ありがとうございました。
72 :デフォルトの名無しさん:2005/10/13(木) 01:14:17
GetKeyState(), GetAsyncKeyState()が、なぜかPAUSEキーのときだけ妙な動作をします。

//検証用コード
for (;;)
{
if (GetAsyncKeyState(VK_PAUSE) & (1 << (sizeof(SHORT) * 8 -1)))
_putts(_T("PAUSE!")) ;
}

PAUSEキーをいくら押し下げようとも、連打しようとも、まったく反応がありません。
しかし、PAUSEキーを押した後に、何か別のキーを押すと、一回だけPAUSE!と表示されます。

キーボードが壊れているのかと思い、いくつかのキーボードで試しましたが、まったく同じ結果になります。
PAUSE以外のキーに変えると、押し下げた瞬間に大量にPAUSE!と表示されるんですが……。

WindowsはPAUSEキーだけ、なにか特別な処理でもしているのでしょうか?
73 :デフォルトの名無しさん:2005/10/13(木) 01:50:46
そもそもPauseキーが何なのかと。
74 :デフォルトの名無しさん:2005/10/13(木) 02:11:03
何て。
Pauseキーだろ?
75 :73:2005/10/13(木) 03:54:01
Pauseキーを押したら、何か他のキーを押すまでPauseする
というのは機能であり仕様なんだってば。
76 :デフォルトの名無しさん:2005/10/13(木) 06:33:39
デスクトップにあるショートカットのリンク先の所に
オプション /A と /B で hoge.exe を起動する為に
c:\hoge.exe /A /B
としてあるのですが、
エクスプローラーからファイルをこのショートカットに
ドラッグ&ドロップした時に、
c:\hoge.exe /A /B FileName
の様に hoge を起動したいのですが、
c:\hoge.exe FileName
としかならなくて困ってます。
どうにかなりませんか?
77 :デフォルトの名無しさん:2005/10/13(木) 06:38:10
>>76
特に何もしなくてもオプションは無視されないんだが
環境は?
78 :76:2005/10/13(木) 06:51:20
>>77
Win95です。
79 :デフォルトの名無しさん:2005/10/13(木) 07:37:29
>>72
無限ループにfor(;;)なんてキモ過ぎ
80 :デフォルトの名無しさん:2005/10/13(木) 08:24:22
>>78
スレ違いじゃないのか……。

強引にAPIに持って行くと、

話を聞くとそれはおそらく、Win95の場合、そうなるようなので、
解決策としては専用のランチャーを作るべきだ。
それをするには、具体的にはたとえばCreateProcess()を云々……
81 :デフォルトの名無しさん:2005/10/13(木) 09:46:05
質問です。

とあるアプリケーションが
system();
などで別のアプリケーションを呼び出すということは多々あるかと思います。
この呼び出しをフックして、どういう呼び出しをしているのか知りたいのですがキーフックのようにAPIは用意されていますでしょうか?

具体的に申し上げますと、
携帯アプリ開発エミュレータで「プロジェクト管理アプリ」が「実行アプリ」を呼んでいます。
ですがこの「プロジェクト管理アプリ」が遅いのなんの…。
実行アプリだけ呼び出してやりたいのですが、一体どんな引数などを渡しているのか分からないのです。


82 :デフォルトの名無しさん:2005/10/13(木) 09:50:38
APIフックは可能だけど、その程度ならOllydbgあたりでプロジェクト管理アプリを開いて
CreateProcessなりsystemなりのAPIにブレークポイントを仕掛け、引数を見た方が早いと思う。
83 :デフォルトの名無しさん:2005/10/13(木) 10:08:06
>>82
なるほど。確かにその通りですね。
試してみます。
ありがとうございました。
84 :デフォルトの名無しさん:2005/10/13(木) 11:01:04
もっさりしてるのはJavaだからしょうがないよ
あきらめるしかない
85 :デフォルトの名無しさん:2005/10/13(木) 11:03:02
ゴバクか?
86 :デフォルトの名無しさん:2005/10/13(木) 15:00:41
>>82
プロジェクト管理アプリをOllydbgでトレースしようとしたら固まってしまいました。
javaアプリなので、javaにいわゆるトレース対策がされていたのだと思います。

結局APIフックを作ってしまいました(;´Д`)
87 :sage:2005/10/13(木) 17:06:25
88 :デフォルトの名無しさん:2005/10/13(木) 21:29:10
お、初心者の俺には役に立ちそうなサンプル集だ。
おぶりが〜ど!
89 :デフォルトの名無しさん:2005/10/14(金) 04:41:48
WSHのPopupメソッドみたいに、指定した秒数で
自動的に閉じるメッセージボックスを表示するAPIって無いですか?
90 :デフォルトの名無しさん:2005/10/14(金) 06:19:14
API一発ではできませんので自分でタイマー回してEndDialogで閉じる
91 :76:2005/10/14(金) 06:48:12
>>80
プログラムでなんとか出来ないかと思ってここで質問しました。
パラメータがファイル名のみの時は別処理にします。
ありがとうございました。
92 :デフォルトの名無しさん:2005/10/14(金) 10:28:24
WindowFromPointで取ってきたHWNDから
GetWindowTextしてWindowの文字を取ってくる。

後(再起動)ほど
FindWindowで先ほどのWindow文字を入れたら
返りが0になるのですが、FindWindowでHWNDを取得するためにはどの文字を取ればよいのでしょうか?
93 :デフォルトの名無しさん:2005/10/14(金) 11:08:11
それはウィンドウがないか文字列が変わっただけじゃまいか?
94 :93:2005/10/14(金) 11:15:40
追記:
それかボタンコントロールとかのキャプションを取得してるとかだな
親ウィンドウたどってGetWindowTextするといい
95 :デフォルトの名無しさん:2005/10/14(金) 11:16:43
>>92
WindowFromPointで取得したウィンドウが子ウィンドウとか?
96 :デフォルトの名無しさん:2005/10/14(金) 11:27:41
>>92 です。すいません。
FindWindowにtextを入れる場所をまちがっていました。
FindWindow(a, NULL);×
97 :デフォルトの名無しさん:2005/10/14(金) 11:29:52
>>92
再起動前の取得文字列をどう保存して、再起動後にどう復元してる?
保存・復元の方法がおかしくて、Findしてる文字列が間違ってる可能性も考えられるぞ。
98 :デフォルトの名無しさん:2005/10/14(金) 11:30:50
>>96
なに、そのオチ・・・
99 :デフォルトの名無しさん:2005/10/14(金) 11:33:16
>>98
本気でスマソ
100 :デフォルトの名無しさん:2005/10/14(金) 11:41:07
そのオチを見抜けなかった俺らはマダマダだなw
101 :デフォルトの名無しさん:2005/10/14(金) 13:18:09
http://pc8.2ch.net/test/read.cgi/tech/1128872687/から誘導されてきました。

猫や
ttp://www.kab-studio.biz/Programing/Codian/index.html
ttp://www.doumo.jp/aon-java/jsp/postgretips/tips.jsp?tips=79
などを見てもいまいち理解できなかったのですが、

SendMessageでマウス制御する方法(別途用意するものなど)を教えてもらえないでしょうか、
それと、Hookの中身は、SendMessage等と同じDll内に記述しても問題ないのでしょうか、

VC++を使っています。
102 :デフォルトの名無しさん:2005/10/14(金) 13:26:02
誘導元のスレ見るのめんどいから、
何がしたいのかはっきり書いてくれんかね。
何がしたいのか、それじゃよくわからんが。

システム全体のマウスメッセージをフックしたいだけ?
それならフックDLL作って、
DLLからフックしたメッセージを利用するアプリケーションに
何らかの方法で通知すればいいとおもうけど。

あと、マウスメッセージなんかはかなりの頻度で飛んでくるはずだから、
DLL内でフックしたメッセージを利用する処理をダラダラ書くと、
良いこと無いと思うけど。
103 :デフォルトの名無しさん:2005/10/14(金) 14:31:16
説明不足ですみません。

マウスの動きをマクロ化したいのですが、
できれば、指定したアプリケーションにマウスの動きを通知するだけで、
実際のマウスカーソルとは独立させて動かすことはできるのでしょうか、

寝マクロ君やUWSC的な動きをさせたいと思っています。

 その上で、マウスカーソルとは切り離した動きができないかと思っています。
104 :デフォルトの名無しさん:2005/10/14(金) 15:05:08
Win32APIって、円とか曲線て引けましたっけ?
105 :デフォルトの名無しさん:2005/10/14(金) 15:08:25
質問する前に調べろ
106 :デフォルトの名無しさん:2005/10/14(金) 15:15:45
>>104
たぶん。
107 :デフォルトの名無しさん:2005/10/14(金) 15:31:29
>>104
ArcとかPolyBezierとか
108 :デフォルトの名無しさん:2005/10/14(金) 15:43:41
円つーか楕円はEllipseだな。
109 :デフォルトの名無しさん:2005/10/14(金) 15:44:49
>>103
マウスメッセージはキャプチャして置いてマクロ化して保存。
↓
マクロ実行で、ターゲットアプリケーションにのみ保存したマウスメッセージを投げる。

キャプチャ時と実行時でのマウス座標をどうするかとか、
考慮しなきゃいけない部分がありそうだけど、
上記のまま十分実装出来そうな気はするけど。
110 :デフォルトの名無しさん:2005/10/14(金) 15:52:50
PostThreadMessage()でスレッドにメッセージを送りたいのですが、エラーとなってしまいます。
GetLastError()で調べるとコード1564「メッセージは同期した操作とのみ使用できます」のエラーのようです。
下記URLの通り予めメッセージキューは作成してあります。
メッセージを受け取るスレッドにてPeekMessage()は正常終了しています。
スレッドですからタイミングの問題とかあるんでしょうか。
いろいろ試してみましたがよく分からずお手上げ状態です。
誰か詳しい方いましたらご教示願います。

   ↓
http://www5a.biglobe.ne.jp/~crab/winsdk/PostThreadMessage.html

111 :デフォルトの名無しさん:2005/10/14(金) 16:06:40
> 110
忘れてましたが、環境はWin2000(SP4) + Visual Studio 6.0(SP6)です。
112 :デフォルトの名無しさん:2005/10/14(金) 16:07:59
>>110
1564なんてエラーコードあったっけな・・・?

手元の環境では、FormatMessageしてもエラーになるんだが
113 :デフォルトの名無しさん:2005/10/14(金) 16:09:04
MESSAGE_SYNC_ONLYは1159だね
114 :デフォルトの名無しさん:2005/10/14(金) 16:21:58
> 112
> 113
失礼しました。1159です。
115 :デフォルトの名無しさん:2005/10/14(金) 16:29:09
>>110
>MSDN日本語版では、PostThreadMessage()の使用上の注意として「ポストされるスレッドでメッセージキューが作成されている必要がある」と記載されていますが、
>具体的な作成方法までは記載されいません。
↑この件だけど、AttachThreadInput 側に書いてある… で、

 スレッドのメッセージキューは、スレッドが Win32 USER 関数または Win32 GDI 関数の 1 つを初めて呼び出したときにシステムによって作成されます。

なので、PostThreadMessage される側のスレッドエントリの先頭で(PeekMessage のループの前に) 適当なAPI呼べばどうだろう?
116 :デフォルトの名無しさん:2005/10/14(金) 16:51:38
>>110,>>112
WM_USERより低いシステムメッセージ投げてない?

WM_CREATEとか投げると、そのエラー出るよ
117 :116:2005/10/14(金) 16:52:52
ぐを、アンカーミス

>>112スマソ
118 :デフォルトの名無しさん:2005/10/14(金) 17:01:43
PeekMessage()はWIN32 USER関数に含まれないのか?
というかPeekMessageで読み出せるのに、メッセージキューが作られていないってどういう状況だ?
119 :デフォルトの名無しさん:2005/10/14(金) 17:04:35
そもそも、何をもってPeekMessageは正常終了と思ってるのかが知りたい
まさかPeekMessageの戻り値じゃねぇよな
120 :デフォルトの名無しさん:2005/10/14(金) 17:05:18
ぐわ てきとー書いた。スマン。
いくらなんでも PeekMessage() 1発呼んで終わりなスレッド ってことないもんな。
121 :デフォルトの名無しさん:2005/10/14(金) 18:14:46
> 116
これでいいのでしょうか?
ret = PostThreadMessage(threadId[no], WM_USER + no, 0, 0);

> 120
スレッドの先頭でPeekMessage()をループさせるようにしました。
116,120のようにしたら、何とかうまく行ったみたいです。
ただ、この様に修正しなくとも時々うまく行く場合もありました。
よく分かりませんが、取り合えずこれで様子を見てみます。
ありがとうございました。
122 :デフォルトの名無しさん:2005/10/14(金) 21:50:13
>>5
>Win32 SDK Programming
>http://usr_vogel.at.infoseek.co.jp/Win32SDK/
死んでるから次スレでは外した方がいい。
流れぶった切ってゴメソ
123 :デフォルトの名無しさん:2005/10/15(土) 08:15:18
Windows SDKについて質問です。

既存のシリアル通信プログラムがあります。
その通信プログラムを変更せずに、
外部から通信をフックしてモニタリングする方法(関数)なんてあるんでしょうか?

やっぱり、モニタ機を通信ケーブル間に入れるのが一般ですかね?
124 :デフォルトの名無しさん:2005/10/15(土) 08:19:44
>>123
モニタリング機能載せた仮想シリアルポートのドライバ作って通信プログラムを仮想ポートに接続させとくとか
125 :デフォルトの名無しさん:2005/10/15(土) 08:23:53
COMポートのフィルタドライバを開発する
(ベクターとかにシェアウェアでいくつかあった希ガス)

APIレベルで解決するなら、
COMポートの通信に使用しているAPIをフックすれば
モニタできる・・・んだろうか?
126 :デフォルトの名無しさん:2005/10/15(土) 12:15:24
>>124 & >>125
ををを!
例えばドライバを作るとして・・・・・
・・・・・何のSDKを調べりゃいいんですかね?
やっぱDDK辺りを?
127 :デフォルトの名無しさん:2005/10/15(土) 12:43:34
>>126
DDKだろね

ttp://www.sysinternals.com/utilities/portmon.html
↑にヒントぽいのがあるぞ
まぁ、モニタそのものもあるんだが…w
128 :デフォルトの名無しさん:2005/10/15(土) 15:41:01
WindowFromPoint()で取ってきたHWNDがWindowなのか他のものなのかを
判断する方法ってありますでしょうか?

WindowFromPoint()する場合そこがタイトルバーかどうかの
判断方法はどのようにしておこなえばよいのでしょうか?
教えてエロ人!
129 :デフォルトの名無しさん:2005/10/15(土) 15:46:59
前半意味が分からん(HWNDがウィンドウじゃなきゃ何なんだ?)
後半WM_NCHITTESTを送信する
130 :デフォルトの名無しさん:2005/10/15(土) 15:47:34
RealGetWindowClass
131 :デフォルトの名無しさん:2005/10/15(土) 15:48:39
>>128
閉じるメッセージを送って閉じなければタイトルバー
閉じればウィンドウ
132 :デフォルトの名無しさん:2005/10/15(土) 16:39:37
>>131
バカだこいつ・・・
133 :デフォルトの名無しさん:2005/10/15(土) 17:14:51
質問の雰囲気的にはGetWindowLongPtr()でウィンドウスタイルを取得して調べた方がいいのでは。
134 :デフォルトの名無しさん:2005/10/15(土) 17:49:39
>>127
ありがとうございます。
調べてみます!
135 :デフォルトの名無しさん:2005/10/15(土) 19:03:31
>>123
それでもやはり、回線モニタは用意した方がいいぞ。
#仕事なら言うまでもないことだが。
136 :デフォルトの名無しさん:2005/10/15(土) 20:19:45
>>135
バカだこいつ・・・
137 :デフォルトの名無しさん:2005/10/15(土) 20:24:46
C/C++室から誘導されてやってきました。

デスクトップ上のアクティブウインドウに別のプログラムから
キー入力を行うにはどうすればよいのでしょうか。
WIN APIとMFCをごっちゃで使っています。

HWND wh = ::GetForegroundWindow();
::SendMessage(wh, WM_CHAR, 'a', 0);

として、メモ帳をアクティブにしても何も表示されません。
138 :デフォルトの名無しさん:2005/10/15(土) 20:25:17
SendInput
139 :デフォルトの名無しさん:2005/10/15(土) 20:30:29
まずは、WM_KEYDOWNじゃないか?
それ以前に、指定したウィンドウが子ウィンドウにメッセージを転送してくれるとは限らないし、
SendMessage()系統のAPIでメッセージをトップウィンドウに送信しても無駄だと思う。
140 :デフォルトの名無しさん:2005/10/15(土) 20:46:38
>>136
なんで?
141 :デフォルトの名無しさん:2005/10/15(土) 20:53:26
>>140
ヒント:メール欄
142 :デフォルトの名無しさん:2005/10/15(土) 21:23:16
>>141
sageがヒント?
あなたキティ?
143 :デフォルトの名無しさん:2005/10/15(土) 21:26:18
おまえがな
144 :デフォルトの名無しさん:2005/10/15(土) 21:29:19
仮想シリアルポートのドライバの件、同じような事を考えてたけど

kernel32.dll を全部スルーするスケルトンどっかにないかな
そしたら、必要な所だけにコード書いて、そいつを実行ファイルと同じフォルダに入れるだけで
アレやコレや出来るのにって事。

いや、簡単なのは判ってるけど、ただ面倒なんだよね
145 :デフォルトの名無しさん:2005/10/15(土) 21:45:06
>>142
お前の人生っていつもそんな感じだよな
146 :デフォルトの名無しさん:2005/10/15(土) 21:48:23
>>137
メモ帳の場合は、メモ帳のウィンドウにあるEDITにキーイベントを送らないといけません。
アプリケーションごとにフォーカスがどの子ウィンドウににあるか意識したくないのであれば
keybd_event()使った方がよいでしょう。

> HWND wh = ::GetForegroundWindow();
ここで正しくメモ帳のウィンドウハンドルが取れているかどうかも確認した方が。
147 :137:2005/10/15(土) 22:35:44
::keybd_event('A', 0, 0, 0);
::keybd_event('A', 0, KEYEVENTF_KEYUP, 0);

で入力できました。答えてくれた方々ありがとうございます。
148 :デフォルトの名無しさん:2005/10/15(土) 22:39:38
'A'
これ似てるなw
149 :デフォルトの名無しさん:2005/10/15(土) 22:47:19
('A')<僕の顔をお食べよ
150 :デフォルトの名無しさん:2005/10/15(土) 23:24:19
>>144
探せばいくつも出てくると思うよ。
俺は任意のDLLを媒介するDLLのソースを自動生成するツールを、どっかで見たよ。
151 :デフォルトの名無しさん:2005/10/15(土) 23:27:08
エディットウィンドウEWを作成しています。
EWのデフォルトの文字の大きさ、フォントが好きではないので自分で
設定したいと思ったのですが、変更する方法を教えていただけませんか?
152 :デフォルトの名無しさん:2005/10/15(土) 23:29:31
それくらいMSDNで探せ
153 :デフォルトの名無しさん:2005/10/15(土) 23:30:46
>>150
>任意のDLLを媒介するDLL
そうか アセンブラで書いて、必要な関数以外、 中身は JMP 命令 にすればいいんだ!
154 :デフォルトの名無しさん:2005/10/15(土) 23:36:02
>>153
DLLフックしちゃダメなの?
155 :デフォルトの名無しさん:2005/10/15(土) 23:48:32
>>154
ファックしたらつかまるぞ
156 :デフォルトの名無しさん:2005/10/16(日) 00:10:07
正直むかついた。
157 :デフォルトの名無しさん:2005/10/16(日) 00:54:08
WSAWaitForMultipleEvents()でPostThreadMessage()の
メッセージのイベントって拾えるのでしょうか。

要はソケットとメッセージのイベント両方を待ち受けしたいのですが
他にいい方法があれば誰か詳しい方ご教示願います。

他にWaitForMultipleObjects()などもありますが今ひとつ使い方が
よく分かりません。よろしくお願いします。
158 :デフォルトの名無しさん:2005/10/16(日) 00:57:58
マルチするくらいなんだから、
お前さんもWaitForMultipleObjectsしていなさいな。
159 :デフォルトの名無しさん:2005/10/16(日) 00:59:20
>>157
MsgWaitForMultipleObjects()
とかじゃなくてか?
160 :デフォルトの名無しさん:2005/10/16(日) 02:31:41
>>150
listexpだな
161 :デフォルトの名無しさん:2005/10/16(日) 05:00:40
>>144
そんな面倒なことしなくても、DLLがエクスポートしている関数に
フックを仕掛けることができる。
これなら書かなければいけないコードは、フックする関数の分だけでいい。

>>153
そんなアナタにはnaked関数がおすすめ。
162 :デフォルトの名無しさん:2005/10/16(日) 09:00:49
質問です。
クラスに WC_TABCONTROL を指定してタブコントロールを作ったんですが、
タブ上で右クリックされたことを検出するにはどうしたらよいでしょうか?
163 :デフォルトの名無しさん:2005/10/16(日) 15:51:08
質問です。
ルートのウィンドウにCreateWindwoで貼り付けた"BUTTON"コントロールの、
文字色を設定したい場合はOwnerDrawというやつしか手段はないもんでしょうか?

フォントはWM_SETFONTで変わるけど色が…。
そもそもSetWindowTextで文字を出力するのが間違い?
でもHDC取得してTextOutじゃ何も表示されないし。

識者の方々、御指南求みます。
164 :163:2005/10/16(日) 15:55:41
…訂正。

×Windwo
○Window

うぃんどぅお。_| ̄|○ il||li
165 :デフォルトの名無しさん:2005/10/16(日) 15:58:26
>>163
他にも方法はあるが、OwnerDrawでやるのが無難。
166 :163:2005/10/16(日) 16:02:25
>>165
識者殿、サンクス。
猫WinとAPIリファレンスで修行中です。

これからOwnerDrawってやつの使い方を探す旅にいってきま。
目指せWinXPの電卓みたいなボタン。
167 :デフォルトの名無しさん:2005/10/16(日) 18:15:17
>>166
XPの電卓みたいなボタンでいいならマニフェストを書くだけだぞ。
XP以外のOSでもああいうボタンにしたいならけっこう手間だけど
168 :デフォルトの名無しさん:2005/10/16(日) 18:20:07
質問があります。

5ボタンマウスの戻ると進むボタンに対して、アクセラレータキーを割り当てたいのですが、
どのようにすれば割り当てられますか?

環境は、VC.net 2003です。
169 :163, 166:2005/10/16(日) 18:25:46
>>167
XP限定なら、マニフェストでもできるですか。
OwnerDrawを使うと、98だら2000だらでも文字色が変えられるってことですな。

ん〜OwnerDrawは、この先どのみち避けて通れない道っぽいので、
今回は習作だし、"けっこうな手間"をかけてみることにしまつ。

Manifestも手段の一つとして覚えておきま。サンクス。
170 :デフォルトの名無しさん:2005/10/16(日) 18:29:10
>>163
VC6のMSDN読むとWM_CTLCOLORBTNでできそうに見えるんだけど、
実際はできないんだよなあ。後の版でこっそり訂正入れてやがるの。
171 :163:2005/10/16(日) 19:13:17
>>170
できそうに見えたので、散々やってみましたが、
できなかったので聞いてみた次第です。(w
BM_SETTEXTCOLOR とか、あってもよさそなもんですが…。
172 :デフォルトの名無しさん:2005/10/16(日) 22:03:29
あ、あのね、あのね、聞きたいことがあるんだけど答えてくれるかなぁ
173 :デフォルトの名無しさん:2005/10/16(日) 22:15:17
ダメ絶対
174 :デフォルトの名無しさん:2005/10/16(日) 22:15:32
いいえ
175 :デフォルトの名無しさん:2005/10/16(日) 22:32:28
うむ
176 :172:2005/10/16(日) 23:18:04
げ、現役女子大生なんですけど質問しちゃだめなんでしょうか?
若さが足りません?
177 :デフォルトの名無しさん:2005/10/16(日) 23:19:39
>>176
足りない足りない。
もー全然足りないね。
どのくらい足りないかというと15年くらい。
とっくに腐ってるよ。
178 :現役女子高校生:2005/10/16(日) 23:22:55
>>176
オバさんはお帰り下さい
179 :デフォルトの名無しさん:2005/10/16(日) 23:23:16
>>176
俺が在籍してた大学には白髪のおじいさんもいたよ。現役大学生で。
ある意味若いがw
180 :172:2005/10/16(日) 23:29:26
>177さん15年ってあなた・・・
私、今年還暦を迎えたのですがあなたの好みは45〜ですか?
それなら従姉妹のいいのがいるので紹介しますから
質問に答えてもらえません?
大丈夫です、貞操は守っているそうですから。
181 :現役女子中学生:2005/10/17(月) 00:08:44
>>180
おばあさんはお帰り下さい
182 :デフォルトの名無しさん:2005/10/17(月) 00:14:52
質問スレなんだから質問して良いですかなんてくだらない質問しないで即質問していれば良かったのに質問
183 :デフォルトの名無しさん:2005/10/17(月) 02:48:55
CreateFileなどで得たHANDLEからファイル名を取得できるAPIはありますか?
184 :デフォルトの名無しさん:2005/10/17(月) 08:30:31
いやおまえ、CreateFileしてる時点でファイル名わかってるだろ・・・
まさか別のプログラムにハンドル渡すとかバカなこと考えてるんじゃねぇだろうな・・・
185 :デフォルトの名無しさん:2005/10/17(月) 08:33:01
そんなAPIは無いな
186 :デフォルトの名無しさん:2005/10/17(月) 09:07:54
DirectInputを使ったアプリケーションに対してマウスイベントを送る方法はないでしょうか?
キーボードイベントはスキャンコードを使用して実現できたのですが・・・・
187 :デフォルトの名無しさん:2005/10/17(月) 16:47:05
ファイルの先頭にファイル名でも書いとけ
188 :デフォルトの名無しさん:2005/10/17(月) 19:43:18
>>184
> 別のプログラムにハンドル渡すとかバカなこと

いちおうWindowsでは可能だし、そのための仕掛けもある。

でも普通はやらない。
189 :デフォルトの名無しさん:2005/10/17(月) 20:20:21
stdin/stdoutのリダイレクト元を調べたいとか?
190 :デフォルトの名無しさん:2005/10/17(月) 20:48:20
>>183
NtQueryObject
191 :デフォルトの名無しさん:2005/10/17(月) 20:50:16
sage 忘れた・・

>>183
この辺参考に。
http://www.codeproject.com/debug/cdbntsd5.asp
192 :183:2005/10/17(月) 21:22:48
たんに、OS側でもってると思われるHANDLE->ファイル名の表を
アプリ側がもつのが嫌なだけです.

NtQueryObjectはドキュメント化されてないAPIのようで
ちょっと調べてみます. ありがとうございました
193 :デフォルトの名無しさん:2005/10/17(月) 21:25:13
Windowに対してマウスの挙動で、ロールオーバー、ロールアウトみたいなイベントを作り出したいんですが、
どこかにサンプルコードとか公開されてませんでしょうか?、情報ありましたらよろしくお願いします。
194 :デフォルトの名無しさん:2005/10/17(月) 21:31:38
195 :デフォルトの名無しさん:2005/10/17(月) 21:33:49
>>192
(゚д゚;)・・・・
196 :デフォルトの名無しさん:2005/10/17(月) 22:11:45
国が持ってる個人情報を自分で持つのは嫌です…?
197 :デフォルトの名無しさん:2005/10/17(月) 22:17:00
データベースの正規化の思想に近いモンなんじゃねえのか?
198 :デフォルトの名無しさん:2005/10/17(月) 22:21:23
DuplicateHandleは、どういう用途に使うものなのですか?
199 :デフォルトの名無しさん:2005/10/17(月) 22:28:50
管理したくないならファイルハンドルの方を閉じて開きなおせばいいだけ
200 :デフォルトの名無しさん:2005/10/17(月) 22:43:52
>>198
ハンドルを他プロセスに渡したいときとか
201 :198:2005/10/17(月) 22:46:32
>>200
ありがとう。
202 :デフォルトの名無しさん:2005/10/17(月) 22:48:41
>>197
まったく無関係
203 :デフォルトの名無しさん:2005/10/17(月) 22:49:02
>>192
GetFileInformationByHandleなんかからも想像できると思うが、
HANDLE->ファイル名をOSが持っているとは限らん。
204 :デフォルトの名無しさん:2005/10/17(月) 22:50:54
グローバル変数hInstanceじゃなくGetModuleHandle(NULL)の思想に近いモンなんじゃねえのか?
205 :デフォルトの名無しさん:2005/10/17(月) 23:37:50
>>202
そーか?
データを二重持ちしないのは正規化の基本だべ
206 :デフォルトの名無しさん:2005/10/18(火) 00:16:42
>>205
そもそも、元々存在ものを正規化するとは、どういう了見よ?
と言う話だろ?
207 :206:2005/10/18(火) 00:17:58
×存在ものを
〇存在しないものを

ヌケタ…orz
208 :デフォルトの名無しさん:2005/10/18(火) 00:34:04
>>206
ファイル名、というモノは存在するだろ。
209 :デフォルトの名無しさん:2005/10/18(火) 02:48:48
NTFSだと、ファイルハンドル開いてる最中に、削除なり、リネームなりできるので、
そういった場合のHANDLEとファイル名の対応ってのは曖昧になる。
たぶん、OS内ではファイルシステム上での識別子(UNIXでいうi-node番号)と、
HANDLEの対応表はもってるけど、それが、何というファイル名で参照されたのかは、
管理してないんじゃないかと思う。
210 :デフォルトの名無しさん:2005/10/18(火) 03:05:45
その考えで行くと、
「それ」がいま、なんと言うファイル名なのか、はわかりそうなものだけど。

そういえば、sysinternalsのProcess Explorerは、
プロセスが開いているファイルハンドルと、ファイルパスを見ることができるけど、
あれはどうやっているんだろう。
211 :デフォルトの名無しさん:2005/10/18(火) 03:14:10
>>198
ハンドルには、全てのプロセスで共通に使えるものと
自分のプロセスでしか使えないもの(擬似ハンドル)があるのよ。

擬似ハンドルは実は定数で、どのプロセスで取得しても同じ値が返ってくる。
DuplicateHandleを使うと、擬似ハンドルを本物のハンドルに変換できる。
212 :デフォルトの名無しさん:2005/10/18(火) 03:50:35
>>210
「ちょっと前」はわかっても、「いま」は、わからない。
ファイル名の変更をロックでもしない限り、取得した後も変っていないことは誰も保証できない。
213 :デフォルトの名無しさん:2005/10/18(火) 07:27:34
そんなこと言い出したらGetModuleFileNameすら信用できないわけだが。
ファイルコピーするときはコピー元とコピー先を完璧にロックしてから
始めなきゃ信頼できないわけだがWindows Server 2003以外には
そもそもそのための機構(ボリュームのシャドウコピーとか)すらないし
ファイルの保存ダイアログの上書き確認とか、答えてる間に状態が
変わってるとか超ありそうなもんだが誰も気にしてないし。
近似で十分なことなんていくらでもあるもんだよ。
ちなみにProcess Explorerとかで取れるのは「開いたときになんという
パスを使ったか」だと思われ(そうじゃないとハードリンクを持ってるファイルとか
決定のしようがないし)
214 :デフォルトの名無しさん:2005/10/18(火) 07:30:18
つーかハンドルはあるんだからロックが必要ならロックすれば言いだけの話だし
215 :デフォルトの名無しさん:2005/10/18(火) 08:10:10
>>213
GetModuleFileNameはファイル名を求めるためより、
実行ファイルの有るディレクトリのフルパスを求めるのに使われる方が多いからな
EXE実行中のディレクトリは名前変更不可だ
216 :193:2005/10/18(火) 10:46:37
>>194
イイ!
多謝多謝!
助かりました。
217 :デフォルトの名無しさん:2005/10/18(火) 10:49:05
FindWindowでウィンドウ名だけ指定したとき、同じウィンドウ名がいくつかあった場合の優先順位ってありますか?
218 :デフォルトの名無しさん:2005/10/18(火) 11:38:14
>>217
不定と考えてプログラムを組むべき
219 :デフォルトの名無しさん:2005/10/18(火) 11:46:13
不定じゃない
Cのライブラリみたいにベンダー毎に実装の仕方を任せてるものでも無いのに不定でたまるか

>>217
全ての同じ名前のウィンドウの中で、最も前面にあるウィンドウのハンドルが返る
あと、同じ名前のウィンドウでも、それが子ウィンドウの場合は検索対象にならないのは知ってるよな?
220 :217:2005/10/18(火) 11:48:13
>>219
thx
221 :デフォルトの名無しさん:2005/10/18(火) 11:49:20
全OSでそう動けばいいけど…。
222 :デフォルトの名無しさん:2005/10/18(火) 11:55:29
>>219
>>218は、
ドキュメントに書いてない挙動を前提として
プログラムを書くのは良くないってことかと

実際に、ドキュメントに書いてあるかどうかは知らんけど
223 :デフォルトの名無しさん:2005/10/18(火) 12:29:56
MSDN斜め読みしたが、書いてないっぽいから不定として扱うべきだな。
224 :デフォルトの名無しさん:2005/10/18(火) 12:36:51
不定行為
225 :デフォルトの名無しさん:2005/10/18(火) 13:03:24
イヤン
226 :デフォルトの名無しさん:2005/10/18(火) 13:46:11
>>224
ナニイッテルンデスカ
227 :デフォルトの名無しさん:2005/10/18(火) 14:45:59
たまにいるんだよなー

仕様に書いてないから、わからない。

という言うと、

実際に試してみろよ、何でも人に教わろうとするなよ

とかいって怒りだす人が。

そんなこと言ってるんじゃないのよー。
228 :デフォルトの名無しさん:2005/10/18(火) 14:51:23
何の話だ・・・
229 :デフォルトの名無しさん:2005/10/18(火) 14:53:04
スレの質が低下してまいりました。
230 :デフォルトの名無しさん:2005/10/18(火) 14:55:18
ごめん、それはたぶん俺のせいだ
231 :デフォルトの名無しさん:2005/10/18(火) 15:43:15
つまり未定義命令を使うとHD64180で動かないという話だろ
232 :デフォルトの名無しさん:2005/10/18(火) 16:13:13
>>227
DirectXでまでそんなこと言うような奴は、狂ってるんだろうなw
233 :デフォルトの名無しさん:2005/10/18(火) 22:17:26
>>215
FATだと(Win9xだと?)変更できるな
WINDOWSディレクトリのリネームすらできるという豪快さ
(もちろんリネームした後はまともに動かなくなるが)
234 :デフォルトの名無しさん:2005/10/18(火) 22:20:00
まぁ、今ほとんどNTFSだからな
235 :215:2005/10/18(火) 22:21:01
でもな、不思議なことに、実行中のEXE自身は名前変更できるんだよな・・・
MSめ、中途半端なことしやがって・・・
236 :デフォルトの名無しさん:2005/10/18(火) 22:29:39
NT4あたりだと確か削除すらできたぞ
もちろん終了するまでクラスタは解放されないけど
237 :デフォルトの名無しさん:2005/10/18(火) 22:34:54
さらにカレントディレクトリをexeのあるディレクトリ以外にして起動するとリネームできる。
つまりリネームできなくなる原因は「exeがそこで実行されているから」ではなくて
「そこがカレントディレクトリになっているから」(内部的にプロセスはカレントディレクトリ
のハンドルを保持している)
238 :デフォルトの名無しさん:2005/10/18(火) 22:40:35
つーわけでGetModuleFileNameの結果を当てにしすぎると不幸になるかもしれない
239 :デフォルトの名無しさん:2005/10/18(火) 22:58:21
>235
へー。メモリマップドファイルとしてオープンされてるのかと思ってたよ。
240 :デフォルトの名無しさん:2005/10/18(火) 23:13:02
>>239
されてるよ。されてるにもかかわらずリネームできるの。
UNIXじゃ常識だけどWindowsの常識ではびっくりだわな。
241 :デフォルトの名無しさん:2005/10/19(水) 03:53:02
>>227
OSのバージョンが上がったり、サービスパックや修正パッチがあたると、
途端に動作が破綻する糞コードを書く人がいるよねー。
242 :デフォルトの名無しさん:2005/10/19(水) 11:58:16
メッセージの管轄はここじゃないよね?
243 :デフォルトの名無しさん:2005/10/19(水) 13:32:23
とりあえず申してみい
244 :デフォルトの名無しさん:2005/10/19(水) 13:48:05
ゴメ、やっぱやめておく。
245 :デフォルトの名無しさん:2005/10/20(木) 01:16:58
>>235
「フッ、つまらん釣りだな」と思いつつ、試してみた。
XPHomeSP2でも実行中のEXEをリネーム・移動ができた。
・・・正直驚いた。
246 :デフォルトの名無しさん:2005/10/20(木) 07:02:53
それなら設定をEXEの中に持ててもいいんじゃまいか・・・
247 :デフォルトの名無しさん:2005/10/20(木) 08:19:11
Macのリソースフォークみたいにな。
ストリームで何かできませんか
248 :デフォルトの名無しさん:2005/10/20(木) 10:56:32
Arcで円を書きたいのですが、何か円弧になっちゃうというか、
始点終点を指定してないつもりが指定になってるようです。

完全な円にしたいのですが、どうすれば宜しいでしょうか?
249 :デフォルトの名無しさん:2005/10/20(木) 11:09:51
>>248
始点と終点が同じじゃないと円にならないと思われ。
つーか、指定しないことはできないと思うのだが。
ソース晒して味噌。
250 :デフォルトの名無しさん:2005/10/20(木) 11:10:14
>>248
始点終点をちゃんと指定する
251 :デフォルトの名無しさん:2005/10/20(木) 14:09:12
マウスカーソルの周辺部分を、拡大して表示するプログラムを作ってみたいと思うのですが、
どういう方法が一番高速なのでしょうか?

あと、マウスカーソル部分一点のRGB値を表示するようなプログラムだったら、
単純にGetPixel()でも問題ないのでしょうか?
252 :251:2005/10/20(木) 14:12:39
方法とは、マウスカーソル周辺部分を取得する方法です。
253 :デフォルトの名無しさん:2005/10/20(木) 14:16:22
>一番高速

あえて回答もらうの否定してるんだろうか
254 :デフォルトの名無しさん:2005/10/20(木) 14:16:29
>>252
GetDC(NULL) した DC (←画面を参照できる) から、StretchBlt するとイイヨ。
255 :デフォルトの名無しさん:2005/10/20(木) 15:45:52
座標がわかるんだから、それを元にしてやればいいんじゃないのか。
そんなん高速だなんだってレベルなのか?

…釣りか。
256 :14:2005/10/20(木) 17:37:17
SendInput()で、スキャンコードを使うことで、
DirectInputを使っているプログラムにもキーストロークを送ることができたのですが、
マウスの操作ができません。

DirectInput使用のプログラムへ、マウスモーションやクリックを送るにはどうすればいいのでしょうか?
257 :デフォルトの名無しさん:2005/10/20(木) 18:59:21
    〃∩ ∧_∧
   ⊂⌒(  ・ω・)  ゲームくらい自分でやれよ
     `ヽ_っ⌒/⌒c
        ⌒ ⌒
258 :デフォルトの名無しさん:2005/10/20(木) 21:15:23
インストーラ探してるんですけど、情報ありましたら教えてください、また、インストーラの比較サイトなどありましたらお願いします。
259 :デフォルトの名無しさん:2005/10/20(木) 21:19:41
ありません
ありません
260 :デフォルトの名無しさん:2005/10/20(木) 21:20:15
ボリュームコントロールのライン入力をミュートにしたり、解除したりしたいのですが、
win32でどのようにやればよいのでしょうか?

お願いします。
261 :デフォルトの名無しさん:2005/10/20(木) 21:46:37
他のプロセスのコマンドラインを取得したいのですが、どのようにすればよいのでしょうか。
プロセス一覧を取得して、それらを個別にOpenProcessするまではできました。

ReadProcessMemoryでどこかのアドレスから読み取って構造体を当てれば
いいのかなとか、もっとスマートに取得する方法があるんじゃないかと思うのですが、
この辺の情報が見つからなくて困っています。
262 :デフォルトの名無しさん:2005/10/20(木) 22:02:10
対象プロセス内でGetCommandLine()するのが一番はやいんじゃね?
263 :デフォルトの名無しさん:2005/10/20(木) 23:03:58
>>246-247
副次ストリームがあるじゃない
264 :デフォルトの名無しさん:2005/10/20(木) 23:46:28
>>262
未熟で申し訳ありません、イメージがつかめないのですが、
たとえば起動済みのテキストエディタのコマンドラインを知りたいと思ったら
相手のプロセスに乗り込んでいって何かやるということでしょうか?
向こうでGetCommandLine()やってこちらに通知させる?
そんなことが可能なのでしょうか・・・

勘違いしていたらすみません
265 :デフォルトの名無しさん:2005/10/21(金) 02:17:33
>>260
Simple Mixer Control Wrapper
ttp://www.codeproject.com/audio/alexfmixer.asp

システム音量制御は、上URLのCAlexfMixerクラスを使うと簡単。
266 :デフォルトの名無しさん:2005/10/21(金) 05:50:22
>>263
ストリームの欠点は、ファイルをNTFSから外に出すと、失われること・・・。

それはいいとして、
EXEのファイル名がわからないのに、どうやってストリームをCreateFileしますか?
267 :デフォルトの名無しさん:2005/10/21(金) 08:05:45
>>264
PEBを見るという手もある
268 :デフォルトの名無しさん:2005/10/21(金) 12:44:08
デスクトップ上の、マウスカーソルの下のRGB値を表示するプログラムを作ってみたのですが、
GetPixel(GetDC(NULL),...)が重い上に遅くて困っています。

もっと早い方法はありませんか?

269 :デフォルトの名無しさん:2005/10/21(金) 12:46:27
>>268
どうでもいいがそのコードだとDC解放できないような希ガス
270 :デフォルトの名無しさん:2005/10/21(金) 13:18:48
>>269
教えてやれよReleaseDC
>>268 MSDN嫁
271 :268:2005/10/21(金) 13:24:54
そういえばReleaseDC()してませんでした。

>>270
具体的にMSDNのどこでしょうか?
272 :デフォルトの名無しさん:2005/10/21(金) 13:49:04
>>271
GetTickCountでGetPixelにいくらかかってる?

すぐ帰ってくるけどな。
273 :デフォルトの名無しさん:2005/10/21(金) 14:05:16
>>272
3Dのゲームのウインドウの上にカーソルを持っていくと
(3Dのゲーム画面のRGB値を取得しようとすると)
そのゲームのFPSが目に見えて落ちるんです。
274 :デフォルトの名無しさん:2005/10/21(金) 14:09:52
>>273
DirectX部分のDCとってるのか...?。
ならIDirect3DSurface9とか使え。
275 :デフォルトの名無しさん:2005/10/21(金) 14:15:38
>>272
いってらっしゃい
276 :デフォルトの名無しさん:2005/10/21(金) 18:15:10
いってきます。
277 :260:2005/10/21(金) 19:39:24
>>265
ありがとうございます。やってみます。
278 :デフォルトの名無しさん:2005/10/21(金) 20:46:44
メニューって左から
ファイル(F) 編集(E) ・・・ 
と並んでいますが、 ヘルプ(H)だけ
そいつらと離して、常に右端へ配置したいのです。
常に最大最小化閉ボタンの真下あたりに来るように。
どうすればいいですか?
279 :デフォルトの名無しさん:2005/10/21(金) 20:50:42
自分で作るしかない
280 :デフォルトの名無しさん:2005/10/21(金) 20:52:05
ま、まじですか・・・
何かとっかかりとか教えていただけると嬉しいです・・・
メニューとか右端とかで検索してもどうも引っかからなくて・・・
281 :デフォルトの名無しさん:2005/10/21(金) 21:01:47
自分で作るしかない
282 :デフォルトの名無しさん:2005/10/21(金) 21:07:57
自分で作るしなかい
283 :デフォルトの名無しさん:2005/10/21(金) 21:08:07
手間がかかるのは、Windows標準のインターフェイスから逸脱するって
いうことですよ。
284 :デフォルトの名無しさん:2005/10/21(金) 21:10:25
RS-232C通信についてお聞きします。
今、下のようなコードでCOMポートを開いて通信をしようとしているのですが、WriteFileで送信はできてもReadFileで受信ができません。
しかし、このコードのプログラムを実行する前に一度ハイパーターミナルなどでポートを使用した後だとReadFileで受信ができます。
おそらく初期化の手続きに問題があるとおもうのですが、どこに問題があるのか教えて頂けないでしょうか。よろしくお願いします。

//問題のコード
// PORT OPEN
InitializeCriticalSection( &com->CritSec);
com->Com = CreateFile( port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
com->Stat = stat;
com->Pc   = pc;
sprintf( com->Port, "%s", port);

// イベントハンドラ設定
com->hReadEvent = CreateEvent( 0, TRUE, FALSE, 0);
com->hWriteEvent = CreateEvent( 0, TRUE, FALSE, 0);
//下に続く
285 :続き:2005/10/21(金) 21:11:28
// 非同期通信設定
com->ReadOverLapoed.Offset = 0;
com->ReadOverLapoed.OffsetHigh = 0;
com->ReadOverLapoed.hEvent = com->hReadEvent;
com->WriteOverLapped.Offset = 0;
com->WriteOverLapped.OffsetHigh = 0;
com->WriteOverLapped.hEvent = com->hWriteEvent;

// その他設定
GetCommState( com->Com, &dcb);
dcb.fBinary = 1;
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity   = 0;
dcb.StopBits = 0;
dcb.EofChar  = 0x0a;
dcb.EvtChar  = 0x0a;
SetCommState( com->Com, &dcb);
286 :デフォルトの名無しさん:2005/10/21(金) 21:17:53
>>278
MF_HELP

>>283
昔はヘルプメニューが右に寄るのって標準的だったんだけどなあ。
287 :デフォルトの名無しさん:2005/10/21(金) 21:24:58
>>278
リソースのメニューなら、メニューのプロパティで「ヘルプ」をチェックするか、
リソースファイルでHELPオプション付ける手もある。
IDC_MAINMENU MENU DISCARDABLE
BEGIN
  POPUP "&Help", HELP
(以下略)
288 :デフォルトの名無しさん:2005/10/21(金) 21:29:39
>>286
そんな標準的しらねぇよ?
289 :デフォルトの名無しさん:2005/10/21(金) 21:30:26
メニューバーの前面に「?」のビットマップボタンウィンドウを配置するのが一番楽だろう。
フレームウィンドウのリサイズに伴って位置を移動させる必要があるけど。
290 :デフォルトの名無しさん:2005/10/21(金) 21:37:00
>>286
Win3.1の頃の標準なんてもはやどうでもいい。
291 :デフォルトの名無しさん:2005/10/21(金) 21:41:05
MF_HELPは、DOS 時代の CUI の UI 標準 (OSAだかCSAだか何かアッタんよ) の
に準拠したようなヘルプメニューを Windows で実装するためにだけ存在しますた。

普通の MS のプログラムでは Help メニューも右寄せにはなっていなかったはず。
292 :デフォルトの名無しさん:2005/10/21(金) 21:42:01
ホラ。Help は普通のメニュー。

ttp://en.wikipedia.org/wiki/Image:Windows_3.0_workspace.png
293 :289:2005/10/21(金) 21:42:57
>>287という普通のやり方があることを今知った・・・。
そんなわけで>>289はナシということで。
294 :デフォルトの名無しさん:2005/10/21(金) 21:49:17
メニューの話ついでに質問なんですが、サブメニュー[元に戻す(U) など]じゃなくてルートメニュー[ファイル(F) など]が押された時のイベントってどうやって取るんですか?
リソースエディタだと「IDを編集できません」ってなってるので何かいつもとは違うやりかたなんだろうなあと。
295 :278:2005/10/21(金) 21:52:42
うおおお、みなさんありがとうございます。
色んな知識が身につきました。
そうですよね、ヘルプが右側にあったのって結構昔ですよね。
>>286さんの教えてくれたMF_HELPを使おうと思ってModifyMenuとか調べてたら、
>>287さんの超簡単な方法であっさりできてしまい感激です。
ありがとうございました!
296 :デフォルトの名無しさん:2005/10/21(金) 22:01:48
>>294
リソースエディタでIDを入れる
297 :デフォルトの名無しさん:2005/10/21(金) 22:03:22
298 :デフォルトの名無しさん:2005/10/21(金) 22:29:37
>>284
GetCommTimeouts()の結果を確認せよ。
お勧め設定はBuildCommDCBAndTimeouts()を例えば
BuildCommDCBAndTimeouts("com1: baud=9600 parity=n data=8 stop=1 to=off xon=on "
"odsr=off octs=off dtr=on rts=on idsr=off", & dcb, & timeOut);
のように使う方法。
299 :デフォルトの名無しさん:2005/10/21(金) 22:32:22
SetCommStateに失敗してbaud rate とかが設定されてないんだと思う。
何故失敗するかは知らないけど。
300 :268:2005/10/22(土) 00:43:22
>>274
DirectXはまったく知らないのですががんばってみます。


GetFrontBufferDataで取得して、
IDirect3DSurface9::GetDC()で、後は好きなようにしていいのかな。
301 :デフォルトの名無しさん:2005/10/22(土) 02:00:00
昔の話といえば、よくメニューに
「ファイル(\036F\037フ)」
こんなアクセスキーをつけていたんだが、日本語のアクセスキーが
使えなくなったのっていつからだっけ? Win95?
302 :デフォルトの名無しさん:2005/10/22(土) 05:17:17
インターネットエクスプローラの文字検索ウィンドウ(Ctrl+Fで出るやつ)を出すにはどうしたらよいのでしょうか?
また、HTMLの画面とかを出さずに単独で出現させることは可能なのでしょうか?
303 :デフォルトの名無しさん:2005/10/22(土) 05:34:28
>>301
世界共通バイナリになってから(Win2k/XP)?
304 :デフォルトの名無しさん:2005/10/22(土) 08:39:20
3.1の頃からそんなバカなアクセスキーなど見たこと無いわ
305 :デフォルトの名無しさん:2005/10/22(土) 10:18:47
>>302
検索ダイアログなら、コモンダイアログでなかったっけ?
306 :デフォルトの名無しさん:2005/10/22(土) 14:50:49
>>304
実際にアプリが使ってたかどうかはともかくとしてOSに機能はあったよ
Win/Vが苦労した点の1つもカナアクセスキーのサポートだったし
307 :デフォルトの名無しさん:2005/10/22(土) 15:01:24
OSに機能があっても使われてなけりゃ無いのと一緒
308 :デフォルトの名無しさん:2005/10/22(土) 15:05:50
古いサンプル探したらこんなのが

POPUP "ウィンドウ(\036W\037ウ)"
{
MENUITEM "カスケード表示(\036C\037カ)\tShift+F5", IDM_CASCADE
MENUITEM "タイル表示(\036T\037タ)\tShift+F4", IDM_TILE
MENUITEM "アイコン再配置(\036I\037サ)", IDM_ARRANGE
}
POPUP "ヘルプ(\036H\037ヘ)"
{
MENUITEM "MDI について(\036A\037ニ)...\tF1", IDM_ABOUT
}
309 :デフォルトの名無しさん:2005/10/22(土) 15:17:37
>>307
コンパネからUIが消えたのは3.1だったかな
でも質問は「使えなくなったのはいつか」なわけで
310 :デフォルトの名無しさん:2005/10/22(土) 17:11:04
MFCのスレッドの中だとsrand関数が無効になるんだけど何でですかね?
311 :デフォルトの名無しさん:2005/10/22(土) 17:16:21
そんなapiあったか?
312 :デフォルトの名無しさん:2005/10/22(土) 17:26:08
無いな
313 :デフォルトの名無しさん:2005/10/22(土) 17:28:02
>>310
MFCスレか初心者スレへ。そのときはただ「無効」と書かず、どうやったらどうなったか書くように。
314 :デフォルトの名無しさん:2005/10/22(土) 19:24:37
C++相談室でこちらに誘導されたので、同じ質問になりますが、書かせていただきます。

> 簡単なインストーラを作りたいんですが、どなたか教えてください。
> 実際、やることは簡単で、myapp.exeを指定したフォルダにコピーするだけです。
> で、myapp.exeをインストーラと同じフォルダに入れておけば、myapp.exeを
> いったん読み込んで、指定したフォルダに書き込むプログラムはすぐできます。
> しかし、そうではなくて、インストーラの中にmyapp.exeのデータを埋め込んで
> しまいたいのです。ユーザから見えないように。
> また、インストーラをファイル1つにするために。
> とすると、バイナリのデータファイルの内容を、実行可能ファイル(今の場合、
> インストーラ)にマージさせることなどが可能なのでしょうか?
> そうでないなら、ファイル1つのインストーラはどのようにできているのでしょうか。
> どなたか、教えていただけないでしょうか。

で、リソースがヒントと言われたのですが、よくわかりません。
Visual C++のリソースにもバイナリファイルなどなかったような。
ただ、いずれにしても、私はBCCでやっているので、リソースファイルも手書きになりますが。
どなたかお願い致します。
315 :314:2005/10/22(土) 19:26:14
教えていただきたいのは、もちろん、できるかどうかというより、
できるなら、その方法を教えていただきたいのです。
連投すみません。よろしくお願い致します。
316 :デフォルトの名無しさん:2005/10/22(土) 19:29:25
>>314
ttp://www.sm.rim.or.jp/~shishido/rctest.html
BCCならこの辺読めば分かるだろ。
ついでにVC++のリソース追加ウィザードでもバイナリデータは書き込めるぞ。
317 :デフォルトの名無しさん:2005/10/22(土) 19:31:51
バイナリのリソースでアイコンやビットマップはよく使うと思うけど
318 :314:2005/10/22(土) 19:39:03
>>316
ものすごく速いレスで驚きました。
ありがとうございます。
そのページ勉強してみます。
319 :デフォルトの名無しさん:2005/10/22(土) 19:43:06
他のプロセスに属しているリストビューの項目を取得したいのですが、どうすればいいのですか?
普通にLVM_GETITEMメッセージを送ってもアドレス空間が違うので、ポインタが無効になってしまう・・・
320 :デフォルトの名無しさん:2005/10/22(土) 19:55:51
GetSystemTime等で得た時間をいくつか取っておいて、
時間の差を求めたり、加算したりしたいんですが、
CompareFileTmeという比較APIはあるのに、差を求めるAPIが見付かりませんでした。

時間同士の差を取得したり加算したりする良い方法は無いでしょうか?
321 :デフォルトの名無しさん:2005/10/22(土) 20:04:28
322 :デフォルトの名無しさん:2005/10/22(土) 20:05:51
>>319
VirtualAllocExとか。9x系では別の手段が必要だけど。
323 :デフォルトの名無しさん:2005/10/22(土) 20:14:37
>>319
フックでそのプロセスに忍び込むとか
324 :デフォルトの名無しさん:2005/10/22(土) 20:17:37
>>320
ミリ秒単位の精度が必要ないなら素直に標準関数を使おう。
#そしてそれはスレ違いなのでここでは説明できない。
325 :デフォルトの名無しさん:2005/10/22(土) 20:23:43
>>320
FILETIMEにしてULARGE_INTEGERで計算とか
326 :デフォルトの名無しさん:2005/10/22(土) 20:25:52
>>321
それができたらここに書込みなんてしませんよ。
>>324
標準関数はdouble型が返ってきて気持ち悪いので嫌です。
327 :デフォルトの名無しさん:2005/10/22(土) 20:26:38
>>325
それしかなさそうですね。
ありがとうございました。
328 :デフォルトの名無しさん:2005/10/22(土) 20:37:05
>>326
>標準関数はdouble型が返ってきて気持ち悪いので嫌です。
いや、time_t同士の引き算で充分だろ。
329 :デフォルトの名無しさん:2005/10/22(土) 21:01:08
いろいろあるんだな
>>ttp://www.super-computing.org/sr8000/timer.html
330 :デフォルトの名無しさん:2005/10/22(土) 21:36:22
>>322-323
どうもありがとうございます。
その線で行ってみます。
331 :デフォルトの名無しさん:2005/10/23(日) 00:04:02
>>314
charの配列として固定で埋め込んで、
そのデータをファイルとして書き出せばいいじゃないか。
332 :デフォルトの名無しさん:2005/10/23(日) 00:07:44
何のためにここで聞いてんだか分からなくなる回答すんなや
333 :デフォルトの名無しさん:2005/10/23(日) 00:11:25
>>332
2chで聞くことに意味を求めることが既に間違っている
334 :デフォルトの名無しさん:2005/10/23(日) 00:16:50
    _, ._
  ( ´ _ゝ`)
335 :デフォルトの名無しさん:2005/10/23(日) 00:34:47
>>333
2chを神聖視しすぎ
336 :デフォルトの名無しさん:2005/10/23(日) 00:59:11
>>314
どういうのが見えないって意味なのかなー
337 :デフォルトの名無しさん:2005/10/23(日) 01:11:33
> インストーラをファイル1つにするために。
こういう意味なんだろ
338 :デフォルトの名無しさん:2005/10/23(日) 01:18:33
じゃーそのままリソースで持つだけか
339 :デフォルトの名無しさん:2005/10/23(日) 01:55:09
>>301,308と書くとどうなったの?
340 :デフォルトの名無しさん:2005/10/23(日) 11:08:25
DLL内部から、そのDLLが呼び出された親ウィンドウのハンドルを取得したいのですが、
どういった方法があるのでしょうか?
ウィンドウを多重起動するのでFindWindwでは上手く取得できません。
341 :デフォルトの名無しさん:2005/10/23(日) 11:13:23
>>340
HWNDを受け取る初期化関数をDLLが公開するのが簡単。
342 :デフォルトの名無しさん:2005/10/23(日) 11:17:18
>>340
GetProcessIdとGetWindowProcessThreadIdで照合とか‥
別に方法ありそうだけど
343 :デフォルトの名無しさん:2005/10/23(日) 11:19:23
DLL呼び出し側も自作なら共有メモリにメモっとくとかも。
344 :340:2005/10/23(日) 12:20:50
>>341
ws2_32.dllをフックしているので、その方法は厳しいかと思います。
>>342
GetProcessIdをVC++.NETで使おうとすると定義されていない〜となるので
GetProcessIdをMSDNで調べたら、Requires Windows "Longhorn" or Windows XP SP1.
と書いてありました。うちの環境はWindowsXP SP2なのですがそのAPIはもう使えないのでしょうか?
>>343
残念ながら自作じゃないんです。
345 :340:2005/10/23(日) 14:33:17
解決しました。
>>342さんの書いたことをヒントにいろいろ調べて、
GetCurrentProcessId()とGetWindowThreadProcessId()を使えば出来るということがわかりました。
回答していただいた皆さんありがとうございました。
346 :デフォルトの名無しさん:2005/10/23(日) 14:39:46
>>340
GetParent じゃだめだった?
347 :340:2005/10/23(日) 15:08:29
GetParent(HWNd hWnd);
これは、子ウィンドウのハンドルを引数に与えないといけないのですが、
子ウィンドウが無いので出来ませんでした。
駄目と思いつつ、hModuleを引数に与えてみましたがやはり無理でした。
348 :デフォルトの名無しさん:2005/10/23(日) 15:56:10
そもそも親windowのハンドルがわからないと
絶対に出来ないことなのかと聞いてみたい。
他に代替手段があるかもしれないから、なにが
したくて親windowハンドルを取得したくなったのか書いてちょ
349 :デフォルトの名無しさん:2005/10/23(日) 15:59:24
おおかたネトゲのサポートツールでも作りたいんだろ。
マクロだとかスクリーンショットだとか。
350 :デフォルトの名無しさん:2005/10/23(日) 16:12:43
自作のペン・ブラシは使用後削除するということですが、
CreateSolidBrushは削除とかないですよね?
あとリージョンも削除しなくていいんですか?
351 :デフォルトの名無しさん:2005/10/23(日) 16:23:28
>>347
「親」ウィンドウを探そうって訳じゃないのだな。
だったら、DLLの関数にメッセージを投げたいウィンドウのハンドルを
パラメータで渡せばいいだけだな。
352 :デフォルトの名無しさん:2005/10/23(日) 16:29:06
こんにちは、よろしくお願いします。
ファイルを削除しようと思い
DeleteFile関数をつかっています。
bool mcc = DeleteFile("ファイル名");
mcc はtrue ですが、削除できていません。
どうしてでしょうか。
後、remove 関数とかも使ってみましたが、
戻り値が0でも削除できていないのです。
353 :340:2005/10/23(日) 16:34:02
ウィンドウのボタンを押すなどの操作を自動化したくて、
そうするにはSendMessageを行う際にウィンドウハンドルが必要だったんです。
うちの回線が不安定で時々接続が切れるので、
そうなったら自動で再接続をするってツールが必要なので作りました。
他に方法ってあるんですかねぇ。

p.s.
縦読みすると「ウそうそ」とか書いてありますが本文とは関係ありません。
354 :デフォルトの名無しさん:2005/10/23(日) 16:39:29
フレッツは知らないけど、それくらいルーターがやらないの?
ツール作る以外に方法はあると思う
355 :デフォルトの名無しさん:2005/10/23(日) 16:39:34
>>352
そのファイルエクスプローラで消せる?
356 :デフォルトの名無しさん:2005/10/23(日) 16:41:57
フレッシ接続ツールなんか投げ捨ててしまえ。
357 :340:2005/10/23(日) 16:48:15
説明不足でした。
接続が切れるのはソフトウェアのほうなんです。
そっちには自動再接続などの設定項目が無かったんで、
自作ツールで強引に繋いでしまおうと思ったんです。
358 :デフォルトの名無しさん:2005/10/23(日) 17:09:11
>>350
削除しなきゃダメだよ
359 :デフォルトの名無しさん:2005/10/23(日) 17:21:04
>>358
マジですか!
それは戻り値を取ってDeleteObject()に渡すんでしょうか?
360 :デフォルトの名無しさん:2005/10/23(日) 17:52:19
CreateSolidBrushだから削除が必要ないとかじゃあなくて、
システムに渡してしまうから必要ないとかそう言う話ではない?
SetWindowRgnとか、WNDCLASS::hbrBackgroundとか。
361 :350:2005/10/23(日) 18:13:25
ああ、きっとそうです。
そのへんよく分かってなかったので
もう一回勉強しなおしてきます。ありがとうございました!
362 :デフォルトの名無しさん:2005/10/23(日) 20:52:39
>>355さんありがとうございます
>>352です
そのファイルは、削除できるのです
363 :デフォルトの名無しさん:2005/10/23(日) 20:57:17
>>362
ファイル名をフルパスにしていなくて、カレントがあさってにあるってオチか?
364 :デフォルトの名無しさん:2005/10/23(日) 21:06:54
>>363さんありがとうございます。
いいえ違うんです。
カレントフォルダーを収得して、
フルパスにしてるのです。
365 :デフォルトの名無しさん:2005/10/23(日) 21:10:14
> うちの環境はWindowsXP SP2なのですがそのAPIはもう使えないのでしょうか?
#define WIN32_WINNT 0x502
が必要なんじゃないの?
366 :デフォルトの名無しさん:2005/10/23(日) 21:10:41
じゃあその取得してるカレントフォルダーが、問題のファイルの有るフォルダと違ってんだろ

どうでもいいけど、カレントフォルダーを収得とか、日本語おかしいな
367 :デフォルトの名無しさん:2005/10/23(日) 21:12:19
>>352です
ただ、そのファイルからデータを収得して、
閉じた。経緯はあるので、多分それが原因のような気がしてきました。
それ以外の何のつながりもないファイルなら、削除できましたので、
368 :デフォルトの名無しさん:2005/10/23(日) 21:14:15
>>366さん、そうですね、日本語になっていない。
GetCurrentDirectoryでパスを収得して、ファイル名と引っ付けています。
369 :デフォルトの名無しさん:2005/10/23(日) 21:19:34
ますますエスパーが必要になった件
370 :デフォルトの名無しさん:2005/10/23(日) 21:24:20
>>368
その収得が、日本語おかしいって言っとんねん

で、ほんとにちゃんと閉じてんの?
CloseHandleしてる?
してるんなら、読み込んだりしたとか関係無い
371 :デフォルトの名無しさん:2005/10/23(日) 21:27:08
だめだ、理解できてない
372 :デフォルトの名無しさん:2005/10/23(日) 21:36:01
収得 か、暫く気づかんかった
373 :デフォルトの名無しさん:2005/10/23(日) 23:21:17
>>352です
取得ですか。
fstream で、データを取り入れているのですが、
closeで閉じていますが、タイミングを外して、削除させることにしました。
皆様ありがとうございました。
374 :デフォルトの名無しさん:2005/10/23(日) 23:28:30
なんでfstreamなんだよ・・・
375 :デフォルトの名無しさん:2005/10/23(日) 23:50:21
>>374
読み込みに使っていますが、だめなのでしょうか。
376 :デフォルトの名無しさん:2005/10/23(日) 23:59:48
>>375
少なくともfstreamが握っている間はファイルを削除できないと思われる。
それとも374は単に読み込むだけならifstreamを使えと言いたいだけかもしれないが。
377 :デフォルトの名無しさん:2005/10/24(月) 01:12:55
>>340
なんで他のプロセス空間にDLLを忍び込ませる程度の知識があって
そこで悩むのかが俺には分からない。

そもそも普通は順番が逆な気もするが。
(ウィンドウハンドルからターゲットのプロセスを探す)

ウィンドウ作成より先に読み込まれるような方法でDLLを仕込むなら、
WM_CREATEをフックするとかした方がスマートかと。
378 :デフォルトの名無しさん:2005/10/24(月) 08:15:37
>>375
ちょっと問題のコード出して見ろよ
379 :デフォルトの名無しさん:2005/10/24(月) 08:19:21
>>373-376,378
スレ違いだ。掘り下げるならほかでやれ。
380 :デフォルトの名無しさん:2005/10/24(月) 08:52:08
だが断る
381 :デフォルトの名無しさん:2005/10/24(月) 11:21:27
>>378-380
皆様いろいろとすみません。
fstream ifstreamもう少し詳しく調べてみること私にとって必須です。
しかし、callback関数の部分で、最後に書き込みもしていましたから、
結局ofstream もつかっていました。
細かくまとめて、ソースコードあげることも考えましたが、
いろいろとご迷惑をおかけすることとなりそうですので、
それでは、皆様ありがとうございました。
382 :デフォルトの名無しさん:2005/10/24(月) 11:24:41
>>375です
>>376
さん詳しい説明ありがとうございました。
383 :デフォルトの名無しさん:2005/10/24(月) 16:30:35
>>382
ファイル共有はC/C++の仕様ではなくOS依存の仕様なので、
それを使うにはOS依存の非標準関数を呼び出す必要がある。

fstream ff;
int fd = _sopen(,,,);
ff.attach(fd);
384 :デフォルトの名無しさん:2005/10/24(月) 17:29:24
WebサーバとCGIのように、あるアクションがきっかけで別のアプリを内部的に起動してアプリの間でデータの送受を行いたいんだけど、こういうときにはパイプとかいうのを使うの?
385 :デフォルトの名無しさん:2005/10/24(月) 17:30:25
>>384
YES
386 :デフォルトの名無しさん:2005/10/24(月) 17:32:39
>>384
まあでもパイプ以外にも方法は色々とある。
プロセス間通信でぐぐれば。
387 :デフォルトの名無しさん:2005/10/24(月) 18:08:33
ImmSetCompositionString()について質問があります。

ImmSetCompositionString()で編集文字列に"m"をセットした後に
'a'を打鍵によって入力して"ま"としたいのですが、
続けて入力を行っても"mあ"となってしまいます。

キーボードイベントで解決しようと思ったんですが
処理が遅れて、ある程度早い入力を行うと
"まっちゃ"となるべきが"あmっちゃ"、"あtmちゃ"となったりしてダメでした。
388 :デフォルトの名無しさん:2005/10/24(月) 18:34:41
トップレベルウインドウではない、ある一つのウインドウに対して、あるキーを押した(例えば"1"キーを押した)ということを知らせるにはどのようにすれば良いですか?
389 :デフォルトの名無しさん:2005/10/24(月) 18:36:03
RegisterHotkey()じゃダメなん?
390 :デフォルトの名無しさん:2005/10/24(月) 20:41:50
>>382です
>>383さんありがとうございます。
詳しく書いてない私が悪いのですが、
includeしているのは、<fstream>のほうなのです。

ファイル操作について、調べていると、いろいろあって、
何を使っていいのか分からず、fstream をつかいました。
だから、もう少し詳しく調べないといけないのですが・・
がんばっていろいろ勉強します。
ありがとうございました。
391 :デフォルトの名無しさん:2005/10/25(火) 02:01:48
リソースでダイアログにリストビューやツリービューを貼り付けた場合
その初期化(項目の追加)をしたい場合はどうしたら良いのでしょうか?

ネットだとCreateWindowExで作成しているものしか見つからなくて
WM_CREATEがきた時にやっているので方法がわかりません
392 :デフォルトの名無しさん:2005/10/25(火) 02:18:01
WM_INITDIALOG
393 :デフォルトの名無しさん:2005/10/25(火) 09:10:40
既に起動中のIEにOLE接続するにはどうしたらいいでしょうか?
394 :デフォルトの名無しさん:2005/10/25(火) 10:45:52
>>387
で、質問は何だ?
395 :デフォルトの名無しさん:2005/10/25(火) 11:14:25
win2kで赤外線ポートをWinSock通さずに触ることって出来ないんだろうか?
CreateFileが理想。WinSock邪魔。
396 :デフォルトの名無しさん:2005/10/25(火) 11:24:23
COMポートと同じ様に制御できるんでないか?
397 :395:2005/10/25(火) 12:01:30
>>396
いやぁ、それがな、IrDAでリザーブしているCOMポートはどうやらIrCOMM用らしいんだ。
IrCOMMはドライバとして組み込まれているんだが、基本的にユーザには隠蔽されているんだよ。
(Win9xでは隠蔽されていなかった気がするけど)
まあ、IrCOMMはIrSocketを使ったエミュレーションサービスだから結局WinSockもどき中間層が入って、
鬱陶しいことこの上ないけどね。

そしてirmonを止めてもDiscoveryは続いているんで、カーネルがデバイスを貸してくれない・・・。

因みに、やりたいことってのは、空間に任意のデータを投げたいだけで、
それが実現できれば何を使ってもとくに気にしない。
どうにかならんかね。
398 :デフォルトの名無しさん:2005/10/25(火) 12:19:55
IrCOMMでググってみたら、
その問題を回避するようなドライバが引っかかるなー

ttp://www.ircomm2k.de/
ttp://resolution.extendedsystems.com/ESIde/Produkte/Virtueller+Com-Port+Treiber/default.htm

つまるところ、自力でやるならドライバを自作するってことになるかも
399 :395:2005/10/25(火) 12:26:13
ドライバ作るの面倒くさい……。
まあ、irda.sysの下にフィルタドライバでも作って、Read/Write出来るようにしてみるよ。
かなーり実験要素が強いけどな。
ありがとねー。
400 :デフォルトの名無しさん:2005/10/25(火) 13:55:18
男なら、APIなんか使わず気合で作れ!
401 :デフォルトの名無しさん:2005/10/25(火) 14:38:24
>>394
すいません、言葉足らずでした。
ImmSetCompositionString()を用いて
その後に続く打鍵と組み合わせてローマ字入力を成立させるには
どうすればいいのか、という質問です。
402 :デフォルトの名無しさん:2005/10/25(火) 15:01:43
VC++でADODBでOracle9.0.2へつないでるんだが、
ハンドルリーク、メモリリークしてしまう。

これって何処に質問したらいいんだろ?ココでいいのかな?
ダメなら誘導してくれまいか。
403 :デフォルトの名無しさん:2005/10/25(火) 15:17:37
404 :402:2005/10/25(火) 15:29:44
>>402のコードはこんな感じなんだが、なんかおかしいところある?
::CoInitialize(NULL);
_RecordsetPtr m_pRecordset; // Recordsetオブジェクト
_ConnectionPtr m_pConnect; // Connectionオブジェクト
_CommandPtr m_pCommand; // Commandオブジェクト
// ADOオブジェクトの生成
m_pConnect.CreateInstance(__uuidof(Connection));
m_pCommand.CreateInstance(__uuidof(Command));
m_pRecordset.CreateInstance(__uuidof(Recordset));
// データベースへの接続
if(FAILED( m_pConnect->Open(L"Provider=OraOLEDB.Oracle;Data Source=ORACLE_OLETEST",L"TESTUSER", L"TESTUSER", adOpenUnspecified))) return FALSE;
// SQLの設定
CString strSQL = "SELECT B.NAME A.BIN_DATA from TBL_CMN_MASTER A, TBL_CMN_LAWDATA B where B.ID = 'TEST' AND B.ID = A.ID";
m_pCommand->ActiveConnection = m_pConnect;
m_pCommand->CommandText = _bstr_t((LPSTR)strSQL);
m_pRecordset->PutRefSource(m_pCommand);
// レコードセットの取得
_variant_t vNull; // VARIANT型のNULLとして使う
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;
m_pRecordset->CursorType = adOpenKeyset;
hr = m_pRecordset->Open(vNull, vNull, adOpenKeyset, adLockOptimistic, adCmdUnknown);
if( m_pRecordset->RecordCount == -1 ) return FALSE;
// 先頭レコードへ移動し、フィールドの値を取得
m_pRecordset->MoveFirst();
_variant_t vString = m_pRecordset->GetCollect(_variant_t("NAME"));
m_pConnect->Close();
m_pConnect.Release();
m_pCommand.Release();
if( adStateOpen == m_pRecordset->State ) m_pRecordset->Close();
m_pRecordset.Release();
::CoUninitialize();
405 :デフォルトの名無しさん:2005/10/25(火) 15:31:57
>>403
うは、インシデント使えってか。
とりあえず、悪いのがADODBかOracleのOLEDBか俺のコードか切り分けたいんでお願いします。
406 :デフォルトの名無しさん:2005/10/25(火) 20:17:59
どうでもいいがReleaseは直接呼ぶ物じゃないと思った。
あとどうやってリークを確認した?
407 :デフォルトの名無しさん:2005/10/25(火) 20:26:27
>>404
m_pConnect->Close()後にm_pRecordset->Close()は順番逆のような
408 :デフォルトの名無しさん:2005/10/25(火) 20:29:18
Releaseは CoUninitialize の前にやっとくってことで呼んでも構わない。
あたりまえだけど。

>>402
MDAC 2.1 以降では ADO とかってデフォルトでコネクションプーリング
してるという話もあるから、それがメモリリークに見えてるだけでは?
409 :デフォルトの名無しさん:2005/10/25(火) 23:42:15
コンピュータがロックされているかを知る方法ってありませんか?

ユーザがウィンドウズをロックしてたら退席中、という判断をしたいんですが。
410 :デフォルトの名無しさん:2005/10/25(火) 23:42:48
>>406が言いたいのは、たぶん、
人間が手作業でReleaseを呼ぶコードを書くとミスをしてリークするから、
ATLとかがやっているように、軽くクラスでラップして自動的に呼ぶようにすべし、ってことでしょ。

>>408
Releaseを呼ばずにCoUninitializeするのは、とっても行儀が悪いよ。
OSが勝手にReleaseを呼んでくれると思ったら大間違い。
もしアウトプロセスなら、参照カウントが減らないまま残ってしまうよ。

で、いうとおり、各種リソースがプーリングされてたりするので、
リソースのリークは、たくさんループさせて様子をみないと判別が難しい。
411 :デフォルトの名無しさん:2005/10/25(火) 23:45:07
>>409
ある。

412 :デフォルトの名無しさん:2005/10/25(火) 23:46:31
>>411
あるんすかー
教えて…いただけません?
413 :デフォルトの名無しさん:2005/10/26(水) 00:34:59
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/how_to_lock_the_workstation.asp

> To determine whether the workstation is locked, test whether your window is visible.

とか書いてる。知らんけど。
414 :デフォルトの名無しさん:2005/10/26(水) 00:46:24
>>413
おおなるほど。
サービスアプリケーションにするつもりなんで、visibleかどうかで判断はできないかも。

というか↓を使えばいいのでは!
> use the WTSRegisterSessionNotification function to register to receive
> WM_WTSSESSION_CHANGE messages.

ありがとうございました。なんとかなりそうな気がしてきました。
415 :デフォルトの名無しさん:2005/10/26(水) 01:31:00
>>414
サービスだったらRegisterServiceCtrlHandlerEx使って、HandlerExで
dwControlがSERVICE_CONTROL_SESSIONCHANGEかどうかを調べる。

パラーメータとかは↓見て
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/handlerex.asp
416 :デフォルトの名無しさん:2005/10/26(水) 02:16:58
>>415
わー、ありがとうございます。やってみます。
417 :402:2005/10/26(水) 10:01:10
皆さんレスありがとう。

>>406
タスクマネージャのプロセスタブを開いて数十回>>404のコードを実行してから10分放置して、
メモリ使用量と、ハンドルの数を確認したら、両方増えていた。
特にハンドルは1回実行すると2個増える。

で、Oracleの掲示板で、接続の度にコネクション作成&使用後に消去を繰り返すと、
メモリリークするっていう書き込みを見つけたので、今朝自作のコネクションプーリングを
組み込んでテストしてみた。
結果、なんとハンドルリークは無くなった。
メモリリークはもうちょっと動かさないとわかんないけど、良くなったけどまだ増えてるような...

>>407
まったくその通りだね。指摘ありがとう!

>>408
404のコードを10秒スリープ付でループで実行して、数時間放って置くとハンドル、メモリとも
ものすごく増えてます。だからリークしてる、と思う。

>>410
えええ!ADODBはデフォルトでプーリングしてますか。
それにさらに自作のプーリングつけるのってなんか間抜けだな...

てことで、ADODB+OracleOLEDB(9.0.2)はコネクション作成&消去を繰り返すとリークすると思う。
それとSQLServerでDB作ってODBC経由で>>404のコードをテストしてみたら、リークしませんでした。
418 :デフォルトの名無しさん:2005/10/26(水) 11:44:22
SetPropはグローバルアトムじゃなく、ローカルアトムでも正常に動くんですね。
419 :デフォルトの名無しさん:2005/10/26(水) 13:53:18
>ADODB+OracleOLEDB(9.0.2)はコネクション作成&消去を繰り返すとリークすると思う。
いくらなんでもこの結論はちょっと……

このあたりは確認済なのでしょうか。
- COMオブジェクトを作るだけでDBに接続しない場合
- 別のOLEDBプロバイダを使った場合
 JET、SQLServer、etc
- CoInitialize〜CoUninitializeを繰り返すのではなく、COMの初期化・後片付けは1回だけにして
 その中を繰り返し実行する(繰り返し呼ぶのが良くない場合を考慮)

>それとSQLServerでDB作ってODBC経由
なぜわざわざODBC経由なのでしょうか。こっちもOLEDBプロバイダを使わないと正確な
比較にはならないと思います。
420 :402:2005/10/26(水) 17:23:55
>>419
言葉が足らなくて申し訳なかったのですが、
ADODB+OracleODBCも試しましたが同様にリークしました。
SQLServerへのOLEDBでの接続は、やり方がちょっとわからなかったので試してません。
あー、COMオブジェクトの作成だけ繰り返すとかもやりましたがもちろん問題なし。

悪いところがADODBかOracleのOLEDBか俺のコードか切り分けたかったので、
俺的にはとりあえずコードじゃないんじゃないかって感じでもうOKです。
これ以上別のプロバイダを試すのは、時間的に余裕が無いので、
ちょっと結論が飛躍したのは勘弁してください。
ちゅか、俺的決め付けの結論なんか書かなきゃ良かった^^;
421 :419:2005/10/26(水) 18:14:56
>>420
ふーん、まあOracleの場合はOLEDBよりoo4oの方がいいという噂も聞いたことがあるので、
OLEDBプロバイダはよろしくないのかもしれませんね。

別DBへの接続文字列に関しては、udlファイルを使うのが楽ではないかと思います。
・中身が空、拡張子がudlのファイル(hoge.udlとか)を適当に作る
・ダブルクリックすると設定画面が出る
・設定する
・udlファイルの中身をのぞく
・(゚Д゚)ウマー
422 :デフォルトの名無しさん:2005/10/26(水) 20:43:50
あるキーAが押された時、処理Aを実行し、
別のキーBが押された時、処理Bを実行するプログラムで
仮にキーA、キーBをそれぞれZ、Xとした場合

// WM_CHARで
if(wParam=='z'){
   処理A;
}
if(wParam=='x'){
   処理B;
}

のようにしているのですが、zとxを同時に長押しした場合、
長押ししている間、処理Aと処理Bを共に実行するようにするには
どうすれば良いのでしょうか。
423 :デフォルトの名無しさん:2005/10/26(水) 20:52:33
同時押しが判定できるのはCtrl Shift Alt とか
424 :デフォルトの名無しさん:2005/10/26(水) 21:15:10
>>423
判定はできなくても処理さえ同時に実行できれば良いのですが
何か方法はないものでしょうか
425 :デフォルトの名無しさん:2005/10/26(水) 21:20:16
GetAsyncKeyStateを見てるスレッドを二つたてれば?
426 :デフォルトの名無しさん:2005/10/26(水) 22:48:03
>>423
それは嘘。

キーのmakeとbreakのメッセージを受け取り、
自前で押下状態かどうかを管理すればいい。

Zをmake
Xをmake
ずっと続く
Xをbreak
Zをbreak
とかいうふうにメッセージが来るからさ。
427 :デフォルトの名無しさん:2005/10/26(水) 22:52:31
ShiftとかCtrlじゃない普通のキーはそもそもハードウェアレベルで同時押しが検知できない場合がある、
つーのは前提として知ってるよな?
428 :デフォルトの名無しさん:2005/10/26(水) 23:05:04
そんなのはイヤです。
429 :デフォルトの名無しさん:2005/10/26(水) 23:11:46
嫌よ嫌よも好きのうち
430 :デフォルトの名無しさん:2005/10/26(水) 23:22:49
>>428      /::::::::::::::::::::ヽ、            /:::::::::::::::::::::::ヽ
          /:::::::::::::::::::::::::::::::ヽ         /::::::::::::::::::::::::::::::::::ヽ
        /::::::::::::::::::::::::::::::::::::::::::l           l::::::::::::::::::::::::::::::::::::::::::l
       l::::::::::::::::::::::::::::::::::::::::::::::l        l::::::::::::::::::::::::::::::::::::::::::::l
        l:::::::::::::::::::::::::::::::::::::::::::::/_,.......-;,==-...ヽ::::::::::::::::::::::::::::::::::::::::l
       l:::::::::::::::::::::::::::::::::::::::::/:::::::/     `ヽ::::::::::::::::::::::::::::::::::::::/
         ヽ::::::::::::::::::::::::::::::/:::::::::/   / ̄  ヽ/⌒ヽ:::::::::::::::::/
         ヽ、:::::::::::::_/::::::::::::/   /        ⌒ ヽ¬−'´
             ̄ /:::::::::::::::::l                l:|
              l::::::::::::::::::l                 l:l
              l::::::::::::::::::l    <●>        l:l
              l::;, -ー 、::l            、<●> .l:l
              /     ヽ                l::l
             l       _        ( ○ ,:○),,   ∠く
               l                      _   l
               ヽ    ヽ                 ./
                \    \、   __,-'ニニニヽ    /
                 ヽ  、  .   ヾニ二ン"   /
                  ヽ: : :             ./
                 |              |
                 ヽ\             /
                  l  `ー-::、_       ,,.'|
431 :デフォルトの名無しさん:2005/10/26(水) 23:26:17
>>429        __               ,....-─-、
          /::::::::::::::::::::ヽ、            /:::::::::::::::::::::::ヽ
          /:::::::::::::::::::::::::::::::ヽ         /::::::::::::::::::::::::::::::::::ヽ
        /::::::::::::::::::::::::::::::::::::::::::l           l::::::::::::::::::::::::::::::::::::::::::l
       l::::::::::::::::::::::::::::::::::::::::::::::l        l::::::::::::::::::::::::::::::::::::::::::::l
        l:::::::::::::::::::::::::::::::::::::::::::::/_,.......-;,==-...ヽ::::::::::::::::::::::::::::::::::::::::l
       l:::::::::::::::::::::::::::::::::::::::::/:::::::/     `ヽ::::::::::::::::::::::::::::::::::::::/
         ヽ::::::::::::::::::::::::::::::/:::::::::/   / ̄  ヽ/⌒ヽ:::::::::::::::::/
         ヽ、:::::::::::::_/::::::::::::/   /        ⌒ ヽ¬−'´
             ̄ /:::::::::::::::::l      ,,,,,,, ノ ヽ,,,,,    l:|
              l::::::::::::::::::l     '''"""    """''   l:l
              l::::::::::::::::::l    -=・=‐,   =・=-   l:l
              l::;, -ー 、::l     "''''"   | "''''"    l:l
              /     ヽ         ヽ      l::l
             l       _           ^-^     ∠く
               l                      _   l
               ヽ    ヽ      -====-      ./
                \    \、     "'''''''"     ./
                 ヽ  、  .            /
432 :デフォルトの名無しさん:2005/10/26(水) 23:28:27
     :::;;;;;;,-''''''''-;;;,;;;;;;
    ;;;;;;;;;;i´    `i;;;;;::::
   ;;;;;;;;┌'   <●>'ヘ;;:
   ;;;;;;;;;)ュ,   o) ,r(;;;
    :;;;;;;;;;>   ∋/ヾ;;;;;;;
   ;;;:,チ''゛  :`::::::':':   ゙゙Y;;;;::::
 ::;;;;y'´   ,        `{;;;;;:::::
 ::;;;.(,   ″        '(;;;::
  ;;;;;:`,ll'-�=@     ll  |:::
   ::::|   ゙;,_ ,:     ゙  i;;;;,,,,,,,,,
   :::::i   ::::          .'-、;;;;;;;;;;;:::::
  ;;;;;;;;ハ  i:::::    ....::::''   `'<;;;;;::::
   ::;;;;;.ハ  '(i|||||lllllllliiii=''′  .,};;;;''''
 _,,,,,lllllllシ  ,,illllllllll″ ,__,,,,,,,,,iiillllllllllllll)
.(lllllllllllll、,,,ィ'illlllllllllllli, ゙lllllllllllllllll!゙゙゙゙゙゙
  `”゙゙゙゙゙゙llllllllllllllllllllllュ,,j'lllll゙

     ヴァカだリャ。
     マた来テュのか。
433 :デフォルトの名無しさん:2005/10/26(水) 23:30:02
天才現るw
434 :デフォルトの名無しさん:2005/10/27(木) 01:03:17
作品でのエラーチェックはどこまでやるのがいいのでしょうか。
今の所やっているのは、メモリ確保系、Bitblt、SetTimerなど、
やっていないのは、GetDC、ReleaseDCなどです。
435 :デフォルトの名無しさん:2005/10/27(木) 01:06:20
>>434
好きにしろ
436 :デフォルトの名無しさん:2005/10/27(木) 01:50:54
可能な全部のAPIでチェックしないとダメだよ
437 :デフォルトの名無しさん:2005/10/27(木) 05:12:42
Windows で .NET を使わずに UNIX の strptime(3) のような処理を行う関数っ
てありますか?(.NET なら DateTime.Parse でいけそうなんですが...)
438 :デフォルトの名無しさん:2005/10/27(木) 06:49:11
VarDateFromStr()
439 :デフォルトの名無しさん:2005/10/27(木) 10:09:25
440 :デフォルトの名無しさん:2005/10/27(木) 19:15:59
何だこれ、ってURL遡れば、SDKサンプルプログラムの「タイトルのボタンを左右逆にする」だと分かるはずだが
きっと違うことを聞きたいんだろうな。日本語って難しいね★
441 :デフォルトの名無しさん:2005/10/27(木) 19:46:07
これなんだ
442 :デフォルトの名無しさん:2005/10/27(木) 21:41:26
CPoint の配列で表される多角形の中に CPoint で表される一点が含まれているかどうか
直接調べる関数はありますか?
CRgn に頂点を渡してから PtInRegion で調べる方法もありますが何か無駄な気がします。
443 :デフォルトの名無しさん:2005/10/27(木) 21:45:44
>>442
ない
444 :デフォルトの名無しさん:2005/10/27(木) 21:53:18
時に無駄と思える手順を踏むことも大切なのだよ
445 :442:2005/10/27(木) 21:54:47
>>443-444
そうですか・・・どうもでした。
446 :デフォルトの名無しさん:2005/10/27(木) 22:08:24
>>434
俺の場合、たしかに一部の関数は引数がおかしくない限り必ず正しい結果を返すと信じて、エラーチェックをしていない。
ただ、GetDC()など処理の開始として行う関数は必ずエラーチェックを行う。
447 :デフォルトの名無しさん:2005/10/27(木) 23:24:34
あるウィンドウに丸や三角を描画しているのですが、
あるボタンを押すと、あるウィンドウ内の図形が全て削除される。

というようなことをしたいのですが、どうしたらよいのでしょうか?
448 :デフォルトの名無しさん:2005/10/27(木) 23:26:15
DestroyWindows
449 :デフォルトの名無しさん:2005/10/27(木) 23:38:50
>>447
背景色で塗りつぶすではまずいの? UNDO とかしたいのかな。
450 :デフォルトの名無しさん:2005/10/27(木) 23:39:22
リンクエラー
451 :434:2005/10/28(金) 00:20:13
ありがとうございます。

GetDCなどをチェックせず、Bitbltだけチェックするのは、
GetDCなどでエラーが出れば、Bitbltでもエラーが
出てくれるのではないかという考えからでした。

裏ビットマップに描くとか、Bitblt系の一連の動作は、
前後のメモリ確保、初期化、開放とか量が多いので、
楽をしていました。

ご指摘通りちゃんとチェックしたいと思います。
452 :デフォルトの名無しさん:2005/10/28(金) 00:25:22
そうです、背景色で塗りつぶしたいのです。
453 :デフォルトの名無しさん:2005/10/28(金) 00:51:13
>>452
じゃあ背景色で塗りつぶしたらいいじゃない。
丸や三角が描画できてるんなら簡単だろ。
454 :デフォルトの名無しさん:2005/10/28(金) 02:53:53
BMPファイルを操作するAPIなぞは提供されていないでしょうか?
455 :デフォルトの名無しさん:2005/10/28(金) 03:10:10
OpenFile
456 :デフォルトの名無しさん:2005/10/28(金) 06:37:36
GDI+
457 :デフォルトの名無しさん:2005/10/28(金) 08:02:54
どういう操作がしたいんだよ
458 :デフォルトの名無しさん:2005/10/28(金) 10:26:19
私も、GDI+がよいと思う。
比較的有名なCodeProjectのCxImageクラスと比較してもGDI+が圧倒的に優位。
ファイルフォーマット変換時の実行速度・圧縮効率もGDI+の方が上。TIFFも標準サポートしている。
459 :デフォルトの名無しさん:2005/10/28(金) 10:28:53
すいません、GetAsyncKeyStateで5ボタンマウスの左右についてるボタンが押されている状態を取得したいのですが、
いくら調べても5ボタンマウスの左右の押されている状態を取得するサンプルが見当たらないのですが、
どなたか知ってらっしゃる方いらっしゃいましたら教えていただけませんでしょうか

460 :デフォルトの名無しさん:2005/10/28(金) 10:33:53
>>459
VK_XBUTTON1, VK_XBUTTON2あたりがそれっぽいけど、
実際5ボタンマウス持ってないからわからん。
461 :デフォルトの名無しさん:2005/10/28(金) 11:05:51
8ボタンマウス使っている俺がマジレスすると、俺も分からん
462 :デフォルトの名無しさん:2005/10/28(金) 11:12:18
ロジクール、12ボタンのレーザーマウス「MX610」
http://pc.watch.impress.co.jp/docs/2005/1007/logicool.htm
463 :デフォルトの名無しさん:2005/10/28(金) 11:17:34
マウスじゃなくてUSBデバイスなのでは?
464 :デフォルトの名無しさん:2005/10/28(金) 12:57:53
DirectInputつかえ
465 :459:2005/10/28(金) 14:51:36
やっぱりみんなわからないですかー
466 :ビル・ジョブス:2005/10/28(金) 16:10:17
>>459
ところで、ドライバには聞いてみたの?
467 :デフォルトの名無しさん:2005/10/28(金) 19:21:30
>>465
わかったら答えてるわヴォケ・゚・(ノД`)・゚・
468 :デフォルトの名無しさん:2005/10/28(金) 19:32:02
VK_XBUTTON1 と VK_XBUTTON2 だよ。

mplayer用にボタン4,5を使えるようにするパッチとかで使ってるから
たぶん使えるんだろう。
469 :デフォルトの名無しさん:2005/10/28(金) 19:35:45
とりあえず
GetSystemMetrics( SM_CMOUSEBUTTONS ) でマウスボタンの数が取得出来る

で、
GetKeyboardState(pbKeyState)
 
のデータをダンプしてみてはどう?

470 :デフォルトの名無しさん:2005/10/28(金) 21:24:01
VC++7.0(VS2003)で、Win32アプリケーションでやってます

GDI+に関してなんですが

 Gdiplus::Graphics objGraphics(hdc);//描画オブジェクト
 Gdiplus::Image objBgImage(_TEXT("bg.png"), FALSE);//BG
 Gdiplus::Image objFgImage(_TEXT("test.png"), FALSE);//FG
 Gdiplus::RectF rcSrc(0.0f, 0.0f, 320.0f, 420.0f);
 Gdiplus::RectF rcDst(160.0f, 60.0f, 320.0f, 420.0f);
 Gdiplus::ImageAttributes objAttr();//ImageAttributes

 objGraphics.DrawImage(&objBgImage, 0, 0, objBgImage.GetWidth(), objBgImage.GetHeight());
 objGraphics.DrawImage(&objFgImage, rcDst, rcSrc, Gdiplus::UnitPixel, &objAttr);

こんな感じで呼び出そうとすると、2つ目のDrawImageが
DrawImage(Image*, RectF&, RectF&, Unit, ImageAttributes*)でなくてはいけないのに
DrawImage(Image*, REAL, REAL, REAL, REAL)と解釈されて、
RectFからREALへ変換できませんとエラーが出て困っています

どうにかして解消できませんでしょうか?
471 :デフォルトの名無しさん:2005/10/28(金) 21:53:04
え?
472 :470:2005/10/28(金) 22:08:00
何かおかしいですか?
473 :デフォルトの名無しさん:2005/10/28(金) 22:28:42
うちのgdiplusgraphics.hには、2つめがRectFなのは
DrawImage(Image*, const RectF&, REAL, REAL, REAL, REAL, Unit, ImageAttributes* 〜)
DrawImage(Image*, const RectF&)
しか無いよ。
474 :デフォルトの名無しさん:2005/10/28(金) 22:34:11
>何かおかしいですか?
PSDKのドキュメント。
>>473 の様に実際にヘッダに当たって確認すべし。
475 :407:2005/10/28(金) 22:39:32
GdiplusGraphics.hの中を見たところ、>>473さんと同じものしかありませんでした・・・
早とちりですみません・・・

MSDNのあのテキストはいったい・・・
476 :デフォルトの名無しさん:2005/10/28(金) 22:44:31
gdiplusはMSDNの記述があんまりあてにならんし、.Net Frameworkの物とも
微妙に違うし、なかなか苦労しますぜ。
477 :デフォルトの名無しさん:2005/10/29(土) 01:44:31
てかスレ違いだけどMSDNはいつになったら日本語版リファレンスを完全に
してくれんだ?英語を読むのは苦手だよ・゚・(ノД`)・゚・
478 :デフォルトの名無しさん:2005/10/29(土) 01:50:04
そういうこと書くと原書厨が沸きますよ^^
479 :デフォルトの名無しさん:2005/10/29(土) 02:05:00
MSDN日本語訳完全版作ったらお金になるかな?
480 :デフォルトの名無しさん:2005/10/29(土) 03:00:38
3万円までなら出す
481 :デフォルトの名無しさん:2005/10/29(土) 08:29:25
辞書アプリか翻訳アプリをローカルPC上で使えばいいだろ。
日本語訳に期待するのはやめた方がいい。
意味不明な日本語訳がある場合、大抵は元ソースも意味不明だ。
茶を濁すようなピントのボケた文章は、日本語だけでなく英語圏にも存在する。
あきらめろ。
482 :デフォルトの名無しさん:2005/10/29(土) 09:14:24
> 意味不明な日本語訳がある場合、大抵は元ソースも意味不明だ。
そうでもない
483 :デフォルトの名無しさん:2005/10/29(土) 09:56:46
>>482
君は、数学の教科書が英語で書いてあったら判りにくいけど、
日本語で書いてさえあれば全て理解できるのだね。
凄いね、いつも100点とれるね。
484 :デフォルトの名無しさん:2005/10/29(土) 10:40:53
数学なんてパターンおさえれば大抵はとけるから
試験で満点取るのは難しい話でもない。
理論的な部分となると別だが。
485 :デフォルトの名無しさん:2005/10/29(土) 10:50:41
>>484
気の毒だが、君が数学と思い込んでいたのは算数であって数学ではない。
大学に上がってつまづく数学科の学生もいるが、
この点が理解できずに脳内で高校数学を算数として最適化したツケが大学生になって露見したのだといえる。

君は、英語ベースの弁護士試験は難しいが、日本語なら簡単なのだと錯覚するタイプの人間だろう。
理解できない理由を言語に求める愚を犯すべきでない。単に、君が馬鹿なだけだ。
486 :デフォルトの名無しさん:2005/10/29(土) 11:04:30
>>485
ワラタ

ちなみに躓くは「つまづく」じゃなくて「つまずく」が本則だ。
487 :デフォルトの名無しさん:2005/10/29(土) 12:03:32
数学=ペーパーテストなのか>>484は。

>>483は何故いきなり数学とか言い出したのだろう。
488 :デフォルトの名無しさん:2005/10/29(土) 12:24:28
>>487
483は単に喩えとして出しただけだと思うが。
489 :デフォルトの名無しさん:2005/10/29(土) 12:32:01
C言語で、ワードサイズをHIGHバイト、ROWバイトに分けるマクロってなかったけ?
忘れて困ってるんだが。。
490 :デフォルトの名無しさん:2005/10/29(土) 12:36:55
ROWは知らん
491 :デフォルトの名無しさん:2005/10/29(土) 12:38:24
揚げ足取らないでよ。。。・゚・(ノД`) LOWね。
492 :デフォルトの名無しさん:2005/10/29(土) 12:40:40
>>489
ms-help://MS.PSDK.1033/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowmacros/hibyte.htm
493 :デフォルトの名無しさん:2005/10/29(土) 12:46:18
>>492
ありがと。おかげで思い出せました。
でもどうして変数をBYTEサイズにしなくちゃいけないんだろう。。暗号は難しい・・。
494 :デフォルトの名無しさん:2005/10/29(土) 14:13:26
MSDNライブラリのWin32APIの日本語訳は間違ってることがあるので、原文を読むべし。

たとえばGetDiskFreeSpaceの引数lpRootPathNameの説明。

■2001年10月やVS.NET2003添付の日本語版
一方、"C:" のようなドライブ指定の最後に円記号を付けることはできません。

■2001年10月英語版
However, a drive specification such as "C:" must have a trailing backslash.

■VS.NET2003添付の英語版
Furthermore, a drive specification must have a trailing backslash (for example, C:\).
495 :デフォルトの名無しさん:2005/10/29(土) 14:43:50
「SDK32:GetDiskFreeSpace と GetDiskFreeSpaceEx について」より

> ドライブがドライブ文字で、UNC パスではない場合、
> ドライブ文字とコロンの後にバックスラッシュを不可する。
> これは Windows 95 と 98 の制限である。

これも変だな。不可→付加じゃね?
496 :デフォルトの名無しさん:2005/10/29(土) 16:19:14
>>488
つーか何で482のレスが483になるのか意味不明。
どこをどう読んだら英語だと分からないけど日本語なら分かるって意味になるんだか
(むしろ日本語だと分からなくても原文を読むと分かる場合があるという意味で
書いたのに)
497 :デフォルトの名無しさん:2005/10/29(土) 16:34:50
498 :デフォルトの名無しさん:2005/10/29(土) 16:50:55
>>496
「分からない」とはどういう意味なのか。
実際のAPI挙動と日本語文書が違っていた場合は、
少なくとも日本語文書の意味が分からない状態ではない。
日本語文書を理解したうえで記述の間違いに気づくことができた、
あるいは、英語オリジナルとの相違に気づくことができた状態であり、
断じて「分からない」状態ではない。

現実には、日本語が分かりにくく、英語が分かりやすいという状況は少ない。
多くの場合、明瞭な英語文章は日本語訳されても明瞭さを保つものだ。

混乱の原因の多くは、専門用語をカタカナかアルファベットで表記されるべきものが、
翻訳の過程でまんまと日本語文章に紛れ込んでしまった場合だろう。
しかし、この種の混乱は、第三者が文章を読んだ時に普通に発生してしまうものであり、
英文読解の時だけ専門用語と一般語を混同せずに理解できる、などという高度な芸当は成しがたい。
これは、ネイティブ連中であっても同様だ。

しばしば、MSプログラマは重要な事柄に、見分けの付きにくいアバウトな名称をつける癖がある。
Windows、Office、Word、Money、.NET。・・・枚挙に暇がない。
他にもactiveという単語の解釈の仕方に混乱が生じる。
日本人だけでなくネイティブからも怨嗟の対象となっているのだ。
499 :デフォルトの名無しさん:2005/10/29(土) 17:00:50
>>498
翻訳者がアホの場合は考慮していないのか?
500 :デフォルトの名無しさん:2005/10/29(土) 17:03:17
>>498
>ソフト1本あたり約2千円がライセンス料として任天堂の懐に転がり込んだ。
>もちろんカセット生産に掛かる料金は別途に請求された。
>
>さらにカセットの生産スケジュールや、発売日の決定権も任天堂が持っていたので
>気に入らないメーカーのソフトは、マスターと前払いさせた製造費用を預かったまま
>生産ラインに乗せずに数ヶ月ほど放置したり、意に沿わないメーカーのソフト発売日
>を他メーカーの売れ戦ソフトと同じ日にしたりと、それは見事な殿様商売ぶりだった。
>
>CD-ROMを採用すると、ソフトの生産をソニーかビクターに完全委託するしか選択肢
>がなくなるため、上記の殿様商売が続けられなくなる。
>
>それこそが、任天堂が意地でもCD-ROMを採用しなかった本当の理由だ。
>だが大容量化の波は止まらず、CD-ROMに対抗できる記録メディアも現れなかった
>ため、N64でもROMカセット方式を引き続き採用せざるを得なくなる。
>
>その間にもPSの快進撃は止まらず、今や任天堂の据え置き型ゲーム機は世界中の
>市場から、忘れられた存在となってしまった。

まで読んだ
501 :デフォルトの名無しさん:2005/10/29(土) 17:06:03
まあまあ、おまえら。要するにMSDNの中の人が怠慢だってことで。
502 :デフォルトの名無しさん:2005/10/29(土) 21:42:10
日本語を原本にして、後から英語に翻訳すりゃいいのに……。
503 :デフォルトの名無しさん:2005/10/29(土) 21:46:44
・・・ウィンドウクラス登録・・・
  HWND wapp = ::CreateWindow(
    clsName,0,WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
    0,0,::GetModuleHandle(0),0);
  HWND wpop = ::CreateWindow(
    clsName,0,0/*WS_POPUP*/,
    CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
    0/*wapp*/,0,::GetModuleHandle(0),0);
  ::SetWindowLong(wpop,GWL_STYLE,WS_POPUP); // API-a
  ::SetParent(wpop,wapp);                      // API-b
  ::SetWindowPos(wpop,0,100,100,300,200,SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOZORDER);
  ::ShowWindow(wpop,SW_SHOW);
  ::ShowWindow(wapp,SW_SHOW);
・・・メッセージループ・・・

2番目のCreateWindowでコメントアウトして0にしている部分を
補う形でSetWindowLongとSetParentを使ってwpopを設定したいのですが、
ポップアップウィンドウにならずにチャイルド
(親ウィンドウでクリップされる)ウィンドウになってしまいます。

つまり、このままコンパイルした場合と、2番目のCreateWindowの
コメントアウト部分を復帰してAPI-a、API-bを削除した場合とで
wpopのスタイルが違ってしまいます。
どこが悪いのでしょうか?

というのも、とある都合で先にウィンドウを作って
後からその親ウィンドウと位置、スタイルを設定するという
必要に迫られ、書いてみましたがうまくいきませんでした。

詳しい方ご教授お願いします。
504 :デフォルトの名無しさん:2005/10/29(土) 21:52:23
>>503
CreateWindowの引数に親ウィンドウのハンドルを指定できないのか?
505 :デフォルトの名無しさん:2005/10/29(土) 22:48:35
>>503
SetWindowPosのヘルプに書いてあるやり方と、指定してるフラグがちがくないか?
506 :デフォルトの名無しさん:2005/10/30(日) 01:56:16
>>503
SetWindowLong()の部分、それだとウィンドウスタイルがWS_POPUPのみになるよ?
スタイルを変更する場合は
SetWindowLong(wpop, GWL_STYLE, GetWindowLong(wpop, GWL_STYLE) | WS_POPUP) みたいに
現在のスタイルを取得して、それを改変するのが一般的。
507 :デフォルトの名無しさん:2005/10/30(日) 03:29:20
>>502
アメリカの会社がそんなことするわけないだろ
508 :デフォルトの名無しさん:2005/10/30(日) 05:49:06
使い方が解らなかったら使わなければいいだろ
509 :デフォルトの名無しさん:2005/10/30(日) 07:31:23
>>506
それだと、既に設定されてる別のフレームスタイルと競合しねぇ?
510 :503:2005/10/30(日) 08:56:35
いろいろ調べてたら、ウィンドウの関係は
親ウィンドウとオーナーウィンドウっていう2種類があって
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowfeatures.asp
の
「Owned Windows」
の部分を読むと
After creating an owned window, an application cannot
transfer ownership of the window to another window.
って書いてありました・・・(;´д`)
最初に指定するしかないっぽいですね・・・・
意外と柔軟性ないのね(´・ω・`)

そんな訳で自己解決しました
どうもお騒がせして失礼しました〜
511 :デフォルトの名無しさん:2005/10/30(日) 13:22:38
質問です。

http://www.microsoft.com/japan/msdn/thisweek/vbxp/vbxp1.asp

ここにあるグループボックス直下に配したオプションボタン真っ黒現象は、
ルート→グループボックス→何か→ラジオボタン
とか1クッション入れる以外の回避方法はないのでしょうか?

これだとすごく泥臭い対処な気がするんですが、
なにか他に定番のやり方みたいなのがあれば、ご教示くださいまし。

512 :デフォルトの名無しさん:2005/10/31(月) 00:23:41
WinAPI Database for VB Programmer
http://www.winapi-database.com/

VBだぁ?と構えてしまったが、、
C/C++の構文も乗ってる。
分類が分かりやすくてすぐ見つけられるので
正直、MSDNより使える。
513 :デフォルトの名無しさん:2005/10/31(月) 02:41:41
>>512
逆引き(目的から検索)は便利かもしれませんね(ちょっと量が少ないけど)。
ただそれ以外はMSDN Libraryとは比較にならないような……

MSDN Libraryが使いにくいって言っている人は、Web上のMSDN Libraryでも
参照しているんじゃないかと思ってしまう。
514 :デフォルトの名無しさん:2005/10/31(月) 02:50:43
Web上のMSDNは糞過ぎ
重い、無駄に重い
しかも直訳
515 :デフォルトの名無しさん:2005/10/31(月) 05:53:10
訳はWeb版だけひどいわけじゃないだろ
516 :デフォルトの名無しさん:2005/10/31(月) 09:02:26
デバイスコンテキストに描画された内容を、
回転する方法ありましたっけ?
517 :デフォルトの名無しさん:2005/10/31(月) 09:16:53
RotateDC(hDC);
518 :デフォルトの名無しさん:2005/10/31(月) 19:06:30
こんばんは、
印刷を横向きでしたいのですが。
PAINTSTRUCT ps;
PRINTDLG pd;
DOCINFO dci;
pd.lStructSize=sizeof(pd);
pd.hwndOwner=hwnd;
pd.hDevMode=NULL;
pd.hDevNames=NULL;
pd.Flags=PD_RETURNDC|PD_HIDEPRINTTOFILE;
pd.nFromPage=1;
pd.nToPage=1;
pd.nMinPage=1;
pd.nMaxPage=1;
pd.nCopies=1;
memset(&dci,0,sizeof(DOCINFO));
dci.cbSize = sizeof(DOCINFO);
dci.lpszDocName = "moji";
if(!PrintDlg(&pd)) return;
//以下横に設定しているのですが、ここでは遅すぎるようです。
LPDEVMODE dm = (LPDEVMODE)GlobalLock(pd.hDevMode);//
if(dm)//
{//
dm->dmOrientation = DMORIENT_LANDSCAPE; // ポートレイト
GlobalUnlock(pd.hDevMode);//
}//

デフォルトのプリンタの設定を変更するには、どうすればよいのでしょうか。
よろしくお願いいたします。
519 :dmFieldsもセットしろよゴルァ:2005/10/31(月) 19:32:54
DMORIENT_LANDSCAPE ; // ポートレイト ←コメントに嘘を書かない
520 :デフォルトの名無しさん:2005/10/31(月) 23:46:33
Win32APIでJPEGを読み込むAPIはあるんでしょうか?
BMPはLoadImageで取得できるんですけどそのJPEG版みたいなみたいな奴です。

現在の開発環境は
Borland C++ Compiler 5.5.1とメモ帳だけです。
よって、MFCとかは使えません。

誰か、貧乏な私に知恵を授けて下さい...
521 :デフォルトの名無しさん:2005/10/31(月) 23:52:20
貧乏人はマルチがお好き

413 名前:デフォルトの名無しさん[sage] 投稿日:2005/10/31(月) 23:05:12
無料のbcc55を使っています。ものすごく基本的な質問なんですけど
JPEGを読み込みたいんですけど<jpeg.hpp>が見つからないし、それによりTJPEGImageが使えません。
VC++の<gdiplus.h>も無いです。

JPEGを読み込む為には、BCBかVC++を買うしか無いのでしょうか?
貧乏人はおとなしくLoadImageでBMPでも読み込んでろという事でしょうか?
522 :デフォルトの名無しさん:2005/10/31(月) 23:54:09
いやみったらしくコピペするくらいなら、
素直に「無い」って教えてやれよ。

GDI+かIEコンポーネントでも使いなさい。
523 :デフォルトの名無しさん:2005/11/01(火) 00:01:39
OleLoadPictureならPNG以外は大体読めるが
524 :デフォルトの名無しさん:2005/11/01(火) 00:09:47
>>520
良い機会だから、自分で実装しても面白いよw

参考書
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797330457/
525 :デフォルトの名無しさん:2005/11/01(火) 00:11:55
まあ、いいじゃないか、「へへっ、おら知ってるよ、わかってるよ」
「どお、裏山でしょ?」ってのが>>521 を筆頭としたお方たちの
唯一の心の拠り所なんだから、例え心貧しい自己満足でも、
少なくとも1人(ご自分ね)は満足して幸せになってるんだから
誰も幸せにならないよりは、多分ましなんだろうと思うよ。

>>520
どうしても只でということなら>>522 の言う様にGDI+かIEコンポー
ネント、後はどれくらい手間が掛かるかは別としてGnuWin32にも
あるJpegのライブラリをなんとか使えるようにするとか。
susieのプラグインを使えるようにするとか。
もっと柔軟に考えて行けば、道は開けると思うよ。
526 :デフォルトの名無しさん:2005/11/01(火) 00:59:11
つ[ImageMagick]
527 :デフォルトの名無しさん:2005/11/01(火) 02:25:43
マルチにも優しいお方たちでつね(^ω^)
528 :デフォルトの名無しさん:2005/11/01(火) 02:32:06
脳足りんは優しい振りが好きだからね。
529 :デフォルトの名無しさん:2005/11/01(火) 11:33:47
>>520
CreateFile
530 :デフォルトの名無しさん:2005/11/01(火) 11:47:39
winXP 機にキャノンの iP1500 を繋いで、プリンタ設定でなかなか EnumPrinters() が
成功しないで、やっと通ったと思ったら、PrinterProperties() で、ユーティリティの
画面しか出てきません。一応ぐぐったのですが、応えに行きつきません。
PrinterProperties() は不適なのでしょうか。
もしそうなら win98 用はこのままで winXP は PrintDlg() かなあと思案中です。
531 :デフォルトの名無しさん:2005/11/01(火) 12:41:28
>>529
不十分。

>>520
CreateFile()してReadFile()
532 :デフォルトの名無しさん:2005/11/01(火) 12:55:59
>>530
悪いが、「何をしたい」のかさっぱりわからん。
533 :520:2005/11/01(火) 12:57:02
あっち(初心者BCBスレ)で質問したんですが、どうも無料のBCCとBCBを勘違いしていて、
BCBスレでの質問は適切なスレではないと勝手に判断し、こちらのスレで再質問したのですが、
誘導を待たずに別スレで同様な質問をして、マルチに見えてしまったのなら申し訳ありません。
私の質問の仕方が未熟なせいでスレを荒らしてしまったことに関しては謝ります。

それにも関わらず、回答を沢山頂きありがとうございました。
<olectl.h>中にOleLoadPicture*系のAPIらしきものを発見したのでこいつで頑張ってみます。

どうもありがとうございました。
534 :530:2005/11/01(火) 15:38:59
>>532
どうも。
プロパティを出すと、他のアプリでは、基本設定とかページ設定とかのタブで
いろいろ設定できるダイアログが出てきます。「ユーティリティ」とは最後の
タブで出てくる画面です。PropertySheet 仕様のダイアログが出てくるはず
ですが、最後の sheet しか出て来ないということです。
535 :デフォルトの名無しさん:2005/11/01(火) 16:18:36
デバック環境について質問なんですが、
自分はATLを使ってるんで、IDEでの開発環境ではATLTRACEでログ出力をしてデバックしてるんですが、、
ReleaseビルドでIDE環境が無い状態で(ほかのマシンにインストールした状態)デバックというか、挙動を確認したいのですが、
何かいい方法はありませんでしょうか、Release後のデバックや挙動追跡などテクニックなど伝授してください。
536 :デフォルトの名無しさん:2005/11/01(火) 16:32:45
先ずは日本語を勉強するといいと思うよ。
537 :デフォルトの名無しさん:2005/11/01(火) 16:37:12
>>530
それってPrintDlg使えばいいだけじゃねーのか

あるプリンタ特定の物出したいなら、DocumentProperties/DM_PROMPT
538 :デフォルトの名無しさん:2005/11/01(火) 16:41:34
>>535
バグがありそうな部分でログ吐かせりゃいいんじゃない?
539 :デフォルトの名無しさん:2005/11/01(火) 16:43:21
540 :デフォルトの名無しさん:2005/11/01(火) 16:45:09
541 :デフォルトの名無しさん:2005/11/01(火) 17:30:53
>>535
OutputDebugString() → DbgView.exe(http://www.sysinternals.com/Utilities/DebugView.html)

542 :535:2005/11/01(火) 19:45:23
RESありがとうございます。
参考になりました。

>541
http://www.sysinternals.com/Utilities/DebugView.html
これよさげですね、早速試してみます。
ありがとうございました。
543 :デフォルトの名無しさん:2005/11/01(火) 20:58:20
ReleaseビルドなのにOutputDebugStringは生きているのか?
544 :デフォルトの名無しさん:2005/11/01(火) 21:43:05
APIの動作がリリース/デバッグビルドで変わってたまるか。
545 :デフォルトの名無しさん:2005/11/01(火) 21:58:58
ReleaseでDebug動作ができてたまるか。
546 :534=530:2005/11/01(火) 22:05:46
>>537
PrintDlg() にしました。
win98 で通ってましたから、winXP で初めてプリンタ繋いでびっくりしました。
547 :デフォルトの名無しさん:2005/11/01(火) 22:08:02
ReleaseビルドでKernel32.dll!OutPutDebugStringよんでみろよ。
548 :デフォルトの名無しさん:2005/11/01(火) 22:57:06
>>543
WindowsからしてみたらEXEがDebugビルドで作られたかどうかなんて区別のしようがない。
549 :デフォルトの名無しさん:2005/11/01(火) 23:12:21
デバッグ出力表示アプリ起動させっぱなしにしてると平然とメッセージ吐き出してるアプリちょくちょく見かける
550 :デフォルトの名無しさん:2005/11/02(水) 01:13:12
>>548
Releaseビルドでは無に置換されるようなマクロ使ったりしてないのか? って意味でしょ
551 :デフォルトの名無しさん:2005/11/02(水) 02:15:26
>「使ったりしてないのか? って意味でしょ 

氏んでいいよ、ドアホ
552 :デフォルトの名無しさん:2005/11/02(水) 05:07:28
沸点低いな
553 :デフォルトの名無しさん:2005/11/02(水) 07:59:31
ム板だからな
554 :デフォルトの名無しさん:2005/11/02(水) 17:55:26
>>549
つ ギコナビ

他にも、各種メディアプレイヤーでDRM保護されたメディアを開くとデバッグログを吐く。
555 :デフォルトの名無しさん:2005/11/03(木) 12:38:42
背景にビットマップを貼り付け、画面の片隅にマウスカーソルの座標を常に表示する処理を
必要とする画面にエディットコントロールを作成したくて以下のようなコードを書いたのですが
マウスを動かすとInvalidateRect()が発生するためエディットボックスが点滅してしまいます。
この点滅を防ぐ方法が何かあれば教えていただけないでしょうか…。

void DrawScreen(HWND hWnd, POINT p_mouse) {
/*
メモリDCを用いたダブルバッファリングを使用した描画処理
背景の描画とマウスカーソルの座標の表示
*/

static HWND hwndEdit = CreateWindow("EDIT", NULL,
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT,
0, 40, 200, 22, hWnd, NULL, hInst, NULL);
}
556 :デフォルトの名無しさん:2005/11/03(木) 12:40:30
ださ
557 :デフォルトの名無しさん:2005/11/03(木) 12:56:22
つーか、Draw()でEditを作ってどうするのかと。毎回破棄してなければ増殖しそうだが。
558 :デフォルトの名無しさん:2005/11/03(木) 13:02:30
ああ、やっぱりそうなんですか?
とりあえずWM_CREATEにエディット作成は移動してみました。が、依然点滅は直らないです…。
マウスの移動に対してInvalidateRectを呼ぶのをやめてTimerで画面を更新するように変更したら
大分ましにはなったのですが、よくみると点滅してるのがわかります。
559 :デフォルトの名無しさん:2005/11/03(木) 13:09:47
ああすみません。自己解決しました。
よく考えたら画面全体を毎回更新する必要はないですね…orz
560 :デフォルトの名無しさん:2005/11/03(木) 13:48:08
UpdateWindowというものを知った
561 :デフォルトの名無しさん:2005/11/03(木) 15:17:34
>557
static
562 :デフォルトの名無しさん:2005/11/03(木) 16:14:41
>>561
(゚д゚;).o(・・・・・・・・・・・・・・・・)
563 :デフォルトの名無しさん:2005/11/03(木) 16:15:29
これがゆとり教育の弊害か・・・
564 :デフォルトの名無しさん:2005/11/03(木) 17:17:52
・・・を良く使うのは中国から入ってきた文化らしいよ
ネトゲやチャットで使ってる奴多いけど何か伝わってると思ってるのかね
565 :デフォルトの名無しさん:2005/11/03(木) 17:21:32
何も感じられないならそいつの感性が鈍いだけかな
566 :デフォルトの名無しさん:2005/11/03(木) 17:26:38
三点リーダーは英文でも使うぜえ
…じゃなくて...だけどな。
三点リーダーを中黒で代用しちゃう奴は(ry
567 :デフォルトの名無しさん:2005/11/03(木) 18:16:02
ざわざわ・・・
568 :デフォルトの名無しさん:2005/11/03(木) 18:27:06
結局staticでも増殖するものなの?
569 :デフォルトの名無しさん:2005/11/03(木) 18:28:36
staticなのは作成されたEDITのハンドルを保持するHWND型変数ですが?
570 :デフォルトの名無しさん:2005/11/03(木) 18:40:59
関数の中で
static int i = 0;
としても初期化されるのは初回だけに見えたから
static HWND hwnd = CreateWindow();としてもCreateWindow()が呼ばれるのは
初回だけだと思ってたよ
勘違いに気づかせてくれてどうもありがとう。
571 :デフォルトの名無しさん:2005/11/03(木) 18:46:14
ちがうの?
572 :デフォルトの名無しさん:2005/11/03(木) 18:48:11
え、違うから>>557とか>>562とか>>569が食って掛かってきてるんじゃないんですか…
573 :デフォルトの名無しさん:2005/11/03(木) 18:50:22
ただの趣味グラマだから細かいことは知らんとですorz
574 :デフォルトの名無しさん:2005/11/03(木) 18:50:47
自分でやってみりゃわかるんじゃね?
575 :デフォルトの名無しさん:2005/11/03(木) 18:55:34
いや、もうやってみた
問題なく動いてるように見えて実は見えないところでなんか変なことになってるのかな、と…
576 :デフォルトの名無しさん:2005/11/03(木) 19:03:48
577 :デフォルトの名無しさん:2005/11/03(木) 19:11:53
だめだこりゃ
578 :デフォルトの名無しさん:2005/11/03(木) 19:13:01
だめだね
579 :デフォルトの名無しさん:2005/11/03(木) 19:17:24
エディットコントロールじゃなくて普通のウインドウでやってみればすぐわかるだろ
580 :デフォルトの名無しさん:2005/11/03(木) 19:40:54
static int x = 100;
x++;
static HWND hwndedit = CreateWindow(); //x, y座標とheight, widthをxに設定

↑のコードをDraw()の中に入れてみた。
xの値はDraw()が呼ばれるたびに増えたけどエディットコントロールには変化が無かった。
毎回作成されているなら大きさと位置が変化するはずだよね?
581 :デフォルトの名無しさん:2005/11/03(木) 19:59:00
>>518です
>>519さんありがとうございます。
ヒントを参考にさせていたできましたが、
よくわからずに、DocumentProperties を使いましたが、
変更できません。下記にコードを載せますが、長くて申し訳ありません。

DEVMODE *lpDM,*pDev;//
char szPrnName[256],szTemp[256];//
HANDLE hPrn;//
DWORD dwNeeded;//
HGLOBAL hMem;//

PRINTDLG pd;
DOCINFO dci;
LPSTR lpszDocName = "titile";


pd.lStructSize=sizeof(pd);
pd.hwndOwner=hwnd;
pd.hDevMode=NULL;
pd.hDevNames=NULL;
pd.Flags=PD_RETURNDC|PD_HIDEPRINTTOFILE;
pd.nFromPage=1;
pd.nToPage=1;
pd.nMinPage=1;
pd.nMaxPage=1;
pd.nCopies=1;
memset(&dci,0,sizeof(DOCINFO));
dci.cbSize = sizeof(DOCINFO);
dci.lpszDocName = lpszDocName;
582 :デフォルトの名無しさん:2005/11/03(木) 19:59:37
>>581つづき
if(!PrintDlg(&pd)) return;
lpDM = (DEVMODE *)GlobalLock(pd.hDevMode);
if(lpDM == NULL) return;
strcpy(szPrnName,(LPSTR)(lpDM->dmDeviceName));
if(OpenPrinter(szPrnName,&hPrn,NULL)==0){
GlobalUnlock(pd.hDevMode );
GlobalFree(pd.hDevMode);
return;
}
HANDLE hPrn;
//バッファーサイズ取得
dwNeeded = DocumentProperties(hwnd,hPrn,szPrnName,NULL,NULL,0);
hMem = GlobalAlloc(GHND,dwNeeded);
if(hMem == NULL){
ClosePrinter(hPrn);
GlobalUnlock(pd.hDevMode );
GlobalFree(pd.hDevMode );
return;
}
pDev = (DEVMODE *)GlobalLock(hMem);
if(pDev == NULL){
GlobalFree(hMem);
ClosePrinter(hPrn);
GlobalUnlock(pd.hDevMode );
GlobalFree(pd.hDevMode );
return;
}
583 :デフォルトの名無しさん:2005/11/03(木) 20:00:11
>>582つづき
if(DocumentProperties(hwnd,hPrn,szPrnName,pDev,NULL,DM_OUT_BUFFER)<0){
GlobalFree(hMem);
ClosePrinter(hPrn);
GlobalUnlock(pd.hDevMode );
GlobalFree(pd.hDevMode );
return;
}
if(pDev->dmFields & DM_ORIENTATION){
pDev->dmOrientation == DMORIENT_LANDSCAPE;
}
//3回目のDocumentPropertiesの呼び出しでの、引数がよく分からなかったのですが、
if(DocumentProperties(hwnd,hPrn,szPrnName,pDev,pDev,DM_OUT_BUFFER | DM_IN_BUFFER)<0){
return;
}
//グラフィック書き出し・・

GlobalUnlock(hMem);//
GlobalUnlock(pd.hDevMode );//
if(GlobalFree(pd.hDevMode ) !=NULL){//
return;//
}//
584 :デフォルトの名無しさん:2005/11/03(木) 21:27:26
#include <stdio.h>
int foo(){
static int i = printf("hello\n");
return i;
}
int main(){
printf("%d\n", foo());
printf("%d\n", foo());
printf("%d\n", foo());
}
結果
hello
6
6
6
585 :デフォルトの名無しさん:2005/11/03(木) 21:29:38
>>584
iをstaticにする意味を教えてくれ
586 :デフォルトの名無しさん:2005/11/03(木) 21:32:37
>>585
>>555-
587 :デフォルトの名無しさん:2005/11/03(木) 21:36:44
>>584
>>555-
とは何も関係がないように見えるが…
588 :デフォルトの名無しさん:2005/11/03(木) 21:38:44
ああ、スマン、わかった。
foo()を3回呼んでるけどhelloは一回しか出力されないってのが言いたかったのか
589 :デフォルトの名無しさん:2005/11/03(木) 21:48:13
>>585
static にする意味は、iの値を持ってるてるってことですが、
その適用範囲となると、難しいかなと思います。
ここが、win32質問板なので、いいますと
下手に、callback関数で使っていると、大変なことになりました。
590 :デフォルトの名無しさん:2005/11/03(木) 21:59:52
>>589の1行目の翻訳を誰かお願い
591 :デフォルトの名無しさん:2005/11/03(木) 22:02:19
訳:「レス番号585ですが、」
592 :デフォルトの名無しさん:2005/11/03(木) 22:04:27
>>591
はいはい、悪かったよ
>>589の2行目の翻訳を誰かお願い
でいいか?
593 :デフォルトの名無しさん:2005/11/03(木) 22:11:30
自分でしろ
594 :デフォルトの名無しさん:2005/11/03(木) 22:21:34
人の力を借りなきゃ煽ることもできないなんて!!
595 :デフォルトの名無しさん:2005/11/03(木) 22:29:51
Alt+EnterとかCtrl+Aとか
特殊なキーの入力の判定はどうやったらできる?
596 :デフォルトの名無しさん:2005/11/03(木) 22:31:56
ふむ、誰も翻訳できんわけだな。
まあどうでもいいことだしな、ほっとくとしよう。
597 :デフォルトの名無しさん:2005/11/03(木) 22:32:31
>>595
アクセラレータ
598 :デフォルトの名無しさん:2005/11/03(木) 22:36:06
>>595
GetKeyState
599 :デフォルトの名無しさん:2005/11/03(木) 22:37:14
>>597-598
サンクス
600 :デフォルトの名無しさん:2005/11/03(木) 22:56:49
excellのセルを作りたいのですが、あれはどのAPIを使っているのでしょうか?

LineTo関数や、polyline関数で線を引いているのでしょうか?
601 :デフォルトの名無しさん:2005/11/03(木) 23:23:11
>>600
その通り
602 :デフォルトの名無しさん:2005/11/03(木) 23:27:26
読み取りアクセスは同時に複数スレッド可、書き込みアクセスは単一スレッドのみという
.NETでのReaderWriterLockと同じことがしたいです。
Win32には用意されていないのでしょうか?
603 :デフォルトの名無しさん:2005/11/03(木) 23:32:22
>>602
クリティカルセクションあたりで実装する
604 :デフォルトの名無しさん:2005/11/03(木) 23:33:40
>>603
自作しかないですか。頑張ってみます。
605 :デフォルトの名無しさん:2005/11/03(木) 23:34:55
>>601
レス有難うございます。
606 :デフォルトの名無しさん:2005/11/04(金) 00:59:05
>>591
「レス番号585の方へ、」じゃないのか?
自作自演だって言いたいの?
607 :デフォルトの名無しさん:2005/11/04(金) 01:04:03
>>606
つ「レス番585(について)ですが」
608 :デフォルトの名無しさん:2005/11/04(金) 01:12:54
>>607
さらに翻訳が必要な翻訳ってどうよ
609 :デフォルトの名無しさん:2005/11/04(金) 10:38:55
ウインドウを非表示にしたいんですが、実装方法を相談させてください。
とりあえず、ウインドウの拡張スタイルでWS_EX_TOOLWINDOWとWS_EX_TRANSPARENT立ててみたんですが、
WinXPでは非表示になるものの、Win2Kでは表示されてしまいました。
よろしくお願いします。
610 :デフォルトの名無しさん:2005/11/04(金) 10:57:19
>>609
WS_VISIBLE
611 :デフォルトの名無しさん:2005/11/04(金) 10:57:59
>>609
WS_VISIBLEを立てないでウィンドウ作ればいいだけのような・・・
612 :デフォルトの名無しさん:2005/11/04(金) 11:36:08
ShowWindowでいいじゃん
613 :デフォルトの名無しさん:2005/11/04(金) 12:13:09
つーか普通に作成したら最初は非表示だぜ・・・
WS_VISIBLE指定しない限り・・・
614 :デフォルトの名無しさん:2005/11/04(金) 13:36:17
タスクマネージャとかで実行ファイル名の最後の一文字が表示されないのって
原因わかる人います?
〜.exになってしまう…
615 :デフォルトの名無しさん:2005/11/04(金) 13:37:39
614が何を言いたいのかわかる人います?
616 :デフォルトの名無しさん:2005/11/04(金) 13:40:54
>>614
名前の表示に長さ制限がある。
617 :デフォルトの名無しさん:2005/11/04(金) 13:46:15
リストビューのカラム幅が狭いだけとか言うんじゃないだろうね?
618 :デフォルトの名無しさん:2005/11/04(金) 14:49:06
正解
619 :デフォルトの名無しさん:2005/11/04(金) 14:55:27
IniファイルのSectionにItemが一つも無いことを判断できますか?
620 :デフォルトの名無しさん:2005/11/04(金) 14:57:30
>>619
できる
621 :デフォルトの名無しさん:2005/11/04(金) 15:00:10
>>620
ロジックか解説サイト教えて欲しいお。
622 :デフォルトの名無しさん:2005/11/04(金) 15:06:00
>>616
実行ファイルの名前リネームして一文字にしたら表示されたのでそうかも、
と一瞬思ったんですが、色々試してみると長い名前でも表示されてたりするので違うようです。

プロセス名は結構適当に登録されてるのかもしれません。
623 :デフォルトの名無しさん:2005/11/04(金) 15:17:20
>>621
GetPrivateProfileSectionすれば?
624 :デフォルトの名無しさん:2005/11/04(金) 15:59:28
プロパティシートの破壊直前に1回だけ呼びたい処理がある場合の常套手段があれば教えてください。
今は各ページ共通の WM_DESTROY でフラグを設けて1回だけ呼ばれるようにしているのですが、
どうももっとスマートな方法があるような気がするので…。
625 :デフォルトの名無しさん:2005/11/04(金) 16:50:34
>>622
等幅フォントじゃないから文字によって長さは変わる。
626 :デフォルトの名無しさん:2005/11/04(金) 18:19:10
アプリケーションから、インストールしていないTTFフォントを利用したいのですが、
よいAPIはないでしょうか?
それともインストールしなくては、使えないものでしょうか。
SDLttfのように自前で読むしかないですか?
627 :デフォルトの名無しさん:2005/11/04(金) 18:19:40
あげ
628 :デフォルトの名無しさん:2005/11/04(金) 18:36:41
AddFontResource
して、使用して、
RemoveFontResource
629 :デフォルトの名無しさん:2005/11/04(金) 19:51:58
そうでしたか。一体どのフォントが基準になってるんだろう…
630 :デフォルトの名無しさん:2005/11/04(金) 22:51:21
CreateWindow()を使ってウインドウを作るときに
タイトルバーを入れるとその分サイズが引かれてしまって描写できる範囲のサイズが小さくなってしまうのですが、
タイトルバーの大きさを計算してサイズにプラスして設定する以外にこの問題の解決方法はありませんか?
631 :デフォルトの名無しさん:2005/11/04(金) 22:53:45
タイトルバーじゃなくてクライアント領域の大きさで決める
632 :デフォルトの名無しさん:2005/11/04(金) 22:54:15
ありません
XPとその他のWinじゃ非クライアント領域のサイズが違うから、
定数で計算せずに、CreateWindowした後に外枠のサイズ出してリサイズするのが普通
633 :デフォルトの名無しさん:2005/11/04(金) 22:55:10
>>630
一旦不可視で作成して、GetClientRect と GetWindowRect で得られた
矩形の幅と高さの差を元に SetWindowRect で調整するという方法もあるし、
Microsoftを信用して AdjustWindowRect 使うって手もある。
634 :デフォルトの名無しさん:2005/11/04(金) 22:56:42
タイトルバーを出さない。
635 :デフォルトの名無しさん:2005/11/04(金) 23:07:31
>>630
普通はAdjustWindowRectを使う。
メニューが複数行になる場合は自分で調節が必要。
636 :630:2005/11/05(土) 01:06:38
解決しました。ありがとうございます。
637 :デフォルトの名無しさん:2005/11/05(土) 09:12:17
CreateWindowの第三引数に相当するオプションをウインドウ生成後に変更したいのですがどうすればいいのでしょうか
638 :デフォルトの名無しさん:2005/11/05(土) 09:39:43
SetWindowLongを調べれ

ウィンドウのスタイルは、極力最初に指定した方がいいんだがな
639 :デフォルトの名無しさん:2005/11/05(土) 09:53:51
>>638
>ウィンドウのスタイルは、極力最初に指定した方がいいんだがな 

聞いたことないな。何か根拠とかあるの?
640 :デフォルトの名無しさん:2005/11/05(土) 09:56:25
特にボーダースタイルな
641 :デフォルトの名無しさん:2005/11/05(土) 10:00:28
ちょっと前にこのスレで出てたな、そういう話
642 :デフォルトの名無しさん:2005/11/05(土) 10:04:55
そもそも「最初」とは何時から何時までなのか定義するところから始めて貰いたい。
曖昧な表現は一切必要ないし一切認めない。
643 :デフォルトの名無しさん:2005/11/05(土) 10:10:25
>>642
自虐乙
644 :デフォルトの名無しさん:2005/11/05(土) 10:11:00
637ですが、エディットに対してES_READONLYを適用させたいのですが、
SetWindowLong(edit,GWL_STYLE,WS_CHILD|WS_VISIBLE|WS_BORDER|ES_LEFT|ES_AUTOHSCROLL|ES_READONLY);
だとうまくいきません。どこが悪かったのでしょうか
645 :デフォルトの名無しさん:2005/11/05(土) 10:40:46
>>644
スタイルの変更だと言うから何かと思えば、
その手のコントロールの状態変更はほとんどがSendMessageでできるぞ

手始めにSendMessage & EM_SETREADONLYを調べるがよい
646 :デフォルトの名無しさん:2005/11/05(土) 11:06:01
皆さんありがとうございます
質問ばかりになるのですがEM_SETREADONLYの反対に当たるメッセージは何なのでしょうか
647 :デフォルトの名無しさん:2005/11/05(土) 11:10:32
さすがにここまでヒント出てんだからぐぐろうよ

ttp://forums.belution.com/ja/vc/000/138/15.shtml
648 :デフォルトの名無しさん:2005/11/05(土) 11:17:02
>>646
EM_SETREADONLYを調べろと書いたのにその質問か・・・
EM_SETREADONLYの説明にもろ書いてあるというに・・・
649 :デフォルトの名無しさん:2005/11/05(土) 11:47:49
タスクマネージャのアプリケーションを列挙したいのですがどうしたらいいでしょうか?
自分なりに必死に探したのですが、プロセスを列挙する方法しかわかりませんでした。
ここを参考にしました
ttp://66.102.7.104/search?q=cache:oQM6g_R7PHUJ:ruffnex.oc.to/kenji/text/dll_inj/
650 :デフォルトの名無しさん:2005/11/05(土) 11:52:28
トップレベルウィンドウをEnumWindowsで列挙して
非表示のウィンドウとか所有されているウィンドウとか
WM_EX_TOOLWINDOWスタイルが設定されているウィンドウを除外する。
WM_EX_APPWINDOWスタイルが設定されているウィンドウは
所有されていても追加する。
キーワードは与えてやったからあとはぐぐって調べろ
651 :649:2005/11/05(土) 14:24:35
なんとか解決しました。
ありがとうございます、とても助かりました。
652 :デフォルトの名無しさん:2005/11/05(土) 15:12:16
エディットコントロールやリストボックスの背景を透過させたいのですが可能でしょうか?
653 :デフォルトの名無しさん:2005/11/05(土) 21:43:40
>>581です
できました。
CreateDCを使ってなかったことが原因でした。
失礼しました。
654 :デフォルトの名無しさん:2005/11/05(土) 22:09:19
外から子ウィンドウのサイズ変更を制御したくて、WH_CBTフックをかけてみました。
ところが、トップレベルウィンドウのサイズ変更はフックできるのですが、子ウィンドウはフックできません。
Spy++で見てみると子ウィンドウにもWM_SIZEは飛んでるのですが。
どうすれば子ウィンドウのフックができるのでしょうか?
655 :デフォルトの名無しさん:2005/11/06(日) 11:33:52
クリティカルセクションって名前かっこいいな
656 :デフォルトの名無しさん:2005/11/06(日) 11:47:11
>>655
そんなことを言ってくるお前の方がかっこいいよ。
657 :デフォルトの名無しさん:2005/11/06(日) 13:41:21
質問です。

とある他人様のアプリケーションで、タイマーが使われており、物凄い勢いでWM_TIMERが呼ばれているようなのです。
それが原因で非常に重く(おそらくWM_TIMER無いで描画を行っている)、これを軽減したいと考えました。

はっきりいってそんなに頻繁に描画しなくても問題ないので、WM_TIMERを2回に1回無視するようにフックしようと考え、DLLを作成し
SetWindowsHookEx(WH_GETMESSAGE, (略));
を行いWM_TIMERをとるのには成功しました。

ですがWH_GETMESSAGEはWH_MOUSEと違って
「こっちでフック処理したんで、元のアプリケーションではその処理しないでね」のreturn TRUEが通用しないようなのです。

何か良い知恵はございませんでしょうか。
658 :デフォルトの名無しさん:2005/11/06(日) 14:00:48
>>657
製作者に聞けば?
659 :デフォルトの名無しさん:2005/11/06(日) 14:01:41
描画は何度も呼ばれるもので、その中のコードが分からないけど、
推測で書くけれど、一回SetTimer呼べば、あとはデーモンというかメッセージループでTimerが走り、OnTimerが呼ばれるから、
すなはち、おそらくは、描画ハンドラから呼んでやってると思うけれど、1回だけ呼ばせればいい。
おそらく一般的には、フラグをstaticで作って、例えば、フラグが0ならif内でSetTimerした後、同じif内でフラグを1にして、以後2度とOnDrawからSetTimer呼ばれないようにする、これでもTimer一個が走り続けている。
おそらくは、その状態は、Timerの実体が何個も作られて、違うタイミングでものスゴッ呼ばれている。
もし、他から、Timer呼ばれているなら、引数のTimerIDをそれぞれ変える必要がある。
見当違いだったらすみません。
660 :訂正:2005/11/06(日) 14:03:03
OnDraw>描画ハンドラ
つい、MFCで書いてしまった。
661 :デフォルトの名無しさん:2005/11/06(日) 14:15:42
>>659-660
そりゃ自作の場合の話でねーかい?
どうやってWM_TIMERを奪い取るかという質問だと思うんだが…
662 :デフォルトの名無しさん:2005/11/06(日) 14:37:01
>>657
WM_NULL を返すのじゃだめ?
663 :デフォルトの名無しさん:2005/11/06(日) 14:46:50
お返事ありがとうございます。
>>658さん
確かに一番手っ取り早いでしょうね。でも今回は無理ということで

>>659さん
ちょっと私の求めているのとは違うようです。>>661さんのおっしゃるとおり、WM_TIMERを独占したいのです

>>662さん
returnで返す値は0、もしくはCallNextHookExの返り値と決まっているようです。
WH_MOUSEのようにWH_TIMERがあればよかったのですが…。
664 :デフォルトの名無しさん:2005/11/06(日) 15:01:48
>>663
662が言ってるのはメッセージをWM_NULLにすり替えろってことだろ
665 :デフォルトの名無しさん:2005/11/06(日) 15:28:06
>>657
ぜんぜんアプローチが違うんだけど、
こちらでもう一度SetTimer呼んでタイマー上書きするとか
666 :デフォルトの名無しさん:2005/11/06(日) 16:00:45
>>664さん
摩り替える、というのはどういう意味合いでしょうか。物知らずですいません。

フックしたProcでCallNextHookExする以上、フックされる側には必ずWM_TIMERが届いてしまいます。

WH_MOUSEでのフックではreturn TRUE;することでフックされる側にWM_RBUTTONDOWNなどを届かなくすることができるので、
無効にしつつSendMessageでWM_LBUTTONDOWNを送ってやることで
「右クリックしたのに左クリックの動作」
なんていうメッセージのすり替えもできたのですが…。

>>665さん
それはとてもおもしろいアプローチです。
早速試してみます。
667 :デフォルトの名無しさん:2005/11/06(日) 16:15:40
システムトレイに格納するにはどうすれば?
ShowWindowでそれらしき定数があると思ってましたがないようですが
668 :デフォルトの名無しさん:2005/11/06(日) 16:18:53
システムトイレ
まで読んだ
669 :662:2005/11/06(日) 16:30:00
>>666
言葉足らずでスマソ。つまり、フックプロシージャの中で、
((LPMSG)lParam)->message = WM_NULL;
などとやってメッセージ番号を上書きするってこと。
WM_NULL のドキュメントも参照。
670 :デフォルトの名無しさん:2005/11/06(日) 16:31:35
>>665さん
なかなか面白いアプローチで、うまくいきました。ありがとうございました。

>>667
Shell_NotifyIcon でググってみてください。
詳しいページが上のほうに出ますよ。
671 :デフォルトの名無しさん:2005/11/06(日) 16:34:50
>>669さん
なんと。それもまた素晴らしいアプローチですね。
MSDNライブラリの方にWM_NULLが無かったため、自分で定義したのかと思ってしまいました。
ぐぐって見たところ、確かにそういうアプローチを発見しました。

しかしなんというか…。危険な技ですね。
WM_CREATEあたりをWM_NULLに摩り替えるようにフックしたら、まったくウインドウが作れないウイルスみたいなものですね…。
672 :デフォルトの名無しさん:2005/11/06(日) 16:41:29
>>671
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowmessages/wm_null.asp
ちゃんとあるぞ。英語版見たか?
日本語版は抜けてるし、たまに誤訳もあるからお勧めしない
673 :デフォルトの名無しさん:2005/11/06(日) 16:49:26
>>671さん
すいません、もろに日本語版(ローカルにインストールするやつ)を見てました。
考えてみればVS6.0買った時一緒にセットしたものですから、だいぶ古いですね。ついつい…。
674 :デフォルトの名無しさん:2005/11/06(日) 16:58:15
>>673
ローカル版のMSDNでもちゃんと引っかかるはずだが
手持ちの2003年の奴で試したが引っかかった
675 :デフォルトの名無しさん:2005/11/06(日) 17:04:54
質問。
ゲームを作る際、こっちのほうが楽だろうと
CreateProcessでゲーム用スレッドを作り、WinMainから始まる方はメッセージ処理だけ行わせるようにしました。

ところがゲーム用スレッドが異常にCPUパワーを食います。
原因はゲーム用スレッドの

ThreadMain(){

while(!bEnd)
{
 if(前の処理から16ミリ秒経過していなかったら){
  continue;
 }
 ゲームメイン
}
}
というポーリングでしょう。
Sleepを入れれば解決しそうですが、Sleep(1)ですら必ずしも1ミリ秒丁度待つとは限らない以上、精度的にダメです。
こういう場合どうするのが常道ですか?
676 :デフォルトの名無しさん:2005/11/06(日) 17:05:34
ウィンドウの右上の×ボタンを押したときに終了確認をしたくてWM_CLOSEメッセージが来た際に
case WM_CLOSE:
if (IDYES == MessageBox(hWnd, "終了?", "終了確認", MB_YESNO | MB_ICONQUESTION)) {
SendMessage(hWnd, WM_DESTROY, NULL, NULL);
}
break;
としたのですがこれだとメッセージボックスが出ている間にウィンドウを切り替えると
新しく別の終了確認メッセージボックスが出てきてしまいます。
これを防ぎたいのですが既にメッセージボックスが存在するかどうかを調べることは出来ますか?
677 :デフォルトの名無しさん:2005/11/06(日) 17:14:48
>>675
スリープを入れるかウェイタブルタイマ使え。

というか本当にそんな精度が必要なのか?
それならWindowsなんか使わず自前でOSから作れよ。
678 :デフォルトの名無しさん:2005/11/06(日) 17:16:12
>>675
while()
{
 Sleep(1);
 time = timeGetTime();
 if (time < time_before + 16)
  continue;
 time_before = time;

}
679 :デフォルトの名無しさん:2005/11/06(日) 17:18:40
>>676
「ウィンドウを切り替えると」の意味がよくわからないけど、
case WM_CLOSE: の直前の break; を忘れているとか。
あと、WM_DESTROY は送信しちゃだめぽ。DestroyWindow() しないと。
680 :デフォルトの名無しさん:2005/11/06(日) 17:24:51
>>679
あー、すみません。ウィンドウを切り替えるとってのは
ウィンドウを非アクティブにしてからもう一度アクティブにするとってことです。
WM_DESTROYは送っちゃ駄目なんですね。DestroyWindow()に直しました。
指摘ありがとうございます。
681 :676:2005/11/06(日) 17:30:58
あああ、すみません。>>679の通りでした。本当に申し訳ありませんorz
解決しました。ありがとうございます。
682 :デフォルトの名無しさん:2005/11/06(日) 18:38:44
CreateWindowEx の"Ex"って何の略なんでしょか?
exchange, express, extra?
683 :デフォルトの名無しさん:2005/11/06(日) 18:39:52
全部はずれ
684 :デフォルトの名無しさん:2005/11/06(日) 18:50:48
そうか!extreamに違いない(゚∀゚)!
>>683 thanks!
685 :デフォルトの名無しさん:2005/11/06(日) 18:51:28
>>657
そのアプリが重いことがどういう弊害を起こしているのかにもよるが、
そのアプリをCreateProcess()する起動用アプリを作り、そこからSetPriorityClass()
で、そのアプリのプロセスプライオリティを下げたら?
686 :デフォルトの名無しさん:2005/11/06(日) 19:01:55
>>682
Extended
687 :デフォルトの名無しさん:2005/11/06(日) 19:37:14
>>681
普通×押した時ならWM_SYSCOMMANDでSC_CLOSEトラップするだろ
688 :682:2005/11/06(日) 20:07:48
>>686
あーなるほど。
アホ質問に答えてくれてthanks!
689 :デフォルトの名無しさん:2005/11/06(日) 21:55:01
>>657,685
そんな動作をするフリーソフトなんかが既にありそうな気がする。
690 :652:2005/11/06(日) 22:05:52
返事がない。無理なのか…。
691 :デフォルトの名無しさん:2005/11/06(日) 22:13:22
>>690
はっはっはっはっはっはっは
692 :mp3:2005/11/07(月) 00:38:49
Win32APIのmciコマンドを使ってmp3ファイルを再生しようと思うのですが、
wavファイルと違い、上手くいきません。再生方法の詳細が分かる方はいませ
んでしょうか?MCI_OPEN_PARMS構造体のlpstrDeviceTypeの指定など、具体的な
情報が助かります。
693 :mp3:2005/11/07(月) 00:39:41
Win32APIのmciコマンドを使ってmp3ファイルを再生しようと思うのですが、
wavファイルと違い、上手くいきません。再生方法の詳細が分かる方はいませ
んでしょうか?MCI_OPEN_PARMS構造体のlpstrDeviceTypeの指定など、具体的な
情報が助かります。
694 :mp3:2005/11/07(月) 00:45:23
Win32APIのmciコマンドを使ってmp3ファイルを再生しようと思うのですが、
wavファイルと違い、上手くいきません。再生方法の詳細が分かる方はいませ
んでしょうか?MCI_OPEN_PARMS構造体のlpstrDeviceTypeの指定など、具体的な
情報が助かります。
695 :デフォルトの名無しさん:2005/11/07(月) 00:46:05
そこまで焦らなくても・・・
696 :デフォルトの名無しさん:2005/11/07(月) 13:18:52
Winのhookでアプリの起動捕まえて起動したり起動中止したりしたいんですが、どっかにサンプルコードないですか?
697 :デフォルトの名無しさん:2005/11/07(月) 19:32:05
今スタティックコントロールを使用していてどうしたらいいか不明な点があるので教えてください。
Win32オンリー非MFCです。

スタティックコントロールに文字列を表示しているのですが
CreateWindowする際のウィンドウスタイルで
SS_WHITEFRAME
SS_BLACKFRAME
SS_GRAYFRAME
SS_SUNKEN
SS_ETCHEDFRAME
のいずれかを指定すると文字列が表示されなくなっていまします。
これらを指定した状態で文字列を表示するにはどのようにしたらよいでしょうか?

698 :デフォルトの名無しさん:2005/11/07(月) 19:38:33
SS_SUNKENだけは同時指定出来るが?
他のはスタイルというよりスタティックの種類なので、無理。
699 :デフォルトの名無しさん:2005/11/07(月) 19:52:44
SS_SUNKEN | WS_VISIBLE | WS_CHILD
のみ指定して
SetWindowTextしても文字列は出ませんでした・・・。
700 :デフォルトの名無しさん:2005/11/07(月) 19:57:39
( ´_ゝ`)フーン
701 :デフォルトの名無しさん:2005/11/08(火) 01:44:49
HTMLのフレームにあたる概念ってwinapi(というかwindowsアプリ)ではなんていうの?
702 :デフォルトの名無しさん:2005/11/08(火) 01:46:40
ウインドウ?
703 :デフォルトの名無しさん:2005/11/08(火) 01:47:23
ぺいん?
704 :デフォルトの名無しさん:2005/11/08(火) 01:58:24
Tiled Window
705 :デフォルトの名無しさん:2005/11/08(火) 06:12:29
トップレベルのモードレスダイアログボックスの作成がなかなか理解できません…
リソースにCLASSで自作クラスを設定してそれを登録しているのですが、
このダイアログのプロシージャの戻り値はLRESULT型でしょうかBOOL型なのでしょうか?
また、分岐処理の最後にDefDlgProcを置くべきなのでしょうか?
その場合、WM_DESTROYを捕まえるんじゃなくて例えばWM_CLOSEでDestroyWindowなのでしょうか?
どうも通常のウィンドウプロシージャとこんがらがってしまって…
706 :デフォルトの名無しさん:2005/11/08(火) 08:46:03
>>705
プロシージャの戻り値はMSDNにバッチリ記載されとろうが
プロシージャ内の処理の仕方も全部書いてある

でおまいさん、WM_DESTROYでDestroyWindowはダイアログじゃなくともダメよ?
707 :デフォルトの名無しさん:2005/11/08(火) 10:45:09
>>705
LRESULT型
DefDlgProc() を置くのが普通
WM_CLOSE 内で DestroyWindow() が普通
708 :デフォルトの名無しさん:2005/11/08(火) 11:07:37
>>702-704
それに関して解説してるサイト知りませんか?
検索してもあまり出てこなかったので
709 :デフォルトの名無しさん:2005/11/08(火) 11:19:43
>>701
MFCのCSplitterWnd相当の機能か?
あれはライブラリレベルで実装されてる機能なんでAPIにはそんなものはない。
710 :デフォルトの名無しさん:2005/11/08(火) 11:26:17
すいません。分割ウインドウで検索したらたくさん出てきたので>708はスルーしてください
711 :デフォルトの名無しさん:2005/11/08(火) 11:37:45
>>705
モードレスダイアログなら、WM_CLOSE で不可視化だけしといて
Destroy しないというやり方もあると思う。
場合によるけど、常にウィンドウ持っておいた方が何かとラクできることもある。
712 :デフォルトの名無しさん:2005/11/08(火) 12:45:33
>>707
大嘘書くなよ
713 :デフォルトの名無しさん:2005/11/08(火) 13:36:06
>>712
どうか >>705 の2行目を穴が開くまで見つめてから出直してきてください
714 :デフォルトの名無しさん:2005/11/08(火) 14:52:15
で?
715 :705:2005/11/08(火) 14:52:37
レス遅くなりましたが、>>706、>>707、>>711さん
ありがとうございます!
わたくしの脳みそではMSDNの解説に混乱してしまいまして…
ウィンドウ持っておくというのはいいですね、ちょっとやってみます!
716 :デフォルトの名無しさん:2005/11/08(火) 23:42:41
未使用のIDを自動生成してくれるようなAPIってなんかないですか?
717 :デフォルトの名無しさん:2005/11/08(火) 23:46:08
UuidCreate()とかは?
718 :デフォルトの名無しさん:2005/11/09(水) 00:02:26
>>717
何?その隠し関数。
つーか、英語わかんないんすよ。
つーか、プラットフォームSDK入れろよチンコって言われたですよ。
つーか、具体的にはCreateWindowExのhMenuに突っ込む値がほしいだけなんですよ。
719 :デフォルトの名無しさん:2005/11/09(水) 00:20:25
( ゚д゚)ポカーン
720 :デフォルトの名無しさん:2005/11/09(水) 00:39:15
API必要無いと思うんだが、APIじゃないと駄目なん?
721 :デフォルトの名無しさん:2005/11/09(水) 00:58:09
>>720
だってWindowsの内部で重複しちゃ駄目ならWindowsが管理してそうなもんじゃん。
って単純に考えただけ。
今の俺のアプリはUINTの限界でアボーンw(まあ、そんなことはないだろうけどねw)
722 :デフォルトの名無しさん:2005/11/09(水) 01:13:50
> Windowsの内部で重複しちゃ駄目
誰がそんなこと言ってるの?
723 :デフォルトの名無しさん:2005/11/09(水) 02:58:44
とりあえず、猫を1から読んでいくことをオススメする。
724 :デフォルトの名無しさん:2005/11/09(水) 07:08:31
>>722
ああ、同じ親をもつ子ウィンドウ同士で重複しちゃ駄目なだけって厳密なこといいたいの?
それでも面倒なレベルは変わらないんだけど・・・。
725 :デフォルトの名無しさん:2005/11/09(水) 07:29:40
UuidCreate()はあまりにオーバースペックでしょ
726 :デフォルトの名無しさん:2005/11/09(水) 07:41:52
>721
40億もウインドウ造るんか……
727 :デフォルトの名無しさん:2005/11/09(水) 08:01:56
x64 Editionだと1600京?
どう考えても先にリソースとかアプリケーションヒープのほうが不足しそうだが
728 :デフォルトの名無しさん:2005/11/09(水) 08:25:07
とりあえず、>>716=>>718=>>721=>>724がどうしようもない愚か者なのはわかった
729 :デフォルトの名無しさん:2005/11/09(水) 09:21:33
>>718
メニューのIDは、複数のウィンドウや他のアプリケーションと重複すると、
正常に動作しないので、IDをマイクロソフトが一元管理している。
IDを取得するには、MSDNに入会し、送付されてくるSDKに含まれている
ツールGetMenuId.exeを用いてマイクロソフトにメニューIDの交付を申請する。
MSDN の入会は
http://www.msj.co.jp/msdn/
参照。

MSDNに加入せずにメニューが使用したい場合は、CreateWindowEx()の
hMenuにはNULLを指定しておき、メニューの描画やマウスクリックの取得、
その他の操作をすべて自前で記述する必要有り。

730 :デフォルトの名無しさん:2005/11/09(水) 10:13:24
>>729
おまいはやさしいな。
731 :デフォルトの名無しさん:2005/11/09(水) 10:22:37
・・・・(゚д゚;)・・・・
732 :デフォルトの名無しさん:2005/11/09(水) 13:43:19
IEみたいに上部にアドレスバーを配置するにはどうすればいいのですか
733 :デフォルトの名無しさん:2005/11/09(水) 13:51:30
上部にエディットボックス・ラベルを配置して
そこにアドレスを書き込むようにすればいい
734 :デフォルトの名無しさん:2005/11/09(水) 14:06:01
735 :デフォルトの名無しさん:2005/11/09(水) 20:57:51
CreateDIBSectionで
BITMAPINFO bi;
BITMAPINFOHEADER& bih = bi.bmiHeader;
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biWidth = nWidth;
bih.biHeight = -1 * nHeight; //トップダウン方式
bih.biPlanes = 1;
bih.biBitCount = colorbits;
bih.biCompression = BI_RGB;

m_hbmp = ::CreateDIBSection(NULL, &bi, DIB_RGB_COLORS, (void**)&m_lpdwpixel, NULL, 0);

こんな感じでモノクロのビットマップを作成しようとしてるんですが
WINDOWS2000ではきちんと動くのにWINDOWS98では動きません 戻り値のm_hbmpがNULLになってしまいます
どうしてでしょうか?
736 :デフォルトの名無しさん:2005/11/09(水) 21:08:25
98がトップダウンをサポートしてないなんてことはさすがに無いとは思うが、
とりあえず、その失敗してる時にGetLastErrorとFormatMessageしてみた?
それだけでももしかしたら原因わかるかもしらんぞ?

あとそれ、biをZeroMemoryかmemsetで0初期化しといた方がいいぜ
737 :736:2005/11/09(水) 21:08:46
追記:もしかしたらそのせいかも知らんしな
738 :デフォルトの名無しさん:2005/11/09(水) 21:09:30
>>735
ちょっと試してみると、95もできないな。
上下逆しかできない飢餓する。
bih.biHeight = nHeight;を試してみたら?
739 :デフォルトの名無しさん:2005/11/09(水) 21:18:33
ボトムアップって言えよ
740 :デフォルトの名無しさん:2005/11/09(水) 21:34:48
>>736
0で初期化したらいけました
ありがとうございました^^
741 :デフォルトの名無しさん:2005/11/09(水) 22:44:54
ツールバーの縦のサイズを変更するにはどうすればいいですか。
742 :デフォルトの名無しさん:2005/11/09(水) 23:09:44
windowsのソフトには、インストールが必要なものと、そうでないものがありますが
プログラムの追加と削除に入っているものとそうでないものでは、どういう違いがあると思いますか?

管理がし易い以外にどういう理由があるのだしょうか?
743 :デフォルトの名無しさん:2005/11/09(水) 23:15:02
板違い
744 :デフォルトの名無しさん:2005/11/09(水) 23:15:37
インストールが必要じゃないソフトなんてありませんから
745 :デフォルトの名無しさん:2005/11/09(水) 23:23:37
最近初めてやってみたけど、SDKってすごい面倒くさいな
746 :デフォルトの名無しさん:2005/11/09(水) 23:26:08
>>745
ようこそ、素晴らしきAPIワールドへ
747 :デフォルトの名無しさん:2005/11/09(水) 23:27:33
>>745
え?何と比べて?
MFCと比べてるなら大差ないどころかむしろこっちのが楽だと思うが。
748 :デフォルトの名無しさん:2005/11/09(水) 23:28:22
それはない
749 :デフォルトの名無しさん:2005/11/09(水) 23:28:26
USBに機器が刺されたりした時に画面にダイアログが出てきますが
あのイベントを自作のアプリで拾う事は可能でしょうか?
その場合、どういう風にやれば良いでしょうか?
(もしスレ違いでしたらどこで聞くべきですか?)
750 :デフォルトの名無しさん:2005/11/09(水) 23:33:02
>>748
MFCなんて呪いじゃん。
あのウンコなフレームワークのおかげで1つのソースにこんもりウンコテンコ盛り状態になってる現場って多いぞ。
751 :デフォルトの名無しさん:2005/11/09(水) 23:35:37
Oh!マンコっ!
752 :デフォルトの名無しさん:2005/11/09(水) 23:37:00
そこでWTLですよ
753 :デフォルトの名無しさん:2005/11/09(水) 23:39:26
お前ら貧乏なんだな
754 :デフォルトの名無しさん:2005/11/09(水) 23:39:28
VSのRAD環境ってどれも重いよね
Delphiまんせー
755 :デフォルトの名無しさん:2005/11/09(水) 23:42:04
プログラミングばかりして女と交流ない奴いる?
756 :デフォルトの名無しさん:2005/11/09(水) 23:42:31
手軽にそれなりのGUIができるからMFCは楽チンだった。
色々なコントロールに対するメッセージを一個一個調べるのが大変。
まだ慣れてないだけかもしれないけど。
757 :デフォルトの名無しさん:2005/11/09(水) 23:46:06
COM楽勝な人いる?
758 :デフォルトの名無しさん:2005/11/09(水) 23:47:56
>749
WM_DEVICECHANGEでいいのかな?
759 :デフォルトの名無しさん:2005/11/09(水) 23:49:18
>>756
それだけじゃん。
まあ、MDI(ってか、複数ドキュメントのアプリの形式ってこれであってるっけ?)のアプリケーション作るときなら楽チンだけど、
実際、MDIって使い道がVCかペイントツールぐらいしかないよねw

大抵のもんはSDI+ツールウィンドウで足りるわけで。
ところでMFCでツールウィンドウでどうやって作ったっけ?
なんか苦労した覚えがある(もう、触ってねーけど)
760 :デフォルトの名無しさん:2005/11/09(水) 23:49:44
>>757
回避が妥当。
761 :デフォルトの名無しさん:2005/11/09(水) 23:50:06
ていうか、MFCはもともとCOM開発用に作られたものジャン
762 :デフォルトの名無しさん:2005/11/09(水) 23:50:26
ダイアログリソースでスタイルをツールウィンドウにすれば?
763 :デフォルトの名無しさん:2005/11/09(水) 23:54:10
>>762
おお、そんな感じだった希ガス。
よく考えるとWin32APIでもそうかw
でも、MFCだと苦労した覚えあるなぁ・・・
764 :デフォルトの名無しさん:2005/11/10(木) 00:02:28
>>744
アフォですか?w
765 :デフォルトの名無しさん:2005/11/10(木) 00:03:09
オマエがな
766 :デフォルトの名無しさん:2005/11/10(木) 00:04:36
Oh!マンコ!
767 :デフォルトの名無しさん:2005/11/10(木) 00:05:17
インストールウィザード(セットアップウィザード?)を起動して入れてないとインストールしたとは認めない!
768 :デフォルトの名無しさん:2005/11/10(木) 00:05:48
>>767
俺もそれには同意
769 :デフォルトの名無しさん:2005/11/10(木) 00:06:48
batファイルのダブルクリックなんて死にやがれって感じw
770 :デフォルトの名無しさん:2005/11/10(木) 00:06:51
>>767
何やねんそれw
771 :デフォルトの名無しさん:2005/11/10(木) 00:07:09
アフォだ
772 :767:2005/11/10(木) 00:07:29
>>768
誰だよw
ネタに同意すんなw
773 :デフォルトの名無しさん:2005/11/10(木) 00:07:49
オマンコウィザード
774 :デフォルトの名無しさん:2005/11/10(木) 00:09:59
>>772
それには同意
775 :デフォルトの名無しさん:2005/11/10(木) 00:10:47
776 :デフォルトの名無しさん:2005/11/10(木) 00:16:07
>>775
ありがとう。おかげで俺もうこのスレ、只ただ傍観するだけにしようと決心がつきました。
777 :デフォルトの名無しさん:2005/11/10(木) 00:16:30
systemフォルダにしこたまdllぶち込んだままアンインストール時には消さないのはもはや礼儀といって過言ではない。
レジストリなんて便所の落書きといっしょだ。

足跡残していって!

ブログの掲示板ぐらいのものだと思っていい。
778 :デフォルトの名無しさん:2005/11/10(木) 00:17:18
お前らきめぇ
きめぇ
779 :デフォルトの名無しさん:2005/11/10(木) 00:17:58
毎日プログラミングばかりしてるアホいる?
780 :デフォルトの名無しさん:2005/11/10(木) 00:19:24
winAPIいじるだけが、プログラミングじゃないしな
781 :デフォルトの名無しさん:2005/11/10(木) 00:19:25
仕事ですから^^
782 :デフォルトの名無しさん:2005/11/10(木) 00:20:41
仕事してる人って貧乏なの?
783 :デフォルトの名無しさん:2005/11/10(木) 00:20:56
キムタクがWin32APIのプログラミングしてたら、いじめられると思う。
784 :デフォルトの名無しさん:2005/11/10(木) 00:22:09
741 :デフォルトの名無しさん :2005/11/09(水) 22:44:54
ツールバーの縦のサイズを変更するにはどうすればいいですか。

無視しないで(^^;)
785 :デフォルトの名無しさん:2005/11/10(木) 00:22:37
>>783
ちょっ、おまっ!まてっ、まてよっ!
786 :デフォルトの名無しさん:2005/11/10(木) 00:24:11
>>784
Win32APIの極意を伝授してやろう。

 で き な い こ と は や ら な い

          and

 む ず か し い こ と は さ け る

OK?
787 :デフォルトの名無しさん:2005/11/10(木) 00:24:37
OKじゃありません(^^;)
788 :デフォルトの名無しさん:2005/11/10(木) 00:26:21
プログラミングは不細工がするから様になるんだよなw
789 :デフォルトの名無しさん:2005/11/10(木) 00:27:28
>777
39。
フィーバーおめ
790 :788:2005/11/10(木) 00:27:54
僕不細工なのでイケメンはプログラミングしてもださいって妄想してます
791 :デフォルトの名無しさん:2005/11/10(木) 00:27:57
>>787
だってさ。
普通にウィンドウのサイズ変える方法でできないから質問してんだろ?
それって、ツールバーつくった奴が変えられないようにわざわざなんかしてやがるんだから、
無理にどうにかしようって発想がおかしいんだよ。
792 :デフォルトの名無しさん:2005/11/10(木) 00:29:04
さて、普通にウィンドウのサイズ変える方法でも試してみるか
793 :デフォルトの名無しさん:2005/11/10(木) 00:31:21
わくわく「自分から腰振ってやがる・・・楽しませてくれるぜ!!!!ゴロリ!!!」
794 :デフォルトの名無しさん:2005/11/10(木) 00:34:57
キムタク似ですが何か?
795 :デフォルトの名無しさん:2005/11/10(木) 03:00:17
>>784
画面のプロパティーで変更できる。
796 :デフォルトの名無しさん:2005/11/10(木) 04:17:11
APIというよりSDKと開発環境についての質問で恐縮です
最近新しいSDKをインストール、設定をして使い始めたのですが
インテリセンスがうまく働かない関数がいくつかあります。
これはマクロとして実装されているということでしょうか?
一例としては、FlashWindow関数では引数リストが表示されますが、
FlashWindowEx関数では表示されません。(使えることは使えますが)
自分で調べてみたところ、
「If you are using Visual C++ 6.0, it is recommended that you upgrade
because the import libraries included with this release of the Platform SDK
have a different format than that used by Visual C++ 6.0. 」
という記述をReleaseNoteの中に見つけました。
インポートライブラリの役割って何ですか?
どうしてインテリセンスが効いたり効かなかったりなんでしょう

環境は
Windows XP, Visual C++6.0, Win2003 SP1 Server SDK(一番最近のものをダウンロードしました)
です。
797 :デフォルトの名無しさん:2005/11/10(木) 04:34:46
そもそもVC6のインテリセンスってあまり賢くなかったような気がする。
798 :デフォルトの名無しさん:2005/11/10(木) 05:13:09
>>796
インテリセンスのことは良く分からんが、そのrelease noteの言葉は
文字通りで、VC++6.0はそのリリースのPlatform SDKに対応しとらん
(インポートライブラリの形式が違うから使えない)ということだ。
2003年にリリースされたSDKがVC++6.0で利用可能な最終バージョン
じゃなかったかな。

インポートライブラリってのは、C/C++からDLLを利用するときにリンクする
スタブみたいなもの。スタティックリンクライブラリ同様に(実行時ではなく)
コンパイル/リンク時にリンクを行うが、実体はあくまでDLLの側にあって、
スタブの役割はDLLを実行時に適切にロードして、必要な関数のアドレスを取得し、
実際の処理はDLL側に委譲することにある。
それらの仕事を自前で実装するならインポートライブラリは不要だが、
標準的なシステムDLLに対していちいちそうしたことをやるのは面倒だから、
インポートライブラリを使うのが普通。
799 :デフォルトの名無しさん:2005/11/10(木) 05:18:26
( ゚д゚)インポー
800 :デフォルトの名無しさん:2005/11/10(木) 05:18:59
つーかVC6で最新のSDKなんか使うなって。
801 :デフォルトの名無しさん:2005/11/10(木) 07:18:40
VC6なんか窓から(ry
もうすぐVC8 Expが無料で(ry
802 :デフォルトの名無しさん:2005/11/10(木) 08:56:04
もうすぐ、というか、もうだな。使ってみてるけど、VC6のがいいや…。
コンパイラだけ取り替えたいなぁ。

>>796
インテリセンスに限れば、ヘッダを読んでるだけだよ。
VC6の場合、ネストされてたりすると限界があるのよ。
試しにヘッダだけプロジェクトに組み込んでみるといいよ。

ってこのスレかよ。
803 :デフォルトの名無しさん:2005/11/10(木) 10:27:38
>>741
.rc ファイル
IDR_MAINFRAME TOOLBAR DISCARDABLE 16, 15
の16がボタン一個の幅、15が高さ
804 :デフォルトの名無しさん:2005/11/10(木) 10:32:26
>>749
FindWindow()で探す。

>>758
WM_DEVICECHANGEはドライバのインストールが終わったあとくるのでは?(未確認)
805 :デフォルトの名無しさん:2005/11/10(木) 10:48:18
vcに関してなんですが、適当なスレが見あたらなかったので質問させてください。
コンパイラの「/o?」についてなんですが、/o1 /o2などオプティマイズ掛けるとプログラムが正しく動かなくなってしまうんですが、
何方か情報ありましたらお願いします。
806 :デフォルトの名無しさん:2005/11/10(木) 11:05:39
>>805
このような質問に回答するのは非常に難しいと思うぞ
807 :デフォルトの名無しさん:2005/11/10(木) 11:09:27
>>805
最適化をかけると動かなくなる場合、
たいていソースにバグがあって、たまたま動いてただけ
808 :デフォルトの名無しさん:2005/11/10(木) 11:25:41
>>805
違うバージョンのVCか別のコンパイラで作られたライブラリにリンクしてる
809 :デフォルトの名無しさん:2005/11/10(木) 11:31:14
潜在的なバグが表面化しただけの可能性が98%、
コンパイラのバグの可能性が2%ってとこか?

最適化するとデバッガの機能がかなり制限されるから大変だけど、
printfデバッグでも使って頑張れ。

どっちにしろ、このスレは明らかにスレ違いだな。
VSかVC++のスレで聞いたら?たぶん回答は得られないが。
810 :デフォルトの名無しさん:2005/11/10(木) 11:39:17
場所が大体絞り込めてるならリスティングファイルでも読んだほうがはやくね?
811 :デフォルトの名無しさん:2005/11/10(木) 11:51:53
>>805
適当なスレって何だ?
ココの方が余程不適当なスレですよ?
VCのスレあるのに、自分初心者じゃないから初心者スレには行きたくないか?
812 :デフォルトの名無しさん:2005/11/10(木) 12:27:36
コンパイラバグの可能性結構高いな。
813 :デフォルトの名無しさん:2005/11/10(木) 13:16:15
最適化でバグが出るなら初期化忘れを疑う
814 :デフォルトの名無しさん:2005/11/10(木) 13:21:17
99.999%それだよな。
コンパイル結果のアセンブラ出力も見ずにコンパイラバグ疑うのはキチガイ。
815 :デフォルトの名無しさん:2005/11/10(木) 18:24:06
ワトソンの逆アセ止められて不自由してない ?
816 :デフォルトの名無しさん:2005/11/10(木) 18:42:28
>>809
この手のバグの場合printfを入れただけで問題が起きなくなることもあって
大変だけどな。まずソースコードを机上でもディスプレイ上でもいいから
じっと眺めてみるのがいいか
817 :デフォルトの名無しさん:2005/11/10(木) 20:48:42
>>805
正しく動かないとは?
Exceptionになるのか、機能的に違った動作をするのか?

私も、>>807 と同意見。
最適化してもステップ動作とかはできるから、どこでおかしくなっているのか
究明すべし。これは最適化してようがしてまいが同じ。
818 :デフォルトの名無しさん:2005/11/10(木) 20:53:38
>>805
バッファをauto変数で宣言する場所では、最低限バッファの0バイト目にヌルをセットするべし。
最適化すると、他で使われて遺棄されたバッファがそのままバッファメモリに流用されるので。

BYTE buffer[256] = {0};
もしくは、
BYTE buffer[256];
buffer[0]=0;
819 :デフォルトの名無しさん:2005/11/10(木) 20:56:07
そんなんmemset(buffer, 0, 256)すりゃええやん
820 :デフォルトの名無しさん:2005/11/10(木) 20:57:00
ていうか、意味不明。
821 :デフォルトの名無しさん:2005/11/10(木) 20:57:54
リリースでもデバッグ情報付きでコンパイルして以下略
822 :デフォルトの名無しさん:2005/11/10(木) 21:04:06
>818
上は、バッファ全域が0になるわけで、下とは意味が違うのだが。
823 :デフォルトの名無しさん:2005/11/10(木) 21:05:10
ま、100%、PGのミスによるバッファオーバラン。
824 :デフォルトの名無しさん:2005/11/10(木) 22:06:22
>>805 は、こんなにいっぱい(しかもこのスレでは珍しくまともな)レスが
ついているのに、お礼の一言もないなあ・・・
825 :デフォルトの名無しさん:2005/11/10(木) 22:09:22
礼はいらん。本当に役立ったのかだけ知りたい。
826 :デフォルトの名無しさん:2005/11/10(木) 22:23:55
いちいち御礼ってのもうざいから止めるか。
それよか適用結果を貼り付けることを礼儀としようぜ。
827 :デフォルトの名無しさん:2005/11/10(木) 22:35:25
勝手に礼儀を作るなよ
828 :デフォルトの名無しさん:2005/11/10(木) 22:39:26
>>827
ここじゃ大部分の奴等が俺と同じ意見だと思うぜ。
このレスに俺はなんの魅力も感じない。

>遅レスですが、レスありがとうございました。
>その方法でやってみます。

で、音信不通・・・
馬鹿じゃねぇの。
性根から腐ってるとしかいいようがない。
このレスいらねぇから結果を反映させろよって感じ。
829 :デフォルトの名無しさん:2005/11/10(木) 22:47:05
>>828
俺も同意なんだけどさ、ルール作ったところで守る奴はいないだろ。特に音信不通になるようなタイプの人間は。
830 :デフォルトの名無しさん:2005/11/10(木) 22:51:05
>>829
そういう空気があるってところだけでいいんだよ。
そうすりゃたまに誰かがいうでしょ。
直る奴は直る。
これだけでいい。
831 :デフォルトの名無しさん:2005/11/10(木) 22:59:16
オマンコAPI
832 :デフォルトの名無しさん:2005/11/10(木) 23:14:11
>>831

遅レスですが、レスありがとうございました。
その方法でやってみます。
833 :デフォルトの名無しさん:2005/11/11(金) 00:38:49
プログラムから、そのプログラムが使用しているメモリ量を取得する方法はありますか?
タスクマネージャーに出てくるようなものでお願いします。
834 :デフォルトの名無しさん:2005/11/11(金) 00:58:00
>>833

遅レスですが、レスありがとうございました。
その方法でやってみます。
835 :デフォルトの名無しさん:2005/11/11(金) 01:02:20
>>836 

早レスですが、レスありがとうございます。 
その方法でやってみます。 
836 :デフォルトの名無しさん:2005/11/11(金) 01:05:06
>>833

早漏ですが、レスありがとうございました。
その方法でやってみます。
837 :デフォルトの名無しさん:2005/11/11(金) 01:07:53
('A`) 何この流れ
838 :デフォルトの名無しさん:2005/11/11(金) 01:27:01
Advanced Windowsっての本屋じゃ一回も見かけたことないんだけぢ
存在するのか?
839 :デフォルトの名無しさん:2005/11/11(金) 01:29:39
田舎の駅前の本屋だけど何年も鎮座してる
840 :デフォルトの名無しさん:2005/11/11(金) 01:31:49
鈍行列車で5時間かけて、東京まで買いに行った。
841 :デフォルトの名無しさん:2005/11/11(金) 01:40:24
>>838
町の本屋より、大学内の本屋の方がいい希ガス
842 :デフォルトの名無しさん:2005/11/11(金) 01:54:49
まとめると、オンラインの本屋がベスト。
843 :デフォルトの名無しさん:2005/11/11(金) 02:35:13
印刷をしたくて、調べているとPrintDlgに行き当たったんですが、
PRINTDLGの使用後の後処理は

hDevMode,hDevNames → GlobalFree
hDC → DeleteDC

であってますか?
844 :デフォルトの名無しさん:2005/11/11(金) 04:48:36
結果をレスしたらウザがるくせに
845 :デフォルトの名無しさん:2005/11/11(金) 04:53:11
言っとくが質問を小出しにするのと結果をレスするのは違うぞ
846 :デフォルトの名無しさん:2005/11/11(金) 06:26:31
>>842
俺は軽い気持ちでオンラインで買ったら、分厚い本でびびったw
847 :デフォルトの名無しさん:2005/11/11(金) 07:41:12
>>838
俺の学校の図書館にある。
分厚いので借りて帰るには少々面倒だが。
848 :デフォルトの名無しさん:2005/11/11(金) 10:26:37
>>833
GetProcessMemoryInfo()
そのまんまの名前でんがな・・・・
849 :デフォルトの名無しさん:2005/11/11(金) 10:31:16
つーかAPIにそのまんまじゃない名前なんてほとんど無いのにな
850 :デフォルトの名無しさん:2005/11/11(金) 10:43:54
結果キボン。てつけたらええんとちゃうのん?ガンガンつけたらええやないの?

レスの最後に付けとかはったら、ええんとちゃうのん?
851 :デフォルトの名無しさん:2005/11/11(金) 10:48:32
ちゃうのん
852 :デフォルトの名無しさん:2005/11/11(金) 11:45:35
853 :デフォルトの名無しさん:2005/11/11(金) 12:48:57
クソワロタ
854 :デフォルトの名無しさん:2005/11/11(金) 21:06:01
【芸能】ひばりさんと一夜過ごした!?西郷輝彦がテレビでドッキリ告白
http://live14.2ch.net/test/read.cgi/wildplus/1131706707/
855 :デフォルトの名無しさん:2005/11/11(金) 21:42:12
VS2003のC++のWin32プロジェクトで、
ふつうにwindows.hインクルードしてウィンドウを表示させただけで、
タスクマネージャで見るとメモリを4532KBも食ってるんだがなんで?
ちなみに最小化するとなぜかメモリ使用量が1000KBに減り、元に戻すと1800KBになる。
856 :デフォルトの名無しさん:2005/11/11(金) 21:46:15
表示させただけといわれてもな
どんなコード書いてるのか知らんし
857 :デフォルトの名無しさん:2005/11/11(金) 21:49:32
windows.hインクルードしただけじゃウインドウ出ないと思うんだが
858 :デフォルトの名無しさん:2005/11/11(金) 21:52:40
コードさらしてもいい?
859 :デフォルトの名無しさん:2005/11/11(金) 22:09:10
むしろ晒せ
860 :デフォルトの名無しさん:2005/11/11(金) 22:15:47
ウィンドウの大きさに応じたDCがメモリ上に確保される。
DCの描画状態がシンプルな白地であろうが複雑な画像であろうが同じサイズ確保される。
861 :デフォルトの名無しさん:2005/11/11(金) 22:29:04
それじゃあ説明にならん
862 :デフォルトの名無しさん:2005/11/11(金) 23:22:56
#include <windows.h>

HWND hWnd;
HINSTANCE hInst;

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
BOOL CreateMainWindow();

LRESULT CALLBACK WndProc(HWND tWnd,UINT msg,WPARAM wp,LPARAM lp)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(tWnd,msg,wp,lp);
}
return 0;
}


1/3
863 :デフォルトの名無しさん:2005/11/11(金) 23:25:50
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,
LPSTR lpszCmdLine,int nCmdShow)
{
MSG msg;
hInst = hInstance;

if(!CreateMainWindow())
{
MessageBox(NULL,"初期化エラー","testWindow",MB_ICONHAND);
return 2;
}

ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}

2/3
864 :デフォルトの名無しさん:2005/11/11(金) 23:26:49

BOOL CreateMainWindow()
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = "testClass";
wc.lpszMenuName = NULL;
wc.hInstance = hInst;
wc.hIcon = NULL;
wc.hIconSm = NULL;
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);
if(!RegisterClassEx(&wc))
return FALSE;
hWnd = CreateWindowEx(0,"testClass","testWindow",
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,240,120,NULL,NULL,hInst,NULL);
if(!hWnd)
return FALSE;
return TRUE;
}

3/3
言い忘れたけど855のソースね。
865 :デフォルトの名無しさん:2005/11/11(金) 23:27:49
>>855
Windowsなんてそんなもんだよ。困る?
866 :デフォルトの名無しさん:2005/11/11(金) 23:27:52
   /⌒ヽ
  / ´_ゝ`)すいません、ちょっと通りますよ・・・
  |    /
  | /| |
  // | |
 U  .U
867 :デフォルトの名無しさん:2005/11/11(金) 23:33:11
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
してみたら?
868 :デフォルトの名無しさん:2005/11/11(金) 23:40:59
それは関係ないだろう。
869 :デフォルトの名無しさん:2005/11/11(金) 23:53:45
スワップアウトされて小さくなったように見えてるだけでわ。
870 :デフォルトの名無しさん:2005/11/11(金) 23:57:53
マルチスレッド(DLL)でビルドしたものは、起動速度・消費メモリともパフォーマンスが向上する。・・はず。
871 :デフォルトの名無しさん:2005/11/12(土) 00:05:33
>>855
スワップアウトして見かけのメモリ使用量が減ったのかなとか思ったりするんだが、
本当のところは知らね。って書いてたら既に書かれてたか。

ちなみに、
ImmDisableIME(-1);
ってするとメモリ使用量が大幅に減る。IMEを必要としないプログラム限定の技だが。
ついでにWin95では使えないが・・・もう気にする必要はないか。
872 :デフォルトの名無しさん:2005/11/12(土) 00:08:24
プログラマならタスクマネージャで仮想メモリサイズも表示しとこうぜ
873 :デフォルトの名無しさん:2005/11/12(土) 00:17:03
ついでにハンドル数もな。
広い世の中には、メモリリークだけじゃなく、ハンドルリークも存在する。
874 :デフォルトの名無しさん:2005/11/12(土) 00:39:51
>>870
起動速度は微妙じゃないかな。
バインドで時間食うし。
875 :デフォルトの名無しさん:2005/11/12(土) 00:47:55
>>870
いや、それが意外とそうでもないよ。 確認したのはWindows2000での話だけどね。
バインドが問題だというなら、そもそもSHELL32.DLLやらUSER32.DLLをロードする、
あらゆるモジュールに問題が生じるはずだよ。

XPだと別の起動最適化がかかるから、効率がどうなるかわからない。
876 :デフォルトの名無しさん:2005/11/12(土) 00:50:49
SetProcessWorkingSetSize()
877 :875:2005/11/12(土) 00:52:33
間違った
>>875は>>874へのレス
878 :デフォルトの名無しさん:2005/11/12(土) 00:59:56
>>875
> そもそもSHELL32.DLLやらUSER32.DLLを
だから微妙と言ったんだけれども。
デカクなったPEの読み込みと大量のバインドのどちらが重くなるかは
大本のプログラムの大きさによると思うよ。
元より外部のライブラリにあまり頼らない設計してたら、どっちにしろ
最終的なサイズは大きくは変わらないからね。

Load-Timeじゃなくて全部Run-Timeでやるんなら起動だけは速いかな。
879 :デフォルトの名無しさん:2005/11/12(土) 01:02:09
>>878
なるほど、そういう意味の「微妙」だったか。失礼しました。
880 :デフォルトの名無しさん:2005/11/12(土) 01:02:58
>>879
いえいえ。
881 :デフォルトの名無しさん:2005/11/12(土) 02:19:49
ところでみんな自作アプリXPの外観にしてるの?
882 :デフォルトの名無しさん:2005/11/12(土) 03:36:20
エディットに影をつけるにはどうすればいいのか
ボタンをビジュアルスタイルで設定してる概観にするのはどうすればいいのか
883 :デフォルトの名無しさん:2005/11/12(土) 04:53:19
マニフェスト書くだけじゃないの?
884 :デフォルトの名無しさん:2005/11/12(土) 22:42:26
おそらく識者の方から見れば馬鹿なミスだとは思うのですが・・・
どうしても分からなくなったのでどうか教えてください。

以下の関数を使ってファイルから1行読み出しをしているのですが、
なぜか文字化けは入るわ、strcatは無視されるわで散々な結果です。
staticで変数宣言すると直るのですが、その理由も分からず……
どうかよろしくお願いします。

int fileRead(char* fileStr,HANDLE hFile)
{
char cache=0x00;
char fileData[255];
DWORD wReadSize;

while(cache == '\n')
{
ReadFile(hFile , &cache , 1 , &wReadSize , NULL);
if(wReadSize == 0) break;
strcat(fileData,&cache);
}
strcpy(fileStr,fileData);
885 :デフォルトの名無しさん:2005/11/12(土) 22:45:37
strcatは追記もとの終端をNILで判定するから、
fileDataを初期化しないとイケナイ。
886 :デフォルトの名無しさん:2005/11/12(土) 22:49:04
みなかったことにしておこう
887 :デフォルトの名無しさん:2005/11/12(土) 22:57:10
>>884
バグが…5つ…かな。
888 :デフォルトの名無しさん:2005/11/12(土) 22:58:34
その関数の存在意義がわからん
889 :デフォルトの名無しさん:2005/11/12(土) 23:06:54
IEコンポーネントを使っています。
DWebBrowserEvent2::DownloadCompleteなのですが、
引数が無いので、どのデータがダウンロード終了したのか特定できません。
DocumentCompleteの場合は、FRAME/IFRAMEやページ本体のダウンロード時にしか発生しません。
ページ内の特定の画像のダウンロード終了を検出するにはどうしたら良いのでしょうか?
890 :デフォルトの名無しさん:2005/11/12(土) 23:45:52
オマンコAPI
891 :デフォルトの名無しさん:2005/11/12(土) 23:46:35
CreateWindow で作ったウィンドウをユーザがボタンから終了させるのではなく、
アプリが内部でウィンドウを強制終了させたい場合はどういうAPIを使えば
よいですか?
892 :デフォルトの名無しさん:2005/11/12(土) 23:50:13
DestroyWindow
893 :デフォルトの名無しさん:2005/11/12(土) 23:59:49
http://aploda.org/dat1/upload48637.bmp
ステータスバー作ってみたら下みたいなのになるのですが、
上みたいなステータスバーを作るにはどうすればいいのでしょうか
894 :デフォルトの名無しさん:2005/11/13(日) 00:00:32
>>893
自前で作れ。
895 :デフォルトの名無しさん:2005/11/13(日) 00:04:09
>>893
jpgにしろよ
重いな
896 :デフォルトの名無しさん:2005/11/13(日) 00:07:37
>>894
どうやってですか
>>895
はじめgifにしたんですが使い物にならないくらい画質悪くなったんでそのままbmpにしました
windows付属のペイントです
897 :デフォルトの名無しさん:2005/11/13(日) 00:08:51
>>896
お前プログラミング以前の問題だよ
898 :デフォルトの名無しさん:2005/11/13(日) 00:13:08
>>891
PostMessage(hWnd, WM_CLOSE, 0, 0);
899 :デフォルトの名無しさん:2005/11/13(日) 00:18:21
>>897
知らないのなら黙っていて下さいよ
900 :デフォルトの名無しさん:2005/11/13(日) 00:21:38
わかったからさっさと教えろや(^o^)
901 :デフォルトの名無しさん:2005/11/13(日) 00:22:21
>>900氏ね^^
902 :デフォルトの名無しさん:2005/11/13(日) 00:30:11
表示のプロパティで拡張子を表示して、○○.bmp を ○○.jpg に書き換えればいいんだよ
903 :デフォルトの名無しさん:2005/11/13(日) 00:32:39
bmpくらい我慢しろや(^o^)
904 :デフォルトの名無しさん:2005/11/13(日) 00:35:10
どうやってはじめgifに変換したのか教えろや(^o^)
905 :デフォルトの名無しさん:2005/11/13(日) 00:36:59
頭悪いからgifなんかに変換しちゃうんだろうなw
906 :デフォルトの名無しさん:2005/11/13(日) 00:37:48
ファイル、名前をつけて保存、ファイルの種類:gif(*.gif)
こうしたんだよ(^o^)
907 :デフォルトの名無しさん:2005/11/13(日) 00:38:17
>>905
回答できない低学歴は消えろ(^o^)
908 :デフォルトの名無しさん:2005/11/13(日) 00:38:50
黙ってろって言ってんのに
本当に頭が悪いやつらだなw
909 :デフォルトの名無しさん:2005/11/13(日) 00:39:40
回答できる奴と東大・京大・一橋・阪大・東工・国公立医学部以外の奴はさっさと消えろや(^o^)
910 :デフォルトの名無しさん:2005/11/13(日) 00:40:24
だって画像みれたもんじゃないぐらい重くて落とせないしw
911 :デフォルトの名無しさん:2005/11/13(日) 00:40:54
>>909
そんなにすごいなら自分で解決しなさいなw
912 :デフォルトの名無しさん:2005/11/13(日) 00:41:24
>>910
どんな環境だよw
913 :デフォルトの名無しさん:2005/11/13(日) 00:41:37
>>910
少し我慢しろよ(^o^)
914 :デフォルトの名無しさん:2005/11/13(日) 00:41:59
>>896
自分でそういうコントロールを作る。
915 :デフォルトの名無しさん:2005/11/13(日) 00:42:14
>>911
さっさと教えろや(^o^)
916 :みずき ◆WnmizUKIg6 :2005/11/13(日) 00:42:46 BE:67222433-##
すごいスレっすね(*´∀`*;
917 :デフォルトの名無しさん:2005/11/13(日) 00:42:47
ていがくれきばっかりだな(^o^)
918 :デフォルトの名無しさん:2005/11/13(日) 00:42:55
>>912
しらねーよ。
場所によんじゃねーの。
もう、かれこれ10分ぐらいリロードしたりしてるけど
いっこうに落ちてこないねw
919 :デフォルトの名無しさん:2005/11/13(日) 00:43:22
>>914
上のステータスバーはIEのものなのですが、それの製作者も自分で作ったのですか
あとfire foxも同じかんじのステータスバーなのですが
920 :デフォルトの名無しさん:2005/11/13(日) 00:46:06
製作者に直接聞いて来いボケ
921 :デフォルトの名無しさん:2005/11/13(日) 00:46:05
上と下と どう違うのよ
922 :デフォルトの名無しさん:2005/11/13(日) 00:46:17
誰かさっさと答えろよ(^o^)
ざこい奴らだな
923 :デフォルトの名無しさん:2005/11/13(日) 00:47:42
>>921
明らかに違うだろ
めがね掛けろよ
924 :デフォルトの名無しさん:2005/11/13(日) 00:48:38
画像が重くて落ちてこないよw
925 :デフォルトの名無しさん:2005/11/13(日) 00:50:49
こんなのもわかんねーのかよ
ったくつかえねーやつらだ
926 :デフォルトの名無しさん:2005/11/13(日) 00:53:27
>>925
やっと画像が落ちてきたけど違いが全くわかんねw
927 :デフォルトの名無しさん:2005/11/13(日) 00:54:13
>>926
下の方はカクカクしてるだろ
928 :デフォルトの名無しさん:2005/11/13(日) 00:55:33
再描画すればいいんじゃね?
929 :デフォルトの名無しさん:2005/11/13(日) 00:56:28
>>928
駄目だよ
930 :デフォルトの名無しさん:2005/11/13(日) 01:17:55
リサイズして横に伸ばすだけだろ?
931 :デフォルトの名無しさん:2005/11/13(日) 01:24:02
お前ら理解してねーな
下のステータスバーはフチ付きなんだよ(しかもなんか鮮やか)
上のステータスバーはフチないんだよ(単色っぽい)
まったく
932 :デフォルトの名無しさん:2005/11/13(日) 01:24:44
下のステータスバーはフチ付きなんだよ(単色っぽい)
上のステータスバーはフチないんだよ (なんか鮮やか)

のミスです(^o^)
933 :デフォルトの名無しさん:2005/11/13(日) 01:25:09
CD-ROMドライブとかが入って無いときにそのドライブにアクセス
した時に出る警告ウィンドウをユーザーアプリから消す(又は不可
視化する)って出来ますか?
934 :デフォルトの名無しさん:2005/11/13(日) 01:27:42
上のバーの方が短いってことだろ?
935 :デフォルトの名無しさん:2005/11/13(日) 01:28:12
違う 下だ
936 :デフォルトの名無しさん:2005/11/13(日) 01:33:00
>>934-935
違う違う
下の方はねずみ色っぽいフチが付いてるだろ
でも上の方はグラデーションだろ
937 :デフォルトの名無しさん:2005/11/13(日) 01:33:42
どっちでもいい(^o^)
938 :デフォルトの名無しさん:2005/11/13(日) 01:45:01
>>933
SetErrorMode(SEM_FAILCRITICALERRORS);
939 :デフォルトの名無しさん:2005/11/13(日) 02:53:09
遅くなりましたが、>>885さんと>>887さんどうもありがとうございました。
少し時間を置いたら色々と考え違いが思い当たったので、それを直しつつ
ぼちぼちやっていきます。
スレ汚し失礼しました。
940 :デフォルトの名無しさん:2005/11/13(日) 04:01:18
>>884
char cache=0x00;
ここが問題。これを大きさが2以上の配列にしないと駄目。
941 :デフォルトの名無しさん:2005/11/13(日) 09:15:34
>>896
そこでPNGですよ。
942 :デフォルトの名無しさん:2005/11/13(日) 09:23:13
>>895
jpgは写真には向いてるけど
図形や文字に使うとにじんで汚くなる。
こいうのはgifやpngを使うのが常識
943 :デフォルトの名無しさん:2005/11/13(日) 09:57:23
激しく論点のズレてる942にワロタ

それにしても、下らんことで次スレが近づいたな
944 :デフォルトの名無しさん:2005/11/13(日) 09:59:45
>>942
でもgifは使えないでしょ?
945 :デフォルトの名無しさん:2005/11/13(日) 10:01:01
magにするのがいいと思う
946 :デフォルトの名無しさん:2005/11/13(日) 10:07:59
magだってgifと同じく8bitカラーまでやん。
947 :デフォルトの名無しさん:2005/11/13(日) 10:13:56
それじゃ.celで
948 :デフォルトの名無しさん:2005/11/13(日) 10:40:31
いや、ここは.im32だな
949 :デフォルトの名無しさん:2005/11/13(日) 10:46:37
マジレスして華麗にスルーされてる941に嫉妬
950 :デフォルトの名無しさん:2005/11/13(日) 11:14:21
951 :デフォルトの名無しさん:2005/11/13(日) 11:22:39
>>949
今度はスルーされなくて良かったね^^
952 :デフォルトの名無しさん:2005/11/13(日) 12:31:00
Windows付属のペイントの減色処理がしょぼすぎなだけなので普通はgifが使える。
953 :デフォルトの名無しさん:2005/11/13(日) 13:26:13
>>951
スルーされたかったのに妄想厨に絡まれたんだよヽ(`Д´)ノ
どうせ2chの書き込みは全部漏れの自作自演だよヽ(`Д´)ノ
954 :デフォルトの名無しさん:2005/11/13(日) 13:28:13
>>1-1000
自演乙
955 :デフォルトの名無しさん:2005/11/13(日) 14:28:16
オマエモカ!
956 :デフォルトの名無しさん:2005/11/13(日) 14:34:01
オマエモダ!                          ( ゚д゚ )
957 :デフォルトの名無しさん:2005/11/13(日) 16:06:30
CでWin32APIを使用しWindowアプリケーションを作りたいのですが、
C++の知識は必要でしょうか?
958 :デフォルトの名無しさん:2005/11/13(日) 16:07:07
Cで作るのにC++の知識がいるかボケェ
959 :デフォルトの名無しさん:2005/11/13(日) 16:21:08
でもCOMまわりはC++できないと辛いお
960 :957:2005/11/13(日) 16:22:28
どこもC++については意見が真っ二つですよね・・・
961 :デフォルトの名無しさん:2005/11/13(日) 16:37:36
COM使わにゃえぇだけ
962 :デフォルトの名無しさん:2005/11/13(日) 16:37:39
作りたいアプリによると思う。
963 :デフォルトの名無しさん:2005/11/13(日) 16:47:30
なんでも全部自分でやるならCだけで充分
でも人が作ったものを利用しようと思った時にC++知らないと不便だろ
964 :957:2005/11/13(日) 16:49:48
なるほど・・・
日曜プログラマーの延長線進もうとする自分にとっては
微妙なようで・・・
965 :デフォルトの名無しさん:2005/11/13(日) 16:51:49
驚いた、人の作ったC関数ライブラリ使うのにC++知らないと不便なのか
966 :デフォルトの名無しさん:2005/11/13(日) 16:51:56
まぁ、先にC++覚えたほうが後々楽できるとは思うがそこは人それぞれだな。
俺はもう素のCなんか書きたかねーが。
967 :デフォルトの名無しさん:2005/11/13(日) 16:56:00
そこがプロとアマの違いw
968 :デフォルトの名無しさん:2005/11/13(日) 17:20:09
わたしゃ日曜プログラマですが、C++覚えた方が色々と楽な気がする。
Cで書いてた時よりも遙かに楽になった。
969 :デフォルトの名無しさん:2005/11/13(日) 17:49:55
C++思考ができれば、な
970 :デフォルトの名無しさん:2005/11/13(日) 17:52:05
なぜかGetClipboardDataが失敗するのですが。
GetLastError()は、ERROR_CLIPBOARD_NOT_OPENです。

確かにちゃんとOpneClipboardが成功しているのですが。

EmptyClipboard()やSetClipboardData()はできるようです。
971 :デフォルトの名無しさん:2005/11/13(日) 19:17:55
現在時刻をミリ秒かマイクロ秒単位で取得する関数はありますか。
972 :957:2005/11/13(日) 19:19:48
進んでみて駄目/必要そうなら++を学習してみます。
本当にありがとうございましたm(_ _)m
973 :デフォルトの名無しさん:2005/11/13(日) 19:37:33
timeGetTime, GetTickCount(ms単位)
QueryPerformanceCounter (QueryPerformanceFrequency単位)
GetSystemTimeAsFileTime(0.1µsec単位)
ただし、実際に器の単位で時刻が進むとは限らないはず。
974 :デフォルトの名無しさん:2005/11/13(日) 19:45:12
つーか、そもそもPCのRTCにそこまでの精度がないからやるだけ無駄。
975 :デフォルトの名無しさん:2005/11/13(日) 19:47:03
ネットワーク共有のフォルダをFindFirstFile、FindNextFileで列挙しましたが、
2000個のフォルダを列挙するのに8秒ほどかかります。
ローカルでやると、100msくらいなのですが、なぜこれほど
ネットワーク越しは時間が掛かるのでしょうか?
976 :デフォルトの名無しさん:2005/11/13(日) 19:48:30
離れてるから
977 :デフォルトの名無しさん:2005/11/13(日) 19:58:16
>>973
へぇ、timeGetTimeって「現在時刻」だったんだ
978 :デフォルトの名無しさん:2005/11/13(日) 20:02:41
最初に別の方法で時刻とタイムカウンタの値を取得しておいて、
あとはタイムカウンタの差分を取得しておいた時刻に足せば、
現在時刻になるわけだが。
979 :デフォルトの名無しさん:2005/11/13(日) 20:14:54
>>978
それは別の方法の精度が悪ければいくらタイムカウンタの精度が良くても意味がないだろ。
980 :デフォルトの名無しさん:2005/11/13(日) 20:18:05
>>978
「現在時刻をミリ秒かマイクロ秒単位で取得する関数」なんですか?w

論点違ってんだよ
981 :デフォルトの名無しさん:2005/11/13(日) 20:22:03
現在時刻が1970/1/1からの秒数であるか、1601/1/1からの
0.1µsecであるか、システム起動時からのmsであるかに
そんなに大きな違いはない。
982 :デフォルトの名無しさん:2005/11/13(日) 20:35:20
結論としては1ms単位での取得は無理。
中身どうなってんのか俺は知らんけど、
そもそもOS側でのタイマの更新がそう頻繁に行われて無いと思われ。
今、タイマ関数を読んでその値が一体何時に取得した値なのか1ms単位ではわからないんではないか?と予想。
経験だとだいたい20ms単位ぐらいなら文句が無い程度には動く。
983 :デフォルトの名無しさん:2005/11/13(日) 20:38:50
マルチメディアタイマーを使えばもっと細かい時間が
取得できるとかどっか書いてあったけど?
984 :デフォルトの名無しさん:2005/11/13(日) 20:44:11
理論上はな
実際と理論は違うのだよ
985 :デフォルトの名無しさん:2005/11/13(日) 20:57:05
>>983
そもそもWindows自体が全てがメッセージで動いてるわけで、
タイマのときだけメッセージ無視して早く動くとも考え難いじゃん。
Windowsってさ、だいたいが、その状態があってそれを取得するのは早いけど
ひとたびハードにアクセスするってーとかなり時間がかかると思うんだがどうだろうか?
だからタイマ取得関数ですぐレスポンスが帰ってくるのはそもそも俺が関数を呼び出す
もっと前に取得しておいたものだと俺は考えるわけだがどうだろうか?
だから時間は関数を呼び出す前からすでにずれていると思うわけよ。
はじめに設定する精度ってのはWindowsがとってくるように
努力しようとする周期(実際にとれているかどうかは問題では無い:まあ、期待値w)であって、
メッセージで動くWindowsにそもそもそんな周期での仕事は無理なんじゃねぇの?
ってのが俺の予想。
986 :デフォルトの名無しさん:2005/11/13(日) 20:57:46
窓上でそんな時間取得できるのか?
普段のもっさり感考えるとかなりばらつく気がす
987 :デフォルトの名無しさん:2005/11/13(日) 21:00:24
そもそもメッセージはみなのんびりゲットしてる
988 :デフォルトの名無しさん:2005/11/13(日) 21:20:10
マルチメディアタイマーは割り込みじゃないのかなー
989 :デフォルトの名無しさん:2005/11/13(日) 21:21:28
http://www.emit.jp/prog/prog_t1.html
timeBeginPeriodを使えばGetTickCountの精度まで良くなるそうだ。
990 :デフォルトの名無しさん:2005/11/13(日) 21:30:26
991 :デフォルトの名無しさん:2005/11/13(日) 21:31:03
8254叩いて今の値をとってくるのに、そんなに時間は掛からないとおもうが。
992 :デフォルトの名無しさん:2005/11/13(日) 22:01:21
>>988
割り込む処理もメッセージだったら?
993 :デフォルトの名無しさん:2005/11/13(日) 22:03:59
>>989
>記事の行数が増えてしまうので NT(2000) での結果は割愛しましたが、精度は 10mSec でした。(^_^;
これはなぜか?
って考えないのかな?。
つまり、NT系に当たるXPもこんなもんじゃねーの?
994 :デフォルトの名無しさん:2005/11/13(日) 23:22:55
>>992
もしメッセージだったら精度は悪くなるだろうね。
実際はメッセージじゃないけど。
995 :デフォルトの名無しさん:2005/11/13(日) 23:23:33
回答者は憶測だけで書き込むのはやめろ。
マルチメディアタイマは最優先度のスレッドが生成されそのスレッド内でループする仕様。
Win32APIに割り込みなど存在しない。
996 :デフォルトの名無しさん:2005/11/13(日) 23:37:46
>>995
スレッドならメッセージでやりとりするしかねーじゃん。
997 :デフォルトの名無しさん:2005/11/13(日) 23:44:19
この時間帯、書込みのレベルが低いな。>>996みたいな天然の初心者が多い。
口調が初心者風でないだけにムカつく。
998 :デフォルトの名無しさん:2005/11/13(日) 23:45:38
>>993
シングルプロセッサのNT系のクロック割り込みが10ms単位らしいから、
タイマーの精度もそれに依存してるって話では。

タイマーのOS内部での動作としては、クロック割り込みがくるたびに、
システム内のカウンターに割り込み間隔分の値を加算していく。
timeGetTime()とかGetTickCount()とかは基本的にこのカウンタを返してるだけだから、
精度はクロック割り込みの設定に依存する。
(基本的にはどのOSでもこのへんの構造は大差ない)

QueryPerformanceCounter()は、クロック割り込みとは別のハードウェアを使ってるから
(使える環境なら)より精度の高いカウンタとして使える。

マルチメディアタイマーは割り込みじゃなくてコールバック。
詳しくは知らないが、>>995みたいなビジーループ回してるんじゃないかな?
999 :デフォルトの名無しさん:2005/11/13(日) 23:46:03
>>997
で、あなたの反論は?
1000 :デフォルトの名無しさん:2005/11/13(日) 23:47:20
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <こいつら最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___ ̄\ /
    (_ノノノ│
       ∪
1001 :1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。