Win32API質問箱 Build88
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/05/27(木) 17:42:14やさしいお兄さんや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/
0002デフォルトの名無しさん
2010/05/27(木) 17:43:0385 ttp://pc12.2ch.net/test/read.cgi/tech/1262430441/
84 ttp://pc12.2ch.net/test/read.cgi/tech/1259478896/
83 ttp://pc12.2ch.net/test/read.cgi/tech/1256891725/
82 ttp://pc12.2ch.net/test/read.cgi/tech/1253699773/
81 ttp://pc12.2ch.net/test/read.cgi/tech/1249140049/
80 ttp://pc12.2ch.net/test/read.cgi/tech/1244057140/
79 ttp://pc12.2ch.net/test/read.cgi/tech/1240411224/
78 ttp://pc12.2ch.net/test/read.cgi/tech/1238289377/
77 ttp://pc12.2ch.net/test/read.cgi/tech/1235494464/
76 ttp://pc11.2ch.net/test/read.cgi/tech/1233622578/
75 ttp://pc11.2ch.net/test/read.cgi/tech/1231423602/
74 ttp://pc11.2ch.net/test/read.cgi/tech/1229239827/
73 ttp://pc11.2ch.net/test/read.cgi/tech/1227934931/
72 ttp://pc11.2ch.net/test/read.cgi/tech/1226575789/
71 ttp://pc11.2ch.net/test/read.cgi/tech/1224745158/
70 ttp://pc11.2ch.net/test/read.cgi/tech/1221446107/
69 ttp://pc11.2ch.net/test/read.cgi/tech/1217687038/
68 ttp://pc11.2ch.net/test/read.cgi/tech/1215348804/
67 ttp://pc11.2ch.net/test/read.cgi/tech/1212931246/
66 ttp://pc11.2ch.net/test/read.cgi/tech/1210775622/
65 ttp://pc11.2ch.net/test/read.cgi/tech/1208847084/
64 ttp://pc11.2ch.net/test/read.cgi/tech/1207099291/
63 ttp://pc11.2ch.net/test/read.cgi/tech/1204600558/
62 ttp://pc11.2ch.net/test/read.cgi/tech/1202060403/
61 ttp://pc11.2ch.net/test/read.cgi/tech/1199514664/
0003デフォルトの名無しさん
2010/05/27(木) 17:43:1259 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/
0004デフォルトの名無しさん
2010/05/27(木) 17:43:2029 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
00051
2010/05/27(木) 17:45:32>>1の前スレリンクあれば過去スレはたどれるんだし、ピンポイントであの過去スレが読みたい
なんて人いないでしょ?
0006デフォルトの名無しさん
2010/05/27(木) 17:47:59無くてもいいとは思う
0007デフォルトの名無しさん
2010/05/27(木) 17:50:320009デフォルトの名無しさん
2010/05/28(金) 18:54:42例えば
push(A);でAボタンが押されるみたいな
0010デフォルトの名無しさん
2010/05/28(金) 20:27:140011デフォルトの名無しさん
2010/05/28(金) 21:35:41SendMessage
0012デフォルトの名無しさん
2010/05/28(金) 21:50:30タイトルバーのないウインドウハンドルを取得するにはどうしたらいんでしょうか?
0013デフォルトの名無しさん
2010/05/28(金) 22:24:13クラス名指定
0014デフォルトの名無しさん
2010/05/28(金) 22:32:36特定のソフトにしかないと思ってたんですが、
クラス名を調べられるソフトがあるんですね。ありがとうございます
0015デフォルトの名無しさん
2010/05/29(土) 00:13:370016デフォルトの名無しさん
2010/05/29(土) 02:43:55SetPixel関数だと小数や負の値に対応できず困っています
こういったグラフを描画する場合にはどのような手法が
一般的に用いられているのでしょうか?
0017デフォルトの名無しさん
2010/05/29(土) 03:04:160〜100.00を0〜10000にするなどあるだろ。
0018デフォルトの名無しさん
2010/05/29(土) 09:29:03void start(HWND hwnd);
'HWND' : 定義されていない識別子です。と出てきてしまいます。
これはどうすればコンパイルできるようになりますか?
0019デフォルトの名無しさん
2010/05/29(土) 09:31:510020デフォルトの名無しさん
2010/05/29(土) 09:45:150021デフォルトの名無しさん
2010/05/29(土) 09:50:300022デフォルトの名無しさん
2010/05/29(土) 10:03:27ありがとうございます
windows.hをヘッダーにインクルードすると
.obj で定義されています。というエラーが出てしまいました・・・
002322
2010/05/29(土) 10:12:35みなさんありがとうございました
0024デフォルトの名無しさん
2010/05/29(土) 12:50:52そんなツールがあったんですね。
ありがとうございます!
0025デフォルトの名無しさん
2010/05/29(土) 17:14:310026デフォルトの名無しさん
2010/05/29(土) 17:39:53if(MoveFile("a","a")){
}
0027デフォルトの名無しさん
2010/05/29(土) 19:03:310028デフォルトの名無しさん
2010/05/30(日) 00:25:41その中身として、システムのプロパティの詳細設定で設定したものを使いたいのですが、
Win32APIやShell32あたりで取得する方法はないでしょうか?
または、システムのプロパティの環境変数の設定が行われたら即座に親プロセス側の環境変数を
連動して変更するようにすることは可能でしょうか?
0029デフォルトの名無しさん
2010/05/30(日) 01:35:37前者はSetEnvironmentVariable
後者は変更してくれというメッセージを親プロセスに送る
0030デフォルトの名無しさん
2010/05/30(日) 08:26:04RICHED20Aに対してEM_GETLINEやるとどうも尻切れする。
len = SendMessage(handle, EM_GETLINE
で返されるlenがどうも常にUnicodeの文字数になる。マニュアルにはTCHARs copiedって書いてあるんだが。
EM_LINELENGTHでも同じ。
0031デフォルトの名無しさん
2010/05/30(日) 09:08:39RichEditは知らないが、通常のエディットボックスでビジュアルスタイルを使うと
ANSI版だろうが、Unicode版の動作するという問題あるよな。
003230
2010/05/30(日) 09:20:26http://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+200510/05100004.txt
0033デフォルトの名無しさん
2010/05/30(日) 09:57:370034デフォルトの名無しさん
2010/05/30(日) 11:37:090035デフォルトの名無しさん
2010/05/30(日) 11:38:55ありがとうございます。ちょっとやりたかったことと違いましたが、後者はWM_SETTINGCHANGEだとわかりました。
その後の調査でRegenerateUserEnvironment という未公開APIを見つけたのでこれを使うことにしました。
0036デフォルトの名無しさん
2010/05/30(日) 17:12:39http://stackoverflow.com/questions/1703186/can-48x48-or-64x64-icons-be-obtained-from-the-vista-shell
0037デフォルトの名無しさん
2010/05/31(月) 00:10:150038デフォルトの名無しさん
2010/05/31(月) 15:00:43一般的なプログラムのように同時に押せば開くようにするにはどのようにすればいいのでしょうか?
現状ではAltキーをいったん話してメニューにフォーカスが合ってからでしか動作しません。
0039デフォルトの名無しさん
2010/05/31(月) 15:02:41今いくつに設定されているのかを知る方法はありますか ?
また、どのプロセスが設定しているのかを知る方法はありますか ?
教えて下さい。
0040デフォルトの名無しさん
2010/05/31(月) 18:03:040041デフォルトの名無しさん
2010/05/31(月) 18:36:51そこで、既定のブラウザで起動できるようにURL形式の文字列をブラウザのパス(および引数)にしたいのですが、そんなAPIはありませんか?
0042デフォルトの名無しさん
2010/05/31(月) 18:50:340043デフォルトの名無しさん
2010/05/31(月) 19:04:35http://www.atmarkit.co.jp/fdotnet/dotnettips/652getdefaultbrowser/getdefaultbrowser.html
0044デフォルトの名無しさん
2010/05/31(月) 19:05:01それかキーの認識が異常に遅いんだが・・・
これに変わって押されてるキーを識別するAPI教えてください
0045デフォルトの名無しさん
2010/05/31(月) 19:05:54アクセレーター メニュー
とかで検索
0046デフォルトの名無しさん
2010/05/31(月) 21:45:05ありがとうございます。
ですが、知りたいのはメニューバー内にあるコマンドのアクセレータではなく、
メニューでファイル(&F)となっている時にAltと同時にFを押すことによってドロップダウンさせる方法です
0047デフォルトの名無しさん
2010/05/31(月) 22:18:27DLL_PROCESS_ATTACHにてアタッチされた際に
GetProcessHeap()を呼ぶとエラーが返されてしまうのですが、
上記が発生してしまう原因と回避方法を教えていただきたいです。
よろしくお願いします。
0048デフォルトの名無しさん
2010/05/31(月) 22:20:46エディットコントロールにフォーカス入ってると Alt+F がエディット側に喰われて親に届いてないくさい
Alt↓ ↑ F で親のメニュー側にフォーカスされて 配送されてるっぽいが…
フォーカスを掴んでるコントロール次第じゃねーかな? (親に送ってるかどうか?)
0049デフォルトの名無しさん
2010/05/31(月) 23:32:54ウインドウ作成後のウインドウメッセージなんてものはあるのでしょうか。
また、無ければ代替案を教えてください。
0050デフォルトの名無しさん
2010/05/31(月) 23:44:40単にAPIから戻る前に投げられるというだけで。
0051デフォルトの名無しさん
2010/06/01(火) 00:11:24もっと先には WM_GETMINMAXINFO が飛んできたり…
サブクラス化するにしても(WM_CREATEが実質来ないということに注意する程度で)
あまり気にしたことはないが、CreateWindow(Ex) 帰還後、真っ先に届くのはケースバイケースかなぁ
0052デフォルトの名無しさん
2010/06/01(火) 01:29:39TRACEでも置いておけば何が来てるかくらい調べられると思うが
0053デフォルトの名無しさん
2010/06/01(火) 08:29:590054デフォルトの名無しさん
2010/06/01(火) 11:13:02WM_KEYDOWNとWM_KEYUPを監視して自分で管理
0055デフォルトの名無しさん
2010/06/01(火) 20:44:00入力途中でもWM_IME_COMPOSITIONが送られてしまうのですが仕様でしょうか
0056デフォルトの名無しさん
2010/06/01(火) 21:51:29メモ帳で試してみたら、むしろ一文字入力毎に送られてきたのだが。
環境はx64Win7+OfficeIME2010。
入力途中に送られてくるのが普通、位に考えておけば良いんじゃないか?
0057デフォルトの名無しさん
2010/06/01(火) 23:00:04入力途中にもかかわらず(確定していない)のに
GCS_RESULTSTRが含まれているんです。
0058デフォルトの名無しさん
2010/06/01(火) 23:32:56ウィンドウのリサイズすると、ちらつくのはどう対処すればいいの?
0059デフォルトの名無しさん
2010/06/02(水) 00:20:19MS-IMEには、ある程度以上長く入力すると、
操作とは無関係に初めの方から自動的に確定していく仕様があるのだが、
それじゃないか?
0060デフォルトの名無しさん
2010/06/02(水) 10:50:47XPみたいにサクサクGetPixelする方法を教えてください
0061デフォルトの名無しさん
2010/06/02(水) 10:53:390062デフォルトの名無しさん
2010/06/02(水) 14:27:19あったら教えろよブタ共
0063デフォルトの名無しさん
2010/06/02(水) 14:35:030064デフォルトの名無しさん
2010/06/02(水) 16:00:470065デフォルトの名無しさん
2010/06/02(水) 18:02:00子ウインドウとかダイアログってマネージャークラスみたいなのが生成と破棄を管理すべき?
0066デフォルトの名無しさん
2010/06/02(水) 18:22:450067デフォルトの名無しさん
2010/06/02(水) 18:40:520068デフォルトの名無しさん
2010/06/02(水) 18:42:390069デフォルトの名無しさん
2010/06/02(水) 19:48:050070デフォルトの名無しさん
2010/06/02(水) 19:50:37親が非表示だと子も非表示なるよ
0071デフォルトの名無しさん
2010/06/02(水) 20:02:310072デフォルトの名無しさん
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マルチタッチメッセージのフック方法が知りたいのです
お解りの方教えてください
0073デフォルトの名無しさん
2010/06/02(水) 21:45:080074デフォルトの名無しさん
2010/06/02(水) 21:47:02だってさ。
0075デフォルトの名無しさん
2010/06/02(水) 23:33:20コールバック関数MouseHookProc()でwParamがWM_MOUSEMOVEだった場合、
メインウインドウにPostMessage()し、そこで座標などを計算し、
MessageBox()が表示される段階まで着ました。
が、MessageBox()を表示する処理が大変遅く感じられます。
改善策があれば教えてください。
0076デフォルトの名無しさん
2010/06/03(木) 00:00:370077デフォルトの名無しさん
2010/06/03(木) 00:08:50SetCursorPos()でのカーソルの移動です。
0078デフォルトの名無しさん
2010/06/03(木) 00:12:09WH_MOUSE_LLの呼び出しコンテキストは
SetWindowsHookExの呼び出し元になるから、
とりあえずデータをメモリにため込んでいけばいいかと。
MessageBoxを表示するタイミングはよく判らないが、
そのタイミングでPostMessageを使って通知してやれば良いんじゃないか?
0079デフォルトの名無しさん
2010/06/03(木) 00:27:05>とりあえずデータをメモリにため込んでいけばいいかと。
この箇所を詳しくお願いできるでしょうか。
0080デフォルトの名無しさん
2010/06/03(木) 00:50:43それとMessageBoxはどう関係あるの?
何をしたいのかまったく分からん
0081デフォルトの名無しさん
2010/06/03(木) 00:52:30CBTフック使えばいいんじゃね
0082デフォルトの名無しさん
2010/06/03(木) 09:42:47それをAPIでやる方法を教えてください
0083デフォルトの名無しさん
2010/06/03(木) 09:57:20おまえらってほんと糞の役にもたたねーゴミだなw
0084デフォルトの名無しさん
2010/06/03(木) 10:15:520085デフォルトの名無しさん
2010/06/03(木) 10:58:050086デフォルトの名無しさん
2010/06/03(木) 11:21:130087デフォルトの名無しさん
2010/06/03(木) 11:31:32それメモ帳で試してみたけど送れなかった、以下ソース
HWND handle = ::FindWindow( "Notepad", "無題 - メモ帳" );
::SendMessage( handle, WM_KEYDOWN, VK_F1, 0);
::SendMessage( handle, WM_KEYUP, VK_F1, 0);
何がダメか教えろ
0088デフォルトの名無しさん
2010/06/03(木) 11:36:210089デフォルトの名無しさん
2010/06/03(木) 11:45:030090デフォルトの名無しさん
2010/06/03(木) 11:50:24最悪、アプリが保持してるハンドルの列挙からマッチングかけてもいいのだが
0091デフォルトの名無しさん
2010/06/03(木) 11:51:06Spy++で監視してF1押してみ
0092デフォルトの名無しさん
2010/06/03(木) 13:58:510093デフォルトの名無しさん
2010/06/03(木) 17:07:47きちんとフックが機能しているか確認する為にMessageBox()しています。
0094デフォルトの名無しさん
2010/06/03(木) 17:19:050095デフォルトの名無しさん
2010/06/03(木) 17:20:48として処理されていると確認でき
対応法も自ずとわかっただろうに
0096デフォルトの名無しさん
2010/06/03(木) 17:38:220097デフォルトの名無しさん
2010/06/03(木) 19:20:18フックプロージャー内でOutputDebugStringすれば十分では?
0098デフォルトの名無しさん
2010/06/03(木) 19:33:13LRESULT 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;
}
0099デフォルトの名無しさん
2010/06/03(木) 19:34:24子のEditの方に投げてやるといいよ
0100デフォルトの名無しさん
2010/06/03(木) 20:06:42トップレベルのウインドウに投げても駄目だよ。
それはメモ帳の枠の部分にキーを入力してることになる。
メモ帳は枠+エディットコントロールのような構成だから
エディットコントロールにメッセージを送らないと駄目。
あと、WM_KEYDOWNはTranslateMessageに処理させないといけないので
SendではなくPostする。
0101デフォルトの名無しさん
2010/06/03(木) 22:59:03かどうかを判断する方法はないですか。
フォーカスも変わらないしどうにも行き詰まってしまいました。
調べるほどメニューってどういうものなのかがわからなくなっていく。。。
0102デフォルトの名無しさん
2010/06/03(木) 23:04:380103101
2010/06/03(木) 23:11:01メニュー操作中というか、ALTを押してメニューを開いてる状態と言いますか、
メニューが開いているのでキーを押してもメッセージがウィンドウに通知されない
状態かどうかの判断です。
キーボードフックのコールバックからアクティブなウィンドウの状態を調べたいのです。
0104デフォルトの名無しさん
2010/06/03(木) 23:14:23WM_ENTERMENULOOP
WM_EXITMENULOOP
でフラグでも立てとけば?
0105デフォルトの名無しさん
2010/06/03(木) 23:16:410106101
2010/06/03(木) 23:25:09試しにSendMessageをフックして共有メモリにメニュー表示中のウィンドウを保持してみます。
ありがとうございます。
0107デフォルトの名無しさん
2010/06/03(木) 23:32:250108101
2010/06/03(木) 23:41:500109デフォルトの名無しさん
2010/06/04(金) 07:53:070110デフォルトの名無しさん
2010/06/04(金) 14:11:09ありがとう参考になった。
ぶっちゃけキーを送りたいのは他のソフトだったんだけど
とりあえずメモ帳で試してみようとおもって。
メモ帳でやるならハンドルから更にExとかでエディットのハンドルを取ってやればいいのかな。
0111デフォルトの名無しさん
2010/06/04(金) 14:57:300112デフォルトの名無しさん
2010/06/04(金) 15:06:390113デフォルトの名無しさん
2010/06/04(金) 16:26:10GetDeviceCaps(hdc,VERTRES)
0114デフォルトの名無しさん
2010/06/04(金) 16:30:20ありがとうありがとう^^
0115デフォルトの名無しさん
2010/06/04(金) 22:47:52これはどうやれば原因がわかるんでしょうか?
使ってるAPIはSHGetFileInfoです。
0116デフォルトの名無しさん
2010/06/04(金) 22:58:400117デフォルトの名無しさん
2010/06/05(土) 00:40:275番目の引数を確認すれ。
0118デフォルトの名無しさん
2010/06/05(土) 15:33:16WideCharToMultiByteは駄目でした。
0119デフォルトの名無しさん
2010/06/05(土) 15:36:280120デフォルトの名無しさん
2010/06/05(土) 16:58:300121デフォルトの名無しさん
2010/06/05(土) 16:59:550が帰ってきました。
0122デフォルトの名無しさん
2010/06/05(土) 17:06:560123デフォルトの名無しさん
2010/06/05(土) 18:09:33EUC-JPのコードページは「20932」と「51932」のどっちを使った?
0124デフォルトの名無しさん
2010/06/05(土) 18:40:570125デフォルトの名無しさん
2010/06/05(土) 18:42:300126デフォルトの名無しさん
2010/06/05(土) 19:48:220127デフォルトの名無しさん
2010/06/06(日) 06:22:42MultiByteToWideChar
は51932は使えんかった気が…
とりあえず、おいらは 上記のを使ってみて失敗したら mlang.dll の
ConvertINetUnicodeToMultiByte
ConvertINetMultiByteToUnicode
を使うようにしてる。
0128デフォルトの名無しさん
2010/06/06(日) 13:07:280129デフォルトの名無しさん
2010/06/06(日) 13:10:240130デフォルトの名無しさん
2010/06/07(月) 00:41:450131デフォルトの名無しさん
2010/06/07(月) 00:53:28stringstream
0132デフォルトの名無しさん
2010/06/07(月) 04:01:47開始時のコールバックでSetWindowPosしてみたら、
一瞬OS規定の場所に表示されてから画面中央へ移動するので見苦しいのです。
0133デフォルトの名無しさん
2010/06/07(月) 04:40:20WM_CREATEのときとかで動かしてるか?
0134デフォルトの名無しさん
2010/06/07(月) 05:14:50IMEにキー入力がいかなくなっちゃんだけどどうすればいい?
ごく一部のキーだけIMEから奪うようにしたい
奪った後にPostMessageでWM_KEYDOWNとWM_KEYUPを投げてるんだけどIMEは拾ってくれない
0135デフォルトの名無しさん
2010/06/07(月) 07:27:16メニューアイテムにアイコンを描画したんですが、メニューアイテムが小さすぎて16x16が半分位しか表示されません。
エクスプローラーのようなコンテキストメニューにするにはどうしたらいいんでしょうか?
0136デフォルトの名無しさん
2010/06/07(月) 10:55:54規制食らってて、携帯からなのでソース貼るのはちとしんどいです。
後から自分のソース見直したら、
PROPSHEETHEADER::pfnCallbackに渡したコールバックのタイミングで動かそうとしても動かなかったみたいです。
最初に表示されるページのWM_INITDIALOGのタイミングだと移動する事はするけど、一瞬本来の位置に表示されてからなのです。
(されずにすむときもある)
0137デフォルトの名無しさん
2010/06/07(月) 11:14:500138デフォルトの名無しさん
2010/06/07(月) 19:16:38waveOutSetVolumeではwave出力の音量を変更するかと思いますが、
一番左の主音量を変更するAPIはないでしょうか?
0139デフォルトの名無しさん
2010/06/07(月) 19:20:27http://www.terra.dti.ne.jp/~vivas/delphi/mixerapi.html
0140デフォルトの名無しさん
2010/06/07(月) 19:20:34自力で描画する場合は高さを指定できたはず
0141デフォルトの名無しさん
2010/06/07(月) 21:47:26Windowsでファイル保存したときの日本語ファイル名って
・FAT32のLFNならばUTF-16LE
・FAT16/FAT32のSFNならばShift-JIS(CP932)
という理解でOK?
0142デフォルトの名無しさん
2010/06/07(月) 21:48:350143デフォルトの名無しさん
2010/06/07(月) 22:08:37SetMenuItemBitmapsを使ってるんですが、引数にそれらしいものはないんですが・・・
他にもAPIがあるんでしょうか?
0144デフォルトの名無しさん
2010/06/07(月) 22:10:23システムロケールも影響するからそうはならないはず
0145デフォルトの名無しさん
2010/06/07(月) 22:12:40隠しウィンドウで起動させたいのですが
それらしいオプションが見当たりません
どこをどうすればよいでしょう?
0146デフォルトの名無しさん
2010/06/07(月) 22:14:30STARTUP_INFO 構造体のメンバを見直してみ。
0147デフォルトの名無しさん
2010/06/07(月) 22:17:350148デフォルトの名無しさん
2010/06/07(月) 23:31:38奪わないキーはCallNextHookEx呼べ
0149デフォルトの名無しさん
2010/06/08(火) 01:31:45日本語Windows上で日本語使っているならば、その通り
0150デフォルトの名無しさん
2010/06/08(火) 16:00:13任意のファイルを、関連付けされていない任意のアプリで開く
つまりファイルドロップや送るを再現するようなDLLはあるのでしょうか?
rundll32.exe url.dll,FileProtocolHandler は
関連付けされているアプリで開くことしかできませんでした
0151デフォルトの名無しさん
2010/06/08(火) 16:51:410152デフォルトの名無しさん
2010/06/08(火) 16:59:090153デフォルトの名無しさん
2010/06/08(火) 17:04:490154デフォルトの名無しさん
2010/06/08(火) 19:41:30ShellExecute
0155デフォルトの名無しさん
2010/06/08(火) 19:58:47WM_MEASUREITEM とかは送られてきてない?知らないけど
0156デフォルトの名無しさん
2010/06/08(火) 20:41:41次に同じリストビューで、アイコン無しの文字列を列挙する為、
ListView_DeleteAllItems()とListView_DeleteColumn()で項目を削除し、
maskをLVIF_TEXTのみで行ったのですが、
高さ32が保持されたままになってしまいます。
削除し足りない部分や、加えるべき動作を教えてください。
0157デフォルトの名無しさん
2010/06/08(火) 20:51:15そのAPIだと、チェックマーク代わりに使うビットマップを指定しているだけだろ。
MENUITEMINFO.hbmpItemに指定する方法でやれば良い。
0158デフォルトの名無しさん
2010/06/08(火) 21:21:49オーナードローをしてないのなら
ListViewと関連付けてるImageListの影響を受けてるはず。
0159デフォルトの名無しさん
2010/06/08(火) 21:45:46後学のためになぜそういう理解に至ったのか400字以内で教えてくれないか
0160デフォルトの名無しさん
2010/06/08(火) 21:51:29そこら辺の歴史的経緯を知らないと、
ANSI/Unicodeで分かれている事を理解し辛いと思う。
0161156
2010/06/08(火) 22:38:16ImageList_Destroy()やImageList_RemoveAll()を試してみましたが、変化は見られませんでした。
0162デフォルトの名無しさん
2010/06/08(火) 23:06:23おそらく32x32でListView_SetImageList()したときのが残ってるんだろう。
なので、ListView_SetImageList(hwnd,NULL,LVSIL_SMALL);して
それでもダメなら、ダミーの小さいアイコンのImageListをCreate()してSetImageList()してやればいい。
0163156
2010/06/08(火) 23:16:17後者の方法で、
himl=ImageList_Create(1,1,ILC_COLOR,0,0);
ListView_SetImageList(hList,himl,LVSIL_SMALL);
の様にする事で解決しました。
ありがとうございます。
0164141
2010/06/09(水) 04:04:21スレ違いかもしれんが教えてください
Windowsでファイル保存したときのファイル名って
・FAT32ならばUTF-16LE
・FAT16ならば言語依存(2バイト文字ならばシフトJIS等)
という理解でOK?
0165デフォルトの名無しさん
2010/06/09(水) 06:57:21なぜファイル名の文字コードなんて気にするんだ?
0166デフォルトの名無しさん
2010/06/09(水) 07:37:46先にFAT16とVFATとFAT32の仕様を自分で調べてくる事を勧める。
その仕様に従って記録されるだけだ。
0167デフォルトの名無しさん
2010/06/09(水) 07:39:09>>160
今使ってるのがXpの64Bitなんで。
てっきりWの方を使われてるのはその所為だと思ってました。
0168デフォルトの名無しさん
2010/06/09(水) 07:51:20何という茨の道……
0169デフォルトの名無しさん
2010/06/09(水) 08:46:28教えていただいてありがとうございました
この解釈は正しいのでしょうか?
rundll32.exeはdll各種を実行できる
shell32.dllのAPI関数の一つにShellExecuteがある
ShellExecuteはファイルドロップや送るに相当する動作を再現する
"rundll32.exe shell32.dll,ShellExecute 引数" の書式である
2000、XPにてファイル名を指定して実行、またはバッチファイルから実行で
書式を変えながら試行錯誤してましたが結局うまくいきませんでした
0170デフォルトの名無しさん
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
0171デフォルトの名無しさん
2010/06/09(水) 09:30:17思考錯誤するのではなくドキュメントを読みましょう。
ShellExecuteの第一引数はHWND
0172デフォルトの名無しさん
2010/06/09(水) 09:39:06MSのプロジェクトなんてドキュメント読んでその通りいかないことも多いからな
結局試行錯誤はつきまとうんだよ
0173デフォルトの名無しさん
2010/06/09(水) 09:47:48最初にドキュメント読まないのは問題外だろ…
0174デフォルトの名無しさん
2010/06/09(水) 09:56:490175デフォルトの名無しさん
2010/06/09(水) 10:01:03それは日本語ドキュメントだけ読んでるからだよ。日本語版読むなとは言わないけど、
英語版との併読は必須。
0176150
2010/06/09(水) 10:50:56ドキュメントを漁るのも読み解くへたくそで困っちゃいますね
試局むきになって夜なべしたのに起動できずですよ・・・
試行錯誤しながらなんとかがんばります
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の理解は正しかったのでしょうか
0177デフォルトの名無しさん
2010/06/09(水) 15:00:59そのままexeとして起動する事ってできるでしょうか?
それとも戻した所で一度書き出してCreateProcessみたいな感じにしかできませんか?
0178デフォルトの名無しさん
2010/06/09(水) 15:15:18ヨユーおk
0179デフォルトの名無しさん
2010/06/09(水) 15:16:08逆に余裕
0180デフォルトの名無しさん
2010/06/09(水) 15:19:07ファイルに書き出さずに実行することは技術的には可能。
ただし、当然ながらそんなものはAPIに用意されていないので、やるなら自分で
メモリ上に実行可能なイメージを構築する必要がある。
近いものに、実行ファイルを圧縮しておいて実行時に展開するソフトがある。
オープンソースでUPXとかあるから、参考になるかと。
ただし、UPXはウイルス等にもよく使われるので、UPXを使っているだけで
ウイルスと誤認されやすい。
0181デフォルトの名無しさん
2010/06/09(水) 15:39:13できるんですね、ありがとう!調べてみます!
0182デフォルトの名無しさん
2010/06/09(水) 18:56:27rundllについては
http://support.microsoft.com/kb/164787/ja
ここ読めば理解できるでしょ
> 2000、XPにてファイル名を指定して実行、またはバッチファイルから実行で
という事ならShellExecuteは必要ない
ShellExecuteはShellでコマンドを実行してくれるもの。
>ファイル名を指定して実行、またはバッチファイルから実行
はShellから直接実行しているのと同じなのでそのままコマンドを書けばいい
"C:\Program Files\Windows NT\Accessories\wordpad.exe" "filepath"
0183デフォルトの名無しさん
2010/06/09(水) 19:06:47ttp://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にしときましょう、ということなんでしょうか??
0184デフォルトの名無しさん
2010/06/09(水) 19:19:560186デフォルトの名無しさん
2010/06/10(木) 10:34:39Windowsのバージョンで、音が鳴らないとかありますか?
64bit環境で音がならないと言われたので、調査しているのですがビットレートとか関係するのでしょうか?
0187デフォルトの名無しさん
2010/06/10(木) 10:50:25ビットレートは関係ありません。
0188デフォルトの名無しさん
2010/06/10(木) 15:01:41createprocess自体をフックしといとて、そのEXE名が来た時に解凍して実行
0189デフォルトの名無しさん
2010/06/10(木) 15:08:51createprocessフックが嫌なら、エミュレートつくれ
0190デフォルトの名無しさん
2010/06/10(木) 16:03:040191デフォルトの名無しさん
2010/06/10(木) 21:27:53MCIをAPIレベルで使おうとしたらcoredll.dllもmmsystem.dllも無いんだけど
無くなったってこと?仕様が変わって別のものになったとか?
リアルタイムで音声の波形を取りたいから生のデータが欲しいんだけど
どうやればいいんだろう
0192デフォルトの名無しさん
2010/06/10(木) 21:36:340193デフォルトの名無しさん
2010/06/10(木) 22:05:220194デフォルトの名無しさん
2010/06/10(木) 22:43:36DirectSound使った方がいいよ。
0195デフォルトの名無しさん
2010/06/10(木) 23:10:470196デフォルトの名無しさん
2010/06/11(金) 00:07:080197デフォルトの名無しさん
2010/06/11(金) 20:21:52書籍が主なんだろうけれども、それこそ何十冊も読み漁るような毎日だったのでせうか?
0198デフォルトの名無しさん
2010/06/11(金) 20:51:570199デフォルトの名無しさん
2010/06/11(金) 21:01:180200デフォルトの名無しさん
2010/06/11(金) 21:03:12とりあえずそれっぽく書いてバグ出しまくればわからない所はわかるからなんとかなる
0201デフォルトの名無しさん
2010/06/11(金) 21:03:40エディットボックスの入力カーソルの座標を取得したいんですが、
拾うことは可能ですか?
0202デフォルトの名無しさん
2010/06/11(金) 21:10:190204デフォルトの名無しさん
2010/06/11(金) 21:30:59http://dobon.net/vb/dotnet/control/tbgetcaretposition.html
0205デフォルトの名無しさん
2010/06/11(金) 22:01:06勉強になります。とにかく書いて書いて書きまくってみます。
0206デフォルトの名無しさん
2010/06/11(金) 22:09:51Win32APIマニュアルが物凄く役立ったな。
俺はエロじゃなくてAPIマニュアルで英語を覚えたよ。
0207デフォルトの名無しさん
2010/06/11(金) 22:21:580208201
2010/06/11(金) 22:55:39すいません、語弊がありました。
入力カーソルのエディットボックス上の描画座標が知りたいです。
カーソル位置にツールチップウィンドウを表示させたいんです。
RECTになるのかは分からないのですが、取得するAPIを教えてください。
0209デフォルトの名無しさん
2010/06/11(金) 23:02:120210デフォルトの名無しさん
2010/06/11(金) 23:17:16GetGUIThreadInfo
0211デフォルトの名無しさん
2010/06/11(金) 23:28:17ネットがない時代に10年15年かけて学んだセンパイには悪いんですが、
この時代、10年かけた知識が半年もあれば充分手に入ります
そこで質問です。あなたが現役なら今後、やはりJAVAに移行したほうが得策と思いますか?
0212デフォルトの名無しさん
2010/06/11(金) 23:30:080213デフォルトの名無しさん
2010/06/11(金) 23:30:230214デフォルトの名無しさん
2010/06/11(金) 23:32:280215デフォルトの名無しさん
2010/06/11(金) 23:34:390216デフォルトの名無しさん
2010/06/11(金) 23:35:33この業界、初心者ばっかりのはずだけどなw
0217デフォルトの名無しさん
2010/06/11(金) 23:37:23下らんことほざくな
0218デフォルトの名無しさん
2010/06/12(土) 00:39:550219デフォルトの名無しさん
2010/06/12(土) 01:42:53JNIでもやりたいのか?
0220デフォルトの名無しさん
2010/06/12(土) 02:27:22知っているということと、実際に身に付いているということは別物
身に付けるためにはそれなりの年数や場数がいると思うけどな
>やはりJAVAに移行したほうが得策と思いますか
その開発にJAVAが向いていると思えばJAVAになる
客がJAVAでお願いと言ったら、もちろんJAVAになる
要は、自分がJAVAが得意であってもそれで開発できるとは限らんから
JAVAを学ぶことが適切であるとは一概には言えない
ただ、VCとJAVAの開発どちらが多いかと聞かれると、おそらくJAVA
だから、VCよりJAVAを学んだほうが仕事の面では多少有利かもしれない
0221デフォルトの名無しさん
2010/06/12(土) 02:43:05お前バカだろw
0222デフォルトの名無しさん
2010/06/12(土) 02:43:06こんな半端な小僧がでかい口聞いてすいませんでした
0223デフォルトの名無しさん
2010/06/12(土) 08:21:30スレタイ嫁バカ消えろ
0224デフォルトの名無しさん
2010/06/12(土) 08:26:520225デフォルトの名無しさん
2010/06/12(土) 09:50:56それとももっといろいろやってる重い関数なんだろうか。
0226デフォルトの名無しさん
2010/06/12(土) 10:09:327C80934A 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
0227デフォルトの名無しさん
2010/06/12(土) 13:22:12規格で決まっているわけではないので、なんとも言えない。
とりあえず今の実装では、GetTickCountはむちゃくちゃ速い。
0228デフォルトの名無しさん
2010/06/12(土) 13:34:00ありがとう。
こういうのはデバッガで突入してみれば確認できるのね。
0229デフォルトの名無しさん
2010/06/12(土) 16:57:07これはひどい。乗算にシフトまでやってる無駄の多い関数だ。
GetCurrentProcessを見習うべき。
760c5f85: 83c8 ff OR EAX, -0x1
760c5f88: c3 RET
0230デフォルトの名無しさん
2010/06/12(土) 22:58:170231デフォルトの名無しさん
2010/06/12(土) 23:45:000232デフォルトの名無しさん
2010/06/13(日) 00:11:04GetGValue
GetBValue
0233デフォルトの名無しさん
2010/06/13(日) 01:25:10でも汎用性悪すぎだし、これから学ぶものでもなさそうだな
過疎ってるところ見るとそんなの常識だろって言われそうだけど
0234デフォルトの名無しさん
2010/06/13(日) 06:38:30MAKEINTRESOURCE(IDR_GAME_SOUND_01001)
はIDR_GAME_SOUND_01001という整数値からリソース文字列へのポインタを
取得するマクロですが、IDR_GAME_SOUND_01001という整数値からでななくて、
"IDR_GAME_SOUND_01001"という文字列から、リソース文字列へのポインタを
取得する方法はございますでしょうか。
ググっても方法を発見できず困っております。
ご存知の方がいましたら、教えていただけないでしょうか。
よろしくお願いします。
0235デフォルトの名無しさん
2010/06/13(日) 07:24:290236234
2010/06/13(日) 08:03:09すみません。初歩的なことかも知れないのですが、
リソース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直打ちではなくて、文字型の変数を使いたいです。
0237デフォルトの名無しさん
2010/06/13(日) 09:10:48何が不満なのか理解不能だが
#define IDR_GAME_SOUND_01001 131
をコメントアウトして
"IDR_GAME_SOUND_01001"とか
_T("IDR_GAME_SOUND_01001")で呼べばいけんじゃないかな
0238234
2010/06/13(日) 10:04:22ありがとうございます。
おかげさまで解決しました。
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 文を削除しなければいけないのは
正直、気持ち悪いです。このやり方が一般的なんでしょうか。
0239デフォルトの名無しさん
2010/06/13(日) 10:26:36ダブルクォートで囲んだ文字列を指定できるだろ。
ちなみに、一般的にはリソースIDにわざわざ文字列なんか使わない。
0240デフォルトの名無しさん
2010/06/13(日) 12:27:070241デフォルトの名無しさん
2010/06/13(日) 13:37:23時々1ドット程度の非常に細い外枠を見ることがあります
こういうウィンドウを作りたいんですが、CreateWindowのウィンドウスタイルで変えられるんでしょうか?
いろいろ試したんですが今のところ太い外枠にしかなりません
0242デフォルトの名無しさん
2010/06/13(日) 14:43:15あともう一寸だけ頑張る、って感じだったかと。
クライアント領域にフレームの描画を持ち込むだけだから、
WM_NCHITTESTとかも対応しないと駄目なんだろうなあ。
0243デフォルトの名無しさん
2010/06/13(日) 14:53:10Call 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の代わりに入力領域に文字を送ってみても
送信されませんでした。
0244デフォルトの名無しさん
2010/06/13(日) 15:13:490245デフォルトの名無しさん
2010/06/13(日) 16:00:550246デフォルトの名無しさん
2010/06/13(日) 16:05:490247デフォルトの名無しさん
2010/06/13(日) 16:06:580248デフォルトの名無しさん
2010/06/13(日) 16:09:310249デフォルトの名無しさん
2010/06/13(日) 16:23:17例えば、プログラム終了時にFreeConsole()を呼ぶ必要はありませぬか?
0250243
2010/06/13(日) 16:31:54と、いうことはsendmessageを用いて非アクティブ状態のウィンドウに対して
エンターキーを押す。という動作は実現できないということでしょうか?orz
実際に操作したいのはflash上に乗ってるボタンでして、アクティブになってる
時にはキーボードからタブキー、エンターキーで操作できたので、何らかの
方法でエンターキーを押せると思ったのですが、無理なのでしょうか。
一瞬ウィンドウをアクティブにして、sendkeyで対応するしかないのかなぁ。
0251デフォルトの名無しさん
2010/06/13(日) 16:36:18Flashかよ。それはFlashの仕様にもよるだろうな。
あとさ、キーボードの操作はDOWNだけじゃないだろ
DOWN→CHAR→UPとくるでしょSpy++とか使ってみた?
0252243
2010/06/14(月) 12:24:30vs2008expressなんでspy++がなくて、uispyも
探してみたのですが見つからず、暗闇の中を
手探り状態ですorz
0253デフォルトの名無しさん
2010/06/14(月) 12:39:350254デフォルトの名無しさん
2010/06/14(月) 15:43:24ファイルにアクセスするかのように読み出したい(例えば: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)
----------------
よろしくお願いします。
0255デフォルトの名無しさん
2010/06/14(月) 15:44:500256デフォルトの名無しさん
2010/06/14(月) 15:57:310257254
2010/06/15(火) 00:49:32ありがとうございます。
結局、fgets関数に似たものを自作してfgetsを置き換えました。
テンポラリファイルに書き出す方法は、ゲームなので一瞬でも
ユーザーが見える場所にファイルを置けないため、採用しませんでした。
0258デフォルトの名無しさん
2010/06/15(火) 00:59:360260デフォルトの名無しさん
2010/06/15(火) 01:22:000261254
2010/06/15(火) 01:32:35visual studioでexeファイルを開けば、普通に見れます。(画像とか音声ファイルとか)
有料でもいいからexeファイルごと実行可能の状態のままで暗号化するソフトはないのかな?
0262デフォルトの名無しさん
2010/06/15(火) 01:43:23この程度ならマシンパワーも必要ないし、すぐ自作できるだろ。
0263デフォルトの名無しさん
2010/06/15(火) 01:57:28うあはw丸見えじゃないすかw
リソースファイル化すれば安全だと思って改造のしやすさという利便性を捨ててまで
リソース化頑張ってたのにマジ意味ねーwもうリソースファイル使わねえw
0264デフォルトの名無しさん
2010/06/15(火) 02:08:110265デフォルトの名無しさん
2010/06/15(火) 02:23:200266デフォルトの名無しさん
2010/06/15(火) 09:13:31>有料でもいいからexeファイルごと実行可能の状態のままで暗号化するソフトはないのかな?
それやるとセキュリティソフトにウィルス扱いされることが多々あるけど、
それでも良ければUPXとかある
0267デフォルトの名無しさん
2010/06/15(火) 21:48:330268デフォルトの名無しさん
2010/06/16(水) 04:32:020269デフォルトの名無しさん
2010/06/16(水) 17:41:180270デフォルトの名無しさん
2010/06/16(水) 17:48:280271デフォルトの名無しさん
2010/06/16(水) 19:31:130272デフォルトの名無しさん
2010/06/18(金) 17:16:39デバッグ時にDLLのシンボルが読み込まれないんですけど、なぜでしょうか?
dllの中身をみてもpdbファイルのパスは合っていて問題は無いように思われます。
0273デフォルトの名無しさん
2010/06/18(金) 22:10:22これってどうやればきえるんでしょうか?
0274デフォルトの名無しさん
2010/06/18(金) 22:17:400275デフォルトの名無しさん
2010/06/18(金) 22:38:520276デフォルトの名無しさん
2010/06/19(土) 21:37:48既に表示してるモードレスダイアログの下に表示されてしまうんだが、解決策ないかな?
0277デフォルトの名無しさん
2010/06/19(土) 22:00:39予めSetWindowPosでHWND_TOPMOSTにしておくのを忘れている、とか?
0278デフォルトの名無しさん
2010/06/20(日) 08:59:49ツールチップをTOPMOSTにするって事かな?
試して見ます
0279デフォルトの名無しさん
2010/06/20(日) 16:27:47送りつける先でまだ準備が出来ていないらしいので、この関数を直呼びじゃなくて、
PostMessageしたいと思います。
このときに送るメッセージってなんでしょうか?
WM_SIZEとか?
0280デフォルトの名無しさん
2010/06/20(日) 16:57:080281デフォルトの名無しさん
2010/06/20(日) 19:30:21WM_APP〜0xBFFF辺りを適当に割り当てておけば問題ないだろ。
0282デフォルトの名無しさん
2010/06/21(月) 10:59:340283デフォルトの名無しさん
2010/06/21(月) 11:15:520284デフォルトの名無しさん
2010/06/21(月) 12:47:28今はSetThreadContextを使ってeipを0にして例外を発生させてるのですが
ほかに方法はありますか?
0285デフォルトの名無しさん
2010/06/21(月) 12:57:550286デフォルトの名無しさん
2010/06/21(月) 20:35:360287284
2010/06/22(火) 17:31:330288デフォルトの名無しさん
2010/06/22(火) 21:53:15HFONT hFOnt;
hFont = (HFONT)SendMessage(hMain, WM_GETFONT, 0, 0);
ErrorNo = GetLastError();
とやると
・hFontにはなにも帰ってこない
・ErrorNoには120
が返ってくるのですが、どのあたりをしらべたらよいか、
またはどのようにして調べたらよいか、手掛かりをください。。。
0289デフォルトの名無しさん
2010/06/22(火) 21:56:46>hWindowはトップウィンドウでしょうか?
>だとすると、自身でWM_SETFONT/WM_GETFONTのハンドラを書かなければなりません。
>DefWindowProcは、フォント管理してくれません
検索したら一発で来たぞ
0290デフォルトの名無しさん
2010/06/22(火) 22:49:50再描画する度に、画面のちらつきが酷くなったんだけど
ダイアログだと、WM_ERASEBKGND以外にも何か背景を初期化するメッセージとか来る?
0291デフォルトの名無しさん
2010/06/23(水) 00:40:57どうもです。
hFont = (HFONT)SendMessage(GetDlgItem(hMain,IDC_EDIT1), WM_GETFONT, 0, 0);
とやっても結果は同じなんですが、これは
トップウィンドウだけでなく、トップウィンドウ上のコントロールも
ハンドラを自分で書く必要がある、ということでしょうか?
0292デフォルトの名無しさん
2010/06/23(水) 01:05:29そもそも「何も返ってこない」ってことはありえない。
0が返ってるというんだったら、その意味はちゃんと書いてある。
The return value is ... or NULL if the control is using the system font.
そもそも普通の実装だと、WM_GETFONTってのは単に
WM_SETFONTされたものを返すだけ。
どういう目的でGETFONTしようとしてるわけ?
0293デフォルトの名無しさん
2010/06/23(水) 10:28:41根元的な問い掛けありがとうございます。すっかり目的を忘れてました。
もともとは次のようなソースを書いて、システムフォントを取得したかったのです。
ところがこれもErrorNoが120返ってきたので、WM_GETFONT使ってみたのでした。
int ErrorNo = 0;
HFONT hFOnt;
hFont = (HFONT)GetStockObject(SYSTEM_FONT);
ErrorNo = GetLastError();
根本原因は同じな気がしますが、何かヒントをいただければ幸いです。。。
0294デフォルトの名無しさん
2010/06/23(水) 11:46:42SYSTEM_FONT と微妙に違うんだろうな
0295デフォルトの名無しさん
2010/06/23(水) 13:53:07どんな環境何だろう
0296デフォルトの名無しさん
2010/06/23(水) 18:53:38hFontが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
0297デフォルトの名無しさん
2010/06/23(水) 19:15:50GetStockObjectとか失敗してもGetLastErrorでエラーコードが取得できるってMSDNに書いてないし。
0298デフォルトの名無しさん
2010/06/23(水) 22:25:100299デフォルトの名無しさん
2010/06/23(水) 23:25:24SystemParametersInfo(SPI_GETNONCLIENTMETRICS)を使うんだっけ。
0300デフォルトの名無しさん
2010/06/23(水) 23:40:35>> 295
後だしじゃんけんでもうしわけない。
WindowsMobile(5.0,6.0) SDKです。
ただ、これらの関数がサポートされていることは確認済みなのです。。。
>> 296
ソースの通り、直前でGetLastErrorの戻り値を入れる変数を、
0にしているので、おそらく問題ないと思っています。
>> 297
上記のとおり、「何か」は取得できたようです。
それが正しい値になっているかどうか、は不明ですが。。。
>> 298
「呼んでる場所」とは具体的にどういうことでしょうか?
現在は、DlgProc()のなかで呼んでいます。そういうことでなくて?
0301デフォルトの名無しさん
2010/06/23(水) 23:41:480302デフォルトの名無しさん
2010/06/23(水) 23:47:45>「呼んでる場所」とは具体的にどういうことでしょうか?
どのメッセージ来たときに呼んでるの、の意で
0303デフォルトの名無しさん
2010/06/24(木) 00:01:03> ソースの通り、直前でGetLastErrorの戻り値を入れる変数を、
> 0にしているので、おそらく問題ないと思っています。
もうちょっとC/C++の勉強をした方がいい。
変数を0初期化していてもGetLastError()の戻り値で上書きされるから、受け変数の0初期化は全く意味が無い。
意図する動作を求めるなら、するべき事はSetLastError(0)だ。
0304297
2010/06/24(木) 00:06:10>>297は取り消し。
0305デフォルトの名無しさん
2010/06/24(木) 00:20:19> 上記のとおり、「何か」は取得できたようです。
それはどうでもいいからさっさとhFontが何だったか教えろ
GetLastErrorはあくまで「エラーがあった」ことを確認してから見るものだ
0306デフォルトの名無しさん
2010/06/24(木) 10:36:16エミュレーターと実機で同じ?
0307デフォルトの名無しさん
2010/06/24(木) 12:25:05TCHAR 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
0308254
2010/06/24(木) 16:51:30ありがとうございます。
全ビット反転で実装しました。
>>266
ご教示ありがとうございます。
ウィルス扱いされるのは嫌ですね。
>>267
ゲームを作って販売するので、ライセンスの問題が面倒かも。
>>271
wavデータの全ビット反転で時間が掛かっているようです。
最悪、拡張子だけ独自にしたいと思います。
0309デフォルトの名無しさん
2010/06/24(木) 17:24:38ヘッダだけ弄ればモウマンタイ
0310デフォルトの名無しさん
2010/06/24(木) 17:54:28「データ1個をメモリにロード → 使用 → 開放」して、
使用していないときはメモリにリソースを常駐させない設計を考えていました。
しかし、LoadResourceにてメモリに常駐したデータをFreeResourceで
開放できると思ったのですが開放されませんでした。
hRsrc = FindResource(
NULL,
res_nm,
"DATA"); // リソースを探す
hGlobal = LoadResource(NULL, hRsrc); // リソースをグローバルメモリにロード
ptr = LockResource(hGlobal); // データへのポインタ取得
FreeResource(hGlobal); // リソースが開放されない
ヘルプにはWin32の場合は、
「ロードしたモジュールがアンロードされると自動的に解放されます。」
とあるのですが、ロードモジュールをアンロードする前に用が済めば
さっさと開放したいのです。
ロードモジュールをアンロードする前に強制的にメモリにロードされた
リソースを開放する方法をご存知の方がいらっしゃれば、
教えていただけないでしょうか。よろしくお願いします。
0311デフォルトの名無しさん
2010/06/24(木) 17:58:44気にするだけ無駄
0312デフォルトの名無しさん
2010/06/24(木) 20:05:290313デフォルトの名無しさん
2010/06/24(木) 20:22:25CreateProcessでコンソールアプリを起動させたとき、
コマンドプロンプトの画面を表示させたうえで起動させることは可能でしょうか?
0314デフォルトの名無しさん
2010/06/24(木) 20:24:560315デフォルトの名無しさん
2010/06/24(木) 20:27:06わざわざ/cとかつけない限りは窓が残るはずだけど
0316254
2010/06/25(金) 15:35:59ありがとうございます。
�@PNG(画像)ファイルは最初の8Byteのビットを反転する
�AWAV(音声)ファイルは最初の12Byteのビットを反転する
で実装したいと思います。
0317デフォルトの名無しさん
2010/06/25(金) 15:44:12XORするとレベルが少し上がる。
0318310
2010/06/25(金) 15:46:25>気にすることが無駄
絶対に気にしなければいけません。無視することはできません。
ゲームを作成しているのですが、絵と音のデータはリソースに登録しています。
リソースをLoadResourceした時点で、実メモリを消費します。
絵を一通り表示し音を一通り鳴らせば、全リソースはメモリに常駐し、
プロセスのメモリ使用量は250MByteに膨れあがります。
かなり低スペックのパソコンまで動作対象にするため、
ユーザーに空きメモリ250MByteなんてスペックは要求できません。
リソースを開放できれば、プロセスのメモリ使用量を25MByte程度に
抑えることができます。もし、リソースが開放できない場合は、
最終手段として、ゲーム中の絵と音をexeファイルとは別に持たなくてはいけません。
リソースは、LoadResourceするまで実メモリを消費しないという一見便利に
見えますが、使い終わったら開放できるという機能を併せ持たないと
使い物にならないもののように思います。
ロードモジュールをアンロードする前に強制的にメモリにロードされた
リソースを開放する方法をお伺いしておりますが、もしかして、
「不可能」というご回答なのでしょうか。
0319デフォルトの名無しさん
2010/06/25(金) 16:03:53>>311-312の意味理解してるか?
exeにリソースを埋め込んで実行した時点で
メモリ上にロードされるわけで…
メモリ上にロードしたくないっていうんならあんたの言う最終手段とやらを使わないと無理だよ
0320デフォルトの名無しさん
2010/06/25(金) 16:19:46実メモリが128MBでも各プロセスには4GBのメモリ空間が割り当てられるだろ。
0321310
2010/06/25(金) 16:34:42>exeにリソースを埋め込んで実行した時点で
>メモリ上にロードされるわけで…
僕も最初はロードモジュール(リソース付き)のロード時には、
exeファイルが丸ごとそのままメモリにロードされると思っていましたが、
実際にやってみると違う挙動をしました。
実際にはロードしてみると、リソース部はロードされませんでした。
LoadResourceの時点で初めてメモリにロードされました。
>メモリ上にロードしたくないっていうんならあんたの言う最終手段と
>やらを使わないと無理だよ
そんな気がしてきました。exeと同じフォルダにdataファルダを
作るというダサいことをしないといけないような気がしました。
dataファルダを隠蔽するためにインストーラーも使用しないといけないかも。
>>>311-312の意味理解してるか?
>>311は、リソースはロードモジュールのロード時には、メモリに上がっており、
実メモリのリソースの先頭アドレスを返してくるだけと僕は解釈しました。
>>312は、リソースサイズが微小なものは、開放しなくていいじゃんと言っている
ように僕は解釈しました。
意味を理解してなかったらすみません。
0322310
2010/06/25(金) 16:36:41>そこら辺はOSが勝手に管理するから
残りメモリが少なくなった場合はOSが勝手に、リソースを開放してくれる
という認識であっていますでしょうか。開放されるタイミングが
わからないのは、かなり不気味なのですが。
0323254
2010/06/25(金) 16:40:12ありがとうございます。
PNG,WAVの他にテキストファイルがあって、
テキストファイルはファイル全体を暗号化します。
8ByteのXORテーブルを作って、繰り返し使い
暗号化したいと思います。
PNG,WAVもヘッダだけじゃなくて先頭から
何kByteか程暗号化したほうが安全かも。
0324デフォルトの名無しさん
2010/06/25(金) 16:53:53リソース部がロードされないってどうやって確認したんだ?
みるのはコミットサイズの方だぞ
0325310
2010/06/25(金) 18:08:51メモリ管理について、あまり詳しくないのですが、先ほど検証させていただきました。
コミットサイズというのは、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と整合性が取れます。
0326デフォルトの名無しさん
2010/06/25(金) 18:37:06タスクマネージャーなら
表示→列の選択でコミットサイズにチェック入れればプロセス個別に見れるでしょ
ブレークポイントでも張ってこの前後でのコミットのサイズみてみろよ
HRSRC hrs = FindResource(NULL, MAKEINTRESOURCE(IDR_TEST1), _T("TEST"));
HGLOBAL hg = LoadResource(NULL, hrs);
0327デフォルトの名無しさん
2010/06/25(金) 20:33:40(1011 xor 0101) (1011)
1110 1011
1110 1011
(1011) (1110 xor 1011)
1011 0101
0328デフォルトの名無しさん
2010/06/25(金) 20:40:17だからお前はメモリマッピングを理解してねえんだっつーの
0329310
2010/06/25(金) 20:57:42コミットサイズの意味がわからず調べました。
⇒コミットサイズとはアプリの正確なメモリ使用量
とのことでした。
>>325はWinXP SP2で計測しています。
開発環境はWinXP SP2にしか入っていませんし、
デバッグモードは実際の環境ではないのでリリースモードで計測しました。
下記タスクマネージャーにコミットサイズのあるWin7で計測した結果です。
�@メモリ−プライベートワーキングセット 20,488k メモリ−コミットサイズ 35,096k
�Aメモリ−プライベートワーキングセット 9,220k メモリ−コミットサイズ 19,472k
�Bメモリ−プライベートワーキングセット 9,196k メモリ−コミットサイズ 19,416k
>コミットのサイズみてみろよ
結果から
1.ロードモジュールのロードの時はリソースはロードされない。
2.LoadResourceの時に初めてリソースがロードされる。
ということを実証したことになると思います。
>>326は何をおっしゃりたいのでしょうか。
0330デフォルトの名無しさん
2010/06/25(金) 21:02:55いいから開発環境でLoadResourceの前後にブレークポイント張ってみろ
メモリは1bitたりとも増えないから
>>325でコミットチャージの差を見ればメモリ上にexe全部ロードされてるって分かるだろ…
なぜこんなに理解力が無いんだ…
0331310
2010/06/25(金) 21:19:26ブレークポイントを置くデバッグ環境は特殊な環境で実環境とは異なるので
デバッグ環境の結果を鵜呑みにするのは危険だと思います。
>>>325でコミットチャージの差を見ればメモリ上にexe全部ロードされてるって分かるだろ…
何を言っているのかわかりません。
>>325の結果は
�Aロードモジュールサイズ 21.5MByte リソース20MByte リソースのロードはなし
�Bロードモジュールサイズ 1.6MByte リソースなし
で、コミットチャージ合計に”違いが無い”ということが証明されています。
もし、ロードモジュールのロード時にリソースがロードされるのなら、
�Aのコミットチャージ合計は、484888ではなくて+10MBの497544と表示されるはずです。
0332デフォルトの名無しさん
2010/06/25(金) 21:30:31そこにVirtualFreeのMEM_DECOMMITをかけてやれば、
一応直ぐに実メモリを解放してやれるんじゃないか?
意味があるかどうかは知らないけど。
0333デフォルトの名無しさん
2010/06/25(金) 21:30:32もうそれでいいよバカに説明するのは疲れた…
0334310
2010/06/25(金) 21:30:51理解していません。よろしければ教えてくださらないでしょうか。
メモリマッピングでググってみると
「仮想アドレス空間を物理アドレス空間に対応づけることをメモリマッピングという」
と出てきました。
LoadResourceのヘルプを見ると
「指定されたリソースをグローバルメモリにロードします。」と書いてあります。
これは、グローバルメモリを確保してリソースからロードするという動きのことだと思います。
メモリマッピングだから何なのでしょうか。すみませんが、難しいと思いますが、
もう少し噛み砕いて説明していただけると幸いです。
0335デフォルトの名無しさん
2010/06/25(金) 21:48:15ためしにやってみたら失敗したな
アプリケーションが確保したメモリじゃないから当たり前だが
0336デフォルトの名無しさん
2010/06/25(金) 22:52:29だから、気にしなくて良いって言ってんだろ。
Win32以降ではLoadResourceでロードしたリソースは実メモリが足りなくなったら
自動的に解放される。FreeResourceする必要すらない。
0337310
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が勝手にメモリを確保するという予想外の
動きをしていました。
ご迷惑をお掛けしたことを謹んでお詫び申し上げます。
また、教えていただいた「コミットチャージ合計」の測定によると
やはり、ロードモジュールのロード時はリソースはロードされないみたいです。
リソースが実メモリを圧迫しないみたいなので、当初の予定通りリソースを
中心にしてプログラムを作成していきます。
ありがとうございました。
0338デフォルトの名無しさん
2010/06/25(金) 23:32:24それだと、ループ毎にSizeofResource呼び出しする素敵仕様だぞ。
あとビット単位の反転だけなら、せめて4か8バイト単位でまとめて処理した方が良い。
0339デフォルトの名無しさん
2010/06/25(金) 23:45:28いいんだよ>>337はメモリさえ消費しなければ
CPUがいくらぶんまわろうがどうでもいいんだよ
0340デフォルトの名無しさん
2010/06/26(土) 00:29:27「コピーオンライト」でググれ
0341デフォルトの名無しさん
2010/06/26(土) 01:16:530342デフォルトの名無しさん
2010/06/26(土) 09:11:14まぁ、若干お茶目な凄腕プログラマなんだろうけども。
0343デフォルトの名無しさん
2010/06/26(土) 11:10:47それを>>310はexeのリソースに入れようとしてるのか
修正パッチ配布しなきゃならなくなったときどうするつもりなんだろうね?
0344デフォルトの名無しさん
2010/06/26(土) 11:13:54そんなAPIがあったのかいいこと聞いた
0345デフォルトの名無しさん
2010/06/26(土) 11:22:160346デフォルトの名無しさん
2010/06/26(土) 12:00:02差分を知らない馬鹿は来なくていいよ
0347デフォルトの名無しさん
2010/06/26(土) 14:54:39CoWして確保されたメモリはページアウト対象になる
0348デフォルトの名無しさん
2010/06/26(土) 16:33:19ShowScrollBar(hList,SB_BOTH,FALSE);
としたのですが、スクロールバー表示用かと思われるの末尾一行が残ってしまいます。
スクロールバーと一緒にこれも削除する方法をお願いします。
0349デフォルトの名無しさん
2010/06/26(土) 16:36:36普通にウィンドウスタイルからWS_VSCROLLとかを削除すりゃいいんじゃないの?
0350348
2010/06/26(土) 16:56:46lpStyle=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);
としたのですが、末尾一行どころか、スクロールバーさえも消えてくれませんでした。
0351デフォルトの名無しさん
2010/06/26(土) 20:01:15>lpStyle^=WS_HSCROLL;
これは
lpStyle &= ~WS_HSCROLL;
こうしないと消えないんじゃないかな
0353デフォルトの名無しさん
2010/06/26(土) 20:33:38DWORD 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が復活するな
0354デフォルトの名無しさん
2010/06/26(土) 21:30:380356デフォルトの名無しさん
2010/06/27(日) 23:37:18ListViewに、 LVS_NOSCROLL という独自のスタイルがある。
SetWindowLong()で適用してみたらスクロールバーは消えたよ。
でも、矢印キー、Endキー、PageDownキーを使って選択はできてるようだけど、
中身のスクロールができなくなる。
LVM_ENSUREVISIBLEも効かない。
こんなの何に使うんだろ?
0357デフォルトの名無しさん
2010/06/28(月) 00:18:48アイコンとか表示するのにListViewを使っているし。
0358デフォルトの名無しさん
2010/06/28(月) 02:28:430359デフォルトの名無しさん
2010/06/28(月) 11:06:02手動で削除(レジストリの箇所)しようとしてます。
この場合、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
のキーを削除するだけで、完全に消したことになりますか?
0360デフォルトの名無しさん
2010/06/28(月) 16:00:270361デフォルトの名無しさん
2010/06/28(月) 16:17:58net stop でサービス停止後に削除します。
レジストリ関係のゴミが残らないのかが心配で質問しました。
0362デフォルトの名無しさん
2010/06/28(月) 17:26:29IFELanguageを毎回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
0363デフォルトの名無しさん
2010/06/28(月) 18:50:380364デフォルトの名無しさん
2010/06/28(月) 18:55:440365デフォルトの名無しさん
2010/06/28(月) 19:35:24なぜDeleteServiceを使わない
0366362
2010/06/28(月) 20:44:31試しに2種類の文字列を交互に連続して処理させてみたところメモリ使用量は安定しました
仰るとおりキャッシュしているようですね
ご指摘ありがとうございます
しかし30MB以上もキャッシュするというのはちょっと頂けない・・・
手動でキャッシュをクリアする方法はあるのでしょうか?
0367361
2010/06/29(火) 12:25:48過去に作ったプログラムで登録されたサービスを削除したいだけです。
後は、興味でCreateService()で作成したサービスは、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services のみに書き込みをするのか
知りたいです。
0368デフォルトの名無しさん
2010/06/29(火) 12:37:100369デフォルトの名無しさん
2010/06/29(火) 12:40:45>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services のみに書き込みをするのか
とは限らないが
サービス自体はそのレジストリが無くなれば無くなる
DeleteService 使うのが普通
リソキの instsrv.exe を使ってもよい
0370デフォルトの名無しさん
2010/06/29(火) 14:19:380371デフォルトの名無しさん
2010/06/29(火) 19:21:060372デフォルトの名無しさん
2010/06/30(水) 19:07:33参考になる書籍、ホームページなどがあったら、教えてください。
よろしくお願いします。
0374デフォルトの名無しさん
2010/06/30(水) 19:26:27Writing a ServiceMain Function
http://msdn.microsoft.com/en-us/library/ms687414.aspx
0375デフォルトの名無しさん
2010/07/01(木) 13:51:14ですがどうすればいいでしょうか?パスワードを取得なんてセキュリティ上そんな
APIってやっぱ存在しない?
0377デフォルトの名無しさん
2010/07/01(木) 14:15:170378デフォルトの名無しさん
2010/07/01(木) 14:39:370379デフォルトの名無しさん
2010/07/01(木) 14:41:29まともな目的でも、ここに書くことによって悪用される可能性はわからない?
0380デフォルトの名無しさん
2010/07/01(木) 14:43:15アホか
0381デフォルトの名無しさん
2010/07/01(木) 15:53:55MD5なりなんなりでハッシュ値算出して、それを保管してるんじゃなかったっけ?
0382デフォルトの名無しさん
2010/07/01(木) 16:00:310383デフォルトの名無しさん
2010/07/01(木) 21:16:270384デフォルトの名無しさん
2010/07/01(木) 21:26:16でもこれが結構よく当てるんですな。
0385デフォルトの名無しさん
2010/07/01(木) 21:56:30存在しません。
0386デフォルトの名無しさん
2010/07/01(木) 22:52:46スクリーン乗っ取って、ログオンダイアログ出せば、ユーザーが教えてくれる。
>>381-382
生パスワードが必要な認証方式は普通にある。
その場合は可逆的な保存をする。
0387デフォルトの名無しさん
2010/07/01(木) 22:54:52不可逆な保存でも大丈夫っしょ
0388デフォルトの名無しさん
2010/07/01(木) 23:01:35鯖側はおいといて、メーラーは
POP鯖に繋ぐ際に生パスを生成できないとまずいので
可逆保存でないと都合が悪いと
0389デフォルトの名無しさん
2010/07/01(木) 23:05:280390デフォルトの名無しさん
2010/07/01(木) 23:05:49メーラーが生パスを持っててPOP3で鯖にに生パス送ってるってことか?
0391デフォルトの名無しさん
2010/07/01(木) 23:08:010392デフォルトの名無しさん
2010/07/03(土) 03:25:52Wiresharkでパケットの中身を覗いて確認したことがあったなw
0393デフォルトの名無しさん
2010/07/03(土) 06:42:24ツールバーを付けたいのですが、どうやったらいいかわかりません。
教えてください。お願いします。
0394デフォルトの名無しさん
2010/07/03(土) 07:01:060395デフォルトの名無しさん
2010/07/03(土) 09:28:310396デフォルトの名無しさん
2010/07/03(土) 11:55:31そのまともな目的って何?
まともならほかの解決策があるんじゃね?言ってごらん。
0397デフォルトの名無しさん
2010/07/03(土) 12:03:480398デフォルトの名無しさん
2010/07/03(土) 17:55:03自分で作るよりWinPcapを使った方が現実的。
0399デフォルトの名無しさん
2010/07/03(土) 19:28:400400デフォルトの名無しさん
2010/07/03(土) 20:30:04俺は今どう考えても256色以上使わないアプリ作ってるんだよ。
Bitbltに8bitモードとか無いのかな?
色のテーブルを別に持っといてそのテーブルのインデックスの羅列を転送するみたいなの。
助けてください。
0401デフォルトの名無しさん
2010/07/03(土) 21:32:128bitのCompatibleBitmap/CompatibleDC使えばいい
0402デフォルトの名無しさん
2010/07/03(土) 21:32:26きちんとDDBを使わないから。
0403デフォルトの名無しさん
2010/07/03(土) 22:06:41よくわかんないけど調べて頑張ってみます。ありがとうございました。
0404デフォルトの名無しさん
2010/07/03(土) 22:38:05一部分だけ書き換えるときは直接DIBの中身を弄った方が速いぞ。
内部フレームバッファの内容を実画面へ転送する時位しか、今時のOSだと出番は無いかと。
昔は、DDBとかでVRAM内で完結させて高速化とかあったのだろうけど。
0405デフォルトの名無しさん
2010/07/03(土) 23:11:38後出しで悪いんですが、楽譜エディタみたいなのを作ってるんです。
五線譜の背景の上に、クリックで音符を置いたり移動したり消したりできるように
しようと思ってるんですが、音符を置く毎に背景を再描画するのは無駄なので、
メモリバッファを2枚用意して、背景をbmpbkgndに、背景+音符をbmplayerに、
そしてWM_PAINTでは実画面にbmplayerを転送するだけという感じで、
例えば音符の位置に変更があった場合、bmpbkgndをbmplayerにBitbltしてから
音符をbmplayerに書き込むことで、背景(五線譜)を描画する手間をスキップしています。
こんな風にするのは無駄でしょうか。よろしければご意見聞かせてください。
0406デフォルトの名無しさん
2010/07/04(日) 00:04:53そもそも根本的な部分で間違いを犯しているんだろう。
それ以上はソースを晒せとしか言いようがない。
0407デフォルトの名無しさん
2010/07/04(日) 00:10:55楽譜全体をバッファで保持しても今のPCなら問題無さそうだし。
bmplayer中の表示範囲に入っていない部分は更新後回し、とかそんなところ?
0408デフォルトの名無しさん
2010/07/04(日) 00:12:29って本どうですか?
以前、APIで学ぶ Windows徹底理解―できるプログラマになるための (日経BPパソコンベストムック) 安室 浩和
は購入しましたが、メモリ管理あたりはかなり解説が難しかったです。
Part1のアプリケーションの構造を理解する ぐらいしか分かりやすい解説はなかったのですが、新しいAPIで学ぶWindowsプログラミングはどうでしょうか?
0409デフォルトの名無しさん
2010/07/04(日) 00:14:40そんなことするのは無駄だから
今すぐギターを抱えて街に出ろ
0410デフォルトの名無しさん
2010/07/04(日) 00:30:25レスありがとうございます。
仰る通りクリックするときの描画はBitbltを2回呼ぶだけなのでそう問題ないんですけど、
背景をスクロールするとCPU使用率が20%くらい行ってしまうんです。
これはメモリバッファからデバイスへの転送が遅いのかなと考え、
8bitのビットマップとかあればいいのにと質問させてもらいました。
しかし良く考えてみたらスクロールってのはアニメーションと一緒ですから
それくらいCPU使用しても仕方ないのかもしれませんね。
0411デフォルトの名無しさん
2010/07/04(日) 01:03:55スクロールバードラッグして上下にスクロールさせたら
100%近く行った件。
ま、そんなもんだろ。
0412デフォルトの名無しさん
2010/07/04(日) 02:10:13APIだけを用いて開発してる所ってある?
0413デフォルトの名無しさん
2010/07/04(日) 02:10:540414デフォルトの名無しさん
2010/07/04(日) 02:15:400415デフォルトの名無しさん
2010/07/04(日) 02:28:05今でも完全にWin32APIだけを用いて開発されてたりするの?
Windowsアプリケーションを作るためにWin32APIを学ぼうと思っているんだが、
こんなことを考えてたらモチベーションが上がらなくて…
0416デフォルトの名無しさん
2010/07/04(日) 02:51:47それかMFCを学ぶとか。ほぼAPIとおんなじだし
0417デフォルトの名無しさん
2010/07/04(日) 03:06:460418デフォルトの名無しさん
2010/07/04(日) 03:40:03フリーソフトなんかで.netのなんか全然見かけないんだが
0419デフォルトの名無しさん
2010/07/04(日) 03:50:440420デフォルトの名無しさん
2010/07/04(日) 03:53:220421デフォルトの名無しさん
2010/07/04(日) 03:57:170422デフォルトの名無しさん
2010/07/04(日) 05:01:080423デフォルトの名無しさん
2010/07/04(日) 08:30:18↑って放置しておいても大丈夫な警告ですか?
0424デフォルトの名無しさん
2010/07/04(日) 08:48:40読み取り専用セクションはCoWしない限り元々共有される
0425デフォルトの名無しさん
2010/07/04(日) 09:15:22内容は難しくて理解できませんでしたが
大丈夫そうなのでそのまま使うことにします
ありがとうございました
0426デフォルトの名無しさん
2010/07/04(日) 10:23:26C++ + Win32API が1番自由度(?)高いの?(出来ることが多いの?)
0427デフォルトの名無しさん
2010/07/04(日) 10:25:360428デフォルトの名無しさん
2010/07/04(日) 10:42:100429デフォルトの名無しさん
2010/07/04(日) 11:07:130430デフォルトの名無しさん
2010/07/04(日) 11:14:01Win32APIを使う欠点は、アプリケーションを開発する時に大変ってことくらい?
0431デフォルトの名無しさん
2010/07/04(日) 11:15:410432デフォルトの名無しさん
2010/07/04(日) 11:23:01お前も分かれよ
0433デフォルトの名無しさん
2010/07/04(日) 11:48:08つまりできることに違いは無い
違うのはパフォーマンスと生産性
0434デフォルトの名無しさん
2010/07/04(日) 11:58:250435デフォルトの名無しさん
2010/07/04(日) 12:03:410436デフォルトの名無しさん
2010/07/04(日) 12:11:060437デフォルトの名無しさん
2010/07/04(日) 12:15:440438デフォルトの名無しさん
2010/07/04(日) 13:05:52はげどう
0439デフォルトの名無しさん
2010/07/04(日) 13:11:33結局ラッパー組むことになる
0440デフォルトの名無しさん
2010/07/04(日) 13:14:090441デフォルトの名無しさん
2010/07/04(日) 15:58:53C# + C++/CLI + .NET + Win32 > C# + .NET <> C++ + Win32
0442デフォルトの名無しさん
2010/07/04(日) 17:44:17>win32api直の方が必要な知識は少なくて
これには同意しかねるが、MFCとWin32APIはどちらか一つやってれば
もう一方も理解しやすいから、MFC使って融通が利きづらいところは直接API呼べばおk
0443デフォルトの名無しさん
2010/07/04(日) 18:51:29項目を追加したり削除したりする事は可能ですか?
0444デフォルトの名無しさん
2010/07/04(日) 18:57:12危険だ
0445デフォルトの名無しさん
2010/07/04(日) 22:28:44その本のことはよく知らないけど、メモリのことならAdvanced Windowsが分りやすいと思う。
というか、APIで学ぶWindowsプログラミングってかなり最近の本なんだな。
>>437
だな。
0446デフォルトの名無しさん
2010/07/05(月) 22:45:25CreateFileというAPIでdwFlagsAndAttributesフラグに
FILE_FLAG_WRITE_THROUGHとFILE_FLAG_NO_BUFFERINGを指定すると
バッファ、キャッシュを使わずにファイルを開けるとあります。
この場合、ハードディスク内部のキャッシュも使わないということなのでしょうか?
それとも、ディスク内のキャッシュを使用有無を制御するのは不可能なのでしょうか?
この当たりについて詳しく調べたいので、ディスクキャッシュの利用状況を見れるような
APIも教えてもらえると助かります。
0447デフォルトの名無しさん
2010/07/05(月) 22:57:25SSDだった、なんてことはどうでもいいというか、どうにもならない。そこにキャッシュがあるのか、
キャッシュが効いているのかも。というかそういうパーツ内部のレベルまでWindowsが管理してると
いう発想はどこから来るのか。
0448デフォルトの名無しさん
2010/07/05(月) 22:58:00http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx
Caching Behavior読め
0449デフォルトの名無しさん
2010/07/06(火) 00:15:14レスありがとうございます。
ハードディスクがサポートしていれば、書き込み操作でキャッシュを
スルーしてディスクに直接書くみたいですね。
SQL Serverはデータベースファイルを操作する際に
FILE_FLAG_WRITE_THROUGHとFILE_FLAG_NO_BUFFERINGを
指定するという話を聞いたので少し気になったのです。
でも、ハードディスクが内部キャッシュのライトスルーをサポートしているとなると
上記フラグを指定をした際に、書き込みが遅くなってしまう可能性もあるような
気がしてきました。
>>448さんのページも、まだ怪しい翻訳しかできてないので
もう少し調べてみます。
ありがとうございました。
0450デフォルトの名無しさん
2010/07/06(火) 00:55:23FILE_FLAG_NO_BUFFERINGは自ずと必須になる。
まあ、SQL Serverのアクセス方法は特殊過ぎて全く参考にならんな。
ここら辺を読むと、一生使いそうにも無いAPIの説明があって結構面白い。
http://msdn.microsoft.com/ja-jp/library/cc280359.aspx
0451デフォルトの名無しさん
2010/07/06(火) 01:02:38けど、SQL Serverは書き込まれるデータの安全性を重視してると。
古いけど、日本語の記事もあったよ。
http://support.microsoft.com/kb/234656/ja
□■■□ → □■■□
□■■□ → □■☆☆
□□□□ → □□☆☆
□ SRCPAINTで作った白色
■ SRCPAINTで作った青色
☆ FillRectで塗りつぶした白色
上の画像を白色を透過して表示したいのですが、そのまま表示されます。
ただ、FillRectで一部を白色で塗ると、その部分だけ透過されます。
見た目は同じ白、GetPixelでもちゃんと白が返ってきますが、
同じ色なのにデータ上違う事とかはありえるのでしょうか。
(透過はここのサイトのような感じのやり方です)
ttp://homepage2.nifty.com/rleez/program_old/winapi/bmpmask2.html
(SRCPAINTで作ったというのは、元の画像の1色だけの色を変え、他を白にした画像)
(画像の1色だけを色を変えながら透過表示したいため)
0453デフォルトの名無しさん
2010/07/06(火) 17:53:33何を言ってるのか分からん。
まぁ、他人に分かるようにちゃんと説明できたら、質問なんてしないで
自己解決するんだろうけど。
まず、マスク画像はどうしちゃったんだ?
黄青青黄 → 緑緑緑緑 + 白黒黒白 → 白緑緑白
黄赤赤黄 → 緑緑緑緑 + 白白白白 → 白白白白
黄黄黄黄 → 緑緑緑緑 + 白白白白 → 白白白白
元画像 → fillHBmp +(SRCPAINT) maskHBmp → fillHBmp
色を変えながら透過(青を緑に変え)はこんな感じです。
fillHBmpとmaskHBmpはCreateCompatibleBitmapで作っています。
最後にできた白と緑の画像を白を透過して表示したいのですが、
透過されずそのまま表示されてしまいます。
一部を白でFillRectすると、その部分だけ透過できます。
ありがとうございます、分かりにくくてすいません。
マスク画像は、処理を行う関数で作っています。
ウィンドウに表示して確認していますが、意図した画像にはなっています。
(>>454の3番目の図のような)
0456デフォルトの名無しさん
2010/07/06(火) 18:16:21元絵A 背景 合成後
白白白白 黒黒黒黒 黒黒黒黒
白青青白 黒黒黒黒 黒青青黒
白赤赤白 黒黒黒黒 ⇒ 黒赤赤黒
白白白白 黒黒黒黒 黒黒黒黒
ここまではできてて 元絵Aに対し FillRectで加工
白白白白 黒黒黒黒 黒黒黒黒
白青青白 黒黒黒黒 黒青青黒
白赤白白 黒黒黒黒 ⇒ 黒赤白白
白白白白 黒黒黒黒 黒黒白白
こうなってしまった
こういうことか? 元絵の色空間の都合で(8bit?)
マスク生成段で FillRectで塗った白 が "白" とならなかったんでない?
ありがとうございます。
FillRectで加工しない場合は、透過できずにそのまま表示されます。
白白白白 黒黒黒黒 白白白白
白青青白 黒黒黒黒 白青青白
白赤赤白 黒黒黒黒 ⇒ 白赤赤白
白白白白 黒黒黒黒 白白白白
FillRectで加工した場合は、加工した部分だけ透過されます
白白白白 黒黒黒黒 白白白白
白青青白 黒黒黒黒 白青青白
白赤白白 黒黒黒黒 ⇒ 白赤黒黒
白白白白 黒黒黒黒 白白黒黒
元絵は24bitで、LoadImageでロードしています。
デスクトップのbitも24bitです。
0458デフォルトの名無しさん
2010/07/06(火) 19:32:08マスク画像の生成に問題があるんでしょ。
透過に使いたい最終画像(>>457の4番目)をSRCCOPYして、
それを透過表示させた所うまくいきました。
LoadImageと、CreateBitmapやCreateCompatibleBitmap
で作るHBITMAPでは、描画速度に差があったりしますが、
同じようにHBITMAPのタイプ?の違いによる物かもしれません。
>>458
ありがとうございます。
途中で作る画像をウィンドウに表示して確認していますが、
見た目では意図したのが表示されています。
0460デフォルトの名無しさん
2010/07/07(水) 07:41:540461デフォルトの名無しさん
2010/07/07(水) 11:13:430462デフォルトの名無しさん
2010/07/07(水) 11:16:26もうちょっと詳しく教えてくれませんか?
ド素人なのでよく分からないんです。
0463デフォルトの名無しさん
2010/07/07(水) 13:02:150464デフォルトの名無しさん
2010/07/08(木) 00:12:28WndProc内で該当メッセージを受け取った時に別のウインドウにPostMessageする処理を書いたら
WindowsXPではちゃんと動いたんですが
Windows7でAeroをオンにしていると動かなくなります
0465464
2010/07/08(木) 00:16:45Aeroがオンの時って別の(PostMessageを送るアプリが管理していない)ウインドウに
PostMessageできないんでしょうか?
ChangeWindowMessageFilterでメッセージをMSGFLT_ADDしてやらないと駄目なのかとも思いましたが
試してみてもメッセージは飛んできてないようです
0466デフォルトの名無しさん
2010/07/08(木) 00:20:450467464
2010/07/08(木) 00:35:12ありがとうございます
WS_EX_TRANSPARENTも試してみたのですが
メッセージを無条件で転送してしまうので使えないのかなと思ってました
「右クリックのみは転送せず自分で処理する」みたいなことをやりたいのです
ごめんなさい説明足らずでマジ申し訳ないです
0468デフォルトの名無しさん
2010/07/08(木) 01:23:03っていうか、メッセージが届いてるかくらい自分で簡単に確認できるだろう。
届いた後の処理に問題があるんじゃないの?
0469名無しさん@そうだ選挙に行こう
2010/07/10(土) 05:45:07win32アプリケーションウィザードによって自動的に作成されたウィンドウにて
マウスカーソルの表示/非表示の制御をおこないたいのですが上手くいきません。
ウィンドウの白枠の中ではマウスカーソルを非表示、ウィンドウの白枠以外
(メニューやタイトルバーの上)ではマウスカーソルを表示したいです。
http://jishinkuma.aa0.netvolante.jp/etc/mouse_cursor.png
どういうイベントとwin32 APIの組み合わせで実現できますでしょうか。
WM_MOUSEMOVEイベントは白枠の中でのマウスカーソル移動しか拾わない為、
白枠の中とメニューの境界線をまたぐときの判定が取れません。
また、マウスカーソルの表示/非表示は、ShowCursor(TRUE)/ShowCursor(FALSE)を
使うということであっていますでしょうか。
以上、よろしくお願いします。
0470名無しさん@そうだ選挙に行こう
2010/07/10(土) 06:11:080471名無しさん@そうだ選挙に行こう
2010/07/10(土) 08:17:500472名無しさん@そうだ選挙に行こう
2010/07/10(土) 08:33:150473469
2010/07/10(土) 08:44:56お教えいただきありがとうございます。
下記機能を実装したソースを記載します。
変な実装方法をしていないか見ていただけると幸いです。
▼▼▼
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;
▲▲▲
0474名無しさん@そうだ選挙に行こう
2010/07/10(土) 09:16:12GetClientRect(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;
0475名無しさん@そうだ選挙に行こう
2010/07/10(土) 09:23:581.LOWORD(LPARAM)でウィンドウのどの領域か判定可能。
HTCLIENTが入っていたらクライアント領域
2.クライアント領域の時だけSetCursorしてTRUEを返せば十分。
それ以外の時はDefWindowProcにそのまま流せば良いかと。
0477名無しさん@そうだ選挙に行こう
2010/07/10(土) 18:14:08DLLから輸出する関数は普通
stdcall、cdeclのどちらの規約にするんですか?
で、fastcallは使っちゃだめなの?
ついでに、_kansuu@Xとか出てくるんですけど、@Xの
Xの数字は何を意味するんですか?
0478名無しさん@そうだ選挙に行こう
2010/07/10(土) 18:18:440479名無しさん@そうだ選挙に行こう
2010/07/10(土) 19:41:24コンパイラ間で互換性が保障されなくなっているので使えない。
ちなみに、x64は呼び出し規約が一つに統一されたので考える必要は無くなった。
0480名無しさん@そうだ選挙に行こう
2010/07/10(土) 20:57:170481名無しさん@そうだ選挙に行こう
2010/07/10(土) 21:03:320482名無しさん@そうだ選挙に行こう
2010/07/10(土) 21:47:460483名無しさん@そうだ選挙に行こう
2010/07/10(土) 21:58:17SystemParametersInfo()で取れそうだよ
0484名無しさん@そうだ選挙に行こう
2010/07/10(土) 22:34:05有難う!
SPI_GETDESKWALLPAPERで取れるとの事だけど、MSDN見るとWin2000しか使えないようですが
9x系で指定すると、何も返ってこないのでしょうか?
0485名無しさん@そうだ選挙に行こう
2010/07/10(土) 22:54:270486名無しさん@そうだ選挙に行こう
2010/07/10(土) 23:59:15http://www.egaoya.com/arigato/image/nobori.jpg
0487名無しさん@そうだ選挙に行こう
2010/07/11(日) 00:33:260488名無しさん@そうだ選挙に行こう
2010/07/11(日) 00:55:240489名無しさん@そうだ選挙に行こう
2010/07/11(日) 01:17:090490名無しさん@そうだ選挙に行こう
2010/07/11(日) 03:10:42そのタブが前に来ないようにするのってどうやんの?
0491名無しさん@そうだ選挙に行こう
2010/07/11(日) 03:12:340492名無しさん@そうだ選挙に行こう
2010/07/11(日) 05:16:15手元にWin9x系がないから確認できないけど、アクティブデスクトップが有効なら
COMのIActiveDesktop使えばいけると思うよ
0493名無しさん@そうだ選挙に行こう
2010/07/11(日) 09:07:430494名無しさん@そうだ選挙に行こう
2010/07/11(日) 09:23:31x64は最初の4引数がレジスタ渡しされてビビったな
0495名無しさん@そうだ選挙に行こう
2010/07/11(日) 09:50:11使用・未使用に関わらずとりあえず機能するんじゃないか?
といっても今更確認する気にもならないが。
x64Win7ですら現役の機能だし、まあ大丈夫だろ。
0496名無しさん@そうだ選挙に行こう
2010/07/11(日) 17:30:56無効になっているモニタの情報を取得したり、有効にするには
どうすればいいでしょうか?
0497496
2010/07/11(日) 22:20:08失礼しました。
0498デフォルトの名無しさん
2010/07/11(日) 23:57:27win32アプリケーションウィザードによって自動的に作成されたウィンドウにて以下の2点のタイミングを捕らえることが目的です。
(1)ウインドウ内でクライアント領域から制御が離れるタイミング
(2)ウインドウ内でクライアント領域に制御が戻るタイミング
目的を実現するには、どういうイベントを使えばよいのでしょうか。
↓↓↓上記の質問だけだと何を言っているのかわからないと思いますので以下に試してみたことや図説を書きます。
クライアント領域から制御が離れたときの制御の遷移は以下の�@�Aのみしかありえないと考える場合
(�@�A以外にありえる場合は、以下の方法は目的の達成に意味をなしません。)
�@現在のウインドウの「メニューバー」に制御が移る
([Alt]や[F10]([Alt]+Fなど)押下などのキー操作やウインドウのメニューバーを左クリックなどのマウス操作を実施)
�A現在のウインドウの「コントロールメニュー(プルダウンメニュー?)」に制御が移る
([Alt]+[Space]押下などのキー操作やウインドウのタイトルバーのアイコンを左クリック、
『(A)ウインドウのタイトルバーのアイコンを右クリック、(B)ウインドウのタイトルバーを右クリック』などのマウス操作を実施)
図説 http://jishinkuma.aa0.netvolante.jp/etc/seigyo.png (「制御」の文字がにじんで読みにくくて申し訳ないです)
〜〜〜 >>499に続きます 〜〜〜
0499デフォルトの名無しさん
2010/07/11(日) 23:58:420500498
2010/07/12(月) 00:00:15WM_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;
説明が大変わかりにくくて申し訳ありません。目的を実現するのに有効なイベントを知っている人がいらっしゃれば、
お教えしていただけないでしょうか。よろしくお願いします。
0501デフォルトの名無しさん
2010/07/12(月) 00:10:28SetCapture / ReleaseCapture 使え
0502デフォルトの名無しさん
2010/07/12(月) 00:13:280503デフォルトの名無しさん
2010/07/12(月) 00:23:59単にキーボードフォーカスとマウスカーソルの位置だけでいいのか、
それともクライアント領域に作成した子ウインドウのウインドウメッセージ処理全般を指してるのか。
0504498
2010/07/12(月) 02:40:41レスをいただきありがとうございます。
ただいま体調不良の為、体調が回復したらお教えいただいた方法を試させていただきます。
>>503
>そもそもクライアント領域の制御ってどういうことを意味してるんだろうね。
スレ違いだと言われそうなので書かなかったのですが、DirectXを使用しています。
クライアント領域はDirectXの描画領域となっており秒間60コマで表示更新され続けています。
私の表現で『クライアント領域に制御がある』とは、クライアント領域がDirectXにより、表示更新され
続けている状態のことを指します。『クライアント領域に制御がない』とは、DirectXの表示更新が、
▼
[Alt]や[F10]や[Alt]+F押下などのキー操作やウインドウのメニューバーを左クリックなどのマウス操作、
[Alt]+[Space]押下などのキー操作やウインドウのタイトルバーのアイコンを左クリック、ウインドウの
タイトルバーのアイコンを右クリック、ウインドウのタイトルバーを右クリックなどのマウス操作
▲
によりメニューバーやプルダウンメニューにフォーカスが移ってクライアント領域のDirectXの表示更新が
ピタッと止まってしまう状態のことを指します。
0505498
2010/07/12(月) 02:44:30〜〜〜>>504の続き〜〜〜
検証に使っているパソコンのマウスカーソルが、どうやらハードカーソルではないらしく、DirectXで
表示更新され続けているクライアント領域にマウスカーソルを持っていくと、DirectXの描画と
マウスカーソルの描画が競合してマウスカーソルがちらついて表示されてしまいます。その問題を
解決するために、マウス座標がクライアント領域にある場合は、標準のマウスカーソルを消去し、
代わりにDirectXのグラフィックでマウスカーソルの絵を描画するようにしました。しかし、クライアント領域に
マウスカーソルの絵が表示されているときに、▼▲の操作を行うと、DirectXの表示更新がピタッと止まり、
マウスカーソルの代わりの絵がクライアント領域の▼▲の操作を行う直前の位置に張り付いたままの状態で、
標準のマウスカーソルが表示されてしまいます。(マウスカーソルが2つ表示されて気持ち悪いです。)
対処法として「クライアント領域から制御が離れるタイミング」(標準のマウスカーソルが表示されるタイミング)で、
マウスカーソルの代わりの絵を消去し「クライアント領域に制御が戻るタイミング」(標準のマウスカーソルを
消去するタイミング)でマウスカーソルの代わりの絵を描画するという処理を実装しようとしています。
上記理由から
(1)ウインドウ内でクライアント領域から制御が離れるタイミング
(2)ウインドウ内でクライアント領域に制御が戻るタイミング
を検出したいのです。
0506デフォルトの名無しさん
2010/07/12(月) 10:24:310507デフォルトの名無しさん
2010/07/12(月) 11:27:56自分で描画を制御するしかないかなぁ…。
0508498
2010/07/12(月) 14:02:44レスありがとうございます。
自分自身の複雑な発想を改め単純に考えてみると
下記コーディングにて無事機能を実装できました。
▼▼▼
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;
▲▲▲
ご指導ありがとうございました。
0509デフォルトの名無しさん
2010/07/12(月) 16:57:11WH_CALLWNDPROCではメッセージ自体を変更することができないようで困っています。
何か方法があれば教えてください。
0510デフォルトの名無しさん
2010/07/12(月) 16:59:56何の原因が考えられるでしょうか。
右クリックの貼り付けとかはできます。
メッセージループにはWM_KEYFIRSTが来ていますが、
コールバックにはWM_COMMANDが来ていないみたいです。
(MessageBeepとifでどのWM_の時に音が鳴るかで調べました)
0512デフォルトの名無しさん
2010/07/14(水) 20:55:42ありがとうございます。
試してみます。
0514デフォルトの名無しさん
2010/07/15(木) 04:32:32SetWindowRgn使ってると思うのですが、
その際アンチエイリアス処理は無理でしょうか?
0515デフォルトの名無しさん
2010/07/15(木) 05:20:47今は
SetLayeredWindowAttributes
で α値を使う
http://msdn.microsoft.com/ja-jp/library/ms997507.aspx
0516デフォルトの名無しさん
2010/07/15(木) 20:12:57ListView_DeleteColumn()しても、中身は削除されるようですが、コラム自体は残ってしまいます。
又、SetWindowPos()でその部分を隠そうかとも思いましたが、どうも変更されません。
何方かご教授お願いします。
0517デフォルトの名無しさん
2010/07/16(金) 06:30:570518デフォルトの名無しさん
2010/07/16(金) 06:53:38http://eternalwindows.jp/shell/shellex/shellex03.html
0519デフォルトの名無しさん
2010/07/16(金) 06:58:320520デフォルトの名無しさん
2010/07/16(金) 07:18:12どうかそういうソフトは作らないで下さい
0521デフォルトの名無しさん
2010/07/16(金) 09:16:540522デフォルトの名無しさん
2010/07/16(金) 09:19:58オプションで切るという発想がないのがすごい
0523デフォルトの名無しさん
2010/07/16(金) 13:02:14言葉遊びはもういいです
0524デフォルトの名無しさん
2010/07/16(金) 13:16:26間違いを指摘されて怒ったのか?
牛乳飲めよ煮干し食えよ
0525デフォルトの名無しさん
2010/07/16(金) 13:25:23君は何か勘違いしている様だけど、聞いて揚げ足取りをしたいんじゃなくて、
単純に君の意見が面白そうだから聞いてみたかっただけなんだよ。
もっとまともなレスを期待してたんだけど。ごめんね。
ちなみに君は揚げ足を取られる事を恐れているようだけど、それは違うと思う。
揚げ足を取られるのは、君に隙があるから。
隙だらけの人間ってのはそうやって余計な所でつまらない恥をかく事になるもんだよ。
他人につっこまれる事は、自身の知識をより客観的で多角的なものとする為に
有益な指針となるものだと思うな。
0526デフォルトの名無しさん
2010/07/16(金) 13:35:250527デフォルトの名無しさん
2010/07/16(金) 13:55:17面白くないと死んじゃうのか?
牛乳飲めよ
0528デフォルトの名無しさん
2010/07/16(金) 13:56:570529デフォルトの名無しさん
2010/07/16(金) 13:58:37間をとってシェルフックって事で手を打たないか?
0530デフォルトの名無しさん
2010/07/16(金) 14:04:15シェル拡張作ったことあるか知らんが単純なプラグイン機構だ
0531デフォルトの名無しさん
2010/07/16(金) 14:33:350532デフォルトの名無しさん
2010/07/16(金) 14:37:31プラグイン=フック
0533デフォルトの名無しさん
2010/07/16(金) 14:51:13シェルフックは別にWH_SHELLやIShellExecuteHookがあるから紛らわしい
0534デフォルトの名無しさん
2010/07/16(金) 14:52:250535デフォルトの名無しさん
2010/07/16(金) 23:51:59← の場合 wScan = MapVirtualKey(0x25, 0) としているのですが、何故送れないのですか?
0536デフォルトの名無しさん
2010/07/17(土) 11:10:55RegisterRawInputDevicesでスキャンコードを取り出してみたら、
「←」押下で42,75、「←」を離した時点で75,42と来てるなあ。
操作的には左シフトを押しながらNUMPAD4を押して、逆順で戻すって感じか。
家のはPS/2キーボードだからUSBだと違うのかもしれないが、
一応これと同じように送ってやればいいんじゃないか?
0537デフォルトの名無しさん
2010/07/17(土) 11:33:370538デフォルトの名無しさん
2010/07/18(日) 21:41:15ttp://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を足しておりますが
ビルドはできても、実行するとメニューのない
ウィンドウしかでてこないのです
原因の分かる方いらっしゃいましたら
できれば教えていただきたいと思います
よろしくお願いします
0539デフォルトの名無しさん
2010/07/18(日) 21:50:42メニュー付きのウィンドウが出るよ。
0540デフォルトの名無しさん
2010/07/18(日) 21:54:440541デフォルトの名無しさん
2010/07/18(日) 21:59:21空のプロジェクトでやってましたが、気付かなかったです
これでメニューのでたウインドウのコードと比較してみて
何が差異としてあるか見てみようと思います
助かりました
0542デフォルトの名無しさん
2010/07/18(日) 22:25:02こちらもありがとうございます
おかげさまで無事に表示することができました
ついでに質問させてもらっていいでしょうか
ページ最初の XN Resource Editor上での作成 という項目の最後辺りにある
>ここまで終わったら、メニューバー自体にも名前を付けます。
>左側のツリービューから、「Language Neutral」の部分を右クリックし、
>「プロパティ」を選択します。
>するとダイアログボックスが出てくるので、
>「名前」に「IDR_MENU」と入力します。
この部分ですが、VSのリソースエディタでリソース中の
メニューのプロパティを見ても、Nameという部分は
グレーで選択できない状態になっていますよね
こうなっているということは、必ずVSではMAKEINTRESOURCEを使う必要が
あるということでしょうか
0543デフォルトの名無しさん
2010/07/18(日) 22:27:220544デフォルトの名無しさん
2010/07/18(日) 22:44:25プロパティのIDを""で囲ってやれば文字列形式になる
"で囲まない(通常) -> ID が .h に定義される -> リソースIDになる
"で囲む -> ID が .hに定義されない -> 文字列形式になる
これだけの話、.rc, .h を直接編集してやってもいい
まぁ普通はリソースIDを使うと思うけど
0545デフォルトの名無しさん
2010/07/18(日) 23:03:04なるほど、良く分かりました
要領が悪くもうしわけございません
私はリソースの文字列形式というものの
理解がそもそも足りておらなかったですね
しかし非常に助かりました、ありがとうございます
0546デフォルトの名無しさん
2010/07/19(月) 07:39:14最初はみんな理解が足りないんだから気にしないで。
なんていうか、一旦川を渡った人が初めて川を渡る人に川の渡り方を
説明するのに、まともなものは稀なもの。んで、同じ轍を踏む。
0547デフォルトの名無しさん
2010/07/19(月) 23:08:50わざわざ川の中泳いで渡ろうという奇特な人のために
だれも助け船なんて出そうと思わないのと一緒
0548デフォルトの名無しさん
2010/07/20(火) 05:37:42同じように足りなければ相性がいいってだけで理解できないから劣っているわけではない。
頭の悪さに慣れるしかない。気にするな。
0549デフォルトの名無しさん
2010/07/20(火) 09:28:35作ってからじゃないと、全然説得力ないな。
0550デフォルトの名無しさん
2010/07/20(火) 09:39:07無責任に言うだけ言って、与党になったら何も出来ないのが露呈する。
0551546
2010/07/21(水) 08:16:45http://msdn.microsoft.com/ja-jp/library/cc430086.aspx
を見ていたら、uFormat の項のところ、
・・・「」または「」を参照しろ・・・と。
久々に機械翻訳のやりっぱなしに出会ってしまった。
範囲選択して Ctrl-C を押すのが続くんで、行頭にカーソル置いて
右クリック一発をできるようにして置こうと思ったんだけど、
朝から萎えた。
0552551-546
2010/07/21(水) 11:24:55SetclipboardData() で渡すハンドルには GMEM_DDESHARE の属性がないと
失敗するようだ。551 に上げたページにはジェンジェン触れてないよ。喝
0553552-546
2010/07/21(水) 17:37:58GMEM_DDESHARE を使うっていうと、ハンドルは GlobalAlloc() で取る
だけになりますよね。GlobalAlloc() は古いから HeapAlloc() を勧め
るって聞いたような気がするけど、これはどう考えるのでしょうか。
(HEAP_DDESHARE って用語はぐぐっても出てこない。)
0554デフォルトの名無しさん
2010/07/21(水) 19:09:03Win16の頃にGlobal/Local系でやり取りする取り決めにしたAPIは、
Win32になったからといって急に変更すると移植に手間がかかってしまう為、
そのままになっている。
APIによる制限が無い使い方なら、Global/Local系を使う理由は無い。
0555デフォルトの名無しさん
2010/07/22(木) 02:13:54日本語版をアテにするな。
http://msdn.microsoft.com/ja-jp/library/cc428720.aspx あれ?戻り値は……?
http://msdn.microsoft.com/ja-jp/library/cc410588.aspx 関数名はどっちが正しいの……?
0556デフォルトの名無しさん
2010/07/22(木) 04:03:000557553-546
2010/07/22(木) 07:03:40SetclipboardData() を使おうと思ったから過去に引き戻されたわけね。
>>555
激励感謝。アテにしてないから他も見て解決。551 は 545 への応援も
あったと思ってね。
0558デフォルトの名無しさん
2010/07/23(金) 21:51:470559デフォルトの名無しさん
2010/07/24(土) 10:58:070560デフォルトの名無しさん
2010/07/24(土) 11:19:080561デフォルトの名無しさん
2010/07/24(土) 12:18:160562デフォルトの名無しさん
2010/07/24(土) 12:49:590563デフォルトの名無しさん
2010/07/24(土) 12:51:350を返すのとどう違うの?
0564デフォルトの名無しさん
2010/07/24(土) 12:56:120565デフォルトの名無しさん
2010/07/24(土) 13:00:06PostQuitMessageの引数に終了コードを入れておくと、
WM_QUITのWPARAMにそのコードが入っているから。
0566デフォルトの名無しさん
2010/07/24(土) 13:17:08PostQuitMessage(0);
と書いたら、msg.wParam の値は 0 ってこと?
0567デフォルトの名無しさん
2010/07/24(土) 15:32:250568デフォルトの名無しさん
2010/07/24(土) 17:19:040569デフォルトの名無しさん
2010/07/24(土) 19:28:130570デフォルトの名無しさん
2010/07/24(土) 19:38:200571デフォルトの名無しさん
2010/07/24(土) 19:58:52きもすぎるwwwww
0572デフォルトの名無しさん
2010/07/25(日) 10:44:01ってCMあった気がする
0573デフォルトの名無しさん
2010/07/25(日) 10:44:37HWND hDeskWnd = GetDesktopWindow();
HDC hDeskDC = GetDC(hDeskWnd);
を書いた後に、CreateWindow() の引数で
x座標に GetDeviceCaps(hDeskDC, HORZRES)/2 - WIDTH/2
y座標に GetDeviceCaps(hDeskDC, VERTRES)/2 - HEIGHT/2
(WIDTH, HEIGHT はウィンドウの幅, 高さ)
を指定してあげる方法でOK?
0574デフォルトの名無しさん
2010/07/25(日) 10:46:550575デフォルトの名無しさん
2010/07/25(日) 10:50:320576デフォルトの名無しさん
2010/07/25(日) 10:52:250577デフォルトの名無しさん
2010/07/25(日) 10:57:080578デフォルトの名無しさん
2010/07/25(日) 10:59:04これくらいならコンパイラがやってくれそうな気もする。
0579デフォルトの名無しさん
2010/07/25(日) 11:00:380580デフォルトの名無しさん
2010/07/25(日) 11:11:03>>574のような場合も含め
多くの環境に対応させるには、具体的にどのように書いたらいいの?
0581デフォルトの名無しさん
2010/07/25(日) 11:11:350582デフォルトの名無しさん
2010/07/25(日) 11:16:350583デフォルトの名無しさん
2010/07/25(日) 11:31:13> 分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
> 分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
> 分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
> 分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
> 分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
> 分母が2、分子が整数であれば、結果が異なる場合はないんじゃね?
0584デフォルトの名無しさん
2010/07/25(日) 11:48:320585デフォルトの名無しさん
2010/07/25(日) 11:50:05GetDeviceCaps(hDeskDC, HORZRES) == 1001、WIDTH == 501 の時、さあどうなる?
0586デフォルトの名無しさん
2010/07/25(日) 11:51:380587デフォルトの名無しさん
2010/07/25(日) 11:53:450588デフォルトの名無しさん
2010/07/25(日) 12:00:040589デフォルトの名無しさん
2010/07/25(日) 12:00:56キャスト入れないと同じになると思うんだけど
int x = 1001/2 - 501/2;
int x2 = (1001 - 501) / 2;
ans. x==250, x2==250
0590デフォルトの名無しさん
2010/07/25(日) 12:01:560591デフォルトの名無しさん
2010/07/25(日) 12:07:00どうやって、コンパイラが最適化すんだよ。
0592デフォルトの名無しさん
2010/07/25(日) 12:15:14こんな風にならんのかな?
x = GetDeviceCaps(hDeskDC, HORZRES)/2 - WIDTH/2
↓
x = (int)/2 - (int)/2
↓
x = ((int)-(int)) / 2
0593デフォルトの名無しさん
2010/07/25(日) 12:31:40しかもホットスポットがAPIの中そのものだったりする
0594デフォルトの名無しさん
2010/07/25(日) 12:33:250595デフォルトの名無しさん
2010/07/25(日) 12:59:410596デフォルトの名無しさん
2010/07/25(日) 13:17:55そうなのか、サンクス
マルチモニタの場合を考えなければ
/2の部分を修正した>>573の方法でOK?
0597デフォルトの名無しさん
2010/07/25(日) 14:16:49そんなのないと思うでしょ。
MS Virtual PCのような仮想マシンで動かせば簡単に作れる。
大抵、仮想マシン側の画面解像度をホスト側のウィンドウ(のクライアント領域)の
大きさに合わせる機能が備わっているため。
0598デフォルトの名無しさん
2010/07/25(日) 14:19:56実際はないんだから
0599デフォルトの名無しさん
2010/07/25(日) 14:20:58自由に解像度が設定できる(仮想含む)グラフィックボードとか、
あるいはウィンドウモードで動作する仮想PC使ったこと無いの?
0600デフォルトの名無しさん
2010/07/25(日) 14:33:410601デフォルトの名無しさん
2010/07/25(日) 14:37:360602デフォルトの名無しさん
2010/07/25(日) 16:10:02そして後日、小出しに公開
0603デフォルトの名無しさん
2010/07/25(日) 16:56:150604デフォルトの名無しさん
2010/07/25(日) 16:57:18いやなんでもないです
0605デフォルトの名無しさん
2010/07/25(日) 17:09:520606デフォルトの名無しさん
2010/07/25(日) 19:51:36こんな感じの実装になると思われ。(間違っていたらごめん。)
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 // ウィンドウの高さ
0607デフォルトの名無しさん
2010/07/25(日) 21:34:11どのモニタで起動しようとしたのか把握できない気がする。
後は、MonitorFromWindowで対象モニタの情報を取って、
作業領域の中央に配置するように計算すれば良い。
0608デフォルトの名無しさん
2010/07/26(月) 07:42:48ノート 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
宜しくお願いします。
0609デフォルトの名無しさん
2010/07/26(月) 15:19:51サンクス
とても勉強になりました
0610デフォルトの名無しさん
2010/07/26(月) 17:13:28ウィンドウハンドルはどのように渡せば良いでしょうか?
HWNDをポインタとして数値表記をコマンドラインで渡す方法がよくつかわれているようですが、
HANDLEはポインタと互換であることが保証されているのでしょうか?
なお、親になるプロセスは複数インスタンスが同時に実行される可能性があり、かつ、
送信先のWindowのタイトルもユニークではないので探して送るはうまくありません。
0611デフォルトの名無しさん
2010/07/26(月) 18:47:22ヘッダのtypedefくらい見ろよクズ
typedef void *HANDLE
となってます
まんまポインタです
0612デフォルトの名無しさん
2010/07/26(月) 19:16:180613デフォルトの名無しさん
2010/07/26(月) 19:18:330614デフォルトの名無しさん
2010/07/26(月) 19:19:500615デフォルトの名無しさん
2010/07/26(月) 19:20:240616デフォルトの名無しさん
2010/07/26(月) 19:21:190617デフォルトの名無しさん
2010/07/26(月) 19:23:070618デフォルトの名無しさん
2010/07/26(月) 19:23:32アホはいいですけど低知能な質問はお断りです
0619デフォルトの名無しさん
2010/07/26(月) 19:24:20いやよくないよ。
0620デフォルトの名無しさん
2010/07/26(月) 19:25:11そもそもAPIの質問じゃないじゃん。
スレタイも読めない奴は小学校から出直せよ。
0621デフォルトの名無しさん
2010/07/26(月) 19:27:58気分はどうだアホ
0622デフォルトの名無しさん
2010/07/26(月) 19:30:070623デフォルトの名無しさん
2010/07/26(月) 19:30:54保証されてんですか(笑)
0624デフォルトの名無しさん
2010/07/26(月) 19:31:13スレタイ読めるなら消えろ
0625デフォルトの名無しさん
2010/07/26(月) 19:31:380626デフォルトの名無しさん
2010/07/26(月) 19:31:58かーもね
0627デフォルトの名無しさん
2010/07/26(月) 19:32:470628デフォルトの名無しさん
2010/07/26(月) 19:34:42じゃあMSに電話して聞けよ
アーキテクチャーが正しいかどうかなんて部外者には分かんねーぞ
本だって「書いた時点ではそうなってる」以上のことは言えないんだから
0629デフォルトの名無しさん
2010/07/26(月) 19:35:08保証書でも探して読んでろよクズ
0630デフォルトの名無しさん
2010/07/26(月) 19:35:36お前にはそれで十分だろ。
0631デフォルトの名無しさん
2010/07/26(月) 19:35:510632デフォルトの名無しさん
2010/07/26(月) 19:36:400633デフォルトの名無しさん
2010/07/26(月) 19:37:57スレタイ見てすらいないお前がな。
0634デフォルトの名無しさん
2010/07/26(月) 19:38:09そうだな電話しろ
0635デフォルトの名無しさん
2010/07/26(月) 19:38:38そうだね黙ってればよかったねお前がね
0636デフォルトの名無しさん
2010/07/26(月) 19:40:020637デフォルトの名無しさん
2010/07/26(月) 19:40:340638デフォルトの名無しさん
2010/07/26(月) 19:40:420639デフォルトの名無しさん
2010/07/26(月) 19:40:56お前の存在がバグだろ
0640デフォルトの名無しさん
2010/07/26(月) 19:41:15自己紹介しなくて良いよ。
0641デフォルトの名無しさん
2010/07/26(月) 19:41:340642デフォルトの名無しさん
2010/07/26(月) 19:42:29怖くて
0643デフォルトの名無しさん
2010/07/26(月) 19:43:370644デフォルトの名無しさん
2010/07/26(月) 19:45:570645デフォルトの名無しさん
2010/07/26(月) 19:46:27一応信用して使っておいても問題無いんじゃないかな。
まあ、Win64の話が出てきたと思ったら
DialogProcの戻り値がBOOLからINT_PTRに変わったなんて事もあるし、
諦めも肝心だったりするw
0646デフォルトの名無しさん
2010/07/26(月) 20:02:45あー、それそれ。やっとまともな回答者が現れた。
Windows Data Typesに書かれてますね。
>>624
スレタイ読めなくて消えるべきはキミのようだ。www
0647デフォルトの名無しさん
2010/07/26(月) 20:46:28暇だね
0648デフォルトの名無しさん
2010/07/26(月) 23:02:35であれば問題ない
0649デフォルトの名無しさん
2010/07/26(月) 23:32:11それのどこに問題があるの?
result==TRUEやresult!=TRUEでチェック入れてた人は困るかもしれないけど
そんな人って存在するの?
0650デフォルトの名無しさん
2010/07/26(月) 23:53:500651デフォルトの名無しさん
2010/07/26(月) 23:56:410652デフォルトの名無しさん
2010/07/27(火) 00:09:510653デフォルトの名無しさん
2010/07/27(火) 01:06:500654デフォルトの名無しさん
2010/07/27(火) 01:13:310655デフォルトの名無しさん
2010/07/27(火) 01:17:24Mainにコピペで済ませてるだけなら知らなくても不思議ではない
0656デフォルトの名無しさん
2010/07/27(火) 01:20:490657デフォルトの名無しさん
2010/07/27(火) 12:52:32と何度も言う必要があるな。ひどい名前付けてくれたもんだぜ
0658デフォルトの名無しさん
2010/07/27(火) 18:50:42まったくだな!
0659デフォルトの名無しさん
2010/07/27(火) 18:52:460660デフォルトの名無しさん
2010/07/27(火) 20:10:250661デフォルトの名無しさん
2010/07/27(火) 22:28:350662デフォルトの名無しさん
2010/07/28(水) 12:34:02そんな奴は頼むからプログラム書くな
いつか飛行機が墜ちる
0663デフォルトの名無しさん
2010/07/28(水) 13:02:10Cの使用は法律で禁止すべき
OSもPascalで書け
0664デフォルトの名無しさん
2010/07/28(水) 13:31:240665デフォルトの名無しさん
2010/07/28(水) 13:50:510666デフォルトの名無しさん
2010/07/28(水) 14:17:040667デフォルトの名無しさん
2010/07/28(水) 14:18:100668デフォルトの名無しさん
2010/07/28(水) 18:08:290669デフォルトの名無しさん
2010/07/28(水) 23:14:22BOOLに対して、result==TRUEやresult!=TRUEは禁止だろうけど、result!=FALSEはありだし互換性はあるな。
0670デフォルトの名無しさん
2010/07/29(木) 01:29:48恣岡悄。記事の名義はch3。
0671デフォルトの名無しさん
2010/07/29(木) 23:56:36左右矢印のボタンを押すとzipファイル内の別の画像を表示できますが、
これはどうやったら実現できるのでしょうか?
普通に関連付けただけでは、1個だけ画像が展開された一時フォルダのパスが
渡されるので、元のzipファイルには他にどんな画像が含まれていたのか
知ることができません。
0672デフォルトの名無しさん
2010/07/30(金) 00:01:31自分で中身読めば良いだろ
ZIPなんかたいしたフォーマットじゃねえ
0673デフォルトの名無しさん
2010/07/30(金) 00:22:06zipファイルのパスがわかれば自分で開いて読むのですが、
一時フォルダのパスしかわからないのです…
0674デフォルトの名無しさん
2010/07/30(金) 09:36:160675デフォルトの名無しさん
2010/07/30(金) 09:58:360676デフォルトの名無しさん
2010/07/30(金) 18:43:20Windowsフォトビューアーがzipファイルのフルパスを取り寄せる方法は
APIとして公開されているのでしょうか?
0677デフォルトの名無しさん
2010/07/30(金) 20:26:45登録されているのが何か怪しい。BMPとかPNGとかも似たような感じだし。
ShellNamespace系のインターフェースで受け取れたりとかするんじゃないか?
試すの面倒そうだから後は知らないけど。
0678デフォルトの名無しさん
2010/07/30(金) 20:31:060679デフォルトの名無しさん
2010/07/30(金) 20:34:20COMローカルサーバーを作成して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フォトビューアーでもそうなるので仕様なのだと思います。お騒がせしました。
0680デフォルトの名無しさん
2010/07/30(金) 20:35:38>>677
おっしゃる通りDropTargetキーとShell Namespaceが鍵でした。ありがとうございます。
0681デフォルトの名無しさん
2010/07/31(土) 00:12:50シェル関係とか関わりたくねえ
0682デフォルトの名無しさん
2010/07/31(土) 17:50:41MapVirtualKeyExは仮想キーコードを文字列に変換出来るとあるのですが、
逆に文字列を仮想キーコードに変換するには、どうすれば良いのでしょうか。
0683デフォルトの名無しさん
2010/07/31(土) 19:57:300684デフォルトの名無しさん
2010/07/31(土) 20:14:00文字列とは、Ctrl+Q,Shift+Ctrl+Eといったもののことです。
0685デフォルトの名無しさん
2010/07/31(土) 20:16:370686デフォルトの名無しさん
2010/07/31(土) 20:24:480687デフォルトの名無しさん
2010/07/31(土) 20:52:14ホットキーのプレビュー表示用(スペース入りだけど)はそんな感じだし
ByIdに対するByNameだから普通にありそうな気もするけど
俺ならとりあえず
std::map<std::string,WORD>
とかで変換用のテーブル作っちゃうかな
IDEの進歩のおかげでリファクタリングも容易ですし
0688デフォルトの名無しさん
2010/08/01(日) 14:55:270689デフォルトの名無しさん
2010/08/02(月) 00:39:58Win7+.Net4+Silverlightとかで普通に取得できる事をXPとかじゃできそうになくて。
WinTabのソースコードでも公開されてれば自分で解析するんですが…。
ご存知の方はご教示宜しくお願い致します。
0690デフォルトの名無しさん
2010/08/02(月) 00:46:27知らない人は黙っていてください。
0691デフォルトの名無しさん
2010/08/02(月) 01:00:480692デフォルトの名無しさん
2010/08/02(月) 07:06:26ということで、スレ違いだな。
0693デフォルトの名無しさん
2010/08/02(月) 07:59:320694デフォルトの名無しさん
2010/08/02(月) 10:51:22詳しくは書かないでおくわ
0695デフォルトの名無しさん
2010/08/02(月) 11:39:490696デフォルトの名無しさん
2010/08/02(月) 15:51:34なんか、ほかの人のところで動かしたら、そんな状態らしいんです
0697デフォルトの名無しさん
2010/08/02(月) 15:56:340698デフォルトの名無しさん
2010/08/04(水) 12:34:57OSはXPです
0699デフォルトの名無しさん
2010/08/04(水) 13:08:50CallNtPowerInformation
0700デフォルトの名無しさん
2010/08/05(木) 09:21:17ありがとうございます
なんとかなりそうです
0701デフォルトの名無しさん
2010/08/05(木) 15:58:46スクロールさせると、文字が潰れるというか、表示がめちゃくちゃになってしまいます。
ブラウザやテキストエディタのように、スクロールさせても整然と表示させるには、
どういった処理をすればよいのでしょうか?
0702デフォルトの名無しさん
2010/08/05(木) 20:28:520703デフォルトの名無しさん
2010/08/05(木) 20:54:58オーナードローで実装するほかにないでしょうか
0704デフォルトの名無しさん
2010/08/05(木) 21:50:280705デフォルトの名無しさん
2010/08/06(金) 17:49:240706デフォルトの名無しさん
2010/08/06(金) 18:26:12がんがれ
0707デフォルトの名無しさん
2010/08/07(土) 00:37:28DirectX利用のフルスクリーンのものを起動している状態だと機能しません
DirectInputよりも低水準キーフックのほうが先に受け取れると聞いたのですが
これは妨げられていると考えていいのでしょうか
windows 7 64
0708デフォルトの名無しさん
2010/08/07(土) 01:58:28キーボードフックする
0709703
2010/08/07(土) 20:16:16ただ、アイコンを描画するための余白を空けるために
イメージリストは必要(空白のアイコンを1つ入れるだけ)でしたが
0710デフォルトの名無しさん
2010/08/07(土) 21:07:550711デフォルトの名無しさん
2010/08/07(土) 21:12:430712デフォルトの名無しさん
2010/08/07(土) 23:00:05やり方間違えてるわ、それ
0713デフォルトの名無しさん
2010/08/08(日) 02:50:22自分で見た限りではスクリーンセーバーと普通のEXEには、全く違いを見つけることはできませんでした。
0714デフォルトの名無しさん
2010/08/08(日) 02:51:17というかそもそも同じもの
0715デフォルトの名無しさん
2010/08/08(日) 11:44:15カスタムドローの通知メッセージの時に使う
構造体を探してもHICONを入れるところが見つからないですが‥‥
0716デフォルトの名無しさん
2010/08/08(日) 15:53:10インスタンスハンドル型のデータを表す、HINSTANCE これってなんて読んだらいいのぉ?
0717デフォルトの名無しさん
2010/08/08(日) 15:57:440718デフォルトの名無しさん
2010/08/08(日) 16:00:140719デフォルトの名無しさん
2010/08/08(日) 16:41:170720デフォルトの名無しさん
2010/08/08(日) 17:39:170721デフォルトの名無しさん
2010/08/08(日) 17:44:44LONGとかのマクロばっかり書いてるとせっかくの構文着色が意味なくなるな
色がついてるの条件文とreturnくらいだ・・・
0722デフォルトの名無しさん
2010/08/08(日) 18:20:480723デフォルトの名無しさん
2010/08/08(日) 18:21:330724デフォルトの名無しさん
2010/08/08(日) 19:22:070725デフォルトの名無しさん
2010/08/08(日) 19:33:540726デフォルトの名無しさん
2010/08/08(日) 20:43:310727デフォルトの名無しさん
2010/08/08(日) 23:37:16gccだとsizeof(wchar_t) == 4だったりするのでMinGWではわざわざ
sizeof(wchar_t) == 2にするためのコンパイルオプションを使ってる
0728デフォルトの名無しさん
2010/08/08(日) 23:43:170729デフォルトの名無しさん
2010/08/08(日) 23:48:03charではなく最初からbyte、unsigned byteにしとけばよかったんだ
0730デフォルトの名無しさん
2010/08/08(日) 23:48:210731デフォルトの名無しさん
2010/08/09(月) 00:20:35設定画面が開いている間は他のウィンドウの操作を一切受け付けないような
ウィンドウってどうやって作るの?
他のウィンドウにフォーカスを当てようとすると
警告音が鳴って、タイトルバーが点滅するようなウィンドウなんだけど
0732デフォルトの名無しさん
2010/08/09(月) 00:30:150733デフォルトの名無しさん
2010/08/09(月) 00:48:57mxml?
0734デフォルトの名無しさん
2010/08/09(月) 00:49:180735デフォルトの名無しさん
2010/08/09(月) 00:55:14アプリケーションウインドウの手前に設定用のウインドウを出すために
アプリケーションウインドウをオーナーウインドウする。
操作を受け付けないようにするには、EnableWindowで無効にする。
この2つの組み合わせで出来る。
DialogBoxを使う場合はこれを勝手にやってくれるので、自分でやる必要はない。
0736デフォルトの名無しさん
2010/08/09(月) 06:31:31普通はWS_POPUPで事足りるだろ。
0737デフォルトの名無しさん
2010/08/09(月) 08:37:11レスありがとう
>>735の方法で出来ました!
0738デフォルトの名無しさん
2010/08/09(月) 09:35:230739デフォルトの名無しさん
2010/08/09(月) 10:35:030740デフォルトの名無しさん
2010/08/09(月) 17:49:56GetUserName()だと当たり前ですが、"SYSTEM"を取得してしまいます。
0741デフォルトの名無しさん
2010/08/09(月) 17:55:14子ウィンドウを監視して前面に来たら後ろに戻すとか
親ウィンドウをモーダル化するとか。
>>740
泥臭いやり方だと、プロセス一覧を作って
プロセスのユーザー名からSYSTEM関係を除いて一番多い奴
とか。
0742739
2010/08/09(月) 18:12:21レスありがとうございます。
ただ、もう少し正確にログインユーザ名を取得する方法をしりたいです・・・
レジストリなどのどこかに記述されていないでしょうか?
0743デフォルトの名無しさん
2010/08/09(月) 18:34:510744デフォルトの名無しさん
2010/08/09(月) 18:39:07そもそもログインしてないとかどうすんの
0745デフォルトの名無しさん
2010/08/09(月) 19:20:09コンソールセッションなら
WTSGetActiveConsoleSessionId
WTSQuerySessionInformation(WTSUserName)
0746デフォルトの名無しさん
2010/08/09(月) 19:21:06○740
0747デフォルトの名無しさん
2010/08/10(火) 12:22:42SetClipboardViewerとChangeClipboardChainを使い
WM_CHANGECBCHAINとWM_DRAWCLIPBOARDのメッセージ処理を書いて、
普通に使う分には目的に沿ったソフトを作ることができました。
ただ、クリップボードチェイン内のプログラムの異常終了・強制終了などが原因で
クリップボードチェインが切れるとクリップボード監視動作も止まってしまいます。
検索してみるとクリップボードチェィン切れ対策をしなければならないということだけはわかったのですが
クリップボードチェィン切れ対策とは具体的にどのような事をすればいいのでしょうか?
タイマーなどで、何秒かおきに
ChangeClipboardChain
SetClipboardViewer
を呼び出して再設定し直すという方法は、やってみたのですが
WM_DRAWCLIPBOARDに無限ループ的にメッセージが
飛んでくることになってしまい、うまくいきませんでした。
ご存知の方がおられましたら、よろしくお願いします。
0748デフォルトの名無しさん
2010/08/10(火) 12:33:000749デフォルトの名無しさん
2010/08/10(火) 12:40:190750デフォルトの名無しさん
2010/08/10(火) 12:58:40いわゆる家庭用BBルーターを使用している>>749はカスという事で良いですね。
ftpのルーター超えでは覗きまでやってるので、カスの極みですね。
0751デフォルトの名無しさん
2010/08/10(火) 13:05:39>>749
すいません。書き方が悪かったです。
ソフトの大まかな機能は、クリップボードの履歴をとって再利用するだけのソフトです。
0752デフォルトの名無しさん
2010/08/10(火) 13:06:03わざわざ「家庭用BB」を付けるあたり、だれもが使っているという発想が初心者臭くていいよね。
0753デフォルトの名無しさん
2010/08/10(火) 13:35:52その初心者にもわかる自己矛盾に気付かなかった>749が、より一層惨めになるでしょ。
0754デフォルトの名無しさん
2010/08/10(火) 13:45:19確かに惨めだよね。
0755デフォルトの名無しさん
2010/08/10(火) 13:45:360756デフォルトの名無しさん
2010/08/10(火) 13:51:15多分わかってないのはキミの方だと思うよ。せっかくftpってキーワード書いてやったのに。
0757デフォルトの名無しさん
2010/08/10(火) 13:59:56恥の上塗りを繰り返すのが趣味なんだろうけどね。
0758デフォルトの名無しさん
2010/08/10(火) 14:38:42ああ夏だなあ
夏だなあ
0759デフォルトの名無しさん
2010/08/10(火) 14:52:260760デフォルトの名無しさん
2010/08/10(火) 19:00:410761デフォルトの名無しさん
2010/08/10(火) 19:07:32> 恥の上塗りを繰り返すのが趣味なんだろうけどね。
うわ〜〜〜。ここまで恥の上塗りを繰り返す人も珍しい。w
0762デフォルトの名無しさん
2010/08/10(火) 19:13:290763デフォルトの名無しさん
2010/08/10(火) 19:18:18起動しました。
ターゲットのプログラムのウィンドウハンドルを得るにはどうしたらいいですか。
0764デフォルトの名無しさん
2010/08/10(火) 19:32:51FindWindow関数で検索するといいよ。
そこからさらに、少し調べる必要があるけど、ぐぐればわかるからがんばって。
0765デフォルトの名無しさん
2010/08/10(火) 19:39:50> 具体的に突っ込めないからって人格攻撃て
って、言う事は
> FTPもデータを覗いている訳じゃない。
まさかこれで、具体的に突っ込んでるつもりなんだろうか。
無知とはまさに恐ろしい。www
0766デフォルトの名無しさん
2010/08/10(火) 20:04:150767デフォルトの名無しさん
2010/08/10(火) 20:46:500768デフォルトの名無しさん
2010/08/10(火) 20:47:460769デフォルトの名無しさん
2010/08/10(火) 21:27:100770デフォルトの名無しさん
2010/08/11(水) 00:28:360771デフォルトの名無しさん
2010/08/11(水) 07:22:52病院へ行くことをお勧めする。
0772デフォルトの名無しさん
2010/08/11(水) 07:26:470773デフォルトの名無しさん
2010/08/11(水) 07:32:310774デフォルトの名無しさん
2010/08/11(水) 10:02:540775デフォルトの名無しさん
2010/08/11(水) 11:31:330776デフォルトの名無しさん
2010/08/11(水) 11:40:120777デフォルトの名無しさん
2010/08/11(水) 11:40:40病院へ行くことをお勧めする。
0778デフォルトの名無しさん
2010/08/11(水) 11:43:05される環境です。タスクマネージャから終了させてもすぐに再開
してしまいます。このソフトを起動するのはこの場合別の常駐
プロセスでしょうか?それとも別のソフトウェア(エクスプローラ)
とかでしょうか?それを判別するプログラム或はAPIってありますか?
0779デフォルトの名無しさん
2010/08/11(水) 11:57:330780デフォルトの名無しさん
2010/08/11(水) 11:58:26NtQuerySystemInformationでSYSTEM_PROCESS_INFORMATIONを取得すれば親プロセスのプロセスIDが確認できる
0781デフォルトの名無しさん
2010/08/11(水) 12:12:13コピペ禁止するために生徒のPCに組み込む>>778なプログラムの作り方聞いて
叩かれまくってた先生が居た気がする。
0782デフォルトの名無しさん
2010/08/11(水) 12:26:53フリーのツールいっぱいある気がす
0783デフォルトの名無しさん
2010/08/11(水) 12:48:540784デフォルトの名無しさん
2010/08/11(水) 13:01:260785デフォルトの名無しさん
2010/08/11(水) 13:02:190786デフォルトの名無しさん
2010/08/11(水) 13:47:14んで、びっくりしたユーザーの振動がマウスに伝わる。
もちろんフォーカスをターゲットとなるプログラムに合わせておく。
これでバッチリ
0787デフォルトの名無しさん
2010/08/11(水) 17:33:270788デフォルトの名無しさん
2010/08/12(木) 00:26:08ちょっとワロタw
0789デフォルトの名無しさん
2010/08/12(木) 00:29:230790デフォルトの名無しさん
2010/08/12(木) 01:30:390791デフォルトの名無しさん
2010/08/12(木) 10:28:500792デフォルトの名無しさん
2010/08/12(木) 19:46:00RGB(0x77,0x77,0x77)で埋め尽くし
その後にDrawIconEx(フラグはDI_IMAGE | DI_MASK指定)を使って、アイコンを描画し
ピクセルバッファから、RGB(0x77,0x77,0x77)では無い部分を抜き出すコードを書いて動いているんですが
極々一部のPCで動かすと、RGB(0x77,0x77,0x77)で埋め尽くした部分が
DrawIconEx後に見ると、0x00で埋め尽くされているんですが、これは環境に依存してしまうんでしょうか?
0793デフォルトの名無しさん
2010/08/13(金) 01:09:410794デフォルトの名無しさん
2010/08/13(金) 02:02:56可能ですか?
0795デフォルトの名無しさん
2010/08/13(金) 02:20:00可能だけど、わりと面倒
0796デフォルトの名無しさん
2010/08/13(金) 04:22:56ピクセルバッファにクリエイトコンパチブルビットマップとセレクトビットマップしていないと予想
0797デフォルトの名無しさん
2010/08/13(金) 04:30:420798デフォルトの名無しさん
2010/08/13(金) 19:02:490799デフォルトの名無しさん
2010/08/13(金) 19:56:290800デフォルトの名無しさん
2010/08/13(金) 23:47:110801デフォルトの名無しさん
2010/08/14(土) 01:56:22子項目はそのままで、親項目のみにチェックボックスを付ける方法などはないのでしょうか?
オーナードローは出来ないみたいですし、カスタムドローでいけるかと思ったのですが駄目でした。
よろしくお願いします。
0802デフォルトの名無しさん
2010/08/14(土) 14:27:23プログラムを作成しているのですがうまくいきません。
自作の実験用プログラムに対しては正常動作しました。
またspy++で普通にキーボード入力して発行されるメッセージと同じメッセージを
プログラムから送ってみましたがダメでした。
ターゲットのプログラムがWM_KEYDOWNメッセージを無視してGetAsyncKeyStateなどで
キー入力を見ているように思うのですが、こういう場合はどうやればターゲットのプログラムに
キー入力を送れますか。
0803デフォルトの名無しさん
2010/08/14(土) 20:12:510804デフォルトの名無しさん
2010/08/14(土) 20:17:340805デフォルトの名無しさん
2010/08/14(土) 20:24:130806デフォルトの名無しさん
2010/08/14(土) 20:26:280807デフォルトの名無しさん
2010/08/14(土) 20:28:20VirtualProtect
WriteProcessMemory
CreateRemoteThread
ImageDirectoryEntryToData
かな。
グローバルフック使う方がリモートスレッド作成する手間が少ないか。
0808デフォルトの名無しさん
2010/08/14(土) 20:47:10何のネトゲ?
0809デフォルトの名無しさん
2010/08/14(土) 21:10:51WndProcの中にcase WM_KEDOWN: return 0;
メインループの中にGetAsyncKeyState(VK_DOWN)
を記述したテスト用プログラムに対して、別のプログラムから
SendMessage(target_hwnd, WM_KEYDOWN, VK_DOWN, 0)
してみたら、SendMessageの入力は無視されて、直接↓キー押したら反応して、
今回のターゲットのプログラムと同じ挙動になった。
GetAsyncKeyStateの中で参照してるキーの押下情報はWM_KEYDOWNで書き換えられるパラメータとは
別個にあるみたいですね。GetAsyncKeyStateに対応したSetAsyncKeyStateみたいな関数があればいいんだけど。
DirectInputとかも関係あるのかなあ。言語を変えてJavaとかでもやってみるかな。。
0810デフォルトの名無しさん
2010/08/14(土) 22:21:16確かその関数って割と低レイヤのデータをとってくるんだったはず
ウィンドウが非アクティブでもキー押下情報がとれたり
だからウィンドウメッセージみたいな高レイヤの処理とは根本的に別物
0811デフォルトの名無しさん
2010/08/15(日) 00:24:45GetKeyStateはメッセージが飛んできた時の状態
GetAsyncKeyStateはAPIを呼んだ瞬間の状態
0812デフォルトの名無しさん
2010/08/15(日) 00:30:53この本っていい?
http://www.amazon.co.jp/dp/4839902003/
0813デフォルトの名無しさん
2010/08/15(日) 00:40:200814デフォルトの名無しさん
2010/08/15(日) 00:47:22浮動小数点実数を使うこと自体異常
0815デフォルトの名無しさん
2010/08/15(日) 00:53:40でもintだろうな。数字を見た感じ。
0816デフォルトの名無しさん
2010/08/15(日) 00:58:02keybd_event でできるかも?
0817デフォルトの名無しさん
2010/08/15(日) 01:09:19おおおおおおおおお!!できましたー。
あなたは神です。ありがとうありがとう。
0818デフォルトの名無しさん
2010/08/15(日) 01:12:11なんでkeybd_eventだとうまくいくんだろう。
他より低水準な処理をしてるんだろうことは分かるが。
0819デフォルトの名無しさん
2010/08/15(日) 01:16:00無理だろ
SendInput、keybd_eventはいずれもキューにキーボードイベントを格納するもの
最終的に該当ウィンドウのメッセージ処理でキーボードイベントとして処理されることが前提
ウィンドウメッセージとは無関係にキーボードの状態を知るためのAPIがGetAsyncKeyState
このAPIに割り込むには、APIフックなどを使ってAPI自体の挙動を自力で上書きするしかないと思う
0820デフォルトの名無しさん
2010/08/15(日) 01:20:420821デフォルトの名無しさん
2010/08/15(日) 01:20:440822819
2010/08/15(日) 01:20:57GetAsyncKeyStateはともかく、
keybd_eventってSendInputと同レベルの旧APIだと思ってたんだけど、
keybd_eventの方が高度なことってあるの?
0823デフォルトの名無しさん
2010/08/15(日) 01:24:23WM_KEYDOWNはSendしちゃダメだよ。それはPostするメッセージ。
0824デフォルトの名無しさん
2010/08/15(日) 01:32:28keybd_eventのみGetASyncKeyStateが参照するパラメータをいじってるようですね。
>>823
PostMessageでもダメでした。
0825デフォルトの名無しさん
2010/08/15(日) 01:34:120826デフォルトの名無しさん
2010/08/15(日) 01:46:05どのネトゲの話をしてるのかわからないけど
keybd_event動くならSendInputも間違ってなければ動くよ
千田(wとか言っちゃうゲームの話ならこれ以上詳しい話はしない
0827デフォルトの名無しさん
2010/08/15(日) 02:08:51結果、>>809のプログラムはSendInputでキー入力情報を送れました。
が、ターゲットのプログラムに対しては全く同じ処理にも関わらず送れませんでした。
以上です。
0828デフォルトの名無しさん
2010/08/15(日) 02:16:47何のネトゲか話しないしこれ以上教える義理も無いし
0829デフォルトの名無しさん
2010/08/15(日) 02:29:520830デフォルトの名無しさん
2010/08/15(日) 02:34:45教える気は有ったよ、むしろ満々だったよ。
だけどSendInputをどのように処理したか言わないわ
経験からPost/SendMessage受け付けないのはネトゲだろうと踏んで詳しく聞こうとしても無しのつぶてでどうすれと?
大体ネトゲBOTの質問に対してそんなに優しいスレじゃなかったろうに何なんだよw
0831デフォルトの名無しさん
2010/08/15(日) 02:38:290832デフォルトの名無しさん
2010/08/15(日) 02:43:02わかった、素直に寝る事にする
0833デフォルトの名無しさん
2010/08/15(日) 02:48:23これで>>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とかでしょうか。
0834デフォルトの名無しさん
2010/08/15(日) 08:36:31WM_GETDLGCODEっていうのが大量に来るけど、これを処理するのがモードレスのマナー?
0835デフォルトの名無しさん
2010/08/15(日) 08:39:330836デフォルトの名無しさん
2010/08/15(日) 08:48:45有難う!
GetMessageのループ内で、IsDialogMessageでTRUE帰って来たらcontinueしてた
ちょっとcontinueせず、Translateよんでみます
0837デフォルトの名無しさん
2010/08/15(日) 09:36:420838デフォルトの名無しさん
2010/08/15(日) 11:00:27http://www.fukehara.com/openhiki/myproduct/hiki.cgi?NNScanText
このスキャンテキストモード(ウインドウを再描画させてその描画内容を取得する)と
同様のことをAPIで行ないたいのですが,探してみてもどうもよくわかりません。
0839デフォルトの名無しさん
2010/08/15(日) 11:06:41そこの仕様に書いてあるじゃん
で、フックで横取りとか
0840デフォルトの名無しさん
2010/08/15(日) 11:08:08メッセージを取得するのはフックでできるんだっけ?
0841デフォルトの名無しさん
2010/08/15(日) 11:31:300842838
2010/08/15(日) 12:44:27ありがとうございます。フックでやってみます。
0843デフォルトの名無しさん
2010/08/15(日) 16:12:040844デフォルトの名無しさん
2010/08/15(日) 17:02:57派遣会社に派遣されて、金融計算(パソコンのint型で
桁が足りないからdouble使用)の糞プログラムの改造の
仕事がまわってきたから、とんずらして会社辞めてやった。
スレ汚しスマソ
0845デフォルトの名無しさん
2010/08/15(日) 20:19:130846デフォルトの名無しさん
2010/08/16(月) 09:05:50選択すると薄い選択色になるようにするにはどうしたらいいのでしょうか
Win7で動かしても、従来の濃い選択色にしかなりません
0847846
2010/08/16(月) 09:10:190848デフォルトの名無しさん
2010/08/16(月) 09:10:46>Win7で動かしても
イミフ
0849デフォルトの名無しさん
2010/08/16(月) 09:22:57明示的に書きました
0850デフォルトの名無しさん
2010/08/16(月) 10:22:260851デフォルトの名無しさん
2010/08/16(月) 11:00:170852デフォルトの名無しさん
2010/08/16(月) 11:45:13Pneumonia
Inkin
0853デフォルトの名無しさん
2010/08/16(月) 14:07:18NULL返して、GetLastErrorで見るとERROR_INVALID_HANDLEを返すんだが
これは何故?32bitだと問題なく動く
0854デフォルトの名無しさん
2010/08/16(月) 14:11:090855デフォルトの名無しさん
2010/08/16(月) 14:42:250856デフォルトの名無しさん
2010/08/16(月) 18:19:22DLLを作るときは常にこれでチェックしているけど、DllMainでCreateFileMappingを使うなとは書いてないけどな。
0857デフォルトの名無しさん
2010/08/16(月) 18:56:01http://msdn.microsoft.com/en-us/library/ms686958(VS.85).aspx
0858デフォルトの名無しさん
2010/08/16(月) 19:00:340859デフォルトの名無しさん
2010/08/16(月) 19:13:170860デフォルトの名無しさん
2010/08/16(月) 19:55:11なので>>853のソースのどこかにバグがある。
0861デフォルトの名無しさん
2010/08/16(月) 20:29:58static const TCHAR *MAP_FILENAME = TEXT("SHARE");
hMap = CreateFileMapping(
(HANDLE)0xFFFFFFFF,
NULL,
PAGE_READWRITE,
0,
sizeof(DATAITEM),
MAP_FILENAME
);
としていて、駄目になる
WinXP、32bitのVC++2010
ビルド後はWinXP64bitで確認してる
0862デフォルトの名無しさん
2010/08/16(月) 20:35:03……まさか素じゃないよな?
0863デフォルトの名無しさん
2010/08/16(月) 20:42:54適当なハンドル渡せばERROR_INVALID_HANDLEが返るに決まってんだろwww
0864デフォルトの名無しさん
2010/08/16(月) 20:44:50http://msdn.microsoft.com/en-us/library/aa366537(v=VS.85).aspx
特に第1引数
0865デフォルトの名無しさん
2010/08/16(月) 20:47:250866デフォルトの名無しさん
2010/08/16(月) 20:52:47void*ってことは64bit環境なら64bitなわけで…
-1ってことはビットが全部立ってるわけで…
すなわち
0867デフォルトの名無しさん
2010/08/16(月) 20:54:370868デフォルトの名無しさん
2010/08/16(月) 20:55:150869デフォルトの名無しさん
2010/08/16(月) 20:58:36128bitOSが登場したら(ry
0870デフォルトの名無しさん
2010/08/16(月) 20:58:530871デフォルトの名無しさん
2010/08/16(月) 20:59:100872デフォルトの名無しさん
2010/08/16(月) 20:59:420873デフォルトの名無しさん
2010/08/16(月) 21:00:280874デフォルトの名無しさん
2010/08/16(月) 21:01:060875861
2010/08/16(月) 21:13:070xFFFFFFFFは駄目なのか…どのサイトも0xFFFFFFFFばっかりだから気づかんかった…
0876デフォルトの名無しさん
2010/08/16(月) 21:19:370877デフォルトの名無しさん
2010/08/16(月) 21:24:35目的とマクロ名が一致してない。今のMSなら卒倒しそうだ。
0878デフォルトの名無しさん
2010/08/16(月) 21:41:360879デフォルトの名無しさん
2010/08/16(月) 21:48:12http://msdn.microsoft.com/en-us/library/ms810613.aspx
> If the system pagefile is to be used, the value 0xFFFFFFFF must be specified instead.
0880デフォルトの名無しさん
2010/08/16(月) 22:02:510881デフォルトの名無しさん
2010/08/16(月) 23:03:390882デフォルトの名無しさん
2010/08/16(月) 23:40:10ページファイルを使ったファイルマッピングオブジェクトが作成されてしまう
(エラーにならない)罠があるってAdvanced Windowsに書いてたな。
0883デフォルトの名無しさん
2010/08/16(月) 23:52:58http://msdn.microsoft.com/en-us/library/aa384137(v=VS.85).aspx
0884デフォルトの名無しさん
2010/08/17(火) 01:41:020885デフォルトの名無しさん
2010/08/17(火) 01:58:470886デフォルトの名無しさん
2010/08/17(火) 08:29:390887デフォルトの名無しさん
2010/08/17(火) 09:42:510888デフォルトの名無しさん
2010/08/17(火) 09:59:210889デフォルトの名無しさん
2010/08/17(火) 10:03:380890デフォルトの名無しさん
2010/08/17(火) 10:06:020891デフォルトの名無しさん
2010/08/17(火) 10:21:13ヘ_ヘ
ミ・・ ミ ということにしたいのですね
( )〜 void
---------------------------------
0892デフォルトの名無しさん
2010/08/17(火) 10:44:57wisdomや猫でも分かるのサンプルコードにWM_KEYDOWN追加しても来ない
で、if(IsDialogMessage(hdlg,msg)){
TranslateMessage(msg);
DispatchMessage(msg);
continue;
}
とやるとWM_KEYDOWN来るけど、MSDN見ると>>837のように記述が書いてある
モードレスダイアログに対してのメッセージだからDispatchしてもいい気がするが何か気持ち悪い
0893デフォルトの名無しさん
2010/08/17(火) 12:09:42>戻り値
>メッセージが処理されたときは、0 以外の値が返ります。
>メッセージが処理されなかったときは、0 が返ります。
0894デフォルトの名無しさん
2010/08/17(火) 14:50:19辞書の読み書き削除を行うためにIMM32の機能を利用していたのですが、
この度実行環境をXPからWindows2008Serverに変更した所動作しなくなりました。
調べていく内にTSFという物にたどり着いたのですが、
辞書云々に該当しそうな物としてはITfFnConfigureRegisterWord(辞書ツールのダイアログを表示する)
くらいしか見当たりませんでした。
Windows2008ServerとMS-IMEの環境下でこのような処理を行うにはどうすればよいのでしょうか。
0895デフォルトの名無しさん
2010/08/17(火) 17:12:070896デフォルトの名無しさん
2010/08/17(火) 17:28:02レスありがとうございます。
IFEDictionaryを使えばほぼ再現できそうなのですが
あと一点、登録単語の削除のメソッドがないみたいです。
ImmUnregisterWordに相当する機能は何かありませんでしょうか。
0897894
2010/08/17(火) 17:33:28自己解決しました。
IFEDictionary::RegisterWordの引数で削除が指定できるのですね。見逃していました。
>>895さん、本当にありがとうございました。
0898デフォルトの名無しさん
2010/08/17(火) 18:44:100899デフォルトの名無しさん
2010/08/18(水) 00:27:13子項目はそのままで、親項目のみにチェックボックスを付ける方法などはないのでしょうか?
0900デフォルトの名無しさん
2010/08/18(水) 00:46:20自作しろ
0901デフォルトの名無しさん
2010/08/18(水) 21:50:29人間の感覚、想定する想像と違う動作をするUIは避けるべき
0902デフォルトの名無しさん
2010/08/18(水) 21:57:47「トップ項目をチェックする」というメニューかもしれない。
0903デフォルトの名無しさん
2010/08/18(水) 23:03:35WindowsXPでグループ化している時はソートができないのは仕様ですか?
Windows7だとできるんですが。
0904デフォルトの名無しさん
2010/08/18(水) 23:03:50使い方間違ってるぞ
0905デフォルトの名無しさん
2010/08/18(水) 23:15:29けど実際どういうことに使うことを想定しているか聞きたいな。
ちょっと興味がある。
どう使うか自分が想像できない事だし。
0906デフォルトの名無しさん
2010/08/18(水) 23:26:28お前らは粛々とAPI答えてりゃ良いんだよ。
0907デフォルトの名無しさん
2010/08/18(水) 23:39:13屈折してるなーw
0908デフォルトの名無しさん
2010/08/19(木) 00:02:040909デフォルトの名無しさん
2010/08/19(木) 00:05:15APIたちが…
API
API API
API API API
API API
キングAPIになった!
0910デフォルトの名無しさん
2010/08/19(木) 03:34:22乙
0911デフォルトの名無しさん
2010/08/19(木) 04:22:28ここにAPIおいておきますね
0912デフォルトの名無しさん
2010/08/19(木) 07:06:49{ 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を読み込み中にエラーですみたいな、アドレスがちゃんと入ってない時に出るエラーだと思うのですが、どうすれば良いでしょうか?
0913デフォルトの名無しさん
2010/08/19(木) 07:19:38>float x,y,z;
>GetDlgItemText(hwnd ,10,str ,100);sscanf(str,"%f",&x);
TCHAR str[MAX_PATH];とかに変えてみ
0914デフォルトの名無しさん
2010/08/19(木) 07:25:23おお!できました!ありがとうございました!
他のところではそういうやり方でやってたのですが
このやり方でも通ったので全くそこが問題だと思いませんでした!
変な場所でエラーが出るから分かりにくいですね。
0915デフォルトの名無しさん
2010/08/19(木) 07:29:54>他のところではそういうやり方でやってたのですが
>このやり方でも通ったので全くそこが問題だと思いませんでした!
該当箇所を全部書き直したほうがいいよ
それは動いてるように見えてるだけで、実はスタック破壊を起こしてる
その辺を調べて詳細知ったほうが頭に入るから
0916デフォルトの名無しさん
2010/08/19(木) 07:34:13普通はコンパイル時に未初期化変数の警告を食らわないか?
0917デフォルトの名無しさん
2010/08/19(木) 07:39:45未初期化の警告は有りましたがエラーじゃない場合は無視するという方針ですた(`・ω・´)ゞ
0918デフォルトの名無しさん
2010/08/19(木) 07:46:49個人的にはプロジェクトを作ったら真っ先にオンにしておく事をお勧めする。
0919デフォルトの名無しさん
2010/08/19(木) 07:54:250920デフォルトの名無しさん
2010/08/19(木) 09:00:530921デフォルトの名無しさん
2010/08/19(木) 09:31:550922デフォルトの名無しさん
2010/08/19(木) 09:50:35C++は本当に巨大な糞塚だな
0923デフォルトの名無しさん
2010/08/19(木) 11:24:440924デフォルトの名無しさん
2010/08/19(木) 11:38:080925デフォルトの名無しさん
2010/08/19(木) 16:53:540926デフォルトの名無しさん
2010/08/19(木) 17:03:51この設定のこの値を…という記述ばかりで、それを変えると何が変わるのか一切無かったから辞めた
JSPで十分だわ
0927デフォルトの名無しさん
2010/08/19(木) 17:10:54エンコーディング関係なんて完全におまじないでやってる奴が多い
0928デフォルトの名無しさん
2010/08/19(木) 17:19:090929デフォルトの名無しさん
2010/08/19(木) 17:19:180930デフォルトの名無しさん
2010/08/19(木) 19:36:030931デフォルトの名無しさん
2010/08/19(木) 19:48:240932デフォルトの名無しさん
2010/08/19(木) 20:29:59むかしどこかで見て、関数名を忘れてしまいました……
0933デフォルトの名無しさん
2010/08/19(木) 20:34:59最初に呼ばれるんですか?
それともwindowを生成した時???
0934デフォルトの名無しさん
2010/08/19(木) 20:42:380935デフォルトの名無しさん
2010/08/19(木) 20:43:23FatalAppExit
0936デフォルトの名無しさん
2010/08/19(木) 21:09:020937デフォルトの名無しさん
2010/08/19(木) 21:11:090938デフォルトの名無しさん
2010/08/19(木) 21:12:40ありがと!
0939デフォルトの名無しさん
2010/08/19(木) 22:08:48__debugbreak()
0940デフォルトの名無しさん
2010/08/20(金) 01:52:31CreateWindowExのhMenu引数のに子ウィンドウIDを指定するように
子ダイアログに親ウィンドウからの子ウィンドウIDを指定することは可能でしょうか?
(ウィンドウが作成された後、子ウィンドウIDを書き換える…など)
親ウィンドウから、「GetDlgItem関数を使って」子ダイアログのウィンドウハンドルを取得したいのです。
(GetDlgItemで取得することが目的です)
稚拙な質問ですが、ご教授願います。
0941デフォルトの名無しさん
2010/08/20(金) 07:14:130942デフォルトの名無しさん
2010/08/20(金) 09:29:440943デフォルトの名無しさん
2010/08/20(金) 16:39:350944デフォルトの名無しさん
2010/08/20(金) 17:11:38SendMessage( HWND_BROADCAST, WM_QUIT, 0, 0)
実行するなよ! 絶 対 に実行するなよ!
0945デフォルトの名無しさん
2010/08/20(金) 17:12:500946デフォルトの名無しさん
2010/08/20(金) 18:13:36バルク品のハードディスクを外付けで繋ぐと、通常のハードディスクを返す
外付けかどうか調べる方法って他にないかな?
0947デフォルトの名無しさん
2010/08/20(金) 18:25:060948デフォルトの名無しさん
2010/08/20(金) 20:20:220949デフォルトの名無しさん
2010/08/20(金) 21:38:52Cで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で何も警告がでませんでした。
095036
2010/08/20(金) 22:00:22取り合えず、勉強するならもっといいパソコンと新しい資料を見た方がいい。
0951デフォルトの名無しさん
2010/08/20(金) 22:01:190952949
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はやってなかったと思います。
0953949
2010/08/20(金) 22:44:35自作描画ライブラリを作ったり、サウンドやEMSメモリをいじったりしてました。
0954デフォルトの名無しさん
2010/08/20(金) 23:08:55>コードを書きたいのです。当時のアプリで優秀なものが結構ありながら、
>しかしソースコードが公開されていないために、
嘘を書くな
しかも何でいまさらWin9x/NT4なんだ
0955デフォルトの名無しさん
2010/08/20(金) 23:11:26でも static の意味は判りません(キリ
0956デフォルトの名無しさん
2010/08/20(金) 23:17:530957デフォルトの名無しさん
2010/08/20(金) 23:21:45extern → public
0958949
2010/08/20(金) 23:35:29なんで釣りとか嘘を書いてるとか、云われるんでしょうか…?
当時優秀だったフリーウェアで、ソースコード非公開のものは結構ありますよ。
それを自分である程度再現して、たとえばGPLv2とかBSDライセンスで公開したいというのは、
あるでしょうが。
それに、いまさらもなにも、Win95〜NT4〜W2k〜XPまで、すくなくとも
共通したコードで書けるわけで、プラットフォームの差異を異端視する必要は
ないと思います。PC-9821後期モデルであれ、古いFMVノートであれ、同じでしょう。
staticの意味は分かりますが、世のWin32APIの解説サイトや参考書で、
staticを付けているコードがほとんど無いし、WndProc関数にしても、
long FAR PASCAL _export WndProcとしているのはあまり見ません。
そこに何か意味・論理上の差はあるのか?とお聞きした次第です。
でも、どうも嫌われてしまったみたいなので、すみません。
0959デフォルトの名無しさん
2010/08/20(金) 23:37:44おちょくりたくなって来るんですよ
これは俺の意見じゃなく、からかってる人達の意見な
0960デフォルトの名無しさん
2010/08/20(金) 23:51:54>共通したコードで書けるわけで、プラットフォームの差異を異端視する必要は
だから嘘を書くなってw
0961デフォルトの名無しさん
2010/08/20(金) 23:56:05コレ豆知識な
0962デフォルトの名無しさん
2010/08/20(金) 23:57:50PASCAL規約なんて、3.1以前の遺物
_exportは知らん
0963デフォルトの名無しさん
2010/08/20(金) 23:59:15世代をまず伺いたい。(A:10代 B:20代 C:30代 D:40代 E:それ以上)
PC-9821はどうやって入手したの?(A:昔買ったのをずっと使ってる
B:中古 )
BCC+4.0はいつ買ったの
とか
0964デフォルトの名無しさん
2010/08/21(土) 00:00:25つまりおちょくってるのは949で959はその自演と
0965デフォルトの名無しさん
2010/08/21(土) 00:01:270966デフォルトの名無しさん
2010/08/21(土) 00:03:11long FAR PASCAL _export WindowProc(HWND, unsigned, UINT, LONG);
は
LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);
の方が良いだろう。
0967949
2010/08/21(土) 00:32:27ありがとうございます。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(){ で解説しているとか、そういうノリですかね。
0968デフォルトの名無しさん
2010/08/21(土) 00:40:01♪果てしない悪路♪
♪やがてきっと♪
♪泥沼にはまり♪
♪そこを抜け出し♪
♪老いたプログラマ♪
0969デフォルトの名無しさん
2010/08/21(土) 01:24:22なのでOpenWatcomのソースでstaticがついているというのは、その処理系独特の作法ともいえる。
今の環境でその優秀なプログラムとやらを勉強したいのなら、Win32APIだけじゃなくて処理系別の特性の違いも覚えていく必要がある。
ある処理系では必要な宣言でも別の処理系で不必要で、間違って記述したために動作しないという可能性も当然あるからな。
まあ遠回りすることを咎めたりはしないが。
_exportというのはたぶんVC++の__declspec(dllexport)のことじゃないかな
0970デフォルトの名無しさん
2010/08/21(土) 01:38:11>>ちょうどアレですかね、昔のCコンパイラでint main(void){を受け付けるのに、
>>80年代の参考書はmain(){ で解説しているとか、そういうノリですかね。
これはノリとかではなくCの規格でどっちの記法も許されている。
ちなみにC++では後者の書き方は不可。
古い参考書を使う場合、今の規格では非推奨となっているような記述も当然あると思うので
そういったC/C++規格やAPI仕様の変遷も全部勉強すべし。
0971デフォルトの名無しさん
2010/08/21(土) 01:45:210972デフォルトの名無しさん
2010/08/21(土) 01:49:370973デフォルトの名無しさん
2010/08/21(土) 02:01:590974デフォルトの名無しさん
2010/08/21(土) 12:43:12>世代は20代後半、PC-9821は中古購入です。PC-9801でC + アセンブラをやってましたが、
これが嘘じゃないなら病院へ逝った方が良い
冗談抜きで
0975デフォルトの名無しさん
2010/08/21(土) 13:08:3940代後半なら話はわかるが・・・いや今更PC-9821ってさっぱりわかんね。
昔のPC板いった方がいいだろ。
0976デフォルトの名無しさん
2010/08/21(土) 13:42:49_exportもWin16の遺物
Win32ではWndProcなどのアプリケーションが用意するコールバック関数に
付ける必要はなくなった
つーかstaticの意味が分からないというのはWin32 API以前の問題だってことが
わからないならC言語入門のスレから出なおせとしか
0977デフォルトの名無しさん
2010/08/21(土) 13:44:10ではWin95で動くバイナリは作れない
0978デフォルトの名無しさん
2010/08/21(土) 13:45:59試したこともないけど。Win32sとか懐かしい。
0979デフォルトの名無しさん
2010/08/21(土) 13:49:000980デフォルトの名無しさん
2010/08/21(土) 14:00:48無い。
C++でprotected/privateにするような感じで、
static修飾した方が美しいから、そうしているだけ。
0981デフォルトの名無しさん
2010/08/21(土) 14:56:20こちらのソースを参考にSetWindowsHookExを実装しているのですが
64bitプロセスをアクティブにすると反応しなくなります。
64bitプロセスに対して動作させるためには、どのようにすればいいでしょうか。
0982デフォルトの名無しさん
2010/08/21(土) 15:23:450983デフォルトの名無しさん
2010/08/21(土) 16:06:420984デフォルトの名無しさん
2010/08/21(土) 16:09:240985デフォルトの名無しさん
2010/08/21(土) 17:07:45プロアクティブに今すぐお電話
0986949
2010/08/21(土) 18:41:44ありがとうございます。やっぱりstaticをつけたほうが、コード的には
美しいものになるんですね!
僕はカーニハン先生とパイク先生の「プログラミング作法」や、
藤原氏の「Cプログラミング診断室」を熟読していまして、きれいで洗練されたコードを
目指しています。だから、staticをつけるほうがイイ!のであれば、できるだけ
それに準じたかったのです。あまりにも無意味であれば、その限りではなかったんです。
>>974
いやホント、5インチフロッピーを部室で渡された、最後の世代ですよ。
今部屋にあるVX、UV、DA、それに当時手の届かなかったA-Matehがあるのは壮観だなぁ。
0987デフォルトの名無しさん
2010/08/21(土) 18:46:350988デフォルトの名無しさん
2010/08/21(土) 18:47:58Cの入門書くらい読んでからプログラム板に書き込めよ
0989949
2010/08/21(土) 19:04:10初期化関数や実体化関数の宣言でstatic BOOLとしていないし、
static char szAppNameとかしていないので、疑問に思ったんです。
でも、美しいコードを目指します。
0990デフォルトの名無しさん
2010/08/21(土) 19:09:450991デフォルトの名無しさん
2010/08/21(土) 19:15:110992デフォルトの名無しさん
2010/08/21(土) 20:04:240993デフォルトの名無しさん
2010/08/21(土) 20:08:310994デフォルトの名無しさん
2010/08/21(土) 21:16:390995デフォルトの名無しさん
2010/08/21(土) 21:30:180996デフォルトの名無しさん
2010/08/21(土) 22:03:450997デフォルトの名無しさん
2010/08/21(土) 23:29:23必要かどうか分からないとかきれいかどうかで決めるとかマジで病院行け
0998デフォルトの名無しさん
2010/08/22(日) 00:18:18http://hibari.2ch.net/test/read.cgi/tech/1282403810/
0999デフォルトの名無しさん
2010/08/22(日) 00:35:481000デフォルトの名無しさん
2010/08/22(日) 00:38:54>998 名前: デフォルトの名無しさん Mail: sage 投稿日: 2010/08/22(日) 00:18:18
>お前らマジ次スレ行け
>http://hibari.2ch.net/test/read.cgi/tech/1282403810/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。