Win32API質問箱 Build88

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやHなお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!

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

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

- Win32API質問箱 wiki
http://wiki.livedoor.jp/program1/d/FrontPage

Win32API質問箱 Build87
http://pc12.2ch.net/test/read.cgi/tech/1269739438/

NullPointerExceptionを「ぬるぽ」と呼ぶスレ5
http://pc12.2ch.net/test/read.cgi/tech/1269551404/
2デフォルトの名無しさん:2010/05/27(木) 17:43:03
3デフォルトの名無しさん:2010/05/27(木) 17:43:12
60 ttp://pc11.2ch.net/test/read.cgi/tech/1196874830/
59 ttp://pc11.2ch.net/test/read.cgi/tech/1194701996/
58 ttp://pc11.2ch.net/test/read.cgi/tech/1191781463/
57 ttp://pc11.2ch.net/test/read.cgi/tech/1189255282/
56 ttp://pc11.2ch.net/test/read.cgi/tech/1186989201/
55 ttp://pc11.2ch.net/test/read.cgi/tech/1184853465/
54 ttp://pc11.2ch.net/test/read.cgi/tech/1181645965/
53 ttp://pc11.2ch.net/test/read.cgi/tech/1178882828/
52 ttp://pc11.2ch.net/test/read.cgi/tech/1176828891/
51 ttp://pc11.2ch.net/test/read.cgi/tech/1174416295/
50 ttp://pc11.2ch.net/test/read.cgi/tech/1171721448/
49 ttp://pc10.2ch.net/test/read.cgi/tech/1168708801/
48 ttp://pc10.2ch.net/test/read.cgi/tech/1166172047/
47 ttp://pc8.2ch.net/test/read.cgi/tech/1163375772/
46 ttp://pc8.2ch.net/test/read.cgi/tech/1159158014/
45 ttp://pc8.2ch.net/test/read.cgi/tech/1156032806/
44 ttp://pc8.2ch.net/test/read.cgi/tech/1151501925/
43 ttp://pc8.2ch.net/test/read.cgi/tech/1148005509/
42 ttp://pc8.2ch.net/test/read.cgi/tech/1144962549/
41 ttp://pc8.2ch.net/test/read.cgi/tech/1141392216/
40 ttp://pc8.2ch.net/test/read.cgi/tech/1138893959/
39 ttp://pc8.2ch.net/test/read.cgi/tech/1136673250/
38 ttp://pc8.2ch.net/test/read.cgi/tech/1133798345/
37 ttp://pc8.2ch.net/test/read.cgi/tech/1131884991/
36 ttp://pc8.2ch.net/test/read.cgi/tech/1128951330/
35 ttp://pc8.2ch.net/test/read.cgi/tech/1125850096/
34 ttp://pc8.2ch.net/test/read.cgi/tech/1122723009/
33 ttp://pc8.2ch.net/test/read.cgi/tech/1120153520/
32 ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/
31 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
4デフォルトの名無しさん:2010/05/27(木) 17:43:20
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
51:2010/05/27(木) 17:45:32
自分で張っといて何だけど、過去スレリンクもう要らないんじゃない?
>>1の前スレリンクあれば過去スレはたどれるんだし、ピンポイントであの過去スレが読みたい
なんて人いないでしょ?
6デフォルトの名無しさん:2010/05/27(木) 17:47:59
wikiにも過去スレのリンクあるしね。
無くてもいいとは思う
7デフォルトの名無しさん:2010/05/27(木) 17:50:32
そういう事は前スレで提案しなさいよ!
81:2010/05/27(木) 18:03:27
>>7
貼り終わった後に思ったんだ、すまん。
9デフォルトの名無しさん:2010/05/28(金) 18:54:42
プッシュボタンを押すapiはありますか?
例えば
push(A);でAボタンが押されるみたいな
10デフォルトの名無しさん:2010/05/28(金) 20:27:14
ありますん
11デフォルトの名無しさん:2010/05/28(金) 21:35:41
>>9
SendMessage
12デフォルトの名無しさん:2010/05/28(金) 21:50:30
findwindowを使ってウインドウハンドルを取得しているんですが、
タイトルバーのないウインドウハンドルを取得するにはどうしたらいんでしょうか?
13デフォルトの名無しさん:2010/05/28(金) 22:24:13
>>12
クラス名指定
14デフォルトの名無しさん:2010/05/28(金) 22:32:36
>>13
特定のソフトにしかないと思ってたんですが、
クラス名を調べられるソフトがあるんですね。ありがとうございます
15デフォルトの名無しさん:2010/05/29(土) 00:13:37
SPY++ってのがあってだな。
16デフォルトの名無しさん:2010/05/29(土) 02:43:55
二次関数みたいな散布図のグラフを描画したいのですが
SetPixel関数だと小数や負の値に対応できず困っています
こういったグラフを描画する場合にはどのような手法が
一般的に用いられているのでしょうか?
17デフォルトの名無しさん:2010/05/29(土) 03:04:16
-100〜100を0〜200にするとか

0〜100.00を0〜10000にするなどあるだろ。
18デフォルトの名無しさん:2010/05/29(土) 09:29:03
ヘッダーファイルに以下のプロトタイプ宣言を記述したいのですが

void start(HWND hwnd);

'HWND' : 定義されていない識別子です。と出てきてしまいます。
これはどうすればコンパイルできるようになりますか?

19デフォルトの名無しさん:2010/05/29(土) 09:31:51
typedef HWND int
20デフォルトの名無しさん:2010/05/29(土) 09:45:15
そういう問題じゃないような気がするがどうでもいいか
21デフォルトの名無しさん:2010/05/29(土) 09:50:30
windows.h をインクルード。
22デフォルトの名無しさん:2010/05/29(土) 10:03:27
>>19-21
ありがとうございます
windows.hをヘッダーにインクルードすると
.obj で定義されています。というエラーが出てしまいました・・・
2322:2010/05/29(土) 10:12:35
解決しました
みなさんありがとうございました
24デフォルトの名無しさん:2010/05/29(土) 12:50:52
>>15
そんなツールがあったんですね。
ありがとうございます!
25デフォルトの名無しさん:2010/05/29(土) 17:14:31
指定したファイルがリネーム可能な状態かどうかの判定ってできるかな?
26デフォルトの名無しさん:2010/05/29(土) 17:39:53
>>25
if(MoveFile("a","a")){

}
27デフォルトの名無しさん:2010/05/29(土) 19:03:31
なんと!
28デフォルトの名無しさん:2010/05/30(日) 00:25:41
CreateProcessする時の環境変数を、親プロセスから引き継がずに自前で用意しようとしています。
その中身として、システムのプロパティの詳細設定で設定したものを使いたいのですが、
Win32APIやShell32あたりで取得する方法はないでしょうか?
または、システムのプロパティの環境変数の設定が行われたら即座に親プロセス側の環境変数を
連動して変更するようにすることは可能でしょうか?
29デフォルトの名無しさん:2010/05/30(日) 01:35:37
>>28
前者はSetEnvironmentVariable
後者は変更してくれというメッセージを親プロセスに送る
30デフォルトの名無しさん:2010/05/30(日) 08:26:04
乗り遅れたけど全スレのRichEditの問題って解決した?
RICHED20Aに対してEM_GETLINEやるとどうも尻切れする。
len = SendMessage(handle, EM_GETLINE
で返されるlenがどうも常にUnicodeの文字数になる。マニュアルにはTCHARs copiedって書いてあるんだが。
EM_LINELENGTHでも同じ。
31デフォルトの名無しさん:2010/05/30(日) 09:08:39
>>30
RichEditは知らないが、通常のエディットボックスでビジュアルスタイルを使うと
ANSI版だろうが、Unicode版の動作するという問題あるよな。
3230:2010/05/30(日) 09:20:26
RICHEDIT20Aもビジュアルスタイルの影響を受けるみたいだな。
http://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+200510/05100004.txt
33デフォルトの名無しさん:2010/05/30(日) 09:57:37
おお、ありがとう。ビジュアルスタイルについて調べてみます。
34デフォルトの名無しさん:2010/05/30(日) 11:37:09
32x32より大きいアイコンをexeやdllから抽出するにはどうすればいいですか?
35デフォルトの名無しさん:2010/05/30(日) 11:38:55
>>29
ありがとうございます。ちょっとやりたかったことと違いましたが、後者はWM_SETTINGCHANGEだとわかりました。
その後の調査でRegenerateUserEnvironment という未公開APIを見つけたのでこれを使うことにしました。
36デフォルトの名無しさん:2010/05/30(日) 17:12:39
37デフォルトの名無しさん:2010/05/31(月) 00:10:15
>>36ありがとうございます。今度やってみます
38デフォルトの名無しさん:2010/05/31(月) 15:00:43
メニューバーの名前で(&文字)と書くことでAlt+文字を押すことでメニューを開けると思うのですが、
一般的なプログラムのように同時に押せば開くようにするにはどのようにすればいいのでしょうか?
現状ではAltキーをいったん話してメニューにフォーカスが合ってからでしか動作しません。
39デフォルトの名無しさん:2010/05/31(月) 15:02:41
timeBeginPeriod() で設定した値はシステム全体に影響するようなのですが、
今いくつに設定されているのかを知る方法はありますか ?
また、どのプロセスが設定しているのかを知る方法はありますか ?
教えて下さい。
40デフォルトの名無しさん:2010/05/31(月) 18:03:04
('д`)えー
41デフォルトの名無しさん:2010/05/31(月) 18:36:51
現在ShellExecuteでURLを起動しているのですが、これをCreateProcessに置き換えなければいけなくなりました
そこで、既定のブラウザで起動できるようにURL形式の文字列をブラウザのパス(および引数)にしたいのですが、そんなAPIはありませんか?
42デフォルトの名無しさん:2010/05/31(月) 18:50:34
ShellExecute
43デフォルトの名無しさん:2010/05/31(月) 19:04:35
44デフォルトの名無しさん:2010/05/31(月) 19:05:01
Windows7だと何かGetKeyStateが正しく返ってこない
それかキーの認識が異常に遅いんだが・・・
これに変わって押されてるキーを識別するAPI教えてください
45デフォルトの名無しさん:2010/05/31(月) 19:05:54
>>38
アクセレーター メニュー
とかで検索
46デフォルトの名無しさん:2010/05/31(月) 21:45:05
>>45
ありがとうございます。
ですが、知りたいのはメニューバー内にあるコマンドのアクセレータではなく、
メニューでファイル(&F)となっている時にAltと同時にFを押すことによってドロップダウンさせる方法です
47デフォルトの名無しさん:2010/05/31(月) 22:18:27
くだらない質問なのですが、
DLL_PROCESS_ATTACHにてアタッチされた際に
GetProcessHeap()を呼ぶとエラーが返されてしまうのですが、
上記が発生してしまう原因と回避方法を教えていただきたいです。


よろしくお願いします。
48デフォルトの名無しさん:2010/05/31(月) 22:20:46
>>46
エディットコントロールにフォーカス入ってると Alt+F がエディット側に喰われて親に届いてないくさい
Alt↓ ↑ F で親のメニュー側にフォーカスされて 配送されてるっぽいが…
フォーカスを掴んでるコントロール次第じゃねーかな? (親に送ってるかどうか?)
49デフォルトの名無しさん:2010/05/31(月) 23:32:54
ウインドウ作成中のウインドウメッセージはWM_CREATEですが、
ウインドウ作成後のウインドウメッセージなんてものはあるのでしょうか。
また、無ければ代替案を教えてください。
50デフォルトの名無しさん:2010/05/31(月) 23:44:40
WM_CREATEは作成後だろ。
単にAPIから戻る前に投げられるというだけで。
51デフォルトの名無しさん:2010/06/01(火) 00:11:24
クライアント領域が無いという意味では WM_NCCREATE のほうが先に届く
もっと先には WM_GETMINMAXINFO が飛んできたり…

サブクラス化するにしても(WM_CREATEが実質来ないということに注意する程度で)
あまり気にしたことはないが、CreateWindow(Ex) 帰還後、真っ先に届くのはケースバイケースかなぁ
52デフォルトの名無しさん:2010/06/01(火) 01:29:39
色々来てたような気はするが、ウィンドウプロシージャの先頭に
TRACEでも置いておけば何が来てるかくらい調べられると思うが
53デフォルトの名無しさん:2010/06/01(火) 08:29:59
WM_CREATEハンドラからWM_APPをポストする。
54デフォルトの名無しさん:2010/06/01(火) 11:13:02
>>44
WM_KEYDOWNとWM_KEYUPを監視して自分で管理
55デフォルトの名無しさん:2010/06/01(火) 20:44:00
IMEを利用して100文字くらい入力続けていると
入力途中でもWM_IME_COMPOSITIONが送られてしまうのですが仕様でしょうか
56デフォルトの名無しさん:2010/06/01(火) 21:51:29
>>55
メモ帳で試してみたら、むしろ一文字入力毎に送られてきたのだが。
環境はx64Win7+OfficeIME2010。
入力途中に送られてくるのが普通、位に考えておけば良いんじゃないか?
57デフォルトの名無しさん:2010/06/01(火) 23:00:04
すみません説明不足でした
入力途中にもかかわらず(確定していない)のに
GCS_RESULTSTRが含まれているんです。

58デフォルトの名無しさん:2010/06/01(火) 23:32:56
リソースでメニューバーを作成したときに
ウィンドウのリサイズすると、ちらつくのはどう対処すればいいの?
59デフォルトの名無しさん:2010/06/02(水) 00:20:19
>>57
MS-IMEには、ある程度以上長く入力すると、
操作とは無関係に初めの方から自動的に確定していく仕様があるのだが、
それじゃないか?
60デフォルトの名無しさん:2010/06/02(水) 10:50:47
Windows7だとGetPixelがすんごい遅いんですが
XPみたいにサクサクGetPixelする方法を教えてください
61デフォルトの名無しさん:2010/06/02(水) 10:53:39
Aeroを切る
62デフォルトの名無しさん:2010/06/02(水) 14:27:19
なあブタ共、ウィンドウハンドルから直接GetPixelする方法ってないか?
あったら教えろよブタ共
63デフォルトの名無しさん:2010/06/02(水) 14:35:03
直接という意味がDCを経由しないということなら無理
64デフォルトの名無しさん:2010/06/02(水) 16:00:47
そうですかありがとうございましたブタ野郎
65デフォルトの名無しさん:2010/06/02(水) 18:02:00
GUIプログラムになれていなんですけど
子ウインドウとかダイアログってマネージャークラスみたいなのが生成と破棄を管理すべき?
66デフォルトの名無しさん:2010/06/02(水) 18:22:45
67デフォルトの名無しさん:2010/06/02(水) 18:40:52
ごめんなさいスレ違いっぽいですね、皆様気にしないで下さい
68デフォルトの名無しさん:2010/06/02(水) 18:42:39
いや許さん
69デフォルトの名無しさん:2010/06/02(水) 19:48:05
MDIで、フレームウインドウを非表示、子ウインドウを表示と言った事は可能でしょうか。
70デフォルトの名無しさん:2010/06/02(水) 19:50:37
無理
親が非表示だと子も非表示なるよ
71デフォルトの名無しさん:2010/06/02(水) 20:02:31
回答有難うございます。
72デフォルトの名無しさん:2010/06/02(水) 21:41:39
やりたいこと:
・JNIを用いてWindows7のマルチタッチメッセージをJavaで拾いたい
 →とりあえずJavaのFrameクラスへのWM_TOUCH/WM_GESTUREメッセージを拾いたい

試したこと:
 JavaのFrameクラスのハンドルに対してRegisterTouchWindowを行い
・WH_CALLWNDPROCRET
・WH_GETMESSAGE
・WM_MOUSE_LL
あたりをSetWindowsHookExでフック

結果:
 WM_TOUCH/WM_GESTUREメッセージが拾えない
(マウスUP/DOWNメッセージやWM_PAINT/WM_NCHITTESTなんかは拾えている)

 調べてみたら、RegisterTouchWindowの戻りがFALSEになってて
 GetLastErrorでERROR_ACCESS_DENIEDが返ってきていた
(RegisterTouchWindowに渡すハンドルが正しいことは確認済み)
 →困った

……んなわけで、Windows7マルチタッチメッセージのフック方法が知りたいのです
 お解りの方教えてください
73デフォルトの名無しさん:2010/06/02(水) 21:45:08
まず、Javaじゃない普通のウィンドウにやってみればいいじゃん。
74デフォルトの名無しさん:2010/06/02(水) 21:47:02
The function fails with ERROR_ACCESS_DENIED if the calling thread does not own the specified window.

だってさ。
75デフォルトの名無しさん:2010/06/02(水) 23:33:20
WH_MOUSE_LLでマウスフックを試みている者です。
コールバック関数MouseHookProc()でwParamがWM_MOUSEMOVEだった場合、
メインウインドウにPostMessage()し、そこで座標などを計算し、
MessageBox()が表示される段階まで着ました。

が、MessageBox()を表示する処理が大変遅く感じられます。
改善策があれば教えてください。
76デフォルトの名無しさん:2010/06/03(木) 00:00:37
結果的に何がしたいの?
77デフォルトの名無しさん:2010/06/03(木) 00:08:50
>>76
SetCursorPos()でのカーソルの移動です。
78デフォルトの名無しさん:2010/06/03(木) 00:12:09
PostMessageは止めるべきだな。回数が多すぎる。
WH_MOUSE_LLの呼び出しコンテキストは
SetWindowsHookExの呼び出し元になるから、
とりあえずデータをメモリにため込んでいけばいいかと。
MessageBoxを表示するタイミングはよく判らないが、
そのタイミングでPostMessageを使って通知してやれば良いんじゃないか?
79デフォルトの名無しさん:2010/06/03(木) 00:27:05
>>78
>とりあえずデータをメモリにため込んでいけばいいかと。
この箇所を詳しくお願いできるでしょうか。
80デフォルトの名無しさん:2010/06/03(木) 00:50:43
>>77
それとMessageBoxはどう関係あるの?
何をしたいのかまったく分からん
81デフォルトの名無しさん:2010/06/03(木) 00:52:30
OKボタンの上にカーソル持っていきたいとかなら
CBTフック使えばいいんじゃね
82デフォルトの名無しさん:2010/06/03(木) 09:42:47
タスクマネージャで優先度を設定できますが
それをAPIでやる方法を教えてください
83デフォルトの名無しさん:2010/06/03(木) 09:57:20
できた。
おまえらってほんと糞の役にもたたねーゴミだなw
84デフォルトの名無しさん:2010/06/03(木) 10:15:52
SetPriorityClassとかなかったっけ
85デフォルトの名無しさん:2010/06/03(木) 10:58:05
非アクティブなウィンドウにキーを送る方法を教えてくれ
86デフォルトの名無しさん:2010/06/03(木) 11:21:13
sendmessage + WM_KEYDOWN
87デフォルトの名無しさん:2010/06/03(木) 11:31:32
>>86
それメモ帳で試してみたけど送れなかった、以下ソース
HWND handle = ::FindWindow( "Notepad", "無題 - メモ帳" );
::SendMessage( handle, WM_KEYDOWN, VK_F1, 0);
::SendMessage( handle, WM_KEYUP, VK_F1, 0);

何がダメか教えろ
88デフォルトの名無しさん:2010/06/03(木) 11:36:21
notepad.exe
89デフォルトの名無しさん:2010/06/03(木) 11:45:03
('д`)えーまじっすか
90デフォルトの名無しさん:2010/06/03(木) 11:50:24
ファイルハンドルやらプリンターハンドルからアプリ名を取得する方法はないかなぁー
最悪、アプリが保持してるハンドルの列挙からマッチングかけてもいいのだが
91デフォルトの名無しさん:2010/06/03(木) 11:51:06
>>87
Spy++で監視してF1押してみ
92デフォルトの名無しさん:2010/06/03(木) 13:58:51
('A`)マンドクセ
93デフォルトの名無しさん:2010/06/03(木) 17:07:47
>>80
きちんとフックが機能しているか確認する為にMessageBox()しています。
94デフォルトの名無しさん:2010/06/03(木) 17:19:05
なっとう
95デフォルトの名無しさん:2010/06/03(木) 17:20:48
もし素直にSpy++でメッセージを監視していればF1は
として処理されていると確認でき
対応法も自ずとわかっただろうに
96デフォルトの名無しさん:2010/06/03(木) 17:38:22
( ゚д゚)ポカーン
97デフォルトの名無しさん:2010/06/03(木) 19:20:18
>>93
フックプロージャー内でOutputDebugStringすれば十分では?
98デフォルトの名無しさん:2010/06/03(木) 19:33:13
>>93
LRESULT MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam){
if(nCode==HC_ACTION && wParam==WM_MOUSEMOVE){
MOUSEHOOKSTRUCT* mhs = (MOUSEHOOKSTRUCT*)lParam;
if( ... ){
SetCursorPos(x,y);
return TRUE;
}
}
return CallNextHookEx(hhk, nCode, wParam, lParam)
}
とか
#define WM_HKMOUSEMOVE WM_USER+0x100
LRESULT MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam){
BOOL skip=FALSE;
if(nCode==HC_ACTION && wParam==WM_MOUSEMOVE){
MOUSEHOOKSTRUCT* mhs = (MOUSEHOOKSTRUCT*)lParam;
skip=SendMessage(g_hwnd,WM_HKMOUSEMOVE,0,MAKELPARAM(mhs->pt.x,mhs->pt.y));
}
return (skip ? TRUE : CallNextHookEx(hhk, nCode, wParam, lParam));
}
MainProc
case WM_HKMOUSEMOVE:
{ int x=(short)LOWORD(lParam);
int y=(short)HIWORD(lParam);
if( ... ){
SetCursorPos(x,y);
return TRUE;
}
return FALSE;
}
99デフォルトの名無しさん:2010/06/03(木) 19:34:24
>>87
子のEditの方に投げてやるといいよ
100デフォルトの名無しさん:2010/06/03(木) 20:06:42
>>87
トップレベルのウインドウに投げても駄目だよ。
それはメモ帳の枠の部分にキーを入力してることになる。
メモ帳は枠+エディットコントロールのような構成だから
エディットコントロールにメッセージを送らないと駄目。

あと、WM_KEYDOWNはTranslateMessageに処理させないといけないので
SendではなくPostする。
101デフォルトの名無しさん:2010/06/03(木) 22:59:03
メニューバーを持ってるウィンドウで、メニューを操作中(カーソルキーでメニュー選択中)
かどうかを判断する方法はないですか。
フォーカスも変わらないしどうにも行き詰まってしまいました。
調べるほどメニューってどういうものなのかがわからなくなっていく。。。

102デフォルトの名無しさん:2010/06/03(木) 23:04:38
Spy++でメッセージ見てみればいいじゃん。
103101:2010/06/03(木) 23:11:01
補足ですが、
メニュー操作中というか、ALTを押してメニューを開いてる状態と言いますか、
メニューが開いているのでキーを押してもメッセージがウィンドウに通知されない
状態かどうかの判断です。
キーボードフックのコールバックからアクティブなウィンドウの状態を調べたいのです。
104デフォルトの名無しさん:2010/06/03(木) 23:14:23
他の方法もありそうだけど
WM_ENTERMENULOOP
WM_EXITMENULOOP
でフラグでも立てとけば?
105デフォルトの名無しさん:2010/06/03(木) 23:16:41
なんか勘違いしてるな。
106101:2010/06/03(木) 23:25:09
>> 104
試しにSendMessageをフックして共有メモリにメニュー表示中のウィンドウを保持してみます。
ありがとうございます。
107デフォルトの名無しさん:2010/06/03(木) 23:32:25
はいはい。がんばってね。
108101:2010/06/03(木) 23:41:50
ありがとう、いけました。
109デフォルトの名無しさん:2010/06/04(金) 07:53:07
ママ「Windowsとは何か。それは可食体か。」
110デフォルトの名無しさん:2010/06/04(金) 14:11:09
>>100
ありがとう参考になった。
ぶっちゃけキーを送りたいのは他のソフトだったんだけど
とりあえずメモ帳で試してみようとおもって。
メモ帳でやるならハンドルから更にExとかでエディットのハンドルを取ってやればいいのかな。
111デフォルトの名無しさん:2010/06/04(金) 14:57:30
HDCから幅と高さを取得する方法教えて
112デフォルトの名無しさん:2010/06/04(金) 15:06:39
かかってこい
113デフォルトの名無しさん:2010/06/04(金) 16:26:10
GetDeviceCaps(hdc,HORZRES)
GetDeviceCaps(hdc,VERTRES)
114デフォルトの名無しさん:2010/06/04(金) 16:30:20
>>113
ありがとうありがとう^^
115デフォルトの名無しさん:2010/06/04(金) 22:47:52
指定されたモジュールは見つかりませんって出るんですが、
これはどうやれば原因がわかるんでしょうか?

使ってるAPIはSHGetFileInfoです。
116デフォルトの名無しさん:2010/06/04(金) 22:58:40
あきらめろ。
117デフォルトの名無しさん:2010/06/05(土) 00:40:27
>>115
5番目の引数を確認すれ。
118デフォルトの名無しさん:2010/06/05(土) 15:33:16
windowsマシンでsjisの文字列をEUC-JPにC++から変換するAPIはありませんか?
WideCharToMultiByteは駄目でした。
119デフォルトの名無しさん:2010/06/05(土) 15:36:28
mlang.dll の ConvertINetString()
120デフォルトの名無しさん:2010/06/05(土) 16:58:30
WideCharToMultiByteでEUC-JPのコードページ番号を指定しても無理とな?
121デフォルトの名無しさん:2010/06/05(土) 16:59:55
>>120
0が帰ってきました。
122デフォルトの名無しさん:2010/06/05(土) 17:06:56
GetLastError()の返り値に手がかりがあるかもしれん
123デフォルトの名無しさん:2010/06/05(土) 18:09:33
>>121
EUC-JPのコードページは「20932」と「51932」のどっちを使った?
124デフォルトの名無しさん:2010/06/05(土) 18:40:57
51932です
125デフォルトの名無しさん:2010/06/05(土) 18:42:30
コードさらせよ。
126デフォルトの名無しさん:2010/06/05(土) 19:48:22
パクるんですね、わかります。
127デフォルトの名無しさん:2010/06/06(日) 06:22:42
WideCharToMultiByte
MultiByteToWideChar
は51932は使えんかった気が…

とりあえず、おいらは 上記のを使ってみて失敗したら mlang.dll の
ConvertINetUnicodeToMultiByte
ConvertINetMultiByteToUnicode
を使うようにしてる。

128デフォルトの名無しさん:2010/06/06(日) 13:07:28
TextOutでint型の変数の値を表示するにはどうすればできますか?
129デフォルトの名無しさん:2010/06/06(日) 13:10:24
数値を文字列に変換することから始めましょう
130デフォルトの名無しさん:2010/06/07(月) 00:41:45
TextOutにint方の数値を表示するにはどのようにすればよいですか?
131デフォルトの名無しさん:2010/06/07(月) 00:53:28
wsprintf
stringstream
132デフォルトの名無しさん:2010/06/07(月) 04:01:47
誰かプロパティシートを画面中央に表示させる方法を教えてもらえないでしょうか?
開始時のコールバックでSetWindowPosしてみたら、
一瞬OS規定の場所に表示されてから画面中央へ移動するので見苦しいのです。
133デフォルトの名無しさん:2010/06/07(月) 04:40:20
とりあえずソース張れ
WM_CREATEのときとかで動かしてるか?
134デフォルトの名無しさん:2010/06/07(月) 05:14:50
キーボード入力をフックで奪ったら
IMEにキー入力がいかなくなっちゃんだけどどうすればいい?
ごく一部のキーだけIMEから奪うようにしたい

奪った後にPostMessageでWM_KEYDOWNとWM_KEYUPを投げてるんだけどIMEは拾ってくれない
135デフォルトの名無しさん:2010/06/07(月) 07:27:16
コンテキストメニューにも種類がありますか?
メニューアイテムにアイコンを描画したんですが、メニューアイテムが小さすぎて16x16が半分位しか表示されません。

エクスプローラーのようなコンテキストメニューにするにはどうしたらいいんでしょうか?
136デフォルトの名無しさん:2010/06/07(月) 10:55:54
>>133
規制食らってて、携帯からなのでソース貼るのはちとしんどいです。

後から自分のソース見直したら、
PROPSHEETHEADER::pfnCallbackに渡したコールバックのタイミングで動かそうとしても動かなかったみたいです。
最初に表示されるページのWM_INITDIALOGのタイミングだと移動する事はするけど、一瞬本来の位置に表示されてからなのです。
(されずにすむときもある)
137デフォルトの名無しさん:2010/06/07(月) 11:14:50
まず服を脱ぎます
138デフォルトの名無しさん:2010/06/07(月) 19:16:38
音量を調整するapiを探しています。
waveOutSetVolumeではwave出力の音量を変更するかと思いますが、
一番左の主音量を変更するAPIはないでしょうか?
139デフォルトの名無しさん:2010/06/07(月) 19:20:27
140デフォルトの名無しさん:2010/06/07(月) 19:20:34
>>135
自力で描画する場合は高さを指定できたはず
141デフォルトの名無しさん:2010/06/07(月) 21:47:26
スレ違いかもしれんが教えてください
Windowsでファイル保存したときの日本語ファイル名って

・FAT32のLFNならばUTF-16LE
・FAT16/FAT32のSFNならばShift-JIS(CP932)

という理解でOK?
142デフォルトの名無しさん:2010/06/07(月) 21:48:35
たぶんNG
143デフォルトの名無しさん:2010/06/07(月) 22:08:37
>>140
SetMenuItemBitmapsを使ってるんですが、引数にそれらしいものはないんですが・・・
他にもAPIがあるんでしょうか?
144デフォルトの名無しさん:2010/06/07(月) 22:10:23
>>141
システムロケールも影響するからそうはならないはず
145デフォルトの名無しさん:2010/06/07(月) 22:12:40
CreateProcess で外部プログラムを起動するときに
隠しウィンドウで起動させたいのですが
それらしいオプションが見当たりません
どこをどうすればよいでしょう?
146デフォルトの名無しさん:2010/06/07(月) 22:14:30
>>145
STARTUP_INFO 構造体のメンバを見直してみ。
147デフォルトの名無しさん:2010/06/07(月) 22:17:35
ちょっと前にも見たなこの話題
148デフォルトの名無しさん:2010/06/07(月) 23:31:38
>>134
奪わないキーはCallNextHookEx呼べ
149デフォルトの名無しさん:2010/06/08(火) 01:31:45
>>141
日本語Windows上で日本語使っているならば、その通り
150デフォルトの名無しさん:2010/06/08(火) 16:00:13
rundll32.exe *.dll,* の形式で使いたいのですが、
任意のファイルを、関連付けされていない任意のアプリで開く
つまりファイルドロップや送るを再現するようなDLLはあるのでしょうか?

rundll32.exe url.dll,FileProtocolHandler は
関連付けされているアプリで開くことしかできませんでした
151デフォルトの名無しさん:2010/06/08(火) 16:51:41
APIの尻にあるAとかWってAが32BitでWが64Bitで使われてるという理解でいいんでしょうか?
152デフォルトの名無しさん:2010/06/08(火) 16:59:09
Aがshift_jisでWがunicode文字列を引数に取ります
153デフォルトの名無しさん:2010/06/08(火) 17:04:49
ANSI(A)とUnicode(W)
154デフォルトの名無しさん:2010/06/08(火) 19:41:30
>>150
ShellExecute
155デフォルトの名無しさん:2010/06/08(火) 19:58:47
>>143
WM_MEASUREITEM とかは送られてきてない?知らないけど
156デフォルトの名無しさん:2010/06/08(火) 20:41:41
リストビューで、32x32のアイコンと文字列を列挙しました。
次に同じリストビューで、アイコン無しの文字列を列挙する為、
ListView_DeleteAllItems()とListView_DeleteColumn()で項目を削除し、
maskをLVIF_TEXTのみで行ったのですが、
高さ32が保持されたままになってしまいます。

削除し足りない部分や、加えるべき動作を教えてください。
157デフォルトの名無しさん:2010/06/08(火) 20:51:15
>>143
そのAPIだと、チェックマーク代わりに使うビットマップを指定しているだけだろ。
MENUITEMINFO.hbmpItemに指定する方法でやれば良い。
158デフォルトの名無しさん:2010/06/08(火) 21:21:49
>>156
オーナードローをしてないのなら
ListViewと関連付けてるImageListの影響を受けてるはず。
159デフォルトの名無しさん:2010/06/08(火) 21:45:46
>>151
後学のためになぜそういう理解に至ったのか400字以内で教えてくれないか
160デフォルトの名無しさん:2010/06/08(火) 21:51:29
Windows9x系を知らないからじゃね?
そこら辺の歴史的経緯を知らないと、
ANSI/Unicodeで分かれている事を理解し辛いと思う。
161156:2010/06/08(火) 22:38:16
>>158
ImageList_Destroy()やImageList_RemoveAll()を試してみましたが、変化は見られませんでした。
162デフォルトの名無しさん:2010/06/08(火) 23:06:23
>>161
おそらく32x32でListView_SetImageList()したときのが残ってるんだろう。
なので、ListView_SetImageList(hwnd,NULL,LVSIL_SMALL);して
それでもダメなら、ダミーの小さいアイコンのImageListをCreate()してSetImageList()してやればいい。
163156:2010/06/08(火) 23:16:17
>>161
後者の方法で、

himl=ImageList_Create(1,1,ILC_COLOR,0,0);
ListView_SetImageList(hList,himl,LVSIL_SMALL);

の様にする事で解決しました。
ありがとうございます。
164141:2010/06/09(水) 04:04:21
【改】
スレ違いかもしれんが教えてください
Windowsでファイル保存したときのファイル名って

・FAT32ならばUTF-16LE
・FAT16ならば言語依存(2バイト文字ならばシフトJIS等)

という理解でOK?
165デフォルトの名無しさん:2010/06/09(水) 06:57:21
逆に聞きたいんだが
なぜファイル名の文字コードなんて気にするんだ?
166デフォルトの名無しさん:2010/06/09(水) 07:37:46
>>164
先にFAT16とVFATとFAT32の仕様を自分で調べてくる事を勧める。
その仕様に従って記録されるだけだ。
167デフォルトの名無しさん:2010/06/09(水) 07:39:09
>>159
>>160
今使ってるのがXpの64Bitなんで。
てっきりWの方を使われてるのはその所為だと思ってました。
168デフォルトの名無しさん:2010/06/09(水) 07:51:20
素人でx64版XP使っている奴なんているんだな。
何という茨の道……
169デフォルトの名無しさん:2010/06/09(水) 08:46:28
>>154
教えていただいてありがとうございました
この解釈は正しいのでしょうか?

rundll32.exeはdll各種を実行できる
shell32.dllのAPI関数の一つにShellExecuteがある
ShellExecuteはファイルドロップや送るに相当する動作を再現する
"rundll32.exe shell32.dll,ShellExecute 引数" の書式である

2000、XPにてファイル名を指定して実行、またはバッチファイルから実行で
書式を変えながら試行錯誤してましたが結局うまくいきませんでした
170デフォルトの名無しさん:2010/06/09(水) 08:47:58
以下は全滅でした
-------------------------------
rundll32.exe shell32.dll,ShellExecute (handle "open" test_ShellExecute.txt NULL NULL SW_SHOWNORMAL)
rundll32.exe shell32.dll,ShellExecute handle "open" test_ShellExecute.txt NULL NULL SW_SHOWNORMAL
rundll32.exe shell32.dll,ShellExecute handle, "open", test_ShellExecute.txt, NULL, NULL, SW_SHOWNORMAL
rundll32.exe shell32.dll,ShellExecute (handle, "open", test_ShellExecute.txt, NULL, NULL, SW_SHOWNORMAL)
rundll32.exe shell32.dll,ShellExecute (handle, "open", test_ShellExecute.txt, NULL, NULL, SW_SHOWNORMAL);
rundll32.exe shell32.dll,ShellExecute test_ShellExecute.txt
rundll32.exe shell32.dll,ShellExecute wordpad.exe
rundll32.exe shell32.dll,ShellExecute
rundll32.exe shell32.dll,ShellExecuteEX
rundll32.exe shell32.dll,ShellExecuteEXA

以下は動作しました(比較のために実験)
-------------------------------
マウスのプロパティのダイアログが現れる
rundll32.exe shell32.dll,Control_RunDLL main.cpl
ファイルを開くアプリケーションの選択 のダイアログが現れる
rundll32.exe shell32.dll,OpenAs_RunDLL
関連付けされているアプリからファイルが開く
rundll32.exe url,FileProtocolHandler test_ShellExecute.txt
ワードパッド起動
rundll32.exe url,FileProtocolHandler wordpad.exe
171デフォルトの名無しさん:2010/06/09(水) 09:30:17
>>169
思考錯誤するのではなくドキュメントを読みましょう。
ShellExecuteの第一引数はHWND
172デフォルトの名無しさん:2010/06/09(水) 09:39:06
>>171
MSのプロジェクトなんてドキュメント読んでその通りいかないことも多いからな
結局試行錯誤はつきまとうんだよ
173デフォルトの名無しさん:2010/06/09(水) 09:47:48
試行錯誤はドキュメント通りにやってうまくいかないときにやれよ
最初にドキュメント読まないのは問題外だろ…
174デフォルトの名無しさん:2010/06/09(水) 09:56:49
ワロタ
175デフォルトの名無しさん:2010/06/09(水) 10:01:03
>>172
それは日本語ドキュメントだけ読んでるからだよ。日本語版読むなとは言わないけど、
英語版との併読は必須。
176150:2010/06/09(水) 10:50:56
>>171
ドキュメントを漁るのも読み解くへたくそで困っちゃいますね
試局むきになって夜なべしたのに起動できずですよ・・・
試行錯誤しながらなんとかがんばります

http://msdn.microsoft.com/ja-jp/library/cc422072.aspx
http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx
http://support.microsoft.com/kb/224816/ja

http://chagdali.free.fr/dcs/RunDll.htm
http://hp.vector.co.jp/authors/VA022217/tips/hsp/rundll.html
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200312/03120003.txt
http://www.mmbforums.com/ipb/index.php?showtopic=20233
http://www.boot-land.net/forums/index.php?showtopic=158

このへんは読みましたが
>>169の理解は正しかったのでしょうか
177デフォルトの名無しさん:2010/06/09(水) 15:00:59
exeを暗号化して置いておいて違うプログラムで読み込んで戻し
そのままexeとして起動する事ってできるでしょうか?

それとも戻した所で一度書き出してCreateProcessみたいな感じにしかできませんか?
178デフォルトの名無しさん:2010/06/09(水) 15:15:18
>>177
ヨユーおk
179デフォルトの名無しさん:2010/06/09(水) 15:16:08
>>177
逆に余裕
180デフォルトの名無しさん:2010/06/09(水) 15:19:07
>>177
ファイルに書き出さずに実行することは技術的には可能。
ただし、当然ながらそんなものはAPIに用意されていないので、やるなら自分で
メモリ上に実行可能なイメージを構築する必要がある。

近いものに、実行ファイルを圧縮しておいて実行時に展開するソフトがある。
オープンソースでUPXとかあるから、参考になるかと。

ただし、UPXはウイルス等にもよく使われるので、UPXを使っているだけで
ウイルスと誤認されやすい。
181デフォルトの名無しさん:2010/06/09(水) 15:39:13
>>178 >>179 >>180
できるんですね、ありがとう!調べてみます!
182デフォルトの名無しさん:2010/06/09(水) 18:56:27
>>169
rundllについては
http://support.microsoft.com/kb/164787/ja
ここ読めば理解できるでしょ

> 2000、XPにてファイル名を指定して実行、またはバッチファイルから実行で
という事ならShellExecuteは必要ない
ShellExecuteはShellでコマンドを実行してくれるもの。
>ファイル名を指定して実行、またはバッチファイルから実行
はShellから直接実行しているのと同じなのでそのままコマンドを書けばいい
"C:\Program Files\Windows NT\Accessories\wordpad.exe" "filepath"
183デフォルトの名無しさん:2010/06/09(水) 19:06:47
WinMain関数の戻り値について質問です。

ttp://msdn.microsoft.com/ja-jp/library/cc364870.aspx
msdnでは
「関数がメッセージループに入る前に終了する場合は、0 を返してください。」
となっていますが、
以下のサイトでは

ttp://wisdom.sakura.ne.jp/system/winapi/win32/win19.html
0だったり
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win20.html
-1だったり、1だったりします。

実際のところ、どんな値でもイイけど、お約束的に0にしときましょう、ということなんでしょうか??
184デフォルトの名無しさん:2010/06/09(水) 19:19:56
個人サイトとMSDNのどっちを信用するんだ?
185183:2010/06/09(水) 19:26:45
>>184
ありがとうございました!
186デフォルトの名無しさん:2010/06/10(木) 10:34:39
PlaySound() でwavファイルを再生させていいるのですが、
Windowsのバージョンで、音が鳴らないとかありますか?
64bit環境で音がならないと言われたので、調査しているのですがビットレートとか関係するのでしょうか?
187デフォルトの名無しさん:2010/06/10(木) 10:50:25
あります。
ビットレートは関係ありません。
188デフォルトの名無しさん:2010/06/10(木) 15:01:41
>>177
createprocess自体をフックしといとて、そのEXE名が来た時に解凍して実行
189デフォルトの名無しさん:2010/06/10(木) 15:08:51
>>177
createprocessフックが嫌なら、エミュレートつくれ
190デフォルトの名無しさん:2010/06/10(木) 16:03:04
きえろぶっとばされんうちにな
191デフォルトの名無しさん:2010/06/10(木) 21:27:53
win7 64bitだけどアプリは32で作ってるからいいよね?
MCIをAPIレベルで使おうとしたらcoredll.dllもmmsystem.dllも無いんだけど
無くなったってこと?仕様が変わって別のものになったとか?
リアルタイムで音声の波形を取りたいから生のデータが欲しいんだけど
どうやればいいんだろう
192デフォルトの名無しさん:2010/06/10(木) 21:36:34
winmm.dllか、勘違いしてた
193デフォルトの名無しさん:2010/06/10(木) 22:05:22
とりあえずDirectSoundCapture使っとけば間違いない。
194デフォルトの名無しさん:2010/06/10(木) 22:43:36
MCIは変なデーター取りこぼしあるから、
DirectSound使った方がいいよ。
195デフォルトの名無しさん:2010/06/10(木) 23:10:47
196デフォルトの名無しさん:2010/06/11(金) 00:07:08
XAudio2 はキャプチャに対応してないからなあ。
197デフォルトの名無しさん:2010/06/11(金) 20:21:52
インターネットが一般に普及されてなかった頃って、センパイPGはどうやって勉強したの?
書籍が主なんだろうけれども、それこそ何十冊も読み漁るような毎日だったのでせうか?
198デフォルトの名無しさん:2010/06/11(金) 20:51:57
今だってネットにはろくな情報がない
199デフォルトの名無しさん:2010/06/11(金) 21:01:18
APIが数メガのヘルプファイルに収まる時代だったしな。
200デフォルトの名無しさん:2010/06/11(金) 21:03:12
本にも嘘はあったけどな
とりあえずそれっぽく書いてバグ出しまくればわからない所はわかるからなんとかなる
201デフォルトの名無しさん:2010/06/11(金) 21:03:40
教えてください

エディットボックスの入力カーソルの座標を取得したいんですが、
拾うことは可能ですか?
202デフォルトの名無しさん:2010/06/11(金) 21:10:19
うん。
203201:2010/06/11(金) 21:12:21
>>202
拾うためのAPI名を教えてください
204デフォルトの名無しさん:2010/06/11(金) 21:30:59
205デフォルトの名無しさん:2010/06/11(金) 22:01:06
>>200
勉強になります。とにかく書いて書いて書きまくってみます。
206デフォルトの名無しさん:2010/06/11(金) 22:09:51
VisualC++4.0付属のIDE上で参照可能な
Win32APIマニュアルが物凄く役立ったな。
俺はエロじゃなくてAPIマニュアルで英語を覚えたよ。
207デフォルトの名無しさん:2010/06/11(金) 22:21:58
大体、C MAGAZINE
208201:2010/06/11(金) 22:55:39
>>202
すいません、語弊がありました。

入力カーソルのエディットボックス上の描画座標が知りたいです。
カーソル位置にツールチップウィンドウを表示させたいんです。
RECTになるのかは分からないのですが、取得するAPIを教えてください。
209デフォルトの名無しさん:2010/06/11(金) 23:02:12
EM_POSFROMCHAR
210デフォルトの名無しさん:2010/06/11(金) 23:17:16
>>208
GetGUIThreadInfo
211デフォルトの名無しさん:2010/06/11(金) 23:28:17
思ったんですけど
ネットがない時代に10年15年かけて学んだセンパイには悪いんですが、
この時代、10年かけた知識が半年もあれば充分手に入ります
そこで質問です。あなたが現役なら今後、やはりJAVAに移行したほうが得策と思いますか?
212デフォルトの名無しさん:2010/06/11(金) 23:30:08
いや全然。
213デフォルトの名無しさん:2010/06/11(金) 23:30:23
はい
214デフォルトの名無しさん:2010/06/11(金) 23:32:28
移行とかいう言葉が出てくる不思議。全部やればいいじゃない。
215デフォルトの名無しさん:2010/06/11(金) 23:34:39
キャパシティ的に一杯一杯なんじゃないの?
216デフォルトの名無しさん:2010/06/11(金) 23:35:33
10年15年の知識なりが半年で学べるんなら、
この業界、初心者ばっかりのはずだけどなw
217デフォルトの名無しさん:2010/06/11(金) 23:37:23
現役なら言われるまでもなくJava使えるから
下らんことほざくな
218デフォルトの名無しさん:2010/06/12(土) 00:39:55
ネットは20年ぐらい前からあったでしょ
219デフォルトの名無しさん:2010/06/12(土) 01:42:53
Win32APIスレでJavaかよ
JNIでもやりたいのか?
220デフォルトの名無しさん:2010/06/12(土) 02:27:22
>10年かけた知識が半年もあれば充分手に入ります
知っているということと、実際に身に付いているということは別物
身に付けるためにはそれなりの年数や場数がいると思うけどな

>やはりJAVAに移行したほうが得策と思いますか
その開発にJAVAが向いていると思えばJAVAになる
客がJAVAでお願いと言ったら、もちろんJAVAになる
要は、自分がJAVAが得意であってもそれで開発できるとは限らんから
JAVAを学ぶことが適切であるとは一概には言えない
ただ、VCとJAVAの開発どちらが多いかと聞かれると、おそらくJAVA
だから、VCよりJAVAを学んだほうが仕事の面では多少有利かもしれない
221デフォルトの名無しさん:2010/06/12(土) 02:43:05
>>220
お前バカだろw
222デフォルトの名無しさん:2010/06/12(土) 02:43:06
貴重な意見ありがとうございました
こんな半端な小僧がでかい口聞いてすいませんでした
223デフォルトの名無しさん:2010/06/12(土) 08:21:30
>>211
スレタイ嫁バカ消えろ
224デフォルトの名無しさん:2010/06/12(土) 08:26:52
くだらんこと聞くなよほんとに
225デフォルトの名無しさん:2010/06/12(土) 09:50:56
GetTickCountってどっかのメモリの内容をコピーしてるだけの軽い関数って考えていいの?
それとももっといろいろやってる重い関数なんだろうか。
226デフォルトの名無しさん:2010/06/12(土) 10:09:32
_GetTickCount@0:
7C80934A BA 00 00 FE 7F mov edx,7FFE0000h
7C80934F 8B 02 mov eax,dword ptr [edx]
7C809351 F7 62 04 mul eax,dword ptr [edx+4]
7C809354 0F AC D0 18 shrd eax,edx,18h
7C809358 C3 ret
227デフォルトの名無しさん:2010/06/12(土) 13:22:12
>>225
規格で決まっているわけではないので、なんとも言えない。
とりあえず今の実装では、GetTickCountはむちゃくちゃ速い。
228デフォルトの名無しさん:2010/06/12(土) 13:34:00
>>226-227
ありがとう。
こういうのはデバッガで突入してみれば確認できるのね。
229デフォルトの名無しさん:2010/06/12(土) 16:57:07
>>226
これはひどい。乗算にシフトまでやってる無駄の多い関数だ。
GetCurrentProcessを見習うべき。

760c5f85: 83c8 ff OR EAX, -0x1
760c5f88: c3 RET
230デフォルトの名無しさん:2010/06/12(土) 22:58:17
そのうちGetCurrentFiberのようにマクロにされるんじゃね
231デフォルトの名無しさん:2010/06/12(土) 23:45:00
ChooseColor()で取得したrgbResultを、それぞれR、G、Bに分けるにはどのようにすれば良いでしょうか。
232デフォルトの名無しさん:2010/06/13(日) 00:11:04
GetRValue
GetGValue
GetBValue
233デフォルトの名無しさん:2010/06/13(日) 01:25:10
JAVAで作ったソフトよりAPIで作ったソフトのほうが速いね
でも汎用性悪すぎだし、これから学ぶものでもなさそうだな
過疎ってるところ見るとそんなの常識だろって言われそうだけど
234デフォルトの名無しさん:2010/06/13(日) 06:38:30
VC++で最近リソースを使い始めた者なのですが、
MAKEINTRESOURCE(IDR_GAME_SOUND_01001)
はIDR_GAME_SOUND_01001という整数値からリソース文字列へのポインタを
取得するマクロですが、IDR_GAME_SOUND_01001という整数値からでななくて、
"IDR_GAME_SOUND_01001"という文字列から、リソース文字列へのポインタを
取得する方法はございますでしょうか。

ググっても方法を発見できず困っております。
ご存知の方がいましたら、教えていただけないでしょうか。
よろしくお願いします。
235デフォルトの名無しさん:2010/06/13(日) 07:24:29
リソースIDを数値じゃなく文字列で定義すればいいだけじゃね?
236234:2010/06/13(日) 08:03:09
>>235
すみません。初歩的なことかも知れないのですが、
リソースIDを文字列で定義する方法がわかりません。
▼▼▼
【proc.rc】
// WAVE
//

IDR_GAME_SOUND_01001 WAVE "K:\\41_開発\\wav_play_test\\wav\\rush_crash.wav"

【resource.h】
#define IDR_GAME_SOUND_01001 131

【ソース】
HRSRC hResource = FindResource(
NULL,
MAKEINTRESOURCE(IDR_GAME_SOUND_01001),
"WAVE"); // リソースを探す
HGLOBAL hWavResource = LoadResource(NULL, hResource );
LPVOID lpWav = LockResource( hWavResource );
PlaySound( (LPCTSTR)lpWav, NULL, SND_MEMORY | SND_ASYNC | SND_LOOP);
▲▲▲
上記のソースで期待した動きをするのですが、「MAKEINTRESOURCE(IDR_GAME_SOUND_01001)」を
リソースID直打ちではなくて、文字型の変数を使いたいです。
237デフォルトの名無しさん:2010/06/13(日) 09:10:48
>>236
何が不満なのか理解不能だが
#define IDR_GAME_SOUND_01001 131
をコメントアウトして
"IDR_GAME_SOUND_01001"とか
_T("IDR_GAME_SOUND_01001")で呼べばいけんじゃないかな
238234:2010/06/13(日) 10:04:22
>>237
ありがとうございます。
おかげさまで解決しました。
resource.h の #define IDR_GAME_SOUND_01001 131 をコメントアウトして、
ソースの
HRSRC hResource = FindResource(
    NULL,
    MAKEINTRESOURCE(IDR_GAME_SOUND_01001),
    "WAVE"); // リソースを探す
の MAKEINTRESOURCE(IDR_GAME_SOUND_01001) を "IDR_GAME_SOUND_01001" に
変更すると理屈はよくわかりませんが上手く動きました。

VSの統合開発環境で、リソースにwavファイルを普通にインポートした後に、
resource.h に自動に作成される #define 文を削除しなければいけないのは
正直、気持ち悪いです。このやり方が一般的なんでしょうか。
239デフォルトの名無しさん:2010/06/13(日) 10:26:36
IDE上のリソースIDを定義する箇所で、
ダブルクォートで囲んだ文字列を指定できるだろ。
ちなみに、一般的にはリソースIDにわざわざ文字列なんか使わない。
240デフォルトの名無しさん:2010/06/13(日) 12:27:07
たまにリソースIDは16ビットと決めつけてるプログラムがあるんだよな。
241デフォルトの名無しさん:2010/06/13(日) 13:37:23
当方windows7環境ですが、多くのアプリケーションのウィンドウは外枠が5ドット程度ありますが、
時々1ドット程度の非常に細い外枠を見ることがあります
こういうウィンドウを作りたいんですが、CreateWindowのウィンドウスタイルで変えられるんでしょうか?
いろいろ試したんですが今のところ太い外枠にしかなりません
242デフォルトの名無しさん:2010/06/13(日) 14:43:15
WM_NCCALCSIZEとDwmExtendFrameIntoClientAreaで
あともう一寸だけ頑張る、って感じだったかと。
クライアント領域にフレームの描画を持ち込むだけだから、
WM_NCHITTESTとかも対応しないと駄目なんだろうなあ。
243デフォルトの名無しさん:2010/06/13(日) 14:53:10
vb.netから非アクティブなウィンドウを操作しようとして

Call sendMessage(web.Handle, WM_KEYDOWN, Keys.Tab, Keys.Tab)
Call sendMessage(web.Handle, WM_KEYDOWN, Keys.Tab, Keys.Tab)
Call sendMessage(web.Handle, WM_KEYDOWN, Keys.Enter, Keys.Enter)

と2つある入力領域をタブで飛ばして3つ目にあるボタンを押そうとしたら
タブはうまく動いているようですが、エンターキーが押せませんでした。
vb.netのsendkeyで画面をアクティブにしてやってみるとボタンは押せます。
sendmessageの代わりにpostmessageでもダメでした。

入力領域、ボタンはhtmlで作成し、webブラウザで読み込んでテスト
しています。

原因は何にあるのでしょうか。enterの代わりに入力領域に文字を送ってみても
送信されませんでした。
244デフォルトの名無しさん:2010/06/13(日) 15:13:49
Enterはシステムが横取りしてIDOKに変換してんだろ
245デフォルトの名無しさん:2010/06/13(日) 16:00:55
ブラウザの方でアクティブ・非アクティブ時の動作が違うだけじゃないのか?
246デフォルトの名無しさん:2010/06/13(日) 16:05:49
誤爆スマソorz
247デフォルトの名無しさん:2010/06/13(日) 16:06:58
PostMessageAのWM_CLOSEって中はどんな処理してんの?
248デフォルトの名無しさん:2010/06/13(日) 16:09:31
ノミ spy++
249デフォルトの名無しさん:2010/06/13(日) 16:23:17
AllocConsole()の終了処理は何もしなくてもよいのでつか?
例えば、プログラム終了時にFreeConsole()を呼ぶ必要はありませぬか?
250243:2010/06/13(日) 16:31:54
>>244,>>245さんありがとうございます。
と、いうことはsendmessageを用いて非アクティブ状態のウィンドウに対して
エンターキーを押す。という動作は実現できないということでしょうか?orz

実際に操作したいのはflash上に乗ってるボタンでして、アクティブになってる
時にはキーボードからタブキー、エンターキーで操作できたので、何らかの
方法でエンターキーを押せると思ったのですが、無理なのでしょうか。

一瞬ウィンドウをアクティブにして、sendkeyで対応するしかないのかなぁ。
251デフォルトの名無しさん:2010/06/13(日) 16:36:18
>>250
Flashかよ。それはFlashの仕様にもよるだろうな。
あとさ、キーボードの操作はDOWNだけじゃないだろ
DOWN→CHAR→UPとくるでしょSpy++とか使ってみた?
252243:2010/06/14(月) 12:24:30
>>251さんありがとうございます。
vs2008expressなんでspy++がなくて、uispyも
探してみたのですが見つからず、暗闇の中を
手探り状態ですorz
253デフォルトの名無しさん:2010/06/14(月) 12:39:35
ボタンを押すだけならスペースキーでも飛ばせば?
254デフォルトの名無しさん:2010/06/14(月) 15:43:24
VC++でテキストファイル「script.txt」をリソースに組み込んで、
ファイルにアクセスするかのように読み出したい(例えば:fgets関数)
のですが、何かよい関数(方法)は、ございますでしょうか。

【テキストファイル】script.txt
【リソースに組み込み】"IDR_GAME_SCRIPT"

それとも下記のように先頭ポインタを取得して
fgetsを自作するしかないのでしょうか。
----------------
  HRSRC hRsrc = FindResource(
    NULL,
    "IDR_GAME_SCRIPT",
    "TXT"); // リソースを探す
  HGLOBAL hGlobal = LoadResource(NULL, hRsrc); // リソースのロード
  void *ptr = LockResource(hGlobal); // データへのポインタ取得
//SizeofResource(NULL, hRsrc)
----------------

よろしくお願いします。
255デフォルトの名無しさん:2010/06/14(月) 15:44:50
STLのstringに突っ込んで改行で分割でもしてろカス
256デフォルトの名無しさん:2010/06/14(月) 15:57:31
テンポラリを作ってそこから読み出せば?
257254:2010/06/15(火) 00:49:32
>>255-256
ありがとうございます。
結局、fgets関数に似たものを自作してfgetsを置き換えました。
テンポラリファイルに書き出す方法は、ゲームなので一瞬でも
ユーザーが見える場所にファイルを置けないため、採用しませんでした。
258デフォルトの名無しさん:2010/06/15(火) 00:59:36
ユーザーに弄らせたくないならリソースファイルに格納してる時点でダメだろ。
259254:2010/06/15(火) 01:18:53
>>258
普通のユーザーはリソースを見ないと思います。(私の古い偏見。)
コアなユーザーには見られてもしかたないと思っています。
260デフォルトの名無しさん:2010/06/15(火) 01:22:00
exeからどうやってリソースファイル見れるの?
261254:2010/06/15(火) 01:32:35
>>260
visual studioでexeファイルを開けば、普通に見れます。(画像とか音声ファイルとか)
有料でもいいからexeファイルごと実行可能の状態のままで暗号化するソフトはないのかな?
262デフォルトの名無しさん:2010/06/15(火) 01:43:23
ライトユーザーから隠すだけなら、データを全ビット反転するだけでも十分に暗号化したことになる。
この程度ならマシンパワーも必要ないし、すぐ自作できるだろ。
263デフォルトの名無しさん:2010/06/15(火) 01:57:28
>>261
うあはw丸見えじゃないすかw
リソースファイル化すれば安全だと思って改造のしやすさという利便性を捨ててまで
リソース化頑張ってたのにマジ意味ねーwもうリソースファイル使わねえw
264デフォルトの名無しさん:2010/06/15(火) 02:08:11
何かいきなり低レベルな話始まっててワロス
265デフォルトの名無しさん:2010/06/15(火) 02:23:20
API関係ないし
266デフォルトの名無しさん:2010/06/15(火) 09:13:31
>>261
>有料でもいいからexeファイルごと実行可能の状態のままで暗号化するソフトはないのかな?
それやるとセキュリティソフトにウィルス扱いされることが多々あるけど、
それでも良ければUPXとかある
267デフォルトの名無しさん:2010/06/15(火) 21:48:33
ライトユーザー対策ならzlibで圧縮でもしとけば一石二鳥じゃん。
268デフォルトの名無しさん:2010/06/16(水) 04:32:02
ライトユーザー対策なら何もしなくていいよw
269デフォルトの名無しさん:2010/06/16(水) 17:41:18
リソースに埋め込むのか、コードに埋め込んでも変わらんような気がしないでもない
270デフォルトの名無しさん:2010/06/16(水) 17:48:28
普通にXORするだけで一般の人は読めなくなる。
271デフォルトの名無しさん:2010/06/16(水) 19:31:13
一般向けのプロテクトならファイルの拡張子を独自の物にするだけで十分すぎる
272デフォルトの名無しさん:2010/06/18(金) 17:16:39
VS2005使ってます。
デバッグ時にDLLのシンボルが読み込まれないんですけど、なぜでしょうか?
dllの中身をみてもpdbファイルのパスは合っていて問題は無いように思われます。
273デフォルトの名無しさん:2010/06/18(金) 22:10:22
ExtractIconExで取得したアイコンを描画すると、絵の周りに黒ずみができるんですが、
これってどうやればきえるんでしょうか?
274デフォルトの名無しさん:2010/06/18(金) 22:17:40
そのこさんに美白のアドバイスを受ける
275デフォルトの名無しさん:2010/06/18(金) 22:38:52
背景を白にする
276デフォルトの名無しさん:2010/06/19(土) 21:37:48
メインウィンドウに関連付けたツールチップを表示すると
既に表示してるモードレスダイアログの下に表示されてしまうんだが、解決策ないかな?
277デフォルトの名無しさん:2010/06/19(土) 22:00:39
>>276
予めSetWindowPosでHWND_TOPMOSTにしておくのを忘れている、とか?
278デフォルトの名無しさん:2010/06/20(日) 08:59:49
>>277
ツールチップをTOPMOSTにするって事かな?
試して見ます
279デフォルトの名無しさん:2010/06/20(日) 16:27:47
SetWindowPosを別のスレッドから呼びたいんですけど、
送りつける先でまだ準備が出来ていないらしいので、この関数を直呼びじゃなくて、
PostMessageしたいと思います。
このときに送るメッセージってなんでしょうか?
WM_SIZEとか?
280デフォルトの名無しさん:2010/06/20(日) 16:57:08
Spy++
281デフォルトの名無しさん:2010/06/20(日) 19:30:21
アプリ内で完結するメッセージなんだから、好きなメッセージを使えばいい。
WM_APP〜0xBFFF辺りを適当に割り当てておけば問題ないだろ。
282デフォルトの名無しさん:2010/06/21(月) 10:59:34
準備できてるかどうかイベントでも使って通知しておけば?
283デフォルトの名無しさん:2010/06/21(月) 11:15:52
スレッド間で通信す(ry
284デフォルトの名無しさん:2010/06/21(月) 12:47:28
外部プロセスのスレッドを指定して例外を起こしたいです
今はSetThreadContextを使ってeipを0にして例外を発生させてるのですが
ほかに方法はありますか?
285デフォルトの名無しさん:2010/06/21(月) 12:57:55
Vista以降のOSでIMEがTSFかIMM32かを区別する方法はありますか?
286デフォルトの名無しさん:2010/06/21(月) 20:35:36
>>284 asm( "cli" ) とか
287284:2010/06/22(火) 17:31:33
それだと自スレッドにしか例外起こせません
288デフォルトの名無しさん:2010/06/22(火) 21:53:15
int ErrorNo = 0;
HFONT hFOnt;

hFont = (HFONT)SendMessage(hMain, WM_GETFONT, 0, 0);
ErrorNo = GetLastError();

とやると
・hFontにはなにも帰ってこない
・ErrorNoには120
が返ってくるのですが、どのあたりをしらべたらよいか、
またはどのようにして調べたらよいか、手掛かりをください。。。
289デフォルトの名無しさん:2010/06/22(火) 21:56:46
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200501/05010029.txt

>hWindowはトップウィンドウでしょうか?
>だとすると、自身でWM_SETFONT/WM_GETFONTのハンドラを書かなければなりません。
>DefWindowProcは、フォント管理してくれません

検索したら一発で来たぞ
290デフォルトの名無しさん:2010/06/22(火) 22:49:50
サブウィンドウをモードレスダイアログに変えたら
再描画する度に、画面のちらつきが酷くなったんだけど
ダイアログだと、WM_ERASEBKGND以外にも何か背景を初期化するメッセージとか来る?
291デフォルトの名無しさん:2010/06/23(水) 00:40:57
>> 289

どうもです。

hFont = (HFONT)SendMessage(GetDlgItem(hMain,IDC_EDIT1), WM_GETFONT, 0, 0);

とやっても結果は同じなんですが、これは
トップウィンドウだけでなく、トップウィンドウ上のコントロールも
ハンドラを自分で書く必要がある、ということでしょうか?
292デフォルトの名無しさん:2010/06/23(水) 01:05:29
>>288
そもそも「何も返ってこない」ってことはありえない。
0が返ってるというんだったら、その意味はちゃんと書いてある。
The return value is ... or NULL if the control is using the system font.

そもそも普通の実装だと、WM_GETFONTってのは単に
WM_SETFONTされたものを返すだけ。
どういう目的でGETFONTしようとしてるわけ?
293デフォルトの名無しさん:2010/06/23(水) 10:28:41
>> 292
根元的な問い掛けありがとうございます。すっかり目的を忘れてました。

もともとは次のようなソースを書いて、システムフォントを取得したかったのです。
ところがこれもErrorNoが120返ってきたので、WM_GETFONT使ってみたのでした。

int ErrorNo = 0;
HFONT hFOnt;

hFont = (HFONT)GetStockObject(SYSTEM_FONT);
ErrorNo = GetLastError();


根本原因は同じな気がしますが、何かヒントをいただければ幸いです。。。

294デフォルトの名無しさん:2010/06/23(水) 11:46:42
俺は良く GeyStockObject(DEFAULT_GUI_FONT) を使ってるが…
SYSTEM_FONT と微妙に違うんだろうな
295デフォルトの名無しさん:2010/06/23(水) 13:53:07
120ってnot support?
どんな環境何だろう
296デフォルトの名無しさん:2010/06/23(水) 18:53:38
そもそも関数の返り値は確認した?
hFontが0でなかったら、関数は成功しているんだから
GetLastErrorの値には何の意味もない。どこか別の場所のエラーが残ってるだけ。

まあ、SYSTEM_FONTもDEFAULT_GUI_FONTも過去の遺物だから
本当にnot supportedになったのかもしれないけど。
What are SYSTEM_FONT and DEFAULT_GUI_FONT?
ttp://blogs.msdn.com/b/oldnewthing/archive/2005/07/07/436435.aspx
297デフォルトの名無しさん:2010/06/23(水) 19:15:50
この場合、成否に関係なくGetLastErrorを見ること自体が間違っている、じゃね。
GetStockObjectとか失敗してもGetLastErrorでエラーコードが取得できるってMSDNに書いてないし。
298デフォルトの名無しさん:2010/06/23(水) 22:25:10
GetStockObjectが失敗してるなら呼んでる場所に問題ありそうだねぇ、どこだ?吐け!
299デフォルトの名無しさん:2010/06/23(水) 23:25:24
Vista以降でDEFAULT_GUI_FONT使っても、メイリオが返ってこないんだよな。
SystemParametersInfo(SPI_GETNONCLIENTMETRICS)を使うんだっけ。
300デフォルトの名無しさん:2010/06/23(水) 23:40:35
みなさま、いろいろありがとうございます。

>> 295

後だしじゃんけんでもうしわけない。
WindowsMobile(5.0,6.0) SDKです。
ただ、これらの関数がサポートされていることは確認済みなのです。。。


>> 296

ソースの通り、直前でGetLastErrorの戻り値を入れる変数を、
0にしているので、おそらく問題ないと思っています。


>> 297

上記のとおり、「何か」は取得できたようです。
それが正しい値になっているかどうか、は不明ですが。。。


>> 298

「呼んでる場所」とは具体的にどういうことでしょうか?
現在は、DlgProc()のなかで呼んでいます。そういうことでなくて?
301デフォルトの名無しさん:2010/06/23(水) 23:41:48
とりあえず、アンカーのつけかたくらい覚えろよ
302デフォルトの名無しさん:2010/06/23(水) 23:47:45
>>300
>「呼んでる場所」とは具体的にどういうことでしょうか?

どのメッセージ来たときに呼んでるの、の意で
303デフォルトの名無しさん:2010/06/24(木) 00:01:03
>>300
> ソースの通り、直前でGetLastErrorの戻り値を入れる変数を、
> 0にしているので、おそらく問題ないと思っています。

もうちょっとC/C++の勉強をした方がいい。
変数を0初期化していてもGetLastError()の戻り値で上書きされるから、受け変数の0初期化は全く意味が無い。
意図する動作を求めるなら、するべき事はSetLastError(0)だ。
304297:2010/06/24(木) 00:06:10
Mobileか。MobileのほうはGetStockObjectはGetLastErrorでエラー情報が取れるって書いてるな。
>>297は取り消し。
305デフォルトの名無しさん:2010/06/24(木) 00:20:19
>>300
> 上記のとおり、「何か」は取得できたようです。
それはどうでもいいからさっさとhFontが何だったか教えろ
GetLastErrorはあくまで「エラーがあった」ことを確認してから見るものだ
306デフォルトの名無しさん:2010/06/24(木) 10:36:16
Mobileかー
エミュレーターと実機で同じ?
307デフォルトの名無しさん:2010/06/24(木) 12:25:05
TouchDiamondだと何も問題はないな
TCHAR buf[1024];HFONT hfont[2];LOGFONT lf;
hfont[0] = (HFONT)SendMessage(hWnd, WM_GETFONT, 0, 0);
hfont[1] = (HFONT)GetStockObject(SYSTEM_FONT);
for (int i = 0; i < 2; i++){
 wsprintf(buf, TEXT("HFONT:%08x\n"), hfont[i]);OutputDebugString(buf);
 if (!hfont[i]) continue;
 if (GetObject(hfont[i], sizeof(lf), &lf)) {
  wsprintf(buf, TEXT("FACENAME:%s\n"), lf.lfFaceName);OutputDebugString(buf);
  wsprintf(buf, TEXT("HEIGHT:%d\n"), lf.lfHeight);OutputDebugString(buf);
 }
}
S21HTでの結果
HFONT:00000000
HFONT:00000011
FACENAME:Tahoma
HEIGHT:-24
308254:2010/06/24(木) 16:51:30
>>262
ありがとうございます。
全ビット反転で実装しました。

>>266
ご教示ありがとうございます。
ウィルス扱いされるのは嫌ですね。

>>267
ゲームを作って販売するので、ライセンスの問題が面倒かも。

>>271
wavデータの全ビット反転で時間が掛かっているようです。
最悪、拡張子だけ独自にしたいと思います。
309デフォルトの名無しさん:2010/06/24(木) 17:24:38
>>308
ヘッダだけ弄ればモウマンタイ
310デフォルトの名無しさん:2010/06/24(木) 17:54:28
VC++にてリソース機能を使い1データ数十MByteあるリソースデータを
「データ1個をメモリにロード → 使用 → 開放」して、
使用していないときはメモリにリソースを常駐させない設計を考えていました。
しかし、LoadResourceにてメモリに常駐したデータをFreeResourceで
開放できると思ったのですが開放されませんでした。

hRsrc = FindResource(
  NULL,
  res_nm,
  "DATA"); // リソースを探す
hGlobal = LoadResource(NULL, hRsrc); // リソースをグローバルメモリにロード
ptr = LockResource(hGlobal);     // データへのポインタ取得

FreeResource(hGlobal);        // リソースが開放されない

ヘルプにはWin32の場合は、
「ロードしたモジュールがアンロードされると自動的に解放されます。」
とあるのですが、ロードモジュールをアンロードする前に用が済めば
さっさと開放したいのです。

ロードモジュールをアンロードする前に強制的にメモリにロードされた
リソースを開放する方法をご存知の方がいらっしゃれば、
教えていただけないでしょうか。よろしくお願いします。
311デフォルトの名無しさん:2010/06/24(木) 17:58:44
どうせメモリマッピングで割り当てられてるだけだから
気にするだけ無駄
312デフォルトの名無しさん:2010/06/24(木) 20:05:29
文字列リテラルをfreeしたい、に近いぐらい気にすることが無駄
313デフォルトの名無しさん:2010/06/24(木) 20:22:25
初歩的な質問ですが、
CreateProcessでコンソールアプリを起動させたとき、
コマンドプロンプトの画面を表示させたうえで起動させることは可能でしょうか?
314デフォルトの名無しさん:2010/06/24(木) 20:24:56
CREATE_NEW_CONSOLE
315デフォルトの名無しさん:2010/06/24(木) 20:27:06
cmd.exe呼ぶだけじゃないの
わざわざ/cとかつけない限りは窓が残るはずだけど
316254:2010/06/25(金) 15:35:59
>>309
ありがとうございます。
@PNG(画像)ファイルは最初の8Byteのビットを反転する
AWAV(音声)ファイルは最初の12Byteのビットを反転する
で実装したいと思います。
317デフォルトの名無しさん:2010/06/25(金) 15:44:12
ただ反転するんじゃなくてXORテーブルを複数持って
XORするとレベルが少し上がる。
318310:2010/06/25(金) 15:46:25
>>311-312
>気にすることが無駄
絶対に気にしなければいけません。無視することはできません。
ゲームを作成しているのですが、絵と音のデータはリソースに登録しています。
リソースをLoadResourceした時点で、実メモリを消費します。
絵を一通り表示し音を一通り鳴らせば、全リソースはメモリに常駐し、
プロセスのメモリ使用量は250MByteに膨れあがります。
かなり低スペックのパソコンまで動作対象にするため、
ユーザーに空きメモリ250MByteなんてスペックは要求できません。
リソースを開放できれば、プロセスのメモリ使用量を25MByte程度に
抑えることができます。もし、リソースが開放できない場合は、
最終手段として、ゲーム中の絵と音をexeファイルとは別に持たなくてはいけません。

リソースは、LoadResourceするまで実メモリを消費しないという一見便利に
見えますが、使い終わったら開放できるという機能を併せ持たないと
使い物にならないもののように思います。

ロードモジュールをアンロードする前に強制的にメモリにロードされた
リソースを開放する方法をお伺いしておりますが、もしかして、
「不可能」というご回答なのでしょうか。
319デフォルトの名無しさん:2010/06/25(金) 16:03:53
>>318
>>311-312の意味理解してるか?
exeにリソースを埋め込んで実行した時点で
メモリ上にロードされるわけで…
メモリ上にロードしたくないっていうんならあんたの言う最終手段とやらを使わないと無理だよ
320デフォルトの名無しさん:2010/06/25(金) 16:19:46
だから、そこら辺はOSが勝手に管理するから無視しろって事。
実メモリが128MBでも各プロセスには4GBのメモリ空間が割り当てられるだろ。
321310:2010/06/25(金) 16:34:42
>>319
>exeにリソースを埋め込んで実行した時点で
>メモリ上にロードされるわけで…
僕も最初はロードモジュール(リソース付き)のロード時には、
exeファイルが丸ごとそのままメモリにロードされると思っていましたが、
実際にやってみると違う挙動をしました。
実際にはロードしてみると、リソース部はロードされませんでした。
LoadResourceの時点で初めてメモリにロードされました。

>メモリ上にロードしたくないっていうんならあんたの言う最終手段と
>やらを使わないと無理だよ
そんな気がしてきました。exeと同じフォルダにdataファルダを
作るというダサいことをしないといけないような気がしました。
dataファルダを隠蔽するためにインストーラーも使用しないといけないかも。

>>311-312の意味理解してるか?
>>311は、リソースはロードモジュールのロード時には、メモリに上がっており、
実メモリのリソースの先頭アドレスを返してくるだけと僕は解釈しました。

>>312は、リソースサイズが微小なものは、開放しなくていいじゃんと言っている
ように僕は解釈しました。

意味を理解してなかったらすみません。
322310:2010/06/25(金) 16:36:41
>>320
>そこら辺はOSが勝手に管理するから
残りメモリが少なくなった場合はOSが勝手に、リソースを開放してくれる
という認識であっていますでしょうか。開放されるタイミングが
わからないのは、かなり不気味なのですが。
323254:2010/06/25(金) 16:40:12
>>317
ありがとうございます。
PNG,WAVの他にテキストファイルがあって、
テキストファイルはファイル全体を暗号化します。
8ByteのXORテーブルを作って、繰り返し使い
暗号化したいと思います。
PNG,WAVもヘッダだけじゃなくて先頭から
何kByteか程暗号化したほうが安全かも。
324デフォルトの名無しさん:2010/06/25(金) 16:53:53
>>321
リソース部がロードされないってどうやって確認したんだ?
みるのはコミットサイズの方だぞ
325310:2010/06/25(金) 18:08:51
>>324
メモリ管理について、あまり詳しくないのですが、先ほど検証させていただきました。
コミットサイズというのは、Windowsタスクマネージャのコミットチャージ合計を見ればよかったのでしょうか。

用意したロードモジュール
@ロードモジュールサイズ 21.5MByte リソース20MByte LoadResourceでリソース10MByteをロード
Aロードモジュールサイズ 21.5MByte リソース20MByte リソースのロードはなし
Bロードモジュールサイズ  1.6MByte リソースなし

Windowsタスクマネージャにて
【ロードモジュール実行前】
PF使用量 457MB コミットチャージ合計 468668
【ロードモジュール実行時】
@PF使用量 485MB コミットチャージ合計 497544
APF使用量 473MB コミットチャージ合計 484888
BPF使用量 473MB コミットチャージ合計 484732

AとBの違いはロードモジュールサイズの違い。(リソースの有無)
ロードモジュールロード時の[PF使用量][コミットチャージ合計]は一緒。
@とAの違いはLoadResource実行の有無。
@のLoadResource実行時にはPF使用量は12MB増加、
コミットチャージ合計は13MB増加となり、
LoadResourceでロードした10MByteと整合性が取れます。
326デフォルトの名無しさん:2010/06/25(金) 18:37:06
>>325
タスクマネージャーなら
表示→列の選択でコミットサイズにチェック入れればプロセス個別に見れるでしょ
ブレークポイントでも張ってこの前後でのコミットのサイズみてみろよ
HRSRC hrs = FindResource(NULL, MAKEINTRESOURCE(IDR_TEST1), _T("TEST"));
HGLOBAL hg = LoadResource(NULL, hrs);
327デフォルトの名無しさん:2010/06/25(金) 20:33:40
1011 0101
(1011 xor 0101) (1011)
1110 1011

1110 1011
(1011) (1110 xor 1011)
1011 0101
328デフォルトの名無しさん:2010/06/25(金) 20:40:17
>>321
だからお前はメモリマッピングを理解してねえんだっつーの
329310:2010/06/25(金) 20:57:42
>>326
コミットサイズの意味がわからず調べました。
⇒コミットサイズとはアプリの正確なメモリ使用量
とのことでした。

>>325はWinXP SP2で計測しています。
開発環境はWinXP SP2にしか入っていませんし、
デバッグモードは実際の環境ではないのでリリースモードで計測しました。
下記タスクマネージャーにコミットサイズのあるWin7で計測した結果です。

@メモリ−プライベートワーキングセット 20,488k メモリ−コミットサイズ 35,096k
Aメモリ−プライベートワーキングセット 9,220k メモリ−コミットサイズ 19,472k
Bメモリ−プライベートワーキングセット 9,196k メモリ−コミットサイズ 19,416k

>コミットのサイズみてみろよ
結果から
1.ロードモジュールのロードの時はリソースはロードされない。
2.LoadResourceの時に初めてリソースがロードされる。
ということを実証したことになると思います。

>>326は何をおっしゃりたいのでしょうか。
330デフォルトの名無しさん:2010/06/25(金) 21:02:55
>>329
いいから開発環境でLoadResourceの前後にブレークポイント張ってみろ
メモリは1bitたりとも増えないから
>>325でコミットチャージの差を見ればメモリ上にexe全部ロードされてるって分かるだろ…
なぜこんなに理解力が無いんだ…
331310:2010/06/25(金) 21:19:26
>>330
ブレークポイントを置くデバッグ環境は特殊な環境で実環境とは異なるので
デバッグ環境の結果を鵜呑みにするのは危険だと思います。

>>325でコミットチャージの差を見ればメモリ上にexe全部ロードされてるって分かるだろ…
何を言っているのかわかりません。
>>325の結果は
Aロードモジュールサイズ 21.5MByte リソース20MByte リソースのロードはなし
Bロードモジュールサイズ  1.6MByte リソースなし
で、コミットチャージ合計に”違いが無い”ということが証明されています。
もし、ロードモジュールのロード時にリソースがロードされるのなら、
Aのコミットチャージ合計は、484888ではなくて+10MBの497544と表示されるはずです。
332デフォルトの名無しさん:2010/06/25(金) 21:30:31
リソースの対応するアドレス領域を調べて、
そこにVirtualFreeのMEM_DECOMMITをかけてやれば、
一応直ぐに実メモリを解放してやれるんじゃないか?
意味があるかどうかは知らないけど。
333デフォルトの名無しさん:2010/06/25(金) 21:30:32
>>331はLoadResource時にメモリに読み込んでもらわないと困るんだな…
もうそれでいいよバカに説明するのは疲れた…
334310:2010/06/25(金) 21:30:51
>>328
理解していません。よろしければ教えてくださらないでしょうか。
メモリマッピングでググってみると
「仮想アドレス空間を物理アドレス空間に対応づけることをメモリマッピングという」
と出てきました。

LoadResourceのヘルプを見ると
「指定されたリソースをグローバルメモリにロードします。」と書いてあります。
これは、グローバルメモリを確保してリソースからロードするという動きのことだと思います。
メモリマッピングだから何なのでしょうか。すみませんが、難しいと思いますが、
もう少し噛み砕いて説明していただけると幸いです。
335デフォルトの名無しさん:2010/06/25(金) 21:48:15
>>332
ためしにやってみたら失敗したな
アプリケーションが確保したメモリじゃないから当たり前だが
336デフォルトの名無しさん:2010/06/25(金) 22:52:29
>>334
だから、気にしなくて良いって言ってんだろ。
Win32以降ではLoadResourceでロードしたリソースは実メモリが足りなくなったら
自動的に解放される。FreeResourceする必要すらない。
337310:2010/06/25(金) 23:20:28
皆様大変失礼しました。
余計なソースコードが悪さをしていました。
▼▼
01:  HRSRC hResource = FindResource(
02:    NULL,
03:    "IDR_GAME_SOUND_01001",
04:    "GAME_DATA");
05:  HGLOBAL hWavResource = LoadResource(NULL, hResource );
06:  LPVOID lpWav = LockResource( hWavResource );
07:
08:  unsigned int i;
09:  char *p;
10:  p = (char *)lpWav;
11:  for(i=0; i<SizeofResource(NULL, hResource); i++)
12:  {
13:    p[i] = ~p[i];
14:  }
▲▲
11〜14行目にてリソースデータを書き換える処理を入れていた為、
(どうやらやってはいけない処理だったみたい)書き換えたByte分
(10MByte)、OSが勝手にメモリを確保するという予想外の
動きをしていました。

ご迷惑をお掛けしたことを謹んでお詫び申し上げます。
また、教えていただいた「コミットチャージ合計」の測定によると
やはり、ロードモジュールのロード時はリソースはロードされないみたいです。
リソースが実メモリを圧迫しないみたいなので、当初の予定通りリソースを
中心にしてプログラムを作成していきます。
ありがとうございました。
338デフォルトの名無しさん:2010/06/25(金) 23:32:24
その11行目の書き方は駄目すぎる。
それだと、ループ毎にSizeofResource呼び出しする素敵仕様だぞ。
あとビット単位の反転だけなら、せめて4か8バイト単位でまとめて処理した方が良い。
339デフォルトの名無しさん:2010/06/25(金) 23:45:28
>>338
いいんだよ>>337はメモリさえ消費しなければ
CPUがいくらぶんまわろうがどうでもいいんだよ
340デフォルトの名無しさん:2010/06/26(土) 00:29:27
>>337
「コピーオンライト」でググれ
341デフォルトの名無しさん:2010/06/26(土) 01:16:53
SetProcessWorkingSetSizeで(SIZE_T)-1を指定して無理やり追い出すとかはどうだろう
342デフォルトの名無しさん:2010/06/26(土) 09:11:14
こうやって凄腕プログラマが苦労して実装したメモリ管理を無駄にしていくのであった。



まぁ、若干お茶目な凄腕プログラマなんだろうけども。
343デフォルトの名無しさん:2010/06/26(土) 11:10:47
ゲームプログラムの画像や音声って何十〜何百MBytesにもなると思うんだが
それを>>310はexeのリソースに入れようとしてるのか

修正パッチ配布しなきゃならなくなったときどうするつもりなんだろうね?
344デフォルトの名無しさん:2010/06/26(土) 11:13:54
>>341
そんなAPIがあったのかいいこと聞いた
345デフォルトの名無しさん:2010/06/26(土) 11:22:16
大きいデータはSQLにBLOBで突っ込む俺
346デフォルトの名無しさん:2010/06/26(土) 12:00:02
>>343
差分を知らない馬鹿は来なくていいよ
347デフォルトの名無しさん:2010/06/26(土) 14:54:39
>>341
CoWして確保されたメモリはページアウト対象になる
348デフォルトの名無しさん:2010/06/26(土) 16:33:19
リストビューのスクロールバーを削除する為に、
ShowScrollBar(hList,SB_BOTH,FALSE);
としたのですが、スクロールバー表示用かと思われるの末尾一行が残ってしまいます。
スクロールバーと一緒にこれも削除する方法をお願いします。
349デフォルトの名無しさん:2010/06/26(土) 16:36:36
>>348
普通にウィンドウスタイルからWS_VSCROLLとかを削除すりゃいいんじゃないの?
350348:2010/06/26(土) 16:56:46
>>349
lpStyle=GetWindowLongPtr(hList,GWL_STYLE);
lpStyle^=WS_HSCROLL;
SetWindowLongPtr(hList,GWL_STYLE,lpStyle);
SetWindowPos(hList,NULL,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_FRAMECHANGED);
としたのですが、末尾一行どころか、スクロールバーさえも消えてくれませんでした。
351デフォルトの名無しさん:2010/06/26(土) 20:01:15
>>350
>lpStyle^=WS_HSCROLL;
これは
lpStyle &= ~WS_HSCROLL;
こうしないと消えないんじゃないかな
352348:2010/06/26(土) 20:07:54
>>351
残念ながら、消えてくれませんでした。
353デフォルトの名無しさん:2010/06/26(土) 20:33:38
>>352
DWORD dwStyle = ::GetWindowLong(hList, GWL_STYLE);
DWORD dwNewStyle = (dwStyle & ~WS_VSCROLL);
::SetWindowLong(hList, GWL_STYLE, dwNewStyle);

::SetWindowPos(hList, NULL, 0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_DRAWFRAME);

ためしにやってみたら消えたけど
スクロールするとかってにWS_VSCROLLが復活するな
354デフォルトの名無しさん:2010/06/26(土) 21:30:38
WM_NCCALCSIZE
355348:2010/06/26(土) 22:49:09
>>353
>>354
残念ながら消えてくれませんでした。
OS:Win XP SP3
356デフォルトの名無しさん:2010/06/27(日) 23:37:18
>>355
ListViewに、 LVS_NOSCROLL という独自のスタイルがある。
SetWindowLong()で適用してみたらスクロールバーは消えたよ。
でも、矢印キー、Endキー、PageDownキーを使って選択はできてるようだけど、
中身のスクロールができなくなる。
LVM_ENSUREVISIBLEも効かない。
こんなの何に使うんだろ?
357デフォルトの名無しさん:2010/06/28(月) 00:18:48
デスクトップ表示用なんじゃないか?
アイコンとか表示するのにListViewを使っているし。
358デフォルトの名無しさん:2010/06/28(月) 02:28:43
EnableScrollBar()はいかがか?
359デフォルトの名無しさん:2010/06/28(月) 11:06:02
プログラム上からCreateService()でインストールしたサービスプログラムを、
手動で削除(レジストリの箇所)しようとしてます。

この場合、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
のキーを削除するだけで、完全に消したことになりますか? 
360デフォルトの名無しさん:2010/06/28(月) 16:00:27
その方法だと再起動必要
361デフォルトの名無しさん:2010/06/28(月) 16:17:58
>> 360
net stop でサービス停止後に削除します。
レジストリ関係のゴミが残らないのかが心配で質問しました。
362デフォルトの名無しさん:2010/06/28(月) 17:26:29
IFELanguage::GetMorphResult使って文字列の読みを連続して取得しているのですが、メモリリークが発生して困っています。
IFELanguageを毎回Releaseしてやれば発生しないので、IFELanguage内部に原因があると思うのですが、
MORRSLT構造体のCoTaskMemFree以外に何が必要なのでしょうか?

http://msdn.microsoft.com/en-us/library/ee957386(v=office.12).aspx
http://msdn.microsoft.com/en-us/library/ee957388(office.12).aspx
363デフォルトの名無しさん:2010/06/28(月) 18:50:38
キャッシュしているだけじゃね?
364デフォルトの名無しさん:2010/06/28(月) 18:55:44
黙れブタ
365デフォルトの名無しさん:2010/06/28(月) 19:35:24
>>361
なぜDeleteServiceを使わない
366362:2010/06/28(月) 20:44:31
>>363
試しに2種類の文字列を交互に連続して処理させてみたところメモリ使用量は安定しました
仰るとおりキャッシュしているようですね
ご指摘ありがとうございます

しかし30MB以上もキャッシュするというのはちょっと頂けない・・・
手動でキャッシュをクリアする方法はあるのでしょうか?
367361:2010/06/29(火) 12:25:48
>>365
過去に作ったプログラムで登録されたサービスを削除したいだけです。
後は、興味でCreateService()で作成したサービスは、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services のみに書き込みをするのか
知りたいです。
368デフォルトの名無しさん:2010/06/29(火) 12:37:10
ウイルス制作者
369デフォルトの名無しさん:2010/06/29(火) 12:40:45
>CreateService()で作成したサービスは、
>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services のみに書き込みをするのか

とは限らないが
サービス自体はそのレジストリが無くなれば無くなる

DeleteService 使うのが普通

リソキの instsrv.exe を使ってもよい
370デフォルトの名無しさん:2010/06/29(火) 14:19:38
黙れ
371デフォルトの名無しさん:2010/06/29(火) 19:21:06
どうした?w
372デフォルトの名無しさん:2010/06/30(水) 19:07:33
Visual Studio 2005で Win32APIを使用して、サービスプログラムを作成していたのですが、
参考になる書籍、ホームページなどがあったら、教えてください。

よろしくお願いします。
373372:2010/06/30(水) 19:08:55
>>372

汚してすいません m(_ _)m

× 作成していた
○ 作成したい
374デフォルトの名無しさん:2010/06/30(水) 19:26:27
別にそんな複雑なもんじゃないよ。

Writing a ServiceMain Function
http://msdn.microsoft.com/en-us/library/ms687414.aspx
375デフォルトの名無しさん:2010/07/01(木) 13:51:14
現在ログオンしているユーザーのWindowsユーザー名とパスワードを取得したいの
ですがどうすればいいでしょうか?パスワードを取得なんてセキュリティ上そんな
APIってやっぱ存在しない?
376372:2010/07/01(木) 14:14:39
>>374

助かりました、ありがとうございました m(_ _)m
377デフォルトの名無しさん:2010/07/01(木) 14:15:17
またハッキングツールか!!!
378デフォルトの名無しさん:2010/07/01(木) 14:39:37
ハッキングツールではないまともな目的なので知っていたらお願いします。
379デフォルトの名無しさん:2010/07/01(木) 14:41:29
>>378
まともな目的でも、ここに書くことによって悪用される可能性はわからない?
380デフォルトの名無しさん:2010/07/01(木) 14:43:15
そんなことできたらパスワードの意味ないだろ
アホか
381デフォルトの名無しさん:2010/07/01(木) 15:53:55
パスワードって、入力された文字列そのままで保管されてるんじゃなくて、
MD5なりなんなりでハッシュ値算出して、それを保管してるんじゃなかったっけ?
382デフォルトの名無しさん:2010/07/01(木) 16:00:31
普通プレーンテキストや可逆文字列で保存はしないわな
383デフォルトの名無しさん:2010/07/01(木) 21:16:27
Ophcrackとか見るに辞書アタックとかで総当たりするくらいしかないだろう
384デフォルトの名無しさん:2010/07/01(木) 21:26:16
>>383
でもこれが結構よく当てるんですな。
385デフォルトの名無しさん:2010/07/01(木) 21:56:30
>>375
存在しません。
386デフォルトの名無しさん:2010/07/01(木) 22:52:46
>>375
スクリーン乗っ取って、ログオンダイアログ出せば、ユーザーが教えてくれる。
>>381-382
生パスワードが必要な認証方式は普通にある。
その場合は可逆的な保存をする。
387デフォルトの名無しさん:2010/07/01(木) 22:54:52
ん?
不可逆な保存でも大丈夫っしょ
388デフォルトの名無しさん:2010/07/01(木) 23:01:35
POP3での USER/PASS認証とか? <生パスワード
鯖側はおいといて、メーラーは

POP鯖に繋ぐ際に生パスを生成できないとまずいので
可逆保存でないと都合が悪いと
389デフォルトの名無しさん:2010/07/01(木) 23:05:28
Windowsの認証の話から、何故脱線したことを話し出す馬鹿が出てくるんだろう?
390デフォルトの名無しさん:2010/07/01(木) 23:05:49
>>388
メーラーが生パスを持っててPOP3で鯖にに生パス送ってるってことか?
391デフォルトの名無しさん:2010/07/01(木) 23:08:01
けしからんな
392デフォルトの名無しさん:2010/07/03(土) 03:25:52
メーラーのアカウントに記録されているパスワードが分からなくなった時に、
Wiresharkでパケットの中身を覗いて確認したことがあったなw
393デフォルトの名無しさん:2010/07/03(土) 06:42:24
あの、Janeみたいにスプリッタウインドウの中の子ウインドウ(ペイン)に
ツールバーを付けたいのですが、どうやったらいいかわかりません。
教えてください。お願いします。
394デフォルトの名無しさん:2010/07/03(土) 07:01:06
リバーの子としてツールバーを作って表示すればいいよ
395デフォルトの名無しさん:2010/07/03(土) 09:28:31
おまいらいつまでガンプラの話してんだ
396デフォルトの名無しさん:2010/07/03(土) 11:55:31
>>378
そのまともな目的って何?
まともならほかの解決策があるんじゃね?言ってごらん。
397デフォルトの名無しさん:2010/07/03(土) 12:03:48
port135でプロミスキャスモードでデータ拾うにはどんなWin32APIを使えばよいですか?
398デフォルトの名無しさん:2010/07/03(土) 17:55:03
ドライバを挟み込まないと無理かと。
自分で作るよりWinPcapを使った方が現実的。
399デフォルトの名無しさん:2010/07/03(土) 19:28:40
スイッチはモニタポート持ってないと意味ないよ
400デフォルトの名無しさん:2010/07/03(土) 20:30:04
BitbltでCPU使用率上がっちゃうんだよ。
俺は今どう考えても256色以上使わないアプリ作ってるんだよ。
Bitbltに8bitモードとか無いのかな?
色のテーブルを別に持っといてそのテーブルのインデックスの羅列を転送するみたいなの。

助けてください。
401デフォルトの名無しさん:2010/07/03(土) 21:32:12
>>400
8bitのCompatibleBitmap/CompatibleDC使えばいい
402デフォルトの名無しさん:2010/07/03(土) 21:32:26
>BitbltでCPU使用率上がっちゃうんだよ。
きちんとDDBを使わないから。
403デフォルトの名無しさん:2010/07/03(土) 22:06:41
>>401.402
よくわかんないけど調べて頑張ってみます。ありがとうございました。
404デフォルトの名無しさん:2010/07/03(土) 22:38:05
BitBltを細切れの範囲で呼び出していないか?
一部分だけ書き換えるときは直接DIBの中身を弄った方が速いぞ。
内部フレームバッファの内容を実画面へ転送する時位しか、今時のOSだと出番は無いかと。
昔は、DDBとかでVRAM内で完結させて高速化とかあったのだろうけど。
405デフォルトの名無しさん:2010/07/03(土) 23:11:38
>>404
後出しで悪いんですが、楽譜エディタみたいなのを作ってるんです。
五線譜の背景の上に、クリックで音符を置いたり移動したり消したりできるように
しようと思ってるんですが、音符を置く毎に背景を再描画するのは無駄なので、
メモリバッファを2枚用意して、背景をbmpbkgndに、背景+音符をbmplayerに、
そしてWM_PAINTでは実画面にbmplayerを転送するだけという感じで、
例えば音符の位置に変更があった場合、bmpbkgndをbmplayerにBitbltしてから
音符をbmplayerに書き込むことで、背景(五線譜)を描画する手間をスキップしています。

こんな風にするのは無駄でしょうか。よろしければご意見聞かせてください。
406デフォルトの名無しさん:2010/07/04(日) 00:04:53
人間がたまにクリックする程度の頻度の描画でCPU使用率が問題になるなどあり得ない。
そもそも根本的な部分で間違いを犯しているんだろう。
それ以上はソースを晒せとしか言いようがない。
407デフォルトの名無しさん:2010/07/04(日) 00:10:55
正直、CPU使用率が上がるような処理には見えないなあ。
楽譜全体をバッファで保持しても今のPCなら問題無さそうだし。
bmplayer中の表示範囲に入っていない部分は更新後回し、とかそんなところ?
408デフォルトの名無しさん:2010/07/04(日) 00:12:29
APIで学ぶWindowsプログラミング
って本どうですか?
以前、APIで学ぶ Windows徹底理解―できるプログラマになるための (日経BPパソコンベストムック) 安室 浩和
は購入しましたが、メモリ管理あたりはかなり解説が難しかったです。
Part1のアプリケーションの構造を理解する ぐらいしか分かりやすい解説はなかったのですが、新しいAPIで学ぶWindowsプログラミングはどうでしょうか?
409デフォルトの名無しさん:2010/07/04(日) 00:14:40
>>405
そんなことするのは無駄だから
今すぐギターを抱えて街に出ろ
410デフォルトの名無しさん:2010/07/04(日) 00:30:25
>>406,407
レスありがとうございます。
仰る通りクリックするときの描画はBitbltを2回呼ぶだけなのでそう問題ないんですけど、
背景をスクロールするとCPU使用率が20%くらい行ってしまうんです。
これはメモリバッファからデバイスへの転送が遅いのかなと考え、
8bitのビットマップとかあればいいのにと質問させてもらいました。

しかし良く考えてみたらスクロールってのはアニメーションと一緒ですから
それくらいCPU使用しても仕方ないのかもしれませんね。
411デフォルトの名無しさん:2010/07/04(日) 01:03:55
専ブラJane Doe Styleを使ってるけど、
スクロールバードラッグして上下にスクロールさせたら
100%近く行った件。

ま、そんなもんだろ。
412デフォルトの名無しさん:2010/07/04(日) 02:10:13
.NETが普及している今の時代、APIは需要あるの?
APIだけを用いて開発してる所ってある?
413デフォルトの名無しさん:2010/07/04(日) 02:10:54
Win32APIのことね
414デフォルトの名無しさん:2010/07/04(日) 02:15:40
.netはWin32API使ってないとでも?
415デフォルトの名無しさん:2010/07/04(日) 02:28:05
.NETでWin32APIを呼び出すことがあることは知っているが、
今でも完全にWin32APIだけを用いて開発されてたりするの?

Windowsアプリケーションを作るためにWin32APIを学ぼうと思っているんだが、
こんなことを考えてたらモチベーションが上がらなくて…
416デフォルトの名無しさん:2010/07/04(日) 02:51:47
つゲーム

それかMFCを学ぶとか。ほぼAPIとおんなじだし
417デフォルトの名無しさん:2010/07/04(日) 03:06:46
普通wrapper書くなり既存のライブラリ使うなりするだろう
418デフォルトの名無しさん:2010/07/04(日) 03:40:03
今は.net一色なのか、その方が驚きだ
フリーソフトなんかで.netのなんか全然見かけないんだが
419デフォルトの名無しさん:2010/07/04(日) 03:50:44
たまたま視界に入ってないだけでは
420デフォルトの名無しさん:2010/07/04(日) 03:53:22
受託開発の世界なんかはすっかり入れ替わってるね。
421デフォルトの名無しさん:2010/07/04(日) 03:57:17
MFCはおわってる
422デフォルトの名無しさん:2010/07/04(日) 05:01:08
MFCの方が見慣れた部品が揃ってるから落ち着くんだけどなあ
423デフォルトの名無しさん:2010/07/04(日) 08:30:18
warning LNK4254: セクション 'ATL' (50000040) は '.rdata' (40000040) に異なる属性を伴ってマージされています

↑って放置しておいても大丈夫な警告ですか?
424デフォルトの名無しさん:2010/07/04(日) 08:48:40
IMAGE_SCN_MEM_SHARED属性が消えただけだ気にするな
読み取り専用セクションはCoWしない限り元々共有される
425デフォルトの名無しさん:2010/07/04(日) 09:15:22
>>424
内容は難しくて理解できませんでしたが
大丈夫そうなのでそのまま使うことにします
ありがとうございました
426デフォルトの名無しさん:2010/07/04(日) 10:23:26
やっぱりWindowsアプリケーション作るなら
C++ + Win32API が1番自由度(?)高いの?(出来ることが多いの?)
427デフォルトの名無しさん:2010/07/04(日) 10:25:36
そりゃまあ、Win上で動作するものはどれも最終的にはAPI呼んでるからなあ
428デフォルトの名無しさん:2010/07/04(日) 10:42:10
じゃあWin32APIを使う欠点と言えば、その生産性くらい?
429デフォルトの名無しさん:2010/07/04(日) 11:07:13
意味不明
430デフォルトの名無しさん:2010/07/04(日) 11:14:01
すまん、言い換えると
Win32APIを使う欠点は、アプリケーションを開発する時に大変ってことくらい?
431デフォルトの名無しさん:2010/07/04(日) 11:15:41
大変も何も使わないとそもそも開発できない。
432デフォルトの名無しさん:2010/07/04(日) 11:23:01
他の開発環境(C# + .NET 等)と比較してってことだろ
お前も分かれよ
433デフォルトの名無しさん:2010/07/04(日) 11:48:08
C#からでもAPIは直接呼べるし.NETのライブラリは間接的にAPIを利用してる
つまりできることに違いは無い
違うのはパフォーマンスと生産性

434デフォルトの名無しさん:2010/07/04(日) 11:58:25
では総合的に考えると C# + .NET > C++ + Win32API だということ?
435デフォルトの名無しさん:2010/07/04(日) 12:03:41
両方やってみて使い分けるのがいいと思うよ
436デフォルトの名無しさん:2010/07/04(日) 12:11:06
win32api直の方が必要な知識は少なくて自分で好きにできるじゃん。MFCとかだと使い方を調べるのに時間かかった上に細かいカスタマイズとかできなかったりするじゃん。
437デフォルトの名無しさん:2010/07/04(日) 12:15:44
適材適所
438デフォルトの名無しさん:2010/07/04(日) 13:05:52
>>436
はげどう
439デフォルトの名無しさん:2010/07/04(日) 13:11:33
構造体のたくさんの変数に代入して関数呼ぶの繰り返し
結局ラッパー組むことになる
440デフォルトの名無しさん:2010/07/04(日) 13:14:09
Qt4 とか wxWidgets に慣れるともう MFC は二度と使いたくなくなる
441デフォルトの名無しさん:2010/07/04(日) 15:58:53
>>434
C# + C++/CLI + .NET + Win32 > C# + .NET <> C++ + Win32
442デフォルトの名無しさん:2010/07/04(日) 17:44:17
>>436
>win32api直の方が必要な知識は少なくて
これには同意しかねるが、MFCとWin32APIはどちらか一つやってれば
もう一方も理解しやすいから、MFC使って融通が利きづらいところは直接API呼べばおk
443デフォルトの名無しさん:2010/07/04(日) 18:51:29
Edit Controlの右クリックのメニューの
項目を追加したり削除したりする事は可能ですか?
444デフォルトの名無しさん:2010/07/04(日) 18:57:12
やめておけ
危険だ
445デフォルトの名無しさん:2010/07/04(日) 22:28:44
>>408
その本のことはよく知らないけど、メモリのことならAdvanced Windowsが分りやすいと思う。
というか、APIで学ぶWindowsプログラミングってかなり最近の本なんだな。

>>437
だな。
446デフォルトの名無しさん:2010/07/05(月) 22:45:25
ちょっとマニアックな質問になりますが・・・

CreateFileというAPIでdwFlagsAndAttributesフラグに
FILE_FLAG_WRITE_THROUGHとFILE_FLAG_NO_BUFFERINGを指定すると
バッファ、キャッシュを使わずにファイルを開けるとあります。

この場合、ハードディスク内部のキャッシュも使わないということなのでしょうか?
それとも、ディスク内のキャッシュを使用有無を制御するのは不可能なのでしょうか?

この当たりについて詳しく調べたいので、ディスクキャッシュの利用状況を見れるような
APIも教えてもらえると助かります。
447デフォルトの名無しさん:2010/07/05(月) 22:57:25
WindowsからすればHDD内部で何をどう処理していようが、あるいはそれが実はHDDですらなく
SSDだった、なんてことはどうでもいいというか、どうにもならない。そこにキャッシュがあるのか、
キャッシュが効いているのかも。というかそういうパーツ内部のレベルまでWindowsが管理してると
いう発想はどこから来るのか。
448デフォルトの名無しさん:2010/07/05(月) 22:58:00
書き込みに関しては前者がそのフラグ
http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx
Caching Behavior読め
449デフォルトの名無しさん:2010/07/06(火) 00:15:14
>>447、448
レスありがとうございます。

ハードディスクがサポートしていれば、書き込み操作でキャッシュを
スルーしてディスクに直接書くみたいですね。

SQL Serverはデータベースファイルを操作する際に
FILE_FLAG_WRITE_THROUGHとFILE_FLAG_NO_BUFFERINGを
指定するという話を聞いたので少し気になったのです。

でも、ハードディスクが内部キャッシュのライトスルーをサポートしているとなると
上記フラグを指定をした際に、書き込みが遅くなってしまう可能性もあるような
気がしてきました。

>>448さんのページも、まだ怪しい翻訳しかできてないので
もう少し調べてみます。

ありがとうございました。
450デフォルトの名無しさん:2010/07/06(火) 00:55:23
SQL ServerはReadFileScatterやWriteFileGatherとかも使っているから、
FILE_FLAG_NO_BUFFERINGは自ずと必須になる。
まあ、SQL Serverのアクセス方法は特殊過ぎて全く参考にならんな。

ここら辺を読むと、一生使いそうにも無いAPIの説明があって結構面白い。
http://msdn.microsoft.com/ja-jp/library/cc280359.aspx
451デフォルトの名無しさん:2010/07/06(火) 01:02:38
遅くなる可能性はあるみたいね。
けど、SQL Serverは書き込まれるデータの安全性を重視してると。

古いけど、日本語の記事もあったよ。
http://support.microsoft.com/kb/234656/ja
452 ◆PNn5yLyBvA :2010/07/06(火) 17:31:23
□□□□ → □□□□
□■■□ → □■■□
□■■□ → □■☆☆
□□□□ → □□☆☆

□ SRCPAINTで作った白色
■ SRCPAINTで作った青色
☆ FillRectで塗りつぶした白色

上の画像を白色を透過して表示したいのですが、そのまま表示されます。
ただ、FillRectで一部を白色で塗ると、その部分だけ透過されます。

見た目は同じ白、GetPixelでもちゃんと白が返ってきますが、
同じ色なのにデータ上違う事とかはありえるのでしょうか。

(透過はここのサイトのような感じのやり方です)
ttp://homepage2.nifty.com/rleez/program_old/winapi/bmpmask2.html

(SRCPAINTで作ったというのは、元の画像の1色だけの色を変え、他を白にした画像)
(画像の1色だけを色を変えながら透過表示したいため)
453デフォルトの名無しさん:2010/07/06(火) 17:53:33
>>452
何を言ってるのか分からん。

まぁ、他人に分かるようにちゃんと説明できたら、質問なんてしないで
自己解決するんだろうけど。

まず、マスク画像はどうしちゃったんだ?
454 ◆PNn5yLyBvA :2010/07/06(火) 17:54:58
黄黄黄黄 → 緑緑緑緑 + 白白白白 → 白白白白
黄青青黄 → 緑緑緑緑 + 白黒黒白 → 白緑緑白
黄赤赤黄 → 緑緑緑緑 + 白白白白 → 白白白白
黄黄黄黄 → 緑緑緑緑 + 白白白白 → 白白白白

元画像 → fillHBmp +(SRCPAINT) maskHBmp → fillHBmp

色を変えながら透過(青を緑に変え)はこんな感じです。
fillHBmpとmaskHBmpはCreateCompatibleBitmapで作っています。

最後にできた白と緑の画像を白を透過して表示したいのですが、
透過されずそのまま表示されてしまいます。
一部を白でFillRectすると、その部分だけ透過できます。
455 ◆PNn5yLyBvA :2010/07/06(火) 18:01:39
>>453
ありがとうございます、分かりにくくてすいません。
マスク画像は、処理を行う関数で作っています。
ウィンドウに表示して確認していますが、意図した画像にはなっています。
(>>454の3番目の図のような)
456デフォルトの名無しさん:2010/07/06(火) 18:16:21
白 := 透過 で

元絵A   背景      合成後
白白白白 黒黒黒黒   黒黒黒黒
白青青白 黒黒黒黒   黒青青黒
白赤赤白 黒黒黒黒 ⇒ 黒赤赤黒
白白白白 黒黒黒黒   黒黒黒黒
ここまではできてて 元絵Aに対し FillRectで加工

白白白白 黒黒黒黒   黒黒黒黒
白青青白 黒黒黒黒   黒青青黒
白赤白白 黒黒黒黒 ⇒ 黒赤白白
白白白白 黒黒黒黒   黒黒白白
こうなってしまった

こういうことか? 元絵の色空間の都合で(8bit?)
マスク生成段で FillRectで塗った白 が "白" とならなかったんでない?
457 ◆PNn5yLyBvA :2010/07/06(火) 19:27:47
>>456
ありがとうございます。

FillRectで加工しない場合は、透過できずにそのまま表示されます。
白白白白 黒黒黒黒   白白白白
白青青白 黒黒黒黒   白青青白
白赤赤白 黒黒黒黒 ⇒ 白赤赤白
白白白白 黒黒黒黒   白白白白

FillRectで加工した場合は、加工した部分だけ透過されます
白白白白 黒黒黒黒   白白白白
白青青白 黒黒黒黒   白青青白
白赤白白 黒黒黒黒 ⇒ 白赤黒黒
白白白白 黒黒黒黒   白白黒黒

元絵は24bitで、LoadImageでロードしています。
デスクトップのbitも24bitです。
458デフォルトの名無しさん:2010/07/06(火) 19:32:08
透過するかどうかは、マスク画像で決めるんだから
マスク画像の生成に問題があるんでしょ。
459 ◆PNn5yLyBvA :2010/07/07(水) 04:22:43
なぜか、LoadImageで作ったHBITMAP(最初の画像)に
透過に使いたい最終画像(>>457の4番目)をSRCCOPYして、
それを透過表示させた所うまくいきました。

LoadImageと、CreateBitmapやCreateCompatibleBitmap
で作るHBITMAPでは、描画速度に差があったりしますが、
同じようにHBITMAPのタイプ?の違いによる物かもしれません。

>>458
ありがとうございます。
途中で作る画像をウィンドウに表示して確認していますが、
見た目では意図したのが表示されています。
460デフォルトの名無しさん:2010/07/07(水) 07:41:54
「連投」の仕方を教えてください。
461デフォルトの名無しさん:2010/07/07(水) 11:13:43
●でも買えば
462デフォルトの名無しさん:2010/07/07(水) 11:16:26
>>461
もうちょっと詳しく教えてくれませんか?
ド素人なのでよく分からないんです。
463デフォルトの名無しさん:2010/07/07(水) 13:02:15
464デフォルトの名無しさん:2010/07/08(木) 00:12:28
マウスメッセージやキーボードメッセージを別のウインドウに転送したくて
WndProc内で該当メッセージを受け取った時に別のウインドウにPostMessageする処理を書いたら
WindowsXPではちゃんと動いたんですが
Windows7でAeroをオンにしていると動かなくなります

465464:2010/07/08(木) 00:16:45
(書きかけで送信してしまった)

Aeroがオンの時って別の(PostMessageを送るアプリが管理していない)ウインドウに
PostMessageできないんでしょうか?

ChangeWindowMessageFilterでメッセージをMSGFLT_ADDしてやらないと駄目なのかとも思いましたが
試してみてもメッセージは飛んできてないようです
466デフォルトの名無しさん:2010/07/08(木) 00:20:45
WS_TRANSPARENT だったかな
467464:2010/07/08(木) 00:35:12
>>466
ありがとうございます

WS_EX_TRANSPARENTも試してみたのですが
メッセージを無条件で転送してしまうので使えないのかなと思ってました
「右クリックのみは転送せず自分で処理する」みたいなことをやりたいのです

ごめんなさい説明足らずでマジ申し訳ないです
468デフォルトの名無しさん:2010/07/08(木) 01:23:03
基本的なプロセス間通信の手段なんだから、送れないわけないだろう。
っていうか、メッセージが届いてるかくらい自分で簡単に確認できるだろう。

届いた後の処理に問題があるんじゃないの?
469名無しさん@そうだ選挙に行こう:2010/07/10(土) 05:45:07
すみません。質問です。
win32アプリケーションウィザードによって自動的に作成されたウィンドウにて
マウスカーソルの表示/非表示の制御をおこないたいのですが上手くいきません。

ウィンドウの白枠の中ではマウスカーソルを非表示、ウィンドウの白枠以外
(メニューやタイトルバーの上)ではマウスカーソルを表示したいです。
http://jishinkuma.aa0.netvolante.jp/etc/mouse_cursor.png

どういうイベントとwin32 APIの組み合わせで実現できますでしょうか。

WM_MOUSEMOVEイベントは白枠の中でのマウスカーソル移動しか拾わない為、
白枠の中とメニューの境界線をまたぐときの判定が取れません。

また、マウスカーソルの表示/非表示は、ShowCursor(TRUE)/ShowCursor(FALSE)を
使うということであっていますでしょうか。

以上、よろしくお願いします。
470名無しさん@そうだ選挙に行こう:2010/07/10(土) 06:11:08
WM_SETCURSOR
471名無しさん@そうだ選挙に行こう:2010/07/10(土) 08:17:50
469の質問の回答お願いします。
472名無しさん@そうだ選挙に行こう:2010/07/10(土) 08:33:15
他スレの質問?
473469:2010/07/10(土) 08:44:56
>>470
お教えいただきありがとうございます。

下記機能を実装したソースを記載します。
変な実装方法をしていないか見ていただけると幸いです。
▼▼▼
  case WM_SETCURSOR:
    GetCursorPos(&mos_pos); // マウス座標を取得(スクリーン座標)
    ScreenToClient(hWnd, &mos_pos); // マウス座標を変換(クライアント座標へ)
    SetRect(&rect, 0, 0, MAX_SCREEN_WIDTH, MAX_SCREEN_HIGHT); // ウィンドウの白枠の大きさ
    if( PtInRect(&rect, mos_pos) == 0 )
    {
      // メニューやタイトルバーの上(ウィンドウの白枠の中以外)の場合
      hCursor = LoadCursor(NULL, IDC_ARROW); // 標準のマウスカーソルを表示
      SetCursor(hCursor);
    }
    else
    {
      // ウィンドウの白枠の中の場合
      SetCursor(NULL); // マウスカーソルを消去
    }
    break;
▲▲▲
474名無しさん@そうだ選挙に行こう:2010/07/10(土) 09:16:12
RECT rect;
GetClientRect(hWnd,&rect);
...
case WM_MOUSEMOVE:
{
static bool b=false;
long x = (long)LOWORD(lParam);
long y = (long)HIWORD(lParam);
if(rect.left<=x && x<rect.right && rect.top<=y && y<rect.bottom){
if(!b){
b=true;
SetCapture(hWnd);
while(!ShowCursor(0)){}
}
}
if(!(rect.left<=x && x<rect.right && rect.top<=y && y<rect.bottom)){
if(b){
b=false;
while(ShowCursor(1)){}
ReleaseCapture();
}
}
}
break;
475名無しさん@そうだ選挙に行こう:2010/07/10(土) 09:23:58
>>473
1.LOWORD(LPARAM)でウィンドウのどの領域か判定可能。
HTCLIENTが入っていたらクライアント領域
2.クライアント領域の時だけSetCursorしてTRUEを返せば十分。
それ以外の時はDefWindowProcにそのまま流せば良いかと。
476469:2010/07/10(土) 10:50:27
>>474
レスありがとうございます。

>>475
ありがとうございます。
おかげで処理がすっきりしました。
477名無しさん@そうだ選挙に行こう:2010/07/10(土) 18:14:08
あのーーー、初めてのDLLなんですが
DLLから輸出する関数は普通
stdcall、cdeclのどちらの規約にするんですか?
で、fastcallは使っちゃだめなの?
ついでに、_kansuu@Xとか出てくるんですけど、@Xの
Xの数字は何を意味するんですか?
478名無しさん@そうだ選挙に行こう:2010/07/10(土) 18:18:44
普通は__stdcall。@の後ろは、引数のサイズだっけか?
479名無しさん@そうだ選挙に行こう:2010/07/10(土) 19:41:24
__fastcallは仕様の明確な規定が無かった所為で、
コンパイラ間で互換性が保障されなくなっているので使えない。
ちなみに、x64は呼び出し規約が一つに統一されたので考える必要は無くなった。
480名無しさん@そうだ選挙に行こう:2010/07/10(土) 20:57:17
__rapidcallとか__ultrahighspeedcallとか__ohmygodとかあったら俺は間違いなく使うぞ
481名無しさん@そうだ選挙に行こう:2010/07/10(土) 21:03:32
_pascal ってなかった?
482名無しさん@そうだ選挙に行こう:2010/07/10(土) 21:47:46
現在適用されている壁紙を調べる方法ってレジストリを見る以外にないかな?
483名無しさん@そうだ選挙に行こう:2010/07/10(土) 21:58:17
>>482
SystemParametersInfo()で取れそうだよ
484名無しさん@そうだ選挙に行こう:2010/07/10(土) 22:34:05
>>483
有難う!
SPI_GETDESKWALLPAPERで取れるとの事だけど、MSDN見るとWin2000しか使えないようですが
9x系で指定すると、何も返ってこないのでしょうか?
485名無しさん@そうだ選挙に行こう:2010/07/10(土) 22:54:27
今時9x系って・・・
486名無しさん@そうだ選挙に行こう:2010/07/10(土) 23:59:15
487名無しさん@そうだ選挙に行こう:2010/07/11(日) 00:33:26
ありとがう
488名無しさん@そうだ選挙に行こう:2010/07/11(日) 00:55:24
489名無しさん@そうだ選挙に行こう:2010/07/11(日) 01:17:09
アガリ糖
490名無しさん@そうだ選挙に行こう:2010/07/11(日) 03:10:42
タブコントロールでタブをクリックしたときに、
そのタブが前に来ないようにするのってどうやんの?
491名無しさん@そうだ選挙に行こう:2010/07/11(日) 03:12:34
サブクラス化でもすれば
492名無しさん@そうだ選挙に行こう:2010/07/11(日) 05:16:15
>>484
手元にWin9x系がないから確認できないけど、アクティブデスクトップが有効なら
COMのIActiveDesktop使えばいけると思うよ
493名無しさん@そうだ選挙に行こう:2010/07/11(日) 09:07:43
アクティブデスクトップなんか誰も使ってなかっただろ
494名無しさん@そうだ選挙に行こう:2010/07/11(日) 09:23:31
>>479
x64は最初の4引数がレジスタ渡しされてビビったな
495名無しさん@そうだ選挙に行こう:2010/07/11(日) 09:50:11
IE4.0以降がインストールされていれば、
使用・未使用に関わらずとりあえず機能するんじゃないか?
といっても今更確認する気にもならないが。
x64Win7ですら現役の機能だし、まあ大丈夫だろ。
496名無しさん@そうだ選挙に行こう:2010/07/11(日) 17:30:56
PCに接続されているけど、
無効になっているモニタの情報を取得したり、有効にするには
どうすればいいでしょうか?
497496:2010/07/11(日) 22:20:08
WMIとかいうものでなんとかなりそうです。
失礼しました。
498デフォルトの名無しさん:2010/07/11(日) 23:57:27
すみません。質問です。(正しい用語を知らないので上手く説明できないかも知れません。)
win32アプリケーションウィザードによって自動的に作成されたウィンドウにて以下の2点のタイミングを捕らえることが目的です。
(1)ウインドウ内でクライアント領域から制御が離れるタイミング
(2)ウインドウ内でクライアント領域に制御が戻るタイミング
目的を実現するには、どういうイベントを使えばよいのでしょうか。

↓↓↓上記の質問だけだと何を言っているのかわからないと思いますので以下に試してみたことや図説を書きます。
クライアント領域から制御が離れたときの制御の遷移は以下の@Aのみしかありえないと考える場合
(@A以外にありえる場合は、以下の方法は目的の達成に意味をなしません。)
@現在のウインドウの「メニューバー」に制御が移る
 ([Alt]や[F10]([Alt]+Fなど)押下などのキー操作やウインドウのメニューバーを左クリックなどのマウス操作を実施)
A現在のウインドウの「コントロールメニュー(プルダウンメニュー?)」に制御が移る
  ([Alt]+[Space]押下などのキー操作やウインドウのタイトルバーのアイコンを左クリック、
  『(A)ウインドウのタイトルバーのアイコンを右クリック、(B)ウインドウのタイトルバーを右クリック』などのマウス操作を実施)
図説 http://jishinkuma.aa0.netvolante.jp/etc/seigyo.png (「制御」の文字がにじんで読みにくくて申し訳ないです)
〜〜〜 >>499に続きます 〜〜〜
499デフォルトの名無しさん:2010/07/11(日) 23:58:42
え?
500498:2010/07/12(月) 00:00:15
〜〜〜 >>498の続き 〜〜〜
WM_MENUSELECTイベントを使うと『クライアント領域から制御が離れたタイミングとクライアント領域に制御が戻るタイミング』を
捕らえることができると思いました。しかし、(A)(B)の操作をしたときにクライアント領域から制御が離れたにも関わらず
WM_MENUSELECTイベントが発生しないため、WM_MENUSELECTイベントでは『クライアント領域から制御が離れるタイミング』を
捕らえることができませんでした。『クライアント領域に制御が戻るタイミング』は「@のメニューバーから制御が離れる」ときと
「Aのコントロールメニューから制御が離れる」ときにWM_MENUSELECTイベントが発生するため捕らえることができます。
  case WM_MENUSELECT:
    // @のメニューバーやAのコントロールメニューがクローズされた場合
    if( (HIWORD(wParam) == 0xFFFF) && (lParam == NULL)){
     XXXXXXXX
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
    break;

説明が大変わかりにくくて申し訳ありません。目的を実現するのに有効なイベントを知っている人がいらっしゃれば、
お教えしていただけないでしょうか。よろしくお願いします。
501デフォルトの名無しさん:2010/07/12(月) 00:10:28
>>498
SetCapture / ReleaseCapture 使え
502デフォルトの名無しさん:2010/07/12(月) 00:13:28
キャプションやらなんやらは、WM_NCHITTESTで取れる。
503デフォルトの名無しさん:2010/07/12(月) 00:23:59
そもそもクライアント領域の制御ってどういうことを意味してるんだろうね。

単にキーボードフォーカスとマウスカーソルの位置だけでいいのか、
それともクライアント領域に作成した子ウインドウのウインドウメッセージ処理全般を指してるのか。
504498:2010/07/12(月) 02:40:41
>>501-503
レスをいただきありがとうございます。
ただいま体調不良の為、体調が回復したらお教えいただいた方法を試させていただきます。

>>503
>そもそもクライアント領域の制御ってどういうことを意味してるんだろうね。
スレ違いだと言われそうなので書かなかったのですが、DirectXを使用しています。
クライアント領域はDirectXの描画領域となっており秒間60コマで表示更新され続けています。
私の表現で『クライアント領域に制御がある』とは、クライアント領域がDirectXにより、表示更新され
続けている状態のことを指します。『クライアント領域に制御がない』とは、DirectXの表示更新が、

[Alt]や[F10]や[Alt]+F押下などのキー操作やウインドウのメニューバーを左クリックなどのマウス操作、
[Alt]+[Space]押下などのキー操作やウインドウのタイトルバーのアイコンを左クリック、ウインドウの
タイトルバーのアイコンを右クリック、ウインドウのタイトルバーを右クリックなどのマウス操作

によりメニューバーやプルダウンメニューにフォーカスが移ってクライアント領域のDirectXの表示更新が
ピタッと止まってしまう状態のことを指します。
505498:2010/07/12(月) 02:44:30
>>503
〜〜〜>>504の続き〜〜〜
検証に使っているパソコンのマウスカーソルが、どうやらハードカーソルではないらしく、DirectXで
表示更新され続けているクライアント領域にマウスカーソルを持っていくと、DirectXの描画と
マウスカーソルの描画が競合してマウスカーソルがちらついて表示されてしまいます。その問題を
解決するために、マウス座標がクライアント領域にある場合は、標準のマウスカーソルを消去し、
代わりにDirectXのグラフィックでマウスカーソルの絵を描画するようにしました。しかし、クライアント領域に
マウスカーソルの絵が表示されているときに、▼▲の操作を行うと、DirectXの表示更新がピタッと止まり、
マウスカーソルの代わりの絵がクライアント領域の▼▲の操作を行う直前の位置に張り付いたままの状態で、
標準のマウスカーソルが表示されてしまいます。(マウスカーソルが2つ表示されて気持ち悪いです。)
対処法として「クライアント領域から制御が離れるタイミング」(標準のマウスカーソルが表示されるタイミング)で、
マウスカーソルの代わりの絵を消去し「クライアント領域に制御が戻るタイミング」(標準のマウスカーソルを
消去するタイミング)でマウスカーソルの代わりの絵を描画するという処理を実装しようとしています。
上記理由から
(1)ウインドウ内でクライアント領域から制御が離れるタイミング
(2)ウインドウ内でクライアント領域に制御が戻るタイミング
を検出したいのです。
506デフォルトの名無しさん:2010/07/12(月) 10:24:31
止まるのは自分でアイドル以外で描画してないからだろ
507デフォルトの名無しさん:2010/07/12(月) 11:27:56
WM_NCHITTEST、WM_NCMOUSELEAVE、GetCursorPos()で毎回マウスカーソルの位置を拾って
自分で描画を制御するしかないかなぁ…。
508498:2010/07/12(月) 14:02:44
>>506-507
レスありがとうございます。
自分自身の複雑な発想を改め単純に考えてみると
下記コーディングにて無事機能を実装できました。
▼▼▼
  case WM_SETCURSOR:
    if(LOWORD(lParam) == HTCLIENT)
    {
      SetCursor(NULL); // 標準マウスカーソル非表示
      g_mousecursor.SetDispFlag(1); // スプライトマウスカーソル表示
      return TRUE;
    }
    else
    {
      // 標準マウスカーソル表示
      g_mousecursor.SetDispFlag(0); // スプライトマウスカーソル非表示
      if( Render() < 0 ) // DirectXの描画
      {
        DestroyWindow(g_hwnd);
      }
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
    break;
▲▲▲

ご指導ありがとうございました。
509デフォルトの名無しさん:2010/07/12(月) 16:57:11
他プロセスのEM_REPLACESELをフックしてメッセージを破棄したいのですが、
WH_CALLWNDPROCではメッセージ自体を変更することができないようで困っています。
何か方法があれば教えてください。
510デフォルトの名無しさん:2010/07/12(月) 16:59:56
その他プロセスに入り込んで直接フックしろ
511 ◆EFMKcHX4gM :2010/07/14(水) 20:47:53
エディトボックスの上でキーを押しても文字が入力されないのですが、
何の原因が考えられるでしょうか。
右クリックの貼り付けとかはできます。

メッセージループにはWM_KEYFIRSTが来ていますが、
コールバックにはWM_COMMANDが来ていないみたいです。
(MessageBeepとifでどのWM_の時に音が鳴るかで調べました)
512デフォルトの名無しさん:2010/07/14(水) 20:55:42
TranslateMessage
513 ◆EFMKcHX4gM :2010/07/14(水) 21:01:32
>>512
ありがとうございます。
試してみます。
514デフォルトの名無しさん:2010/07/15(木) 04:32:32
窓辺ななみのデスクトップマスコットみたいな輪郭のくり抜きって
SetWindowRgn使ってると思うのですが、
その際アンチエイリアス処理は無理でしょうか?
515デフォルトの名無しさん:2010/07/15(木) 05:20:47
SetWindowRgnは古い
今は
SetLayeredWindowAttributes
で α値を使う

http://msdn.microsoft.com/ja-jp/library/ms997507.aspx
516デフォルトの名無しさん:2010/07/15(木) 20:12:57
親がWS_POPUPである、サブクラス化したリストビューにて、
ListView_DeleteColumn()しても、中身は削除されるようですが、コラム自体は残ってしまいます。
又、SetWindowPos()でその部分を隠そうかとも思いましたが、どうも変更されません。
何方かご教授お願いします。
517デフォルトの名無しさん:2010/07/16(金) 06:30:57
SVNみたいなファイル/フォルダのオーバーレイ表示ってどうやんの?
518デフォルトの名無しさん:2010/07/16(金) 06:53:38
519デフォルトの名無しさん:2010/07/16(金) 06:58:32
おもしろそうだな。自分もやってみたいけどこれといったネタがないw
520デフォルトの名無しさん:2010/07/16(金) 07:18:12
Explorerフックされるのが嫌で、TortoiseSVN使うの止めますた
どうかそういうソフトは作らないで下さい
521デフォルトの名無しさん:2010/07/16(金) 09:16:54
フックじゃなくてシェル拡張でしょ
522デフォルトの名無しさん:2010/07/16(金) 09:19:58
>>520
オプションで切るという発想がないのがすごい
523デフォルトの名無しさん:2010/07/16(金) 13:02:14
>>521
言葉遊びはもういいです
524デフォルトの名無しさん:2010/07/16(金) 13:16:26
>>523
間違いを指摘されて怒ったのか?
牛乳飲めよ煮干し食えよ
525デフォルトの名無しさん:2010/07/16(金) 13:25:23
残念だなあ。
君は何か勘違いしている様だけど、聞いて揚げ足取りをしたいんじゃなくて、
単純に君の意見が面白そうだから聞いてみたかっただけなんだよ。
もっとまともなレスを期待してたんだけど。ごめんね。
ちなみに君は揚げ足を取られる事を恐れているようだけど、それは違うと思う。
揚げ足を取られるのは、君に隙があるから。
隙だらけの人間ってのはそうやって余計な所でつまらない恥をかく事になるもんだよ。
他人につっこまれる事は、自身の知識をより客観的で多角的なものとする為に
有益な指針となるものだと思うな。
526デフォルトの名無しさん:2010/07/16(金) 13:35:25
少なくともお前は面白くない
527デフォルトの名無しさん:2010/07/16(金) 13:55:17
>>526
面白くないと死んじゃうのか?
牛乳飲めよ
528デフォルトの名無しさん:2010/07/16(金) 13:56:57
その返しにウィットが効いてると思ってるの?
529デフォルトの名無しさん:2010/07/16(金) 13:58:37
間違ってるとしたら俺なんだけど
間をとってシェルフックって事で手を打たないか?
530デフォルトの名無しさん:2010/07/16(金) 14:04:15
どっちにしろフックじゃない
シェル拡張作ったことあるか知らんが単純なプラグイン機構だ
531デフォルトの名無しさん:2010/07/16(金) 14:33:35
プラグインみたいにロードできる事は分かるが、単純ではないと思うけどなぁ
532デフォルトの名無しさん:2010/07/16(金) 14:37:31
この場合は
プラグイン=フック
533デフォルトの名無しさん:2010/07/16(金) 14:51:13
シェル拡張の多くはフック的仕組みではあるが
シェルフックは別にWH_SHELLやIShellExecuteHookがあるから紛らわしい
534デフォルトの名無しさん:2010/07/16(金) 14:52:25
本当にAPIと関係の無い話題で盛り上がるのが好きだな
535デフォルトの名無しさん:2010/07/16(金) 23:51:59
SendInputでFキーやEscキーは送れるのですがカーソルキーが送れません
← の場合 wScan = MapVirtualKey(0x25, 0) としているのですが、何故送れないのですか?
536デフォルトの名無しさん:2010/07/17(土) 11:10:55
>>535
RegisterRawInputDevicesでスキャンコードを取り出してみたら、
「←」押下で42,75、「←」を離した時点で75,42と来てるなあ。
操作的には左シフトを押しながらNUMPAD4を押して、逆順で戻すって感じか。
家のはPS/2キーボードだからUSBだと違うのかもしれないが、
一応これと同じように送ってやればいいんじゃないか?
537デフォルトの名無しさん:2010/07/17(土) 11:33:37
スキャンコードと仮想キーコードって全然違うくない?
538デフォルトの名無しさん:2010/07/18(日) 21:41:15
申し訳ありません、非常に幼稚な質問かと思うのですが尋ねさせてください
ttp://www.geocities.jp/ky_webid/win32c/028.html
http://www4.plala.or.jp/tamo/vc/HowToVS/HowToVS.html
これらのページを参考にVisual Studio 2008 Professional Editionで
プログラムを作っています
しかし、現在ウィンドウにメニューを表示させたいのですが
表示させることができず困っている状態です

win32APIのプロジェクトにおいて
VSに付属のリソースエディタでxxx.rcを作成し
その中にリソースの追加を行いMenuを新規作成しました
そのMenuのIDはIDR_MENU1になっているので
参照しているURLの上の方のリンクの最初にある
サンプルプログラムをコピーして

// メニューリソースをロードする
hMenu = LoadMenu( NULL, _T("IDR_MENU") );
// ウィンドウにメニューリソースを割り当てる

この中段の部分の IDR_MENU を IDR_MENU1 に変更し
一応includeファイルにもresource.hを足しておりますが
ビルドはできても、実行するとメニューのない
ウィンドウしかでてこないのです
原因の分かる方いらっしゃいましたら
できれば教えていただきたいと思います
よろしくお願いします
539デフォルトの名無しさん:2010/07/18(日) 21:50:42
普通に Win32プロジェクトを開始して、Windowsアプリケーションを選べば、
メニュー付きのウィンドウが出るよ。
540デフォルトの名無しさん:2010/07/18(日) 21:54:44
ソースの下のLoadMenuの説明をちゃんと読みましたか?
541デフォルトの名無しさん:2010/07/18(日) 21:59:21
ありがとうございます
空のプロジェクトでやってましたが、気付かなかったです
これでメニューのでたウインドウのコードと比較してみて
何が差異としてあるか見てみようと思います
助かりました
542デフォルトの名無しさん:2010/07/18(日) 22:25:02
>>540
こちらもありがとうございます
おかげさまで無事に表示することができました
ついでに質問させてもらっていいでしょうか

ページ最初の XN Resource Editor上での作成 という項目の最後辺りにある

>ここまで終わったら、メニューバー自体にも名前を付けます。
>左側のツリービューから、「Language Neutral」の部分を右クリックし、
>「プロパティ」を選択します。

>するとダイアログボックスが出てくるので、
>「名前」に「IDR_MENU」と入力します。

この部分ですが、VSのリソースエディタでリソース中の
メニューのプロパティを見ても、Nameという部分は
グレーで選択できない状態になっていますよね
こうなっているということは、必ずVSではMAKEINTRESOURCEを使う必要が
あるということでしょうか
543デフォルトの名無しさん:2010/07/18(日) 22:27:22
リソースのID指定と文字列指定を勘違いするなよ。
544デフォルトの名無しさん:2010/07/18(日) 22:44:25
>>542
プロパティのIDを""で囲ってやれば文字列形式になる
"で囲まない(通常) -> ID が .h に定義される -> リソースIDになる
"で囲む -> ID が .hに定義されない -> 文字列形式になる
これだけの話、.rc, .h を直接編集してやってもいい
まぁ普通はリソースIDを使うと思うけど
545デフォルトの名無しさん:2010/07/18(日) 23:03:04
>>543-544
なるほど、良く分かりました
要領が悪くもうしわけございません
私はリソースの文字列形式というものの
理解がそもそも足りておらなかったですね
しかし非常に助かりました、ありがとうございます
546デフォルトの名無しさん:2010/07/19(月) 07:39:14
>>545
最初はみんな理解が足りないんだから気にしないで。
なんていうか、一旦川を渡った人が初めて川を渡る人に川の渡り方を
説明するのに、まともなものは稀なもの。んで、同じ轍を踏む。
547デフォルトの名無しさん:2010/07/19(月) 23:08:50
既に川に橋が架かってる時代に
わざわざ川の中泳いで渡ろうという奇特な人のために
だれも助け船なんて出そうと思わないのと一緒
548デフォルトの名無しさん:2010/07/20(火) 05:37:42
頭の足りない人たちが作ったAPIを理解できないのは当たり前。
同じように足りなければ相性がいいってだけで理解できないから劣っているわけではない。
頭の悪さに慣れるしかない。気にするな。
549デフォルトの名無しさん:2010/07/20(火) 09:28:35
Win32 APIよりましなAPIセットなり、フレームワークなりを
作ってからじゃないと、全然説得力ないな。
550デフォルトの名無しさん:2010/07/20(火) 09:39:07
野党時代の民主党みたいなもの。
無責任に言うだけ言って、与党になったら何も出来ないのが露呈する。
551546:2010/07/21(水) 08:16:45
今たまたま SetClipboardData() でスタックエラーというんで、
http://msdn.microsoft.com/ja-jp/library/cc430086.aspx
を見ていたら、uFormat の項のところ、
・・・「」または「」を参照しろ・・・と。
久々に機械翻訳のやりっぱなしに出会ってしまった。

範囲選択して Ctrl-C を押すのが続くんで、行頭にカーソル置いて
右クリック一発をできるようにして置こうと思ったんだけど、
朝から萎えた。
552551-546:2010/07/21(水) 11:24:55
独り相撲そのものだか、
SetclipboardData() で渡すハンドルには GMEM_DDESHARE の属性がないと
失敗するようだ。551 に上げたページにはジェンジェン触れてないよ。喝
553552-546:2010/07/21(水) 17:37:58
やりたいことは出来たけど、ちょっと疑問。教えて下さい。

GMEM_DDESHARE を使うっていうと、ハンドルは GlobalAlloc() で取る
だけになりますよね。GlobalAlloc() は古いから HeapAlloc() を勧め
るって聞いたような気がするけど、これはどう考えるのでしょうか。
(HEAP_DDESHARE って用語はぐぐっても出てこない。)
554デフォルトの名無しさん:2010/07/21(水) 19:09:03
>>553
Win16の頃にGlobal/Local系でやり取りする取り決めにしたAPIは、
Win32になったからといって急に変更すると移植に手間がかかってしまう為、
そのままになっている。
APIによる制限が無い使い方なら、Global/Local系を使う理由は無い。
555デフォルトの名無しさん:2010/07/22(木) 02:13:54
>>551
日本語版をアテにするな。
http://msdn.microsoft.com/ja-jp/library/cc428720.aspx あれ?戻り値は……?
http://msdn.microsoft.com/ja-jp/library/cc410588.aspx 関数名はどっちが正しいの……?
556デフォルトの名無しさん:2010/07/22(木) 04:03:00
いいからAPI出せや
557553-546:2010/07/22(木) 07:03:40
>>554
SetclipboardData() を使おうと思ったから過去に引き戻されたわけね。

>>555
激励感謝。アテにしてないから他も見て解決。551 は 545 への応援も
あったと思ってね。
558デフォルトの名無しさん:2010/07/23(金) 21:51:47
いいからAPI出せや
559デフォルトの名無しさん:2010/07/24(土) 10:58:07
Yield()笑
560デフォルトの名無しさん:2010/07/24(土) 11:19:08
Yieldの精神はUmsThreadYieldに受け継がれているのだ。
561デフォルトの名無しさん:2010/07/24(土) 12:18:16
そのAPIは?
562デフォルトの名無しさん:2010/07/24(土) 12:49:59
x64版のWin7か2008R2なら使えるよ。
563デフォルトの名無しさん:2010/07/24(土) 12:51:35
何故 WinMain の返り値を msg.wParam にするの?
0を返すのとどう違うの?
564デフォルトの名無しさん:2010/07/24(土) 12:56:12
WinMainの返り値(終了コード)はGetExitCodeProcessで取得できる。
565デフォルトの名無しさん:2010/07/24(土) 13:00:06
>>563
PostQuitMessageの引数に終了コードを入れておくと、
WM_QUITのWPARAMにそのコードが入っているから。
566デフォルトの名無しさん:2010/07/24(土) 13:17:08
じゃあウィンドウプロシージャの中に
PostQuitMessage(0);
と書いたら、msg.wParam の値は 0 ってこと?
567デフォルトの名無しさん:2010/07/24(土) 15:32:25
yes
568デフォルトの名無しさん:2010/07/24(土) 17:19:04
サンクス
569デフォルトの名無しさん:2010/07/24(土) 19:28:13
APIってきもいよね^^
570デフォルトの名無しさん:2010/07/24(土) 19:38:20
米国石油協会に喧嘩を吹っかけるとな
571デフォルトの名無しさん:2010/07/24(土) 19:58:52
だって石油だぜwwww
きもすぎるwwwww
572デフォルトの名無しさん:2010/07/25(日) 10:44:01
車はガソリンで走るのです

ってCMあった気がする
573デフォルトの名無しさん:2010/07/25(日) 10:44:37
ウィンドウを画面中央に表示させたいときは

HWND hDeskWnd = GetDesktopWindow();
HDC hDeskDC = GetDC(hDeskWnd);

を書いた後に、CreateWindow() の引数で
x座標に GetDeviceCaps(hDeskDC, HORZRES)/2 - WIDTH/2
y座標に GetDeviceCaps(hDeskDC, VERTRES)/2 - HEIGHT/2
(WIDTH, HEIGHT はウィンドウの幅, 高さ)
を指定してあげる方法でOK?
574デフォルトの名無しさん:2010/07/25(日) 10:46:55
モニタ2台あったらどうするつもりだ
575デフォルトの名無しさん:2010/07/25(日) 10:50:32
/2が一回無駄
576デフォルトの名無しさん:2010/07/25(日) 10:52:25
は?
577デフォルトの名無しさん:2010/07/25(日) 10:57:08
引いてから割った方がエコ。
578デフォルトの名無しさん:2010/07/25(日) 10:59:04
実装する時は()付けるべきだろうけど
これくらいならコンパイラがやってくれそうな気もする。
579デフォルトの名無しさん:2010/07/25(日) 11:00:38
結果が違う場合があるのにやるわけない
580デフォルトの名無しさん:2010/07/25(日) 11:11:03
確かに/2は1回で出来たな、サンクス

>>574のような場合も含め
多くの環境に対応させるには、具体的にどのように書いたらいいの?
581デフォルトの名無しさん:2010/07/25(日) 11:11:35
足し算と間違った
582デフォルトの名無しさん:2010/07/25(日) 11:16:35
分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
583デフォルトの名無しさん:2010/07/25(日) 11:31:13
> 分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
> 分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
> 分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
> 分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
> 分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
> 分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
> 分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
584デフォルトの名無しさん:2010/07/25(日) 11:48:32
何が言いたいのか分からない
585デフォルトの名無しさん:2010/07/25(日) 11:50:05
>>582
GetDeviceCaps(hDeskDC, HORZRES) == 1001、WIDTH == 501 の時、さあどうなる?
586デフォルトの名無しさん:2010/07/25(日) 11:51:38
もっともこの場合、割り算が少ない方が正しい結果になるけどな
587デフォルトの名無しさん:2010/07/25(日) 11:53:45
ディスプレイで奇数ドット数なやつ見てみたいわ
588デフォルトの名無しさん:2010/07/25(日) 12:00:04
マルチモニタだとモニタとモニタの間に来ちゃうんじゃなかったかな?このやり方だと。
589デフォルトの名無しさん:2010/07/25(日) 12:00:56
>>585

キャスト入れないと同じになると思うんだけど
int x = 1001/2 - 501/2;
int x2 = (1001 - 501) / 2;

ans. x==250, x2==250
590デフォルトの名無しさん:2010/07/25(日) 12:01:56
キャストっていうか、結果か
591デフォルトの名無しさん:2010/07/25(日) 12:07:00
int GetDeviceCaps();

どうやって、コンパイラが最適化すんだよ。
592デフォルトの名無しさん:2010/07/25(日) 12:15:14
>>591
こんな風にならんのかな?

x = GetDeviceCaps(hDeskDC, HORZRES)/2 - WIDTH/2

x = (int)/2 - (int)/2

x = ((int)-(int)) / 2
593デフォルトの名無しさん:2010/07/25(日) 12:31:40
頑張って最適化しても、APIより先には手が出せない
しかもホットスポットがAPIの中そのものだったりする
594デフォルトの名無しさん:2010/07/25(日) 12:33:25
ダメだこりゃ。
595デフォルトの名無しさん:2010/07/25(日) 12:59:41
いかりやさん…
596デフォルトの名無しさん:2010/07/25(日) 13:17:55
>>588
そうなのか、サンクス

マルチモニタの場合を考えなければ
/2の部分を修正した>>573の方法でOK?
597デフォルトの名無しさん:2010/07/25(日) 14:16:49
>>587
そんなのないと思うでしょ。

MS Virtual PCのような仮想マシンで動かせば簡単に作れる。
大抵、仮想マシン側の画面解像度をホスト側のウィンドウ(のクライアント領域)の
大きさに合わせる機能が備わっているため。
598デフォルトの名無しさん:2010/07/25(日) 14:19:56
まぁどうでもいいけどな
実際はないんだから
599デフォルトの名無しさん:2010/07/25(日) 14:20:58
>>587
自由に解像度が設定できる(仮想含む)グラフィックボードとか、
あるいはウィンドウモードで動作する仮想PC使ったこと無いの?
600デフォルトの名無しさん:2010/07/25(日) 14:33:41
Win32APIはWinFXとなり新しく生まれ変わります。
601デフォルトの名無しさん:2010/07/25(日) 14:37:36
しかし、この大胆な計画はまったく賛同を得られずマイクロソフトは撤回した。
602デフォルトの名無しさん:2010/07/25(日) 16:10:02
そして、周囲に中核を失って残骸となったサブシステムが残った・・・
そして後日、小出しに公開
603デフォルトの名無しさん:2010/07/25(日) 16:56:15
そしてWin32API派と.NET派の戦いが始まった…
604デフォルトの名無しさん:2010/07/25(日) 16:57:18
.NET派なんて中にAPI派を抱えてるから簡単に…
いやなんでもないです
605デフォルトの名無しさん:2010/07/25(日) 17:09:52
奴らを寝返らせるのは簡単ってかw
606デフォルトの名無しさん:2010/07/25(日) 19:51:36
>>573
こんな感じの実装になると思われ。(間違っていたらごめん。)

DWORD g_window_style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;

rect2.top = 0;
rect2.left = 0;
rect2.right = MAX_SCREEN_WIDTH; // クライアント領域の幅
rect2.bottom = MAX_SCREEN_HIGHT; // クライアント領域の高さ
AdjustWindowRect(&rect2, g_window_style, TRUE);

rect.left = ( GetSystemMetrics(SM_CXSCREEN) - (rect2.right - rect2.left) ) / 2;
rect.top = ( GetSystemMetrics(SM_CYSCREEN) - (rect2.bottom - rect2.top) ) / 2;
rect.right = rect2.right - rect2.left;
rect.bottom = rect2.bottom - rect2.top;

CreateWindow関数にg_window_styleとrectを渡す
rect.left // ウィンドウの横方向の位置
rect.top // ウィンドウの縦方向の位置
rect.right // ウィンドウの幅
rect.bottom // ウィンドウの高さ
607デフォルトの名無しさん:2010/07/25(日) 21:34:11
WM_CREATEの中でSetWindowPosしないと、
どのモニタで起動しようとしたのか把握できない気がする。
後は、MonitorFromWindowで対象モニタの情報を取って、
作業領域の中央に配置するように計算すれば良い。
608デフォルトの名無しさん:2010/07/26(月) 07:42:48
AutoHotkey で Win32API を使っています。
ノート PC の電源状態を取得する目的で、以下のスクリプトを使用しています。

; stat はモニター電源が On なら 1、Off なら 0 を返す
LCDPowerState() {
hDisp := DllCall("CreateFile", "Str", "\\.\LCD", "UInt", 0xC0000000, "UInt", 3, "UInt", 0, "UInt", 3, "UInt", 0, "UInt", 0, "Ptr")
DllCall("GetDevicePowerState", "UInt", hDisp, "IntP", stat)
DllCall("CloseHandle", "UInt", hDisp)
Return, stat
}

しかし本スクリプトは内蔵モニターと外部モニターを区別しないようで、
特に外部モニターを外した後、常に 0 または 1 を返し続けることがあります。
内蔵モニターだけを監視するには、どのようにハンドルを取得すべきなのでしょうか。

関連がありそうなリンクを以下に列記します。

http://social.msdn.microsoft.com/Forums/ja-JP/vcgeneralja/thread/c83373d7-20de-4042-9804-6aabe0a93d5f/
http://homepage1.nifty.com/MADIA/vc/vc_bbs/200411/200411_04110001.html

宜しくお願いします。
609デフォルトの名無しさん:2010/07/26(月) 15:19:51
>>606,607
サンクス
とても勉強になりました
610デフォルトの名無しさん:2010/07/26(月) 17:13:28
子プロセスから親プロセスが所有するWindowにウィンドウメッセージを送りたいのですが、
ウィンドウハンドルはどのように渡せば良いでしょうか?

HWNDをポインタとして数値表記をコマンドラインで渡す方法がよくつかわれているようですが、
HANDLEはポインタと互換であることが保証されているのでしょうか?

なお、親になるプロセスは複数インスタンスが同時に実行される可能性があり、かつ、
送信先のWindowのタイトルもユニークではないので探して送るはうまくありません。
611デフォルトの名無しさん:2010/07/26(月) 18:47:22
>>610
ヘッダのtypedefくらい見ろよクズ

typedef void *HANDLE

となってます
まんまポインタです
612デフォルトの名無しさん:2010/07/26(月) 19:16:18
それは現在の実装がそうなっているというだけで、保証されているとは言いませんね。
613デフォルトの名無しさん:2010/07/26(月) 19:18:33
じゃあ保証されてないからそのまま死ねば?
614デフォルトの名無しさん:2010/07/26(月) 19:19:50
知らないなら黙っててください
615デフォルトの名無しさん:2010/07/26(月) 19:20:24
はぁ手前が黙れ
616デフォルトの名無しさん:2010/07/26(月) 19:21:19
それを言い出したらずーっとWindowsである保証もねーよな。
617デフォルトの名無しさん:2010/07/26(月) 19:23:07
アホな人が質問するのは良いですがアホな人が回答するのは控えてください
618デフォルトの名無しさん:2010/07/26(月) 19:23:32
>>617
アホはいいですけど低知能な質問はお断りです
619デフォルトの名無しさん:2010/07/26(月) 19:24:20
>>617
いやよくないよ。
620デフォルトの名無しさん:2010/07/26(月) 19:25:11
>>617
そもそもAPIの質問じゃないじゃん。
スレタイも読めない奴は小学校から出直せよ。
621デフォルトの名無しさん:2010/07/26(月) 19:27:58
>>617
気分はどうだアホ
622デフォルトの名無しさん:2010/07/26(月) 19:30:07
で保証されてんですか?
623デフォルトの名無しさん:2010/07/26(月) 19:30:54
>>622
保証されてんですか(笑)
624デフォルトの名無しさん:2010/07/26(月) 19:31:13
>>622
スレタイ読めるなら消えろ
625デフォルトの名無しさん:2010/07/26(月) 19:31:38
ID出ないからやりたい放題だなオイ
626デフォルトの名無しさん:2010/07/26(月) 19:31:58
>>622
かーもね
627デフォルトの名無しさん:2010/07/26(月) 19:32:47
保証されてるか聞いてんのにヘッダー見ろとかw
628デフォルトの名無しさん:2010/07/26(月) 19:34:42
>>627
じゃあMSに電話して聞けよ
アーキテクチャーが正しいかどうかなんて部外者には分かんねーぞ
本だって「書いた時点ではそうなってる」以上のことは言えないんだから
629デフォルトの名無しさん:2010/07/26(月) 19:35:08
>>627
保証書でも探して読んでろよクズ
630デフォルトの名無しさん:2010/07/26(月) 19:35:36
>>627
お前にはそれで十分だろ。
631デフォルトの名無しさん:2010/07/26(月) 19:35:51
UZEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
632デフォルトの名無しさん:2010/07/26(月) 19:36:40
じゃあ最初から「MSに電話しろ」って答えるか、黙ってれば?w
633デフォルトの名無しさん:2010/07/26(月) 19:37:57
>>632
スレタイ見てすらいないお前がな。
634デフォルトの名無しさん:2010/07/26(月) 19:38:09
>>632
そうだな電話しろ
635デフォルトの名無しさん:2010/07/26(月) 19:38:38
>>632
そうだね黙ってればよかったねお前がね
636デフォルトの名無しさん:2010/07/26(月) 19:40:02
夏だなあ
637デフォルトの名無しさん:2010/07/26(月) 19:40:34
質問も汲み取れないから仕様書いつも読み違えてバグばっかりなんだよお前らはw
638デフォルトの名無しさん:2010/07/26(月) 19:40:42
いんさまーばけーしょん
639デフォルトの名無しさん:2010/07/26(月) 19:40:56
>>637
お前の存在がバグだろ
640デフォルトの名無しさん:2010/07/26(月) 19:41:15
>>637
自己紹介しなくて良いよ。
641デフォルトの名無しさん:2010/07/26(月) 19:41:34
まぁでも保証してるのかどうか聞いてるのは痛すぎると思うわw
642デフォルトの名無しさん:2010/07/26(月) 19:42:29
保証が必要じゃAPIなんか使えないからな
怖くて
643デフォルトの名無しさん:2010/07/26(月) 19:43:37
まだ続くの?
644デフォルトの名無しさん:2010/07/26(月) 19:45:57
俺はもう飽きたからいい
645デフォルトの名無しさん:2010/07/26(月) 19:46:27
WindowsSDKのドキュメントにも書かれている以上
一応信用して使っておいても問題無いんじゃないかな。
まあ、Win64の話が出てきたと思ったら
DialogProcの戻り値がBOOLからINT_PTRに変わったなんて事もあるし、
諦めも肝心だったりするw
646デフォルトの名無しさん:2010/07/26(月) 20:02:45
>>645
あー、それそれ。やっとまともな回答者が現れた。
Windows Data Typesに書かれてますね。

>>624
スレタイ読めなくて消えるべきはキミのようだ。www
647デフォルトの名無しさん:2010/07/26(月) 20:46:28
ああ、まだやってたの?
暇だね
648デフォルトの名無しさん:2010/07/26(月) 23:02:35
sizeof(int *) <= sizeof(int)
であれば問題ない
649デフォルトの名無しさん:2010/07/26(月) 23:32:11
> DialogProcの戻り値がBOOLからINT_PTRに変わったなんて事もあるし、
それのどこに問題があるの?
result==TRUEやresult!=TRUEでチェック入れてた人は困るかもしれないけど
そんな人って存在するの?
650デフォルトの名無しさん:2010/07/26(月) 23:53:50
悪あがきw
651デフォルトの名無しさん:2010/07/26(月) 23:56:41
リファレンスにBOOLと書いてあった以上居るんじゃあねえのか
652デフォルトの名無しさん:2010/07/27(火) 00:09:51
DialogProcを書くやつがGetMessageの件を知らんとは思えん
653デフォルトの名無しさん:2010/07/27(火) 01:06:50
このスレにはそれを知らない自称回答者が沢山いる。バカなんだから黙ってりゃいいのに。
654デフォルトの名無しさん:2010/07/27(火) 01:13:31
バカなくせにしゃしゃり出ておまけに逆切れまでしてすいませんでした
655デフォルトの名無しさん:2010/07/27(火) 01:17:24
GetMessageなんて定型で使ってる奴多いだろ
Mainにコピペで済ませてるだけなら知らなくても不思議ではない
656デフォルトの名無しさん:2010/07/27(火) 01:20:49
夜分遅くまでたのしそうっすね
657デフォルトの名無しさん:2010/07/27(火) 12:52:32
INT_PTRはポインタじゃなくてポインタサイズの整数じゃ!
と何度も言う必要があるな。ひどい名前付けてくれたもんだぜ
658デフォルトの名無しさん:2010/07/27(火) 18:50:42
659デフォルトの名無しさん:2010/07/27(火) 18:52:46
誰だよその酷い記事書いたのはw
660デフォルトの名無しさん:2010/07/27(火) 20:10:25
つまり_PTR追加しときゃ間違いないってことだ
661デフォルトの名無しさん:2010/07/27(火) 22:28:35
APIがどんどんカオスになってくる
662デフォルトの名無しさん:2010/07/28(水) 12:34:02
整数型にアドレスぶっこむ奴らの気が知れない
そんな奴は頼むからプログラム書くな
いつか飛行機が墜ちる
663デフォルトの名無しさん:2010/07/28(水) 13:02:10
ポインタに演算なぞ以ての外
Cの使用は法律で禁止すべき
OSもPascalで書け
664デフォルトの名無しさん:2010/07/28(水) 13:31:24
Adaがあるだろ
665デフォルトの名無しさん:2010/07/28(水) 13:50:51
キチガイ語り場!
666デフォルトの名無しさん:2010/07/28(水) 14:17:04
Jhon、、、Ada、、、、
667デフォルトの名無しさん:2010/07/28(水) 14:18:10
しまったJohnだった
668デフォルトの名無しさん:2010/07/28(水) 18:08:29
Jホンェ・・・
669デフォルトの名無しさん:2010/07/28(水) 23:14:22
>>649
BOOLに対して、result==TRUEやresult!=TRUEは禁止だろうけど、result!=FALSEはありだし互換性はあるな。
670デフォルトの名無しさん:2010/07/29(木) 01:29:48
>>659
恣岡悄。記事の名義はch3。
671デフォルトの名無しさん:2010/07/29(木) 23:56:36
Windowsフォトビューアーでzipファイル内の画像をダブルクリックして開いたあと、
左右矢印のボタンを押すとzipファイル内の別の画像を表示できますが、
これはどうやったら実現できるのでしょうか?
普通に関連付けただけでは、1個だけ画像が展開された一時フォルダのパスが
渡されるので、元のzipファイルには他にどんな画像が含まれていたのか
知ることができません。
672デフォルトの名無しさん:2010/07/30(金) 00:01:31
http://www.pkware.com/documents/casestudies/APPNOTE.TXT
自分で中身読めば良いだろ
ZIPなんかたいしたフォーマットじゃねえ
673デフォルトの名無しさん:2010/07/30(金) 00:22:06
>>672
zipファイルのパスがわかれば自分で開いて読むのですが、
一時フォルダのパスしかわからないのです…
674デフォルトの名無しさん:2010/07/30(金) 09:36:16
apiとどういう関係が?
675デフォルトの名無しさん:2010/07/30(金) 09:58:36
パスってフォルダのことか。パスワードのことかと思った。
676デフォルトの名無しさん:2010/07/30(金) 18:43:20
>>674
Windowsフォトビューアーがzipファイルのフルパスを取り寄せる方法は
APIとして公開されているのでしょうか?
677デフォルトの名無しさん:2010/07/30(金) 20:26:45
レジストリのHKCRでjpegfile/shell/open/DropTargetとか
登録されているのが何か怪しい。BMPとかPNGとかも似たような感じだし。
ShellNamespace系のインターフェースで受け取れたりとかするんじゃないか?
試すの面倒そうだから後は知らないけど。
678デフォルトの名無しさん:2010/07/30(金) 20:31:06
C言語は読めるが日本語が読めないので>>672は読めない
679デフォルトの名無しさん:2010/07/30(金) 20:34:20
自己解決しました。
COMローカルサーバーを作成してIDropTargetとIObjectWithSiteを実装
→IObjectWithSite::SetSite()で設定されたpUnkSiteからIServiceProviderをQI
→IServiceProvider::QueryService()でIShellBrowserを取得
→IShellBrowser::QueryActiveShellView()でIShellViewを取得
→QIでIFolderViewを取得
→IFolderView::GetFocusedItem()とIFolderView::Item()でPIDLを取得
→IFolderView::GetFolder()でIShellFolderを取得
で、zipファイルを表すIShellFolderとダブルクリックした画像のPIDLに到達できました。
一時フォルダに無意味に画像ファイルが展開されてしまうようなのですが、
Windowsフォトビューアーでもそうなるので仕様なのだと思います。お騒がせしました。
680デフォルトの名無しさん:2010/07/30(金) 20:35:38
あ、更新する前に書き込んでしまった
>>677
おっしゃる通りDropTargetキーとShell Namespaceが鍵でした。ありがとうございます。
681デフォルトの名無しさん:2010/07/31(土) 00:12:50
よく判ったな
シェル関係とか関わりたくねえ
682デフォルトの名無しさん:2010/07/31(土) 17:50:41
http://msdn.microsoft.com/ja-jp/library/cc410911.aspxによると
MapVirtualKeyExは仮想キーコードを文字列に変換出来るとあるのですが、
逆に文字列を仮想キーコードに変換するには、どうすれば良いのでしょうか。
683デフォルトの名無しさん:2010/07/31(土) 19:57:30
文字列・・だと・・?
684デフォルトの名無しさん:2010/07/31(土) 20:14:00
言葉足らずで申し訳ないです。
文字列とは、Ctrl+Q,Shift+Ctrl+Eといったもののことです。
685デフォルトの名無しさん:2010/07/31(土) 20:16:37
そんなAPIないだろ
686デフォルトの名無しさん:2010/07/31(土) 20:24:48
MapVirtualKeyExの逆という意味なら、VkKeyScanExとかか?
687デフォルトの名無しさん:2010/07/31(土) 20:52:14
>>684
ホットキーのプレビュー表示用(スペース入りだけど)はそんな感じだし
ByIdに対するByNameだから普通にありそうな気もするけど
俺ならとりあえず
std::map<std::string,WORD>
とかで変換用のテーブル作っちゃうかな
IDEの進歩のおかげでリファクタリングも容易ですし
688デフォルトの名無しさん:2010/08/01(日) 14:55:27
VBのSendKeysみたいなやつか?
689デフォルトの名無しさん:2010/08/02(月) 00:39:58
WinTab.dllを用いずに、ペンタブ筆圧を取得する方法ってありませんか?
Win7+.Net4+Silverlightとかで普通に取得できる事をXPとかじゃできそうになくて。

WinTabのソースコードでも公開されてれば自分で解析するんですが…。
ご存知の方はご教示宜しくお願い致します。
690デフォルトの名無しさん:2010/08/02(月) 00:46:27
あ、それから
知らない人は黙っていてください。
691デフォルトの名無しさん:2010/08/02(月) 01:00:48
そうはいきませんよ(ニヤリ
692デフォルトの名無しさん:2010/08/02(月) 07:06:26
XPだと、Win32 APIでは無理。
ということで、スレ違いだな。
693デフォルトの名無しさん:2010/08/02(月) 07:59:32
The Linux Wacom Project でソース後悔されてないの?
694デフォルトの名無しさん:2010/08/02(月) 10:51:22
自力で通信すれば可能だけど知らない人は黙ってろっていうから
詳しくは書かないでおくわ
695デフォルトの名無しさん:2010/08/02(月) 11:39:49
いい心がけ
696デフォルトの名無しさん:2010/08/02(月) 15:51:34
XPのGetPrivateProfileSectionNamesで、存在しないセクション名が取得されることってあるんですか?
なんか、ほかの人のところで動かしたら、そんな状態らしいんです
697デフォルトの名無しさん:2010/08/02(月) 15:56:34
レジストリにマッピングしてるとか?
698デフォルトの名無しさん:2010/08/04(水) 12:34:57
ノートPCでバッテリーが何%まで減ったらバッテリー切れの警告が出るか、調べるAPIを教えてください
OSはXPです
699デフォルトの名無しさん:2010/08/04(水) 13:08:50
>>698
CallNtPowerInformation
700デフォルトの名無しさん:2010/08/05(木) 09:21:17
>>699
ありがとうございます
なんとかなりそうです
701デフォルトの名無しさん:2010/08/05(木) 15:58:46
コントロール(CScrollWindowを継承)に、DrawTextやら何やらで、WM_Paint時に描画したのですが、
スクロールさせると、文字が潰れるというか、表示がめちゃくちゃになってしまいます。
ブラウザやテキストエディタのように、スクロールさせても整然と表示させるには、
どういった処理をすればよいのでしょうか?
702デフォルトの名無しさん:2010/08/05(木) 20:28:52
全く実装内容が不明なCScrollWindowが怪しい。
703デフォルトの名無しさん:2010/08/05(木) 20:54:58
リストビューのアイコンにイメージリストを使わずにHICONを直接出すには
オーナードローで実装するほかにないでしょうか
704デフォルトの名無しさん:2010/08/05(木) 21:50:28
カスタムドローでもいけるヨ
705デフォルトの名無しさん:2010/08/06(金) 17:49:24
サービスプログラムからログインユーザの権限でGUIアプリを起動させることは可能でしょうか?
706デフォルトの名無しさん:2010/08/06(金) 18:26:12
可能
がんがれ
707デフォルトの名無しさん:2010/08/07(土) 00:37:28
低水準キーボードフックをするdllを書いたんですけど
DirectX利用のフルスクリーンのものを起動している状態だと機能しません
DirectInputよりも低水準キーフックのほうが先に受け取れると聞いたのですが
これは妨げられていると考えていいのでしょうか
windows 7 64
708デフォルトの名無しさん:2010/08/07(土) 01:58:28
DirectX利用のフルスクリーンのものを起動したあとに
キーボードフックする
709703:2010/08/07(土) 20:16:16
カスタムドローでやってみたところ出来ました
ただ、アイコンを描画するための余白を空けるために
イメージリストは必要(空白のアイコンを1つ入れるだけ)でしたが
710デフォルトの名無しさん:2010/08/07(土) 21:07:55
事故解決
711デフォルトの名無しさん:2010/08/07(土) 21:12:43
とんだアクシデントでしたね
712デフォルトの名無しさん:2010/08/07(土) 23:00:05
>>709
やり方間違えてるわ、それ
713デフォルトの名無しさん:2010/08/08(日) 02:50:22
拡張子以外でEXEかSCR(スクリーンセーバー)か見分ける方法ってありますか?
自分で見た限りではスクリーンセーバーと普通のEXEには、全く違いを見つけることはできませんでした。
714デフォルトの名無しさん:2010/08/08(日) 02:51:17
>>713
というかそもそも同じもの
715デフォルトの名無しさん:2010/08/08(日) 11:44:15
>>712
カスタムドローの通知メッセージの時に使う
構造体を探してもHICONを入れるところが見つからないですが‥‥
716デフォルトの名無しさん:2010/08/08(日) 15:53:10
くだスレでもよかったんですが、ここでオナガイシマス
インスタンスハンドル型のデータを表す、HINSTANCE これってなんて読んだらいいのぉ?
717デフォルトの名無しさん:2010/08/08(日) 15:57:44
インスタンスハンドル型
718デフォルトの名無しさん:2010/08/08(日) 16:00:14
LPCSTRをロングポインターコンストストリング型と読んでる奴がいるかどうかくらい不毛な話だ
719デフォルトの名無しさん:2010/08/08(日) 16:41:17
いないだろ?
720デフォルトの名無しさん:2010/08/08(日) 17:39:17
WCHARを「わちゃー」って呼んでる奴いるだろ?
721デフォルトの名無しさん:2010/08/08(日) 17:44:44
最近intとかcharを書いたことがない

LONGとかのマクロばっかり書いてるとせっかくの構文着色が意味なくなるな
色がついてるの条件文とreturnくらいだ・・・
722デフォルトの名無しさん:2010/08/08(日) 18:20:48
usertype.datくらい書けよw
723デフォルトの名無しさん:2010/08/08(日) 18:21:33
MSDNではLONGはlong、INTはintになってたりするけどな
724デフォルトの名無しさん:2010/08/08(日) 19:22:07
WCHARとwchar_tの違いがわからん
725デフォルトの名無しさん:2010/08/08(日) 19:33:54
(ノ∀`) ワチャー
726デフォルトの名無しさん:2010/08/08(日) 20:43:31
wchar_tとかへんてこなのがC標準に入るとか意味わからん
727デフォルトの名無しさん:2010/08/08(日) 23:37:16
Win32に限るなら違いはない
gccだとsizeof(wchar_t) == 4だったりするのでMinGWではわざわざ
sizeof(wchar_t) == 2にするためのコンパイルオプションを使ってる
728デフォルトの名無しさん:2010/08/08(日) 23:43:17
dwchar_tとかに名前かえろ
729デフォルトの名無しさん:2010/08/08(日) 23:48:03
こういう文字コード、文字セットが絡む部分はコンパイラ仕様じゃなくてライブラリ側で対応するのがスマートだな
charではなく最初からbyte、unsigned byteにしとけばよかったんだ
730デフォルトの名無しさん:2010/08/08(日) 23:48:21
Microsoftが自社の都合だけで仕様変えられる独自拡張じゃないので
731デフォルトの名無しさん:2010/08/09(月) 00:20:35
多くのアプリケーションの設定画面のような、
設定画面が開いている間は他のウィンドウの操作を一切受け付けないような
ウィンドウってどうやって作るの?
他のウィンドウにフォーカスを当てようとすると
警告音が鳴って、タイトルバーが点滅するようなウィンドウなんだけど
732デフォルトの名無しさん:2010/08/09(月) 00:30:15
モーダルダイアログでググればいいとおもうよ
733デフォルトの名無しさん:2010/08/09(月) 00:48:57
flashって簡単ですか?
mxml?
734デフォルトの名無しさん:2010/08/09(月) 00:49:18
お前は何の話をしているんだ
735デフォルトの名無しさん:2010/08/09(月) 00:55:14
>>731
アプリケーションウインドウの手前に設定用のウインドウを出すために
アプリケーションウインドウをオーナーウインドウする。

操作を受け付けないようにするには、EnableWindowで無効にする。

この2つの組み合わせで出来る。

DialogBoxを使う場合はこれを勝手にやってくれるので、自分でやる必要はない。
736デフォルトの名無しさん:2010/08/09(月) 06:31:31
何もMFCの実装のような真似をしなくても、
普通はWS_POPUPで事足りるだろ。
737デフォルトの名無しさん:2010/08/09(月) 08:37:11
>>732,735,736
レスありがとう
>>735の方法で出来ました!
738デフォルトの名無しさん:2010/08/09(月) 09:35:23
感動した!!
739デフォルトの名無しさん:2010/08/09(月) 10:35:03
子ウィンドウを親ウィンドウの後ろに表示するにはどうしたらいい?
740デフォルトの名無しさん:2010/08/09(月) 17:49:56
サービスプログラムから、ログインユーザ名を取得するにはどのようにすればよいでしょうか?
GetUserName()だと当たり前ですが、"SYSTEM"を取得してしまいます。
741デフォルトの名無しさん:2010/08/09(月) 17:55:14
>>739
子ウィンドウを監視して前面に来たら後ろに戻すとか
親ウィンドウをモーダル化するとか。

>>740
泥臭いやり方だと、プロセス一覧を作って
プロセスのユーザー名からSYSTEM関係を除いて一番多い奴
とか。
742739:2010/08/09(月) 18:12:21
>> 741
レスありがとうございます。
ただ、もう少し正確にログインユーザ名を取得する方法をしりたいです・・・
レジストリなどのどこかに記述されていないでしょうか?
743デフォルトの名無しさん:2010/08/09(月) 18:34:51
レジストリにあると思うならregeditで検索すりゃkeyぐらいわかるだろ
744デフォルトの名無しさん:2010/08/09(月) 18:39:07
ターミナルとかリモートデスクトップとかで複数ユーザーがいたり
そもそもログインしてないとかどうすんの
745デフォルトの名無しさん:2010/08/09(月) 19:20:09
>>739
コンソールセッションなら
WTSGetActiveConsoleSessionId
WTSQuerySessionInformation(WTSUserName)
746デフォルトの名無しさん:2010/08/09(月) 19:21:06
×739
○740
747デフォルトの名無しさん:2010/08/10(火) 12:22:42
クリップボードを監視するソフトを作っています。
SetClipboardViewerとChangeClipboardChainを使い
WM_CHANGECBCHAINとWM_DRAWCLIPBOARDのメッセージ処理を書いて、
普通に使う分には目的に沿ったソフトを作ることができました。
ただ、クリップボードチェイン内のプログラムの異常終了・強制終了などが原因で
クリップボードチェインが切れるとクリップボード監視動作も止まってしまいます。
検索してみるとクリップボードチェィン切れ対策をしなければならないということだけはわかったのですが
クリップボードチェィン切れ対策とは具体的にどのような事をすればいいのでしょうか?

タイマーなどで、何秒かおきに
ChangeClipboardChain
SetClipboardViewer
を呼び出して再設定し直すという方法は、やってみたのですが
WM_DRAWCLIPBOARDに無限ループ的にメッセージが
飛んでくることになってしまい、うまくいきませんでした。

ご存知の方がおられましたら、よろしくお願いします。
748デフォルトの名無しさん:2010/08/10(火) 12:33:00
スパイウエアのソースを参考にするといい
749デフォルトの名無しさん:2010/08/10(火) 12:40:19
監視とか覗きとかをやろうとする人間にろくな奴はいない。
750デフォルトの名無しさん:2010/08/10(火) 12:58:40
それでは、通過するIPパケットを監視して、アドレス変換をおこなっている
いわゆる家庭用BBルーターを使用している>>749はカスという事で良いですね。
ftpのルーター超えでは覗きまでやってるので、カスの極みですね。
751デフォルトの名無しさん:2010/08/10(火) 13:05:39
>>748
>>749
すいません。書き方が悪かったです。
ソフトの大まかな機能は、クリップボードの履歴をとって再利用するだけのソフトです。
752デフォルトの名無しさん:2010/08/10(火) 13:06:03
>家庭用BBルーター
わざわざ「家庭用BB」を付けるあたり、だれもが使っているという発想が初心者臭くていいよね。
753デフォルトの名無しさん:2010/08/10(火) 13:35:52
うん。
その初心者にもわかる自己矛盾に気付かなかった>749が、より一層惨めになるでしょ。
754デフォルトの名無しさん:2010/08/10(火) 13:45:19
郵便配達員が宛先を確認するのと、手紙の中身をのぞく違いが分かっていない時点で、
確かに惨めだよね。
755デフォルトの名無しさん:2010/08/10(火) 13:45:36
ルーターのプログラムを作ったやつがカスなんだろw
756デフォルトの名無しさん:2010/08/10(火) 13:51:15
>>754
多分わかってないのはキミの方だと思うよ。せっかくftpってキーワード書いてやったのに。
757デフォルトの名無しさん:2010/08/10(火) 13:59:56
FTPもデータを覗いている訳じゃない。
恥の上塗りを繰り返すのが趣味なんだろうけどね。
758デフォルトの名無しさん:2010/08/10(火) 14:38:42
夏だなあ
ああ夏だなあ
夏だなあ
759デフォルトの名無しさん:2010/08/10(火) 14:52:26
他のプログラムにキー入力イベントを送るプログラムを作りたいのですがどうやったらいいですか
760デフォルトの名無しさん:2010/08/10(火) 19:00:41
まずVisualStudio を起動します。
761デフォルトの名無しさん:2010/08/10(火) 19:07:32
> FTPもデータを覗いている訳じゃない。
> 恥の上塗りを繰り返すのが趣味なんだろうけどね。
うわ〜〜〜。ここまで恥の上塗りを繰り返す人も珍しい。w
762デフォルトの名無しさん:2010/08/10(火) 19:13:29
具体的に突っ込めないからって人格攻撃て
763デフォルトの名無しさん:2010/08/10(火) 19:18:18
>>760
起動しました。
ターゲットのプログラムのウィンドウハンドルを得るにはどうしたらいいですか。
764デフォルトの名無しさん:2010/08/10(火) 19:32:51
>>763
FindWindow関数で検索するといいよ。
そこからさらに、少し調べる必要があるけど、ぐぐればわかるからがんばって。
765デフォルトの名無しさん:2010/08/10(火) 19:39:50
うわ〜〜〜
> 具体的に突っ込めないからって人格攻撃て
って、言う事は

> FTPもデータを覗いている訳じゃない。
まさかこれで、具体的に突っ込んでるつもりなんだろうか。
無知とはまさに恐ろしい。www
766デフォルトの名無しさん:2010/08/10(火) 20:04:15
なんで無駄に煽り合うの?
767デフォルトの名無しさん:2010/08/10(火) 20:46:50
プログラマはストレスがたまっている
768デフォルトの名無しさん:2010/08/10(火) 20:47:46
次スレのテンプレにはクリップボード関係は禁止、を入れるべきだな
769デフォルトの名無しさん:2010/08/10(火) 21:27:10
どちらかというと他のプログラムに干渉するのが、板のルールに引っかかるんだけどな。
770デフォルトの名無しさん:2010/08/11(水) 00:28:36
そんなこと言ったらOSの存在自体が板のローカルルール違反だわ
771デフォルトの名無しさん:2010/08/11(水) 07:22:52
だれもOSの作り方なんて聞いていないが、幻覚が見えるんだろう。
病院へ行くことをお勧めする。
772デフォルトの名無しさん:2010/08/11(水) 07:26:47
見えない敵と戦いすぎだな糖質
773デフォルトの名無しさん:2010/08/11(水) 07:32:31
なんで無駄に罵り合うの?
774デフォルトの名無しさん:2010/08/11(水) 10:02:54
プログラマはストレスがたまっている
775デフォルトの名無しさん:2010/08/11(水) 11:31:33
プロ        レス
776デフォルトの名無しさん:2010/08/11(水) 11:40:12
見えない敵と戦いすぎだな糖質
777デフォルトの名無しさん:2010/08/11(水) 11:40:40
だれもOSの作り方なんて聞いていないが、幻覚が見えるんだろう。
病院へ行くことをお勧めする。
778デフォルトの名無しさん:2010/08/11(水) 11:43:05
クリップボードの内容を定期的にクリアする常駐ソフトがスタートアップ
される環境です。タスクマネージャから終了させてもすぐに再開
してしまいます。このソフトを起動するのはこの場合別の常駐
プロセスでしょうか?それとも別のソフトウェア(エクスプローラ)
とかでしょうか?それを判別するプログラム或はAPIってありますか?
779デフォルトの名無しさん:2010/08/11(水) 11:57:33
次スレのテンプレにはクリップボード関係は禁止、を入れるべきだな
780デフォルトの名無しさん:2010/08/11(水) 11:58:26
>>778
NtQuerySystemInformationでSYSTEM_PROCESS_INFORMATIONを取得すれば親プロセスのプロセスIDが確認できる
781デフォルトの名無しさん:2010/08/11(水) 12:12:13
すげー、デジャヴ。
コピペ禁止するために生徒のPCに組み込む>>778なプログラムの作り方聞いて
叩かれまくってた先生が居た気がする。
782デフォルトの名無しさん:2010/08/11(水) 12:26:53
っつーかわざわざ車輪の再発明せんでも
フリーのツールいっぱいある気がす
783デフォルトの名無しさん:2010/08/11(水) 12:48:54
他のプログラムにマウスの入力を送る方法で、sendmessage()以外の方法って何がありますか
784デフォルトの名無しさん:2010/08/11(水) 13:01:26
偽マウスドライバを作って、そいつから送らせる。
785デフォルトの名無しさん:2010/08/11(水) 13:02:19
SendInputとか
786デフォルトの名無しさん:2010/08/11(水) 13:47:14
画面にドッキリ画像を表示 + ちょっと大きめの音を出す
んで、びっくりしたユーザーの振動がマウスに伝わる。
もちろんフォーカスをターゲットとなるプログラムに合わせておく。

これでバッチリ
787デフォルトの名無しさん:2010/08/11(水) 17:33:27
SendInputいいすね。hwndなしでも使えるし。
788デフォルトの名無しさん:2010/08/12(木) 00:26:08
>>786
ちょっとワロタw
789デフォルトの名無しさん:2010/08/12(木) 00:29:23
乱数の種に使えそうだ
790デフォルトの名無しさん:2010/08/12(木) 01:30:39
どこのF.E.A.Rですか
791デフォルトの名無しさん:2010/08/12(木) 10:28:50
笑ったけど、フォーカスってキーボード用・・・
792デフォルトの名無しさん:2010/08/12(木) 19:46:00
メモリデバイスコンテキストに関連付けたピクセルバッファを
RGB(0x77,0x77,0x77)で埋め尽くし
その後にDrawIconEx(フラグはDI_IMAGE | DI_MASK指定)を使って、アイコンを描画し
ピクセルバッファから、RGB(0x77,0x77,0x77)では無い部分を抜き出すコードを書いて動いているんですが

極々一部のPCで動かすと、RGB(0x77,0x77,0x77)で埋め尽くした部分が
DrawIconEx後に見ると、0x00で埋め尽くされているんですが、これは環境に依存してしまうんでしょうか?
793デフォルトの名無しさん:2010/08/13(金) 01:09:41
ピクセルバッファって何?
794デフォルトの名無しさん:2010/08/13(金) 02:02:56
richeditコントロールに画像を張り付ける事は
可能ですか?
795デフォルトの名無しさん:2010/08/13(金) 02:20:00
>>794
可能だけど、わりと面倒
796デフォルトの名無しさん:2010/08/13(金) 04:22:56
>>792
ピクセルバッファにクリエイトコンパチブルビットマップとセレクトビットマップしていないと予想
797デフォルトの名無しさん:2010/08/13(金) 04:30:42
カタカナで会話するなぁーッッッッッッッッッッッ!!
798デフォルトの名無しさん:2010/08/13(金) 19:02:49
ぴくせるばっふぁにくりえいとこんぱちぶるびっとまっぷとせれくとびっとまっぷしていないと予想
799デフォルトの名無しさん:2010/08/13(金) 19:56:29
DrawIconExは成功しているのかどうか
800デフォルトの名無しさん:2010/08/13(金) 23:47:11
極々一部で動かないマシンは対象外でいいだろ
801デフォルトの名無しさん:2010/08/14(土) 01:56:22
Win32APIのツリービューでTVS_CHECKBOXESで全項目にチェックボックスが付くのは解ったのですが、
子項目はそのままで、親項目のみにチェックボックスを付ける方法などはないのでしょうか?

オーナードローは出来ないみたいですし、カスタムドローでいけるかと思ったのですが駄目でした。

よろしくお願いします。
802デフォルトの名無しさん:2010/08/14(土) 14:27:23
SendMessage, PostMessage, SendInputを使用して他プログラムにキーボード入力を行う
プログラムを作成しているのですがうまくいきません。
自作の実験用プログラムに対しては正常動作しました。
またspy++で普通にキーボード入力して発行されるメッセージと同じメッセージを
プログラムから送ってみましたがダメでした。
ターゲットのプログラムがWM_KEYDOWNメッセージを無視してGetAsyncKeyStateなどで
キー入力を見ているように思うのですが、こういう場合はどうやればターゲットのプログラムに
キー入力を送れますか。
803デフォルトの名無しさん:2010/08/14(土) 20:12:51
dllinjection
804デフォルトの名無しさん:2010/08/14(土) 20:17:34
素人には使いこなせません
805デフォルトの名無しさん:2010/08/14(土) 20:24:13
いいからAPI出せや
806デフォルトの名無しさん:2010/08/14(土) 20:26:28
detteiu
807デフォルトの名無しさん:2010/08/14(土) 20:28:20
VirtualAllocEx
VirtualProtect
WriteProcessMemory
CreateRemoteThread
ImageDirectoryEntryToData
かな。
グローバルフック使う方がリモートスレッド作成する手間が少ないか。
808デフォルトの名無しさん:2010/08/14(土) 20:47:10
>>802
何のネトゲ?
809デフォルトの名無しさん:2010/08/14(土) 21:10:51
ちょっと実験で、
WndProcの中にcase WM_KEDOWN: return 0;
メインループの中にGetAsyncKeyState(VK_DOWN)
を記述したテスト用プログラムに対して、別のプログラムから
SendMessage(target_hwnd, WM_KEYDOWN, VK_DOWN, 0)
してみたら、SendMessageの入力は無視されて、直接↓キー押したら反応して、
今回のターゲットのプログラムと同じ挙動になった。

GetAsyncKeyStateの中で参照してるキーの押下情報はWM_KEYDOWNで書き換えられるパラメータとは
別個にあるみたいですね。GetAsyncKeyStateに対応したSetAsyncKeyStateみたいな関数があればいいんだけど。
DirectInputとかも関係あるのかなあ。言語を変えてJavaとかでもやってみるかな。。
810デフォルトの名無しさん:2010/08/14(土) 22:21:16
>>809
確かその関数って割と低レイヤのデータをとってくるんだったはず
ウィンドウが非アクティブでもキー押下情報がとれたり
だからウィンドウメッセージみたいな高レイヤの処理とは根本的に別物
811デフォルトの名無しさん:2010/08/15(日) 00:24:45
>>809
GetKeyStateはメッセージが飛んできた時の状態
GetAsyncKeyStateはAPIを呼んだ瞬間の状態
812デフォルトの名無しさん:2010/08/15(日) 00:30:53
ちょっとスレチ気味だけど
この本っていい?
http://www.amazon.co.jp/dp/4839902003/
813デフォルトの名無しさん:2010/08/15(日) 00:40:20
AmazonのDBの価格情報がint型だってことは分かった
814デフォルトの名無しさん:2010/08/15(日) 00:47:22
金融計算でfloat,doubleやNumber(DB上はこう呼ぶ)など
浮動小数点実数を使うこと自体異常
815デフォルトの名無しさん:2010/08/15(日) 00:53:40
いやいや価格の定義上uintの可能性も捨てきれないだろ。
でもintだろうな。数字を見た感じ。
816デフォルトの名無しさん:2010/08/15(日) 00:58:02
>>802
keybd_event でできるかも?
817デフォルトの名無しさん:2010/08/15(日) 01:09:19
>>816
おおおおおおおおお!!できましたー。
あなたは神です。ありがとうありがとう。
818デフォルトの名無しさん:2010/08/15(日) 01:12:11
しかしSendMessage, PostMessage, SendInputでダメだったのに
なんでkeybd_eventだとうまくいくんだろう。
他より低水準な処理をしてるんだろうことは分かるが。
819デフォルトの名無しさん:2010/08/15(日) 01:16:00
>>816
無理だろ
SendInput、keybd_eventはいずれもキューにキーボードイベントを格納するもの
最終的に該当ウィンドウのメッセージ処理でキーボードイベントとして処理されることが前提

ウィンドウメッセージとは無関係にキーボードの状態を知るためのAPIがGetAsyncKeyState
このAPIに割り込むには、APIフックなどを使ってAPI自体の挙動を自力で上書きするしかないと思う
820デフォルトの名無しさん:2010/08/15(日) 01:20:42
できたと言ってるのに無理ってw
821デフォルトの名無しさん:2010/08/15(日) 01:20:44
keybd_eventではhwndを使ってないことが良かったのかな。
822819:2010/08/15(日) 01:20:57
なんか書いてる間に解決したみたいだけど釈然としない
GetAsyncKeyStateはともかく、
keybd_eventってSendInputと同レベルの旧APIだと思ってたんだけど、
keybd_eventの方が高度なことってあるの?
823デフォルトの名無しさん:2010/08/15(日) 01:24:23
>>809
WM_KEYDOWNはSendしちゃダメだよ。それはPostするメッセージ。
824デフォルトの名無しさん:2010/08/15(日) 01:32:28
keybd_eventだと>>809のテスト用プログラムでも動作しました。
keybd_eventのみGetASyncKeyStateが参照するパラメータをいじってるようですね。
>>823
PostMessageでもダメでした。
825デフォルトの名無しさん:2010/08/15(日) 01:34:12
keybd_eventでもハードウェアスキャンコードを適切に充てれば無敵
826デフォルトの名無しさん:2010/08/15(日) 01:46:05
>>824
どのネトゲの話をしてるのかわからないけど
keybd_event動くならSendInputも間違ってなければ動くよ
千田(wとか言っちゃうゲームの話ならこれ以上詳しい話はしない
827デフォルトの名無しさん:2010/08/15(日) 02:08:51
気になったのでSendInputの動作も確かめました。
結果、>>809のプログラムはSendInputでキー入力情報を送れました。
が、ターゲットのプログラムに対しては全く同じ処理にも関わらず送れませんでした。
以上です。
828デフォルトの名無しさん:2010/08/15(日) 02:16:47
普通に動くわけじゃないから送れば良いってもんじゃないんだけどまぁ良いか
何のネトゲか話しないしこれ以上教える義理も無いし
829デフォルトの名無しさん:2010/08/15(日) 02:29:52
質問スレなんで教える気の無い人はすっ込んでてくださいね
830デフォルトの名無しさん:2010/08/15(日) 02:34:45
>>829
教える気は有ったよ、むしろ満々だったよ。
だけどSendInputをどのように処理したか言わないわ
経験からPost/SendMessage受け付けないのはネトゲだろうと踏んで詳しく聞こうとしても無しのつぶてでどうすれと?

大体ネトゲBOTの質問に対してそんなに優しいスレじゃなかったろうに何なんだよw
831デフォルトの名無しさん:2010/08/15(日) 02:38:29
気分だよ
832デフォルトの名無しさん:2010/08/15(日) 02:43:02
そんなもんだよな
わかった、素直に寝る事にする
833デフォルトの名無しさん:2010/08/15(日) 02:48:23
SendInputの処理は以下ですよん。コピペなので詳しいことは理解してないです。
これで>>809のテストプログラムは動いて、実際に動かしたいプログラムに対してはダメでした。

void send_keyinput(WORD VirtualKey, BOOL bKeepPressing)
{
INPUT input[1];
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = VirtualKey;
input[0].ki.wScan = MapVirtualKey(input[0].ki.wVk, 0);
input[0].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
input[0].ki.time = 0;
input[0].ki.dwExtraInfo = ::GetMessageExtraInfo();
::SendInput(1, input, sizeof(INPUT));
if (!bKeepPressing)
{
input[0].ki.dwFlags = KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP;
::SendInput(1, input, sizeof(INPUT));
}
}

あとターゲットのプログラムはGetAsyncKeyStateでキー情報を読んでると予想しましたが
どうやら違ったようですね。DirectInputとかでしょうか。
834デフォルトの名無しさん:2010/08/15(日) 08:36:31
モードレスダイアログでWM_KEYDOWNを処理したいんだけど、メッセージが来ない・・・
WM_GETDLGCODEっていうのが大量に来るけど、これを処理するのがモードレスのマナー?
835デフォルトの名無しさん:2010/08/15(日) 08:39:33
TranslateMessage呼んでるか
836デフォルトの名無しさん:2010/08/15(日) 08:48:45
>>835
有難う!
GetMessageのループ内で、IsDialogMessageでTRUE帰って来たらcontinueしてた
ちょっとcontinueせず、Translateよんでみます
837デフォルトの名無しさん:2010/08/15(日) 09:36:42
IsDialogMessage関数の後にTranslateMessage関数とか実行して駄目じゃなかったっけ?
838デフォルトの名無しさん:2010/08/15(日) 11:00:27
NNScanTextという,ウインドウからテキストを抽出するソフトがありますが
http://www.fukehara.com/openhiki/myproduct/hiki.cgi?NNScanText
このスキャンテキストモード(ウインドウを再描画させてその描画内容を取得する)と
同様のことをAPIで行ないたいのですが,探してみてもどうもよくわかりません。
839デフォルトの名無しさん:2010/08/15(日) 11:06:41
>>838
そこの仕様に書いてあるじゃん
で、フックで横取りとか
840デフォルトの名無しさん:2010/08/15(日) 11:08:08
>>838のソフトやspy++のように、特定のウィンドウを指定して
メッセージを取得するのはフックでできるんだっけ?
841デフォルトの名無しさん:2010/08/15(日) 11:31:30
ウィンドウハンドルからスレッドID取れるからできるよ
842838:2010/08/15(日) 12:44:27
>>838
ありがとうございます。フックでやってみます。
843デフォルトの名無しさん:2010/08/15(日) 16:12:04
いいからAPI出せや
844デフォルトの名無しさん:2010/08/15(日) 17:02:57
>>814
派遣会社に派遣されて、金融計算(パソコンのint型で
桁が足りないからdouble使用)の糞プログラムの改造の
仕事がまわってきたから、とんずらして会社辞めてやった。

スレ汚しスマソ
845デフォルトの名無しさん:2010/08/15(日) 20:19:13
三週間毎に二日連続というパターンを示している
846デフォルトの名無しさん:2010/08/16(月) 09:05:50
VistaやWindows7のエクスプローラみたいに、リストビューの項目を
選択すると薄い選択色になるようにするにはどうしたらいいのでしょうか
Win7で動かしても、従来の濃い選択色にしかなりません
847846:2010/08/16(月) 09:10:19
SetWindowTheme(ListView,L"Explorer",NULL);でいけました
848デフォルトの名無しさん:2010/08/16(月) 09:10:46
>VistaやWindows7のエクスプローラみたいに

>Win7で動かしても

イミフ
849デフォルトの名無しさん:2010/08/16(月) 09:22:57
Win7風のリストビューをWinXPでも実現したいと勘違いされそうだったので
明示的に書きました
850デフォルトの名無しさん:2010/08/16(月) 10:22:26
いいからAPI出せや
851デフォルトの名無しさん:2010/08/16(月) 11:00:17
API
852デフォルトの名無しさん:2010/08/16(月) 11:45:13
AIDS
Pneumonia
Inkin
853デフォルトの名無しさん:2010/08/16(月) 14:07:18
64bit用DLLを作ってるんだが、共有メモリを用意するためCreateFileMappingすると
NULL返して、GetLastErrorで見るとERROR_INVALID_HANDLEを返すんだが
これは何故?32bitだと問題なく動く
854デフォルトの名無しさん:2010/08/16(月) 14:11:09
DllMainでやってるなら死んだ方がいい
855デフォルトの名無しさん:2010/08/16(月) 14:42:25
何故?よくやってるサイトとか見るけど
856デフォルトの名無しさん:2010/08/16(月) 18:19:22
http://download.microsoft.com/download/a/f/7/af7777e5-7dcd-4800-8a0a-b18336565f5b/DLL_bestprac.doc
DLLを作るときは常にこれでチェックしているけど、DllMainでCreateFileMappingを使うなとは書いてないけどな。
857デフォルトの名無しさん:2010/08/16(月) 18:56:01
MSDNの解説でも使っている。
http://msdn.microsoft.com/en-us/library/ms686958(VS.85).aspx
858デフォルトの名無しさん:2010/08/16(月) 19:00:34
MSDNの解説が正しいとかどこの情弱だよ
859デフォルトの名無しさん:2010/08/16(月) 19:13:17
英語版は少なくともお前の10万倍は信頼性が高い。
860デフォルトの名無しさん:2010/08/16(月) 19:55:11
>>857のソースをコピペして64bitでコンパイルしたら普通に実行できた(Win7 64bit VS2008)
なので>>853のソースのどこかにバグがある。
861デフォルトの名無しさん:2010/08/16(月) 20:29:58
DLL_PROCESS_ATTACHで
static const TCHAR *MAP_FILENAME = TEXT("SHARE");

hMap = CreateFileMapping(
(HANDLE)0xFFFFFFFF,
NULL,
PAGE_READWRITE,
0,
sizeof(DATAITEM),
MAP_FILENAME
);

としていて、駄目になる
WinXP、32bitのVC++2010
ビルド後はWinXP64bitで確認してる
862デフォルトの名無しさん:2010/08/16(月) 20:35:03
その程度で笑いが取れると思ったら大間違いだ!

……まさか素じゃないよな?
863デフォルトの名無しさん:2010/08/16(月) 20:42:54
>>861
適当なハンドル渡せばERROR_INVALID_HANDLEが返るに決まってんだろwww
864デフォルトの名無しさん:2010/08/16(月) 20:44:50
よく読め
http://msdn.microsoft.com/en-us/library/aa366537(v=VS.85).aspx
特に第1引数
865デフォルトの名無しさん:2010/08/16(月) 20:47:25
駄目に決まってんじゃねえかアホか
866デフォルトの名無しさん:2010/08/16(月) 20:52:47
HANDLEはvoid*なんで…
void*ってことは64bit環境なら64bitなわけで…
-1ってことはビットが全部立ってるわけで…
すなわち
867デフォルトの名無しさん:2010/08/16(月) 20:54:37
(^0)
868デフォルトの名無しさん:2010/08/16(月) 20:55:15
0xFFFFFFFFFFFFFFFF
869デフォルトの名無しさん:2010/08/16(月) 20:58:36
>>868
128bitOSが登場したら(ry
870デフォルトの名無しさん:2010/08/16(月) 20:58:53
なんかもうやだ
871デフォルトの名無しさん:2010/08/16(月) 20:59:10
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
872デフォルトの名無しさん:2010/08/16(月) 20:59:42
しかしこんな微笑ましいミスでよかったと思う
873デフォルトの名無しさん:2010/08/16(月) 21:00:28
m9 (^0 ^ )
874デフォルトの名無しさん:2010/08/16(月) 21:01:06
というか、CreateFileMappingでググって上位に来るサイトで、0xFFFFFFFFとか書いちゃってるしなwww
875861:2010/08/16(月) 21:13:07
みんな有難う…
0xFFFFFFFFは駄目なのか…どのサイトも0xFFFFFFFFばっかりだから気づかんかった…
876デフォルトの名無しさん:2010/08/16(月) 21:19:37
なぜ素直にINVALID_HANDLE_VALUEを渡さないんだw
877デフォルトの名無しさん:2010/08/16(月) 21:24:35
通常ファイルではなくページファイルを使う目的でINVALID_HANDLE_VALUEを代わりに指定させるような設計も問題ありだな。
目的とマクロ名が一致してない。今のMSなら卒倒しそうだ。
878デフォルトの名無しさん:2010/08/16(月) 21:41:36
いいからAPI出せや
879デフォルトの名無しさん:2010/08/16(月) 21:48:12
'90sの記法をそのまま使っているのだろう。老害はページ畳んで死んで欲しい。

http://msdn.microsoft.com/en-us/library/ms810613.aspx
> If the system pagefile is to be used, the value 0xFFFFFFFF must be specified instead.
880デフォルトの名無しさん:2010/08/16(月) 22:02:51
NT3.1だぜw
881デフォルトの名無しさん:2010/08/16(月) 23:03:39
x64ならではだな
882デフォルトの名無しさん:2010/08/16(月) 23:40:10
ファイルのオープンに成功したどうか確認しないでCreateFileMappingすると
ページファイルを使ったファイルマッピングオブジェクトが作成されてしまう
(エラーにならない)罠があるってAdvanced Windowsに書いてたな。
883デフォルトの名無しさん:2010/08/16(月) 23:52:58
これは最低でも読むべき。
http://msdn.microsoft.com/en-us/library/aa384137(v=VS.85).aspx
884デフォルトの名無しさん:2010/08/17(火) 01:41:02
いまだにMSDNとか読んでる情弱犯罪者がいるんだ
885デフォルトの名無しさん:2010/08/17(火) 01:58:47
>>884のお勧めはなんですか? SAMSONですか? 愛読してるんですよね。
886デフォルトの名無しさん:2010/08/17(火) 08:29:39
2chの回答って必ずミス付きだよな
887デフォルトの名無しさん:2010/08/17(火) 09:42:51
どんなにでかい釣り針でもかからずにはいられない人がいるんですよ
888デフォルトの名無しさん:2010/08/17(火) 09:59:21
丸投げで投資0で利益を回収しようとする輩が多いからわざと埋め込んでいるという噂を聞いたことがある
889デフォルトの名無しさん:2010/08/17(火) 10:03:38
そんなもん自称上級者がミスを隠蔽するために釣りだったことにするのは良くある話だ
890デフォルトの名無しさん:2010/08/17(火) 10:06:02
見事に釣られてるのに認めたくない奴が後釣り扱いするのも見かけるw
891デフォルトの名無しさん:2010/08/17(火) 10:21:13
---------------------------------
 ヘ_ヘ
ミ・・ ミ  ということにしたいのですね
(   )〜 void
---------------------------------
892デフォルトの名無しさん:2010/08/17(火) 10:44:57
>>834のように、モードレスにするとWM_KEYDOWN来ないんだがこれは何で?
wisdomや猫でも分かるのサンプルコードにWM_KEYDOWN追加しても来ない
で、if(IsDialogMessage(hdlg,msg)){
TranslateMessage(msg);
DispatchMessage(msg);
continue;
}
とやるとWM_KEYDOWN来るけど、MSDN見ると>>837のように記述が書いてある

モードレスダイアログに対してのメッセージだからDispatchしてもいい気がするが何か気持ち悪い
893デフォルトの名無しさん:2010/08/17(火) 12:09:42
>この関数は、メッセージが必要とするすべての変換とディスパッチを実行するので、IsDialogMessage で処理したメッセージを TranslateMessage または DispatchMessage 関数へ渡してはなりません。

>戻り値
>メッセージが処理されたときは、0 以外の値が返ります。
>メッセージが処理されなかったときは、0 が返ります。
894デフォルトの名無しさん:2010/08/17(火) 14:50:19
VisualC++2008ExpressEditionでIMEの辞書登録単語を編集するプログラムを作成しています。
辞書の読み書き削除を行うためにIMM32の機能を利用していたのですが、
この度実行環境をXPからWindows2008Serverに変更した所動作しなくなりました。
調べていく内にTSFという物にたどり着いたのですが、
辞書云々に該当しそうな物としてはITfFnConfigureRegisterWord(辞書ツールのダイアログを表示する)
くらいしか見当たりませんでした。
Windows2008ServerとMS-IMEの環境下でこのような処理を行うにはどうすればよいのでしょうか。
895デフォルトの名無しさん:2010/08/17(火) 17:12:07
MS-IME限定ならIFEDictionary使えばいいんじゃないの
896デフォルトの名無しさん:2010/08/17(火) 17:28:02
>>895
レスありがとうございます。
IFEDictionaryを使えばほぼ再現できそうなのですが
あと一点、登録単語の削除のメソッドがないみたいです。
ImmUnregisterWordに相当する機能は何かありませんでしょうか。
897894:2010/08/17(火) 17:33:28
>>896も私です。
自己解決しました。
IFEDictionary::RegisterWordの引数で削除が指定できるのですね。見逃していました。
>>895さん、本当にありがとうございました。
898デフォルトの名無しさん:2010/08/17(火) 18:44:10
ポゥ!!
899デフォルトの名無しさん:2010/08/18(水) 00:27:13
C++ Win32APIのツリービューでTVS_CHECKBOXESで全項目にチェックボックスが付くのは解ったのですが、
子項目はそのままで、親項目のみにチェックボックスを付ける方法などはないのでしょうか?
900デフォルトの名無しさん:2010/08/18(水) 00:46:20
無い
自作しろ
901デフォルトの名無しさん:2010/08/18(水) 21:50:29
で、実際にチェックつけられたとしてそれはどういう意味になるの?
人間の感覚、想定する想像と違う動作をするUIは避けるべき
902デフォルトの名無しさん:2010/08/18(水) 21:57:47
設計スレじゃないんだから、くだらない精神論垂れ流すのやめなよ。
「トップ項目をチェックする」というメニューかもしれない。
903デフォルトの名無しさん:2010/08/18(水) 23:03:35
Comctl32 6.0のリストビューではグループ化機能が使えるけど
WindowsXPでグループ化している時はソートができないのは仕様ですか?
Windows7だとできるんですが。
904デフォルトの名無しさん:2010/08/18(水) 23:03:50
精神論・・・?
使い方間違ってるぞ
905デフォルトの名無しさん:2010/08/18(水) 23:15:29
>>899
けど実際どういうことに使うことを想定しているか聞きたいな。
ちょっと興味がある。
どう使うか自分が想像できない事だし。
906デフォルトの名無しさん:2010/08/18(水) 23:26:28
オレ様の想像力を超えた設計はするなってか?
お前らは粛々とAPI答えてりゃ良いんだよ。
907デフォルトの名無しさん:2010/08/18(水) 23:39:13
そう受け止めるかw
屈折してるなーw
908デフォルトの名無しさん:2010/08/19(木) 00:02:04
いいからAPI出せや
909デフォルトの名無しさん:2010/08/19(木) 00:05:15
  API API API API API API API API

 APIたちが…





             API
           API  API
          API API API
           API  API


 キングAPIになった!
910デフォルトの名無しさん:2010/08/19(木) 03:34:22
>>909
911デフォルトの名無しさん:2010/08/19(木) 04:22:28
ttp://www.api.org/

ここにAPIおいておきますね
912デフォルトの名無しさん:2010/08/19(木) 07:06:49
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{ switch( msg )
{    case WM_CREATE:
return Wm_CreateProc(hWnd,(LPCREATESTRUCT)lParam);
case WM_COMMAND:
return Wm_CommandProc(hWnd,HIWORD(wParam),LOWORD(wParam),(HWND)lParam);←この関数中で
     〜
  }
return DefWindowProc( hWnd, msg, wParam, lParam );
}
↓これをした後
void hgoe(HWND hwnd)
{ LPSTR str;
float x,y,z;
GetDlgItemText(hwnd ,10,str ,100);sscanf(str,"%f",&x);
GetDlgItemText(hwnd ,11,str ,100);sscanf(str,"%f",&y);
GetDlgItemText(hwnd ,12,str ,100);sscanf(str,"%f",&z);
}
WinMain中の
MSG msg;
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}←ここでエラーが出ます
}
エラーメッセージはメモリの000005を読み込み中にエラーですみたいな、アドレスがちゃんと入ってない時に出るエラーだと思うのですが、どうすれば良いでしょうか?
913デフォルトの名無しさん:2010/08/19(木) 07:19:38
>LPSTR str;
>float x,y,z;
>GetDlgItemText(hwnd ,10,str ,100);sscanf(str,"%f",&x);

TCHAR str[MAX_PATH];とかに変えてみ
914デフォルトの名無しさん:2010/08/19(木) 07:25:23
>>913
おお!できました!ありがとうございました!
他のところではそういうやり方でやってたのですが
このやり方でも通ったので全くそこが問題だと思いませんでした!
変な場所でエラーが出るから分かりにくいですね。
915デフォルトの名無しさん:2010/08/19(木) 07:29:54
>>914
>他のところではそういうやり方でやってたのですが
>このやり方でも通ったので全くそこが問題だと思いませんでした!
該当箇所を全部書き直したほうがいいよ
それは動いてるように見えてるだけで、実はスタック破壊を起こしてる
その辺を調べて詳細知ったほうが頭に入るから
916デフォルトの名無しさん:2010/08/19(木) 07:34:13
どんなコンパイラを使ってるんだ?
普通はコンパイル時に未初期化変数の警告を食らわないか?
917デフォルトの名無しさん:2010/08/19(木) 07:39:45
VC++2008EEです
未初期化の警告は有りましたがエラーじゃない場合は無視するという方針ですた(`・ω・´)ゞ
918デフォルトの名無しさん:2010/08/19(木) 07:46:49
今すぐ「警告をエラーとして扱う」をオンにしておけ。
個人的にはプロジェクトを作ったら真っ先にオンにしておく事をお勧めする。
919デフォルトの名無しさん:2010/08/19(木) 07:54:25
これはひどい
920デフォルトの名無しさん:2010/08/19(木) 09:00:53
C言語初学者がよくやるミス
921デフォルトの名無しさん:2010/08/19(木) 09:31:55
ポインタとか基礎を学習してないと書けないコードだな
922デフォルトの名無しさん:2010/08/19(木) 09:50:35
こういう奴未だに量産されてんのか
C++は本当に巨大な糞塚だな
923デフォルトの名無しさん:2010/08/19(木) 11:24:44
C++を悪く言うなよ。そもそもC++のコードでもないだろ
924デフォルトの名無しさん:2010/08/19(木) 11:38:08
ユーザが多いからクソも多いだけで、C++が無かったらそのクソは他の言語に群がっている。
925デフォルトの名無しさん:2010/08/19(木) 16:53:54
つまりPHPみたいなもんだな
926デフォルトの名無しさん:2010/08/19(木) 17:03:51
PHP始めようと思って調べたら、どの解説サイトも
この設定のこの値を…という記述ばかりで、それを変えると何が変わるのか一切無かったから辞めた
JSPで十分だわ
927デフォルトの名無しさん:2010/08/19(木) 17:10:54
又聞きを連ねてるだけで裏づけがねーよな
エンコーディング関係なんて完全におまじないでやってる奴が多い
928デフォルトの名無しさん:2010/08/19(木) 17:19:09
オープンソースプロジェクトなんてみんなそんなもんだろw
929デフォルトの名無しさん:2010/08/19(木) 17:19:18
動きゃいいんだよ、動きゃ。
930デフォルトの名無しさん:2010/08/19(木) 19:36:03
動かないくせに・・・
931デフォルトの名無しさん:2010/08/19(木) 19:48:24
一見正常に見えるのが一番の悪
932デフォルトの名無しさん:2010/08/19(木) 20:29:59
強制終了ダイアログを呼び出すAPIってありませんでしたっけ?
むかしどこかで見て、関数名を忘れてしまいました……
933デフォルトの名無しさん:2010/08/19(木) 20:34:59
WM_CREATEはメッセージループが回り始めた時に
最初に呼ばれるんですか?
それともwindowを生成した時???
934デフォルトの名無しさん:2010/08/19(木) 20:42:38
後者
935デフォルトの名無しさん:2010/08/19(木) 20:43:23
>>932
FatalAppExit
936デフォルトの名無しさん:2010/08/19(木) 21:09:02
「問題が発生したため……」のダイアログの方を呼び出す関数ってありませんでしたっけ
937デフォルトの名無しさん:2010/08/19(木) 21:11:09
イライラ
938デフォルトの名無しさん:2010/08/19(木) 21:12:40
>>934
ありがと!
939デフォルトの名無しさん:2010/08/19(木) 22:08:48
>>936
__debugbreak()
940デフォルトの名無しさん:2010/08/20(金) 01:52:31
ダイアログボックステンプレートリソースから、モードレスダイアログボックスを作成する際に、
CreateWindowExのhMenu引数のに子ウィンドウIDを指定するように
子ダイアログに親ウィンドウからの子ウィンドウIDを指定することは可能でしょうか?
(ウィンドウが作成された後、子ウィンドウIDを書き換える…など)

親ウィンドウから、「GetDlgItem関数を使って」子ダイアログのウィンドウハンドルを取得したいのです。
(GetDlgItemで取得することが目的です)

稚拙な質問ですが、ご教授願います。
941デフォルトの名無しさん:2010/08/20(金) 07:14:13
それはGetDlgItemの機能じゃないから無理。
942デフォルトの名無しさん:2010/08/20(金) 09:29:44
面白いAPI教えてください
943デフォルトの名無しさん:2010/08/20(金) 16:39:35
よしまかせろ。誰か教えてやってくれ、たのむ。
944デフォルトの名無しさん:2010/08/20(金) 17:11:38
win32api時代しか知らないおにいさんが答えてやるよ
SendMessage( HWND_BROADCAST, WM_QUIT, 0, 0)
実行するなよ! 絶 対 に実行するなよ!
945デフォルトの名無しさん:2010/08/20(金) 17:12:50
お前にはがっかりだ
946デフォルトの名無しさん:2010/08/20(金) 18:13:36
GetDriveTypeで取り外し出来るディスクか調べてるんだが
バルク品のハードディスクを外付けで繋ぐと、通常のハードディスクを返す
外付けかどうか調べる方法って他にないかな?
947デフォルトの名無しさん:2010/08/20(金) 18:25:06
取り外せるかどうかじゃなくて(ディスクが)交換可能かどうか調べるAPIだからなぁ
948デフォルトの名無しさん:2010/08/20(金) 20:20:22
無い。
949デフォルトの名無しさん:2010/08/20(金) 21:38:52
質問です。Win32APIのみを使って(コンパイラのクラスライブラリは使わずに)、
CでWindows 95 OSR2.5上でプログラミングし始めました(XP SP3でもテスト済み)。
参考書は当時(Win95〜Win98時代)のものを洋書と和書を買い込んで。

で、単純なメニュー無しのウインドウを表示させるだけの、いわば
スケルトン的なコードなんですが、最初にグローバル変数として
static char NullWnd[32] = "NullWndClass";

そして初期化とインスタンスの関数としてそれぞれ
static BOOL FirstInstance(HINSTANCE);
static BOOL AnyInstance(HINSTANCE, int);
long FAR PASCAL _export WindowProc(HWND, unsigned, UINT, LONG);

と宣言しているのですが、たいていの入門書や(古い)入門サイトでは
staticやWndProcの型修飾はついてないんですね。こいつらを付けるかつけないかというのは、
あまり本質的ではないものなのでしょうか?それとも、後々ボディーブローのように
効いてくる局面が(ひょっとしたら)あるのでしょうか?

よろしくご教示ください。処理系はPC-9821Xc200(MMX Pentium 200MHz/96MB/8GB;
Win95OSR2.5相当; コンパイラはBorland C++ 4.52(英語版)、OpenWatcom C/C++ v1.9)です。
OpenWatcom v1.9のサンプルプログラム(Win32用)のほとんどが、static付けてました。
XP SP3でも同じコンパイラを使用していて、Warning Level Maxで何も警告がでませんでした。
95036:2010/08/20(金) 22:00:22
これはねたなのか、本気なのか?
取り合えず、勉強するならもっといいパソコンと新しい資料を見た方がいい。
951デフォルトの名無しさん:2010/08/20(金) 22:01:19
なんか、ずっと前につけた名前が残ってた…
952949:2010/08/20(金) 22:41:58
いや、ネタでこんな長文書きません。誤解があったらすいません。
ただ、PC-9821上のWin95/Win98(SE)/WinNT4で共通して動く
コードを書きたいのです。当時のアプリで優秀なものが結構ありながら、
しかしソースコードが公開されていないために、
「なら自分で組んでやるぜ」と思った次第です。

DirectXの描画に関しては、基本的にはver. 6.1を基準にしていきたいです。
普段のデバッグは、自作のPhenom II x4 955BE (C2)/4GB DDR3/500GB+1TB SATA/
GA-MA785GT-UD3H/WinXP SP3のほうで同じコンパイラでやってます。

新しすぎる参考書(2001年以降くらい〜)とか、コンパイラだと、
そっちプロパーの解説になっちゃうので(猫本とかはどうなんでしょうか?)。勝手ですいません。
VC++ 2005 EE?が無償で使えるのは耳にしたことがあります。でも、とりあえず
手持ちのVC++ 4.0やBorland C++ 4.52時代のもので完結できたらいいな、と思ってます。
PC-9821で動かすのがポイントです。でなきゃ、Windows Programmingはやってなかったと思います。
953949:2010/08/20(金) 22:44:35
連投すいません。今まではPC-9801でx86アセンブラ、OpenWatcom C + FASMで
自作描画ライブラリを作ったり、サウンドやEMSメモリをいじったりしてました。
954デフォルトの名無しさん:2010/08/20(金) 23:08:55
>ただ、PC-9821上のWin95/Win98(SE)/WinNT4で共通して動く
>コードを書きたいのです。当時のアプリで優秀なものが結構ありながら、
>しかしソースコードが公開されていないために、

嘘を書くな
しかも何でいまさらWin9x/NT4なんだ
955デフォルトの名無しさん:2010/08/20(金) 23:11:26
>「なら自分で組んでやるぜ」と思った次第です。

でも static の意味は判りません(キリ
956デフォルトの名無しさん:2010/08/20(金) 23:17:53
おちょくるなアホ
957デフォルトの名無しさん:2010/08/20(金) 23:21:45
static → private
extern → public
958949:2010/08/20(金) 23:35:29
Win32APIの質問だったら、ここしかないと思って質問したんですが、
なんで釣りとか嘘を書いてるとか、云われるんでしょうか…?

当時優秀だったフリーウェアで、ソースコード非公開のものは結構ありますよ。
それを自分である程度再現して、たとえばGPLv2とかBSDライセンスで公開したいというのは、
あるでしょうが。

それに、いまさらもなにも、Win95〜NT4〜W2k〜XPまで、すくなくとも
共通したコードで書けるわけで、プラットフォームの差異を異端視する必要は
ないと思います。PC-9821後期モデルであれ、古いFMVノートであれ、同じでしょう。

staticの意味は分かりますが、世のWin32APIの解説サイトや参考書で、
staticを付けているコードがほとんど無いし、WndProc関数にしても、
long FAR PASCAL _export WndProcとしているのはあまり見ません。
そこに何か意味・論理上の差はあるのか?とお聞きした次第です。

でも、どうも嫌われてしまったみたいなので、すみません。
959デフォルトの名無しさん:2010/08/20(金) 23:37:44
あまりレガシー環境にこだわってる人見るとアホに見えてくるんで
おちょくりたくなって来るんですよ

これは俺の意見じゃなく、からかってる人達の意見な
960デフォルトの名無しさん:2010/08/20(金) 23:51:54
>それに、いまさらもなにも、Win95〜NT4〜W2k〜XPまで、すくなくとも
>共通したコードで書けるわけで、プラットフォームの差異を異端視する必要は

だから嘘を書くなってw
961デフォルトの名無しさん:2010/08/20(金) 23:56:05
他人をおちょくるためなら平気で長文書くし自虐や自演を使うオナニー変態がいる
コレ豆知識な
962デフォルトの名無しさん:2010/08/20(金) 23:57:50
FARなんて、16bit時代の遺物
PASCAL規約なんて、3.1以前の遺物
_exportは知らん
963デフォルトの名無しさん:2010/08/20(金) 23:59:15
>>949
世代をまず伺いたい。(A:10代 B:20代 C:30代 D:40代 E:それ以上)
PC-9821はどうやって入手したの?(A:昔買ったのをずっと使ってる
B:中古 )
BCC+4.0はいつ買ったの


とか
964デフォルトの名無しさん:2010/08/21(土) 00:00:25
>>961
つまりおちょくってるのは949で959はその自演と
965デフォルトの名無しさん:2010/08/21(土) 00:01:27
俺はちげーよw
966デフォルトの名無しさん:2010/08/21(土) 00:03:11
とりあえず、
long FAR PASCAL _export WindowProc(HWND, unsigned, UINT, LONG);

LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);
の方が良いだろう。
967949:2010/08/21(土) 00:32:27
>>962
ありがとうございます。FARとかは不必要なんですね。素直にWINAPIでやると。
OpenWatcomに付属のサンプルコードは、Win32/Win16両方で走るように、
プロジェクトと#ifdefで分かれてて、かつその差異を吸収するwin1632.hという
インクルードファイルがあったりします。普通の入門書どおりで差し支えない、と。

世代は20代後半、PC-9821は中古購入です。PC-9801でC + アセンブラをやってましたが、
一段落した(多少の描画機能の実装とか、各種ROMの吸出し、FDイメージ化とか)ので、
目先を変えてWin32プログラミングでもしてみようかなと思って。
NetBSDでのGtk2がGUIプログラミングとしては初めて。
昔部活でPC-9801VXでN88 DISK-BASIC(86)をやっていた、ギリギリの世代です。
Borland C++ 4.52はebayで先月輸入しました。OpenWatcom v1.9と比較するためです。
TASM 4.0もebayで買ったな。

>>966
ありがとうございます。やはりCALLBACKがよさそうですね。OpenWatcom付属のソースは、
かなり後方互換性を重視している感じなので(DOS/Win3.1/Win32対応コンパイラ)、記述をわざと
古めにしてるのかもしれません。IDEも古めかしい感じですし。
ちょうどアレですかね、昔のCコンパイラでint main(void){を受け付けるのに、
80年代の参考書はmain(){ で解説しているとか、そういうノリですかね。
968デフォルトの名無しさん:2010/08/21(土) 00:40:01
♪君の行く道は♪
♪果てしない悪路♪
♪やがてきっと♪
♪泥沼にはまり♪
♪そこを抜け出し♪
♪老いたプログラマ♪
969デフォルトの名無しさん:2010/08/21(土) 01:24:22
OSの新旧はともかく、その当時のWin32のコードはたいていVC++4〜6がベースになっている。
なのでOpenWatcomのソースでstaticがついているというのは、その処理系独特の作法ともいえる。
今の環境でその優秀なプログラムとやらを勉強したいのなら、Win32APIだけじゃなくて処理系別の特性の違いも覚えていく必要がある。
ある処理系では必要な宣言でも別の処理系で不必要で、間違って記述したために動作しないという可能性も当然あるからな。

まあ遠回りすることを咎めたりはしないが。

_exportというのはたぶんVC++の__declspec(dllexport)のことじゃないかな
970デフォルトの名無しさん:2010/08/21(土) 01:38:11
もうひとつ気になったが、

>>ちょうどアレですかね、昔のCコンパイラでint main(void){を受け付けるのに、
>>80年代の参考書はmain(){ で解説しているとか、そういうノリですかね。

これはノリとかではなくCの規格でどっちの記法も許されている。
ちなみにC++では後者の書き方は不可。

古い参考書を使う場合、今の規格では非推奨となっているような記述も当然あると思うので
そういったC/C++規格やAPI仕様の変遷も全部勉強すべし。
971デフォルトの名無しさん:2010/08/21(土) 01:45:21
むしろ古い規格のコンパイラなんだから新しいものに合わせる必要ないんじゃあ…
972デフォルトの名無しさん:2010/08/21(土) 01:49:37
Delphiの出番だな
973デフォルトの名無しさん:2010/08/21(土) 02:01:59
夏だな
974デフォルトの名無しさん:2010/08/21(土) 12:43:12
>>967
>世代は20代後半、PC-9821は中古購入です。PC-9801でC + アセンブラをやってましたが、

これが嘘じゃないなら病院へ逝った方が良い
冗談抜きで
975デフォルトの名無しさん:2010/08/21(土) 13:08:39
たしかに正気を疑う。
40代後半なら話はわかるが・・・いや今更PC-9821ってさっぱりわかんね。
昔のPC板いった方がいいだろ。
976デフォルトの名無しさん:2010/08/21(土) 13:42:49
>>969
_exportもWin16の遺物
Win32ではWndProcなどのアプリケーションが用意するコールバック関数に
付ける必要はなくなった

つーかstaticの意味が分からないというのはWin32 API以前の問題だってことが
わからないならC言語入門のスレから出なおせとしか
977デフォルトの名無しさん:2010/08/21(土) 13:44:10
> VC++ 2005 EE
ではWin95で動くバイナリは作れない
978デフォルトの名無しさん:2010/08/21(土) 13:45:59
95にWin32s入れれば動くんじゃないかな。
試したこともないけど。Win32sとか懐かしい。
979デフォルトの名無しさん:2010/08/21(土) 13:49:00
ごめん適当なこと書いたわ、32sはWin3.1用だた
980デフォルトの名無しさん:2010/08/21(土) 14:00:48
>>949
無い。

C++でprotected/privateにするような感じで、
static修飾した方が美しいから、そうしているだけ。
981デフォルトの名無しさん:2010/08/21(土) 14:56:20
ttp://hongliang.seesaa.net/article/7539988.html
こちらのソースを参考にSetWindowsHookExを実装しているのですが
64bitプロセスをアクティブにすると反応しなくなります。
64bitプロセスに対して動作させるためには、どのようにすればいいでしょうか。
982デフォルトの名無しさん:2010/08/21(土) 15:23:45
64bitで書け
983デフォルトの名無しさん:2010/08/21(土) 16:06:42
次スレの季節
984デフォルトの名無しさん:2010/08/21(土) 16:09:24
まだ慌てる時間じゃない
985デフォルトの名無しさん:2010/08/21(土) 17:07:45
>>981
プロアクティブに今すぐお電話
986949:2010/08/21(土) 18:41:44
>>980
ありがとうございます。やっぱりstaticをつけたほうが、コード的には
美しいものになるんですね!

僕はカーニハン先生とパイク先生の「プログラミング作法」や、
藤原氏の「Cプログラミング診断室」を熟読していまして、きれいで洗練されたコードを
目指しています。だから、staticをつけるほうがイイ!のであれば、できるだけ
それに準じたかったのです。あまりにも無意味であれば、その限りではなかったんです。

>>974
いやホント、5インチフロッピーを部室で渡された、最後の世代ですよ。
今部屋にあるVX、UV、DA、それに当時手の届かなかったA-Matehがあるのは壮観だなぁ。
987デフォルトの名無しさん:2010/08/21(土) 18:46:35
だからさっさと病院逝けよ
988デフォルトの名無しさん:2010/08/21(土) 18:47:58
staticの意味とかwin32api関係ないじゃん
Cの入門書くらい読んでからプログラム板に書き込めよ
989949:2010/08/21(土) 19:04:10
いえ、staticの意味くらい分かります。そうではなくて、ほとんどの入門書・サイトで
初期化関数や実体化関数の宣言でstatic BOOLとしていないし、
static char szAppNameとかしていないので、疑問に思ったんです。

でも、美しいコードを目指します。
990デフォルトの名無しさん:2010/08/21(土) 19:09:45
きれいかどうかではなく、必要かどうかで考えるべき
991デフォルトの名無しさん:2010/08/21(土) 19:15:11
staticの意味分かってて疑問に思うなら向いてない
992デフォルトの名無しさん:2010/08/21(土) 20:04:24
なんでもかんでも明示的にしたら最適化が効かなくなるんじゃね?
993デフォルトの名無しさん:2010/08/21(土) 20:08:31
そういう問題じゃないだろ
994デフォルトの名無しさん:2010/08/21(土) 21:16:39
WM_ENDSESSIONでファイルに書き出すのが駄目って本当?
995デフォルトの名無しさん:2010/08/21(土) 21:30:18
やってみりゃいいよ
996デフォルトの名無しさん:2010/08/21(土) 22:03:45
やったけど問題なく動く。でも終了間際に書き込むのはなんちゃらって見た
997デフォルトの名無しさん:2010/08/21(土) 23:29:23
staticの意味がわかるのに
必要かどうか分からないとかきれいかどうかで決めるとかマジで病院行け
998デフォルトの名無しさん:2010/08/22(日) 00:18:18
999デフォルトの名無しさん:2010/08/22(日) 00:35:48
999gets
1000デフォルトの名無しさん:2010/08/22(日) 00:38:54
>>998
>998 名前: デフォルトの名無しさん Mail: sage 投稿日: 2010/08/22(日) 00:18:18
>お前らマジ次スレ行け
>http://hibari.2ch.net/test/read.cgi/tech/1282403810/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。