Win32API質問箱 Build47
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/11/13(月) 08:56:12やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは>>2-5くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
0002デフォルトの名無しさん
2006/11/13(月) 08:57:1445 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/
0003デフォルトの名無しさん
2006/11/13(月) 08:57:4531 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
30 ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
29 ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
28 ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
27 ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
26 ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
25 ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
24 ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
23 ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
22 ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
21 ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
20 ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
19 ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
18 ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
17 ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
16 ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/★
15 ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/★
14 ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
13 ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
12 ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
11 ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
10 ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
9 ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
8 ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
7 ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
6 ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
5 ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
4 ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
3 ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
2 ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
1 ttp://pc.2ch.net/tech/kako/991/991576947.html
0004デフォルトの名無しさん
2006/11/13(月) 08:58:22http://www.microsoft.com/japan/msdn/
- MSDN ライブラリ
http://msdn.microsoft.com/library/ja/
- MSDN 2 ライブラリ
http://msdn2.microsoft.com/ja-jp/library/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
http://www.google.com/
MSDN ライブラリ 2006年6月版
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=373930CB-A3D7-4EA5-B421-DD6818DC7C41
- Platform SDK Update
(WindowsR Server 2003 R2 Platform SDK Full Download)
http://www.microsoft.com/downloads/details.aspx?FamilyId=484269E2-3B89-47E3-8EB7-1F2BE6D7123A
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/
- Advanced Windows (書籍)
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055
-おまけ
dat落ちしている過去スレが見れるかも。Build19が見たい人、余裕のある人は●でも買ってやってくれ。
http://makimo.to/cgi-bin/search/search.cgi?q=Win32API&andor=AND&sf=2&view=table&D=tech
0005デフォルトの名無しさん
2006/11/13(月) 09:14:06MSDN日本語版は誤訳があったり、一部欠けていたりするなど不完全なため、英語版推奨。
http://msdn.microsoft.com/library/
http://msdn2.microsoft.com/en-us/library/
おまけ;Windows SDK for Windows Vista RC1の文書。
http://windowssdk.msdn.microsoft.com/en-us/library/
0006デフォルトの名無しさん
2006/11/13(月) 10:08:02MSDN ライブラリ 2006年8月版
http://www.microsoft.com/downloads/details.aspx?FamilyID=6671F8DA-B0CB-41DE-AD93-798FC71D344D&displaylang=ja
0007デフォルトの名無しさん
2006/11/13(月) 10:21:14>CreateProcess()で"c:\windows\system32\control.exe printers"をキックる
でできました。
次に、デフォルトプリンタの印刷設定プロパティを開く方法を教えて下さい。
0008デフォルトの名無しさん
2006/11/13(月) 12:42:49うっきききー!!
(DocumentProperties関数じゃないっけ?)
00097
2006/11/13(月) 12:44:19で、あきらめて、シェルのコマンドラインでWindowsに起動&保存を丸ごとお願いしようかな、と。
00107
2006/11/13(月) 12:45:46このソースでやってみましたが、保存されないんです><
0011デフォルトの名無しさん
2006/11/13(月) 13:07:25またそれか
printui.dll PrintUIEntryでできるんじゃないの?
00127
2006/11/13(月) 13:57:31ファイル名を指定して実行、で上手く動きません><
0013デフォルトの名無しさん
2006/11/13(月) 14:11:37rundll32 printui.dll,PrintUIEntry /e /n"(標準のプリンタ名を取得してここに入れる)"
罵倒と煽りは面倒なので省略
0014デフォルトの名無しさん
2006/11/13(月) 14:38:099xでは起動すらしないんでしょうか?
よく「対応していない」って表現されてるんですがもってないのでよくわからないです
0015デフォルトの名無しさん
2006/11/13(月) 15:07:05CreateFile関数の場合#defineでCreateFileAとCreateFileWを振り分けている。
意図してCreateFileWを利用すると起動時にDLLエラーが出ると思う。
00167
2006/11/13(月) 15:25:20ttp://support.microsoft.com/kb/167345/ja
最後の最後ですが、このソースでPCの設定変更出来た方ありますか?
全然上手く行かないお。
0017デフォルトの名無しさん
2006/11/13(月) 15:26:21事をしたいのですが、その方法で煮詰まっています。
public static bool IECallBack(IntPtr hwnd, IntPtr lParam)
{
StringBuilder sbClassName = new StringBuilder(256);
GetClassName(hwnd, sbClassName, sbClassName.Capacity);
if( sbClassName.ToString().StartsWith("IEFrame"))
{
Form1.al.Add(hwnd);
}
return true;
}
// EnumWindows でIECallBack へさせる。
EnumWindows(new EnumWindowCallBack(Form1.IECallBack), IntPtr.Zero);
こんな感じでWindowのハンドルは取得できるのですが、Window内のオブジェクトを取得する
方法が分からなくて困っています。
どなたかご教授していただけませんでしょうか?よろしくお願い致します。
※板違いだったらすいません。。。
0018デフォルトの名無しさん
2006/11/13(月) 15:40:309xのDLLはW系をエクスポートしてないってことか
0019デフォルトの名無しさん
2006/11/13(月) 15:54:43エントリポイントはあるので、プログラムの起動はできる。
しかし中身がなく、W版関数を呼び出すと失敗となって帰ってくる。
GetLastError()を呼ぶとERROR_CALL_NOT_IMPLEMENTEDが返ってくることがある。
Programming WindowsかAdvanced Windowsのどっちかでは、
MessageBoxWが9xにも実装されていることを使って、RegisterClassが失敗したら
MessageBoxで9xに対応していないというメッセージを表示するというコードを使っていた。
また、Microsoft Layer for Unicodeを使えば、9xでもW版APIを使えるようになる。
実態は文字列を変換してA版APIを呼ぶラッパだったと思う。
0020デフォルトの名無しさん
2006/11/13(月) 16:07:12あほじゃね?
0021デフォルトの名無しさん
2006/11/13(月) 17:03:22http://www.google.co.jp/search?sourceid=navclient&ie=UTF-8&q=IE+Iunknown+AtlAxGetControl
0022デフォルトの名無しさん
2006/11/13(月) 17:13:35今画面に
A B C D
と表示されてるとする
設定によってはCとDは不必要なのでSetWindowPos()を使って画面サイズを変更して
見えてる 隠れている
A B | C D
として隠して無かったことにして処理を続けてしまうのはテクニック的に有り?
0023デフォルトの名無しさん
2006/11/13(月) 17:15:140024デフォルトの名無しさん
2006/11/13(月) 17:23:14orz
002523
2006/11/13(月) 17:25:42サイズ変更なら大丈夫かも。
変だけど
0026デフォルトの名無しさん
2006/11/13(月) 17:33:30やっぱり変か・・・
ダイアログベースなのだが
WM_CREATE:のタイミングで設定用ダイアログを出して、
その内容によってメインウィンドウのダイアログの内容を変えるって可能?
0027デフォルトの名無しさん
2006/11/13(月) 18:11:30俺ならShowWindow(SW_HIDE)で隠す。
0028デフォルトの名無しさん
2006/11/13(月) 18:14:51動的にウィンドウサイズいじるのは面倒なんだよね。
俺は外見を切り替えるときは、ダイアログそのものを
切り替えるようにしている。
0029デフォルトの名無しさん
2006/11/13(月) 18:33:52フォントによって表示が変わるのか・・・
エントリポイントでCreateDialog()したダイアログの内容を途中から切り替える方法
もしくはそれ以前に設定値を入力できる方法
ってありますかね・・・?
0030デフォルトの名無しさん
2006/11/13(月) 19:13:38MSLU使えばいろいろ問題はあるけど一応動くよ。
0031デフォルトの名無しさん
2006/11/13(月) 19:54:490032tsurarete yarou.
2006/11/13(月) 21:54:57今時 9x ?
貧乏なの?
0033デフォルトの名無しさん
2006/11/13(月) 22:30:46OpenProsecceでハンドルは取得できないの?
0034デフォルトの名無しさん
2006/11/13(月) 22:41:54貧乏言うなー!って、俺は20じゃねぇけど、未だに Win98 や WinMe 使ってるヤツって結構居るらしいぞ。
一般的なコンシューマなユーザはウェブブラウザとメーラが使えりゃそれで充分だしなぁ。
で、そういうマシンがボットネットの温床と化していたりもするらしい。
0035デフォルトの名無しさん
2006/11/13(月) 23:03:19余程喰らいつきたかったんだろうから
そっとしておいてあげなよw
0036デフォルトの名無しさん
2006/11/13(月) 23:04:51ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/process_information_str.asp
CreateProcess が返してくるのはプロセスIDでは無くプロセスハンドル。
0037デフォルトの名無しさん
2006/11/13(月) 23:13:24早くLinux陣営がそういうユーザを取り込んでくれればいいのに。もっと頑張れ。
0038デフォルトの名無しさん
2006/11/13(月) 23:18:36あれ、ハンドル??
ハンドルだったの?
確かに、
BOOL TerminateProcess(
HANDLE hProcess,
UINT uExitCode
);
とかって、ゆってるけど、よく見るとハンドル?!
すっげぇ衝撃だ!
0039デフォルトの名無しさん
2006/11/13(月) 23:56:320041デフォルトの名無しさん
2006/11/14(火) 05:01:55最近のLinuxはカーネルだけじゃなくていろんなもんがごてごてしすぎて、
9xの代わりにはならなそう。
0042567
2006/11/14(火) 05:53:02|
{ ! _,, -ェェュ、 |
ィ彡三ミヽ `ヽ ,ィハミミミミミミミミミヽ、|
彡'⌒ヾミヽ `ー /ililハilミilミliliミliliミ. |
ヾ、 /iiiiイ!ヾヾミ、ミニ=ー-ミ |
_ `ー―' i!ハ:.:.\\_::::::::::::::/:.|
彡三ミミヽ i! ヽ:.:.:.:冫': : :::/,,∠|
彡' ヾ、 _ノ i!::: ̄二ー:: : ::::ソ ・ ,|
`ー ' {ヘラ' ・_>シ;テツ"''''"|
,ィ彡三ニミヽ __ノ ヽヘ`" 彡' 〈 |
彡' ` ̄ `\ ー-=ェっ |
_ __ ノ {ミ;ヽ、 ⌒ |
,ィ彡'  ̄ ヾミミミミト-- ' |
ミ三彡' /⌒ / ̄ ̄ | : ::::::::::|
ィニニ=- ' / i `ー-(二つ
,ィ彡' { ミi (二⊃
// / l ミii ト、二)
彡' __,ノ | ミソ :..`ト-'
/ | ミ{ :.:.:..:|
0043デフォルトの名無しさん
2006/11/14(火) 07:02:520044デフォルトの名無しさん
2006/11/14(火) 10:07:58拡張子ごとではなくファイルごとにアイコンが変化しうるものって
.lnk .exe .ico, フォルダ以外にありますか?
また、これのリストを厳密に取得することは出来ますか?
0045デフォルトの名無しさん
2006/11/14(火) 10:47:04はい
0046デフォルトの名無しさん
2006/11/14(火) 13:47:34ソース→http://www.h4.dion.ne.jp/~zero1341/win01/ex13/ex13.cpp
リソース→http://www.h4.dion.ne.jp/~zero1341/win01/ex13/ex13.rc
ヘッダ→http://www.h4.dion.ne.jp/~zero1341/win01/ex13/resource.h
このプログラムを動かしたいのに出来ない。
実行できるけど画像読み込みのところで止まる。画像を小さくすればなぜかそのまま
進むけど画像表示されず。
なんで?
0047デフォルトの名無しさん
2006/11/14(火) 14:08:390048デフォルトの名無しさん
2006/11/14(火) 14:16:05|delete pIn;
........
|width=pH->biWidth;
0049デフォルトの名無しさん
2006/11/14(火) 14:22:5147,48の人ありがとう!
0050デフォルトの名無しさん
2006/11/14(火) 14:37:360051デフォルトの名無しさん
2006/11/14(火) 14:40:090052デフォルトの名無しさん
2006/11/14(火) 14:46:250053デフォルトの名無しさん
2006/11/14(火) 14:52:380054デフォルトの名無しさん
2006/11/14(火) 18:58:500055デフォルトの名無しさん
2006/11/14(火) 19:04:21STL と WinAPI 相性悪そうな組み合わせだけど、実際のトコロどうなん?
0056デフォルトの名無しさん
2006/11/14(火) 19:25:160057デフォルトの名無しさん
2006/11/14(火) 19:25:20newせず動的にメモリー確保する新しい方法って何だ?
gcnew?
0058デフォルトの名無しさん
2006/11/14(火) 19:42:18「STLは内部でnewしてる」などという(ry
0059デフォルトの名無しさん
2006/11/14(火) 20:09:470060デフォルトの名無しさん
2006/11/14(火) 20:34:03std::basic_stringが文字列を受け取るバッファに使えないのが痛い。
0061デフォルトの名無しさん
2006/11/14(火) 20:51:300062デフォルトの名無しさん
2006/11/14(火) 21:39:16他にもいろいろあります。
調べる方法としてはレジストリのDefaultIconキーとshellex¥IconHandlerキーをチェックします。
「DefaultIconキーに%1が*含まれて*いる」もしくは「shellex¥IconHandler キーがあれば」、
ファイル毎にかわるもんだと思っていいです。
0063デフォルトの名無しさん
2006/11/14(火) 22:18:24GetFocusはNULLが帰ってくるので・・・
0064デフォルトの名無しさん
2006/11/14(火) 22:35:01> GetFocus returns the window with the keyboard focus
> for the *current thread's* message queue.
これにひっかかってるとか?
> To get the window with the keyboard focus on the
> foreground queue or the queue of another thread,
> use the GetGUIThreadInfo function.
0065デフォルトの名無しさん
2006/11/14(火) 22:35:130066デフォルトの名無しさん
2006/11/15(水) 04:48:00900バイトのファイルにしたいんですが、どうやるのが最もよいでしょうか?
お願いします。
0067デフォルトの名無しさん
2006/11/15(水) 05:21:10006866
2006/11/15(水) 05:36:230069デフォルトの名無しさん
2006/11/15(水) 06:04:19007066
2006/11/15(水) 07:32:56WriteFileでファイルに書いている際、PCが落ちた場合、元のファイル
がどの程度まで壊れているかの情報ってありますでしょうか?
それとも全部壊れたとみなすべきでしょうか?
少なくとも、すでに存在していたファイルの場合で、そのファイルに
追加書き込みしていた場合、元のファイル分までは壊れてないと
みなしていいのでしょうか?
0071デフォルトの名無しさん
2006/11/15(水) 07:51:17俺なら作業用のテンポラリファイル作って、作業が終わったら上書き保存する。
0072デフォルトの名無しさん
2006/11/15(水) 08:16:110073デフォルトの名無しさん
2006/11/15(水) 15:58:11SetEndOfFile
0074デフォルトの名無しさん
2006/11/15(水) 16:02:24その時書いてた部分までは残ってるわな
0075デフォルトの名無しさん
2006/11/15(水) 16:34:32実際にディスクに書かれてるかどうかは分からんけどナ
0076デフォルトの名無しさん
2006/11/15(水) 20:33:07NTFSはメタデータのジャーナルしか取らないよ。
だからファイルシステムが矛盾しないことは保証されるけど
ユーザーデータが壊れてないかどうかまではNTFSの関知するところではない
0077デフォルトの名無しさん
2006/11/15(水) 20:33:40先頭と末尾を取り違えてませんか
0078デフォルトの名無しさん
2006/11/15(水) 21:15:050079デフォルトの名無しさん
2006/11/15(水) 22:12:240080デフォルトの名無しさん
2006/11/15(水) 22:43:24ウィンドウプロシージャでスレッドを作成しないとダメなんでしょうか。
0081デフォルトの名無しさん
2006/11/15(水) 22:47:49そのプログラムではたまたまWM_CREATEのときに作る必要があっただけだろう。
0082デフォルトの名無しさん
2006/11/15(水) 22:48:17そのサンプルがたまたまWM_CREATEの処理中に _beginthread を使ってるだけ。
基本的にはどこでやってもええよ。
0083デフォルトの名無しさん
2006/11/15(水) 23:14:22>>82
ありがとうございます。
0084デフォルトの名無しさん
2006/11/15(水) 23:43:27DllMainや一部のコールバックでは制限されている。
0085デフォルトの名無しさん
2006/11/15(水) 23:47:55肝心のWinMainがスレッド作成から動いていない・・・何故だ・・・。
0086デフォルトの名無しさん
2006/11/15(水) 23:48:11ソースきぼんぬ(死語?)
0087デフォルトの名無しさん
2006/11/15(水) 23:53:510088デフォルトの名無しさん
2006/11/16(木) 00:12:05俺は限界だと思った。
0089デフォルトの名無しさん
2006/11/16(木) 01:14:04Vistaじゃ入ってない?
0090デフォルトの名無しさん
2006/11/16(木) 02:12:00009184ではない
2006/11/16(木) 02:28:16具体的にはDLLを動的にロードしたあとDLL側が勝手にスレッドを作ったりして作られたスレッドが走ってる最中にアンロードされたりすると・・・
だったような・・・
・・・でCOMでスレッドを作りたい場合はプロセス内サーバは避けろとかあったような。
(とりあえずEffective COMの項目32で確認)
0092デフォルトの名無しさん
2006/11/16(木) 06:40:53ボタンを押し、その状態のままボタン外へマウスをドラッグさせ、マウスのボタンを放すと
ボタンに登録したアイコンを消す。
という動作をさせようと思い "WM_LBUTTONDOWN" / "WM_LNCBUTTONDOWN" /
"WM_LBUTTONUP" / " WM_LNCBUTTONUP" で処理を書いてみたのですが。
どうもメインフォーム上でのみ反応し、ボタン上では反応しませんでした。
ボタンを対象に何かをしなくてはならないとは思うのですが
良い方法が思い浮かびません。アドバイスをお願いします。
0093デフォルトの名無しさん
2006/11/16(木) 07:05:11SetCapture
0094デフォルトの名無しさん
2006/11/16(木) 07:08:520095デフォルトの名無しさん
2006/11/16(木) 07:14:05ありがとうございます。
早速調べてみます。
0096デフォルトの名無しさん
2006/11/16(木) 07:21:25.NET Framework 2.0 廃止予定の API 一覧
ttp://www.microsoft.com/japan/msdn/netframework/programming/obsoleteapi/
他スレで見かけたので貼っておきますね。
0097デフォルトの名無しさん
2006/11/16(木) 13:48:00C++Builderで画像処理ソフトを作っているものですが、
VideoForWindowsで動画をチャプチャしております。
そこで質問なんですが、
1.bmpを介さずに直接メモリにチャプチャする方法
2.動画の描画を行わずに画像を取得(表示すると遅くなるため)
を教えていただけませんか。
いろいろ調べてみたものの解決に至っていません。
DirectShowはちょっと難しかったので使っていません。
どうぞよろしくお願いいたします。
0099デフォルトの名無しさん
2006/11/16(木) 20:23:43だとCでコンパイルしろっていってるけどC++でWin32APIは使えないの?
このサイトだけでの話?
0100デフォルトの名無しさん
2006/11/16(木) 20:28:15使える使えないを語る以前の問題じゃ
010199
2006/11/16(木) 20:33:25猫のとこなら.cppだったわ・・・
0102デフォルトの名無しさん
2006/11/16(木) 20:40:230103デフォルトの名無しさん
2006/11/16(木) 20:52:20C/C++の基本を勉強する方が先みたいだな
0104デフォルトの名無しさん
2006/11/16(木) 20:54:590105デフォルトの名無しさん
2006/11/16(木) 21:31:530106デフォルトの名無しさん
2006/11/16(木) 21:44:090107デフォルトの名無しさん
2006/11/16(木) 23:47:050108デフォルトの名無しさん
2006/11/16(木) 23:58:320109デフォルトの名無しさん
2006/11/17(金) 00:01:040110デフォルトの名無しさん
2006/11/17(金) 00:04:010111デフォルトの名無しさん
2006/11/17(金) 00:05:380112デフォルトの名無しさん
2006/11/17(金) 00:17:45勉強しなかった場合と比較できないので科学的実験結果としては有意でないと考えられる。
0113デフォルトの名無しさん
2006/11/17(金) 12:57:59存在するかを調べる関数がありましたら教えてください。
CreateFileとかで失敗したらとかでもできると思いますが、
正規のがありましたら教えてください。
0114デフォルトの名無しさん
2006/11/17(金) 13:25:32FindFirstFile
好きな方でどうぞ
0115デフォルトの名無しさん
2006/11/17(金) 15:00:480117デフォルトの名無しさん
2006/11/17(金) 16:39:280118デフォルトの名無しさん
2006/11/17(金) 16:42:270119デフォルトの名無しさん
2006/11/17(金) 16:48:43本当にありがとうございました。
0120デフォルトの名無しさん
2006/11/17(金) 18:50:32PathFileExists というズバリな関数がある
0121デフォルトの名無しさん
2006/11/17(金) 19:21:57知らなんだー
GetFileAttributes使ってた。
0122デフォルトの名無しさん
2006/11/17(金) 23:41:070123デフォルトの名無しさん
2006/11/17(金) 23:45:500124デフォルトの名無しさん
2006/11/18(土) 00:33:170125デフォルトの名無しさん
2006/11/18(土) 01:36:31wsnprintfとかワイルドカードでのマッチングもたしかあの中だったよね?
0126デフォルトの名無しさん
2006/11/18(土) 01:40:28やったことないけどさ
なぜかPath〜系は未だにMSDNが日本語じゃないんだよな
8月版になったからといって更新されるわけもなし
0127デフォルトの名無しさん
2006/11/18(土) 01:49:24ググったのですがいまい解決できそうなページがありませんでした。
作っているのはアナログ時計です。
開発環境はVC++6.0 Proです。SDKで作っています。
丸いリージョンで表示した時計のウィンドウがあります。
ウィンドウのクライアント領域はマウスでドラッグして移動できるように
細工をしております。
アナログ時計のウィンドウをデスクトップ領域の上端より超えて移動すると
ウィンドウのキャプションが隠れるあたりでマウスのボタンを離すと
自動的にキャップションが少しだけ見える位置に移動してしまいます。
ウィンドウのクライアント領域でのマウスの移動が出来るのでできれば
デスクトップの上端から上へキャプションが隠れてもそのままウィンドウが
移動できるようにはできないでしょうか。
よろしくお願いします。
0128デフォルトの名無しさん
2006/11/18(土) 02:29:18よく分からんけど足りなさそうな情報を質問。
細工ってヒットテストにキャプションって返すやつ?
0129127
2006/11/18(土) 02:46:30それによりウィンドウのクライアント領域をドラッグしてウィンドウを移動できます。
例えると以上の設定をして、普通のウィンドウのクライアント領域をドラッグして、
ウィンドウのキャプションをデスクトップの上端より隠れるように
ウィンドウを移動させると自動的にウィンドウがキャプションを少しだけ表示した状態に
なってしまうのです。それを移動してキャプションが隠れるようにしたいのです。
0130デフォルトの名無しさん
2006/11/18(土) 07:25:34チェックボックスを置いています。
表示すると、グループボックスのほうが上に来てしまうんですが、
どうすればチェックボックスを上に持ってこれますか?
たぶんZオーダーの問題だと思うんですが、以下のようにしても
うまくいきませんでした。
SetWindowPos(groupbox, checkbox, 0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
0131デフォルトの名無しさん
2006/11/18(土) 08:01:480132130
2006/11/18(土) 10:06:290133デフォルトの名無しさん
2006/11/18(土) 13:39:41『CreateSolidBrushで得たHBRUSH型変数は、不要になればDeleteObjectで破棄してください』
と書いてあるんですが、その本のサンプルプログラムでは破棄していないみたいなんです。
プログラムが終了すれば自動的に破棄されると考えれば、そのサンプルプログラムが破棄しないのも納得がいくのですが、
自動で破棄されるんでしょうか。
0134デフォルトの名無しさん
2006/11/18(土) 13:46:46他プロセスと共有している場合は参照カウンタが1減り、0になったらOSにより解放される
現存するメジャーなOSのほとんどはこうなってるよ
0135デフォルトの名無しさん
2006/11/18(土) 14:11:19プロセスが走ってる間にいくつも作っては捨てをする場合は要らなくなったらDeleteObjectした方がいいね
1個2個作ってそのままくらいなら、プロセス終了時のリソース解放に任せてもいい
0136デフォルトの名無しさん
2006/11/18(土) 14:49:31ありがとうございました
0137デフォルトの名無しさん
2006/11/18(土) 14:53:20CreateFontIndirectの逆のことしたいんですけれども
0138デフォルトの名無しさん
2006/11/18(土) 15:01:090139デフォルトの名無しさん
2006/11/18(土) 15:04:48ありがとう
0140デフォルトの名無しさん
2006/11/18(土) 15:25:04いちおう念を押しておくとWM_PAINTは再描画のたびに呼ばれるからな
0141デフォルトの名無しさん
2006/11/18(土) 23:10:31したいのですが、どうしたら良いのでしょうか・・・
ツールウィンドウ を使うしか無いのでしょうか><
教えて下さいエロい人
不可視のオーナーウィンドウ
0143デフォルトの名無しさん
2006/11/18(土) 23:24:280144デフォルトの名無しさん
2006/11/18(土) 23:27:26解決出来ました。
0145デフォルトの名無しさん
2006/11/19(日) 02:24:000146デフォルトの名無しさん
2006/11/19(日) 02:44:04(同じボリュームでなければ当然同一パスでもない)
GetFileInformationByHandleでファイルIDを比較する。
0147デフォルトの名無しさん
2006/11/19(日) 06:06:44PathSearchAndQualifyとかPathCanonicalizeが使えないかな?
0148デフォルトの名無しさん
2006/11/19(日) 07:32:00ISUファイルの作り方ってどこかに載っていませんか?
0149デフォルトの名無しさん
2006/11/19(日) 07:33:15質問がここで良いかどうか分からないという意味です。
0151デフォルトの名無しさん
2006/11/19(日) 09:36:23一般的にアンインストール情報ファイルに付加される拡張子、らしいね。
インストーラ作ってるメーカに問い合わせてみれば?
0152デフォルトの名無しさん
2006/11/19(日) 10:16:150153デフォルトの名無しさん
2006/11/19(日) 11:08:39BATファイルは自分自身を削除できますが、コマンドプロンプトが表示されてしまいます。
0154Kioo
2006/11/19(日) 11:22:32どうすればいいのでしょうか
0155デフォルトの名無しさん
2006/11/19(日) 11:25:37言語は?
0156Kioo
2006/11/19(日) 11:34:35C++です。
0157デフォルトの名無しさん
2006/11/19(日) 11:38:560158Kioo
2006/11/19(日) 11:42:36IDD_ADD DIALOG DISCARDABLE 0, 0, 240, 75
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_THICKFRAME | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_SETFONT
CAPTION "Form"
FONT 8, "MS 明朝"
{
CONTROL " ID:", IDC_LABEL202, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 12, 12, 45, 6
CONTROL "", IDC_EDIT_ID, "EDIT", WS_CHILD | WS_DLGFRAME | WS_VISIBLE | ES_AUTOHSCROLL, 54, 12, 111, 6
}
IDC_EDIT_IDのエディットボックスです。
0159デフォルトの名無しさん
2006/11/19(日) 11:44:45DELETE_ON_CLOSE付きCreateFileで
Tmp辺りにアンインストーラをコピーしてそれを起動する、だったと思う。
「アプリケーションの追加と削除」が微妙な動きをした記憶もあるけど(w
そうそう、削除する時は自分のアプリ関連のファイルのみを対象にする事。
誤って他のアプリやデータが入ったフォルダにインストールしていたら、
目も当てられない状態に。というか昔やっちゃったよ orz
0160デフォルトの名無しさん
2006/11/19(日) 11:56:24なるほど、目に付かない場所に作って後で消すように設定すれば同じですね。
>>158
MFCのCDialogの派生クラスでなら
CWnd* pWnd = GetDlgItem(IDC_EDIT_ID);
char buff[256];
CString str;
pWnd->GetWindowText(buff, 255);
pWnd->GetWindowText(str);
CStringとcharの配列に文字列が入ります。
ダイアログ表示中以外のタイミングですか?
0161デフォルトの名無しさん
2006/11/19(日) 12:02:41エディットボックスの内容が書き換えられた時に
GetWindowTextLength(GetDlgItem(IDC_EDIT_ID));で文字列の長さを取得
それに+1したサイズで、new char[]なりGlobalAllocなりでバッファを確保
GetWindowTextで文字列を取得する
stringが使いたかったら、さらにバッファからstringへ代入すればいい
0162デフォルトの名無しさん
2006/11/19(日) 12:16:400163Kioo
2006/11/19(日) 12:25:51今はまだありませんが、ダイアログの下部にボタンをひとつおき、それが押されたら、文字列を変数に入れてダイアログを閉じるようにする予定です
0164デフォルトの名無しさん
2006/11/19(日) 12:36:340165デフォルトの名無しさん
2006/11/19(日) 13:27:57TCHAR* pszText = static_cast<TCHAR*>(HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len*sizeof(TCHAR)));
GetWindowText(hEdit, pszText, len*sizeof(TCHAR));
// std::string(pszText);
/* 処理 */
HeapFree(GetProcessHeap(), 0, pszText);
半ば定型文
0166デフォルトの名無しさん
2006/11/19(日) 13:32:260167デフォルトの名無しさん
2006/11/19(日) 13:35:320168デフォルトの名無しさん
2006/11/19(日) 14:35:57FILE_FLAG_DELETE_ON_CLOSE だったんですね。ちょっと気が付きませんでした。
0169デフォルトの名無しさん
2006/11/19(日) 15:49:02■MFC相談室 mfc16d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1146117893/
0170デフォルトの名無しさん
2006/11/19(日) 17:14:47終了する時についての質問です。
通常の閉じるをクリックしての終了、
右クリックした時にWM_CLOSEを投げての終了はうまくいくのですが、
ESC(WM_KEYDOWN)が押された時にWM_CLOSEを投げての終了が、
ウィンドウが閉じられるまでに、
CPU率が高くなった状態ですこし止まってしまいます。
原因はどこにあるのでしょうか。
PlaySound(NULL, NULL, 0);はいれています。
また、なぜかMessageBeep(MB_OK);を
抜ける直前に挟むと、ちゃんと終了できます。
0171153
2006/11/19(日) 17:58:24ファイルが削除されません。
何か継承しなければいけないのでしょうか?
0172デフォルトの名無しさん
2006/11/19(日) 18:17:21FILE_FLAG_DELETE_ON_CLOSE法はうまくいかない。
たぶんみんな試さないで書いてると思う。
漏れが昔ここで聞いた方法
1. rundll32で削除用dllを起動する。
2. 削除用dllからアンインストーラの終了を待って消す。
3. FreeLibraryしてから自分自身を消すコードをヒープにコピーして呼び出す。
(ヒープにPAGE_EXECUTEをつけるのをお忘れなく)
0173デフォルトの名無しさん
2006/11/19(日) 19:23:45試さないで書くけど FILE_FLAG_DELETE_ON_CLOSE によるサンプル。
ttp://web.archive.org/web/20051123112406/http://www.numeric.co.jp/Win32.htm
0174デフォルトの名無しさん
2006/11/19(日) 19:34:50> ようにする。
これがポイントか?
0175デフォルトの名無しさん
2006/11/19(日) 19:38:34よくわからんけどそれはハンドルを共用するためだろう。
ハンドルは何で共用する必要があるかというと、
分身起動→本体終了→分身により本体削除
のシーケンスを同期をとって実行するため。
0176153
2006/11/19(日) 20:04:410177デフォルトの名無しさん
2006/11/19(日) 20:31:15試してみたけどやっぱり消えないぞ。
むちゃくちゃコードを補う必要があったからどっかでミスってるのかもしれんが
0178153
2006/11/19(日) 21:09:013. FreeLibraryしてから自分自身を消すコードをヒープにコピーして呼び出す。
(ヒープにPAGE_EXECUTEをつけるのをお忘れなく)
LPVOID pMem = (LPVOID)GlobalAlloc(GMEM_FIXED, size);
DWORD nID;
pMem = VirtualAlloc(pMem, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
// pMemにコードをコピー
CreateThread(NULL, 0, pMem, pMem, 0, &nID);
return:
DWORD WINAPI ThreadFunc(LPVOID pMem)
{
// 待ち処理
// 削除
VirtualFree(pMem);
GlobalFree(pMrm);
return 0;
}
こんな感じでしょうか?
0179デフォルトの名無しさん
2006/11/19(日) 21:38:30> pMem = VirtualAlloc(pMem, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
上のGlobalAllocは何のためにあるんだ?
0180デフォルトの名無しさん
2006/11/19(日) 21:38:500181153
2006/11/19(日) 21:41:02GlobalAllocは必要ありませんでしたか。
0182デフォルトの名無しさん
2006/11/19(日) 21:47:50そのレベルじゃ>>172のコードを書くのは無理
0183デフォルトの名無しさん
2006/11/19(日) 21:55:25一時的に無効にする方法を教えてください。
OS は Windows MeとXPです。
0184デフォルトの名無しさん
2006/11/19(日) 22:01:49なメッセージを処理して1を返す
0185デフォルトの名無しさん
2006/11/19(日) 22:06:24問題があったぞ。
>FreeLibraryしてから自分自身を消すコードをヒープにコピーして呼び出す
この手段に対して何も触れてないじゃないか。
0186デフォルトの名無しさん
2006/11/19(日) 22:08:26そもそもそんなとこから教えなきゃならん事態が既に間違ってるってことはわかってるか?
0187デフォルトの名無しさん
2006/11/19(日) 22:09:13教えた側の責任か? それ見てこれ以上付き合う気なくしたんだが。
0188デフォルトの名無しさん
2006/11/19(日) 22:10:40プログラム教室ではない
0189デフォルトの名無しさん
2006/11/19(日) 22:13:33問題があったぞ。
○俺も新人のときCやDOSコマンドを教わった事があるが、この俺様に理解できなかった
のだから常に教えた側の問題に決まってる。
×この手段に対して何も触れてないじゃないか。
○とっとと手段を教えろよ情報を小出しにしやがって使えねーパソヲタども
つーか本当にそこが問題でできないなら聞き返してさえこない時点でオ�hル
0190デフォルトの名無しさん
2006/11/19(日) 22:15:29>・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
0191デフォルトの名無しさん
2006/11/19(日) 22:20:54格下に聞いちまったようだな。
0192デフォルトの名無しさん
2006/11/19(日) 22:23:480193デフォルトの名無しさん
2006/11/19(日) 22:28:02って素直に言えばいいのによ
0194デフォルトの名無しさん
2006/11/19(日) 22:29:550195デフォルトの名無しさん
2006/11/19(日) 22:31:150196デフォルトの名無しさん
2006/11/19(日) 22:34:48知ってるけど、教えてやらない。
0197デフォルトの名無しさん
2006/11/19(日) 23:12:47ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_123.htm
(くメィさん使わしてもらいます)
これじゃないの?やるのは。
0198デフォルトの名無しさん
2006/11/19(日) 23:12:58そんなことぐらい誰でも知ってる。
問題はそこじゃねーよアホ。メモリリークという言葉も知らんのか
> 知らないから教えてください
って素直に言えばいいのに
0199デフォルトの名無しさん
2006/11/19(日) 23:17:04全然関係ない。
つーか>>172でコピー先がヒープであることは本質的じゃない。
別にVirtualAllocでもいいから(むしろMSの推奨はそっちだった気がする)
>>180が何を笑ってるのかよくわからん。
問題は意味もなくGlobalAllocしてメモリリーク起こすようなコードを平然と書く奴に
手取り足取り教えてられるほど暇じゃないってこと。
つーかコードをメモリ上でコピーするやり方はAdvanced Windowsに載ってるんだから
マジで読んでくれ
0200デフォルトの名無しさん
2006/11/19(日) 23:31:39MSがGlobalよりこっち使えって言ってるのは確かHeapAlloc
0201デフォルトの名無しさん
2006/11/19(日) 23:49:05嘘吐け、俺が教えてやったから言えるんだろうが。
最初は頭下げてただろうが下衆野郎。しらねーくせに威張ってんじゃねえよ。
>>199
最初から本でも書いときゃ良いだろうがよ。暇じゃない割に2chにへばりついてやがんな。
0202デフォルトの名無しさん
2006/11/19(日) 23:54:100203デフォルトの名無しさん
2006/11/19(日) 23:58:18>>153
WSHなら自分自身を削除できるし、コマンドプロンプトも出ない。
var fso = WScript.CreateObject("Scripting.FileSystemObject");
fso.DeleteFile("c:\\test.js");
これでアンインストーラを作ったことはないがなw
0204デフォルトの名無しさん
2006/11/20(月) 00:05:47簡易的には使えそう。
どうせならバッチファイルで
0205デフォルトの名無しさん
2006/11/20(月) 00:18:0298以降には一応装備されているから、バージョンが古いけど簡単な操作なら充分かもしれない。
どうしても駄目なら「BATファイルで御免なさい」ですね。
0206デフォルトの名無しさん
2006/11/20(月) 00:27:54WinXP SP2から、VirtualAllocでPAGE_EXECUTE付けて、
その領域のコードを実行できるようにせんと
アクセス違反になるんじゃなかったけ?
たしか、バッファーオーバーフローで任意コードを実行されるのを防ぐためとかだったはず。
ただのデータ置き場ならGlobalAllocでもいいけど。
0207デフォルトの名無しさん
2006/11/20(月) 00:36:24や、バッチファイルだとコマンドプロンプトが出てしまうって話でそ?
まあバッチファイルでも、CreateProcess()でDETACHED_PROCESSで起動すれば
コマンドプロンプトは出ないはず。
0208デフォルトの名無しさん
2006/11/20(月) 00:43:53エクスプローラが立ち上がって、当該ファイルが選択されますが、
これと同じことをするにはどうすればいいんでしょうか?
お願いします。
0209デフォルトの名無しさん
2006/11/20(月) 00:57:40> 最初は頭下げてただろうが
誰に言ってるの? 頭大丈夫?
> 最初から
>>1に書いてるが何か?
0210デフォルトの名無しさん
2006/11/20(月) 01:00:07鏡に向かって話すのが好きなんですね
0211デフォルトの名無しさん
2006/11/20(月) 01:02:28GlobalAllocでもHeapAllocでもスタックでもVirtualProtectでPAGE_EXECUTEを
付けてやれば実行できるようになる。
当然同じページにある周囲のメモリも巻き込まれるのであまりよろしくないけど
0212デフォルトの名無しさん
2006/11/20(月) 01:05:09いやあ仮にそのとおりだとしても
返すものがハンドルだろうがポインタだろうがメモリリークしてることに変わりないし
そもそもGlobalALlocを呼び出す意味自体一切ないと教えてあげてるのに
理解しないばかりか逆切れしてるどっかのバカには負けますよw
0213デフォルトの名無しさん
2006/11/20(月) 01:16:20⌒`γ´⌒`ヽ( E)
( .人 .人 γ ノ
ミ(こノこノ `ー´
)にノこ(
0214デフォルトの名無しさん
2006/11/20(月) 02:11:17遅い(関数の最後)だと エラーがでる。
少しずつreturn 0をずらして書いてみると、ある位置より早ければちゃんとreturnされる。
コンパイル時はエラー0となってて実行時に メモリがreadになれませんでした。となる。
関数のなかで、他の関数を呼びまくってるから呼び出し元がどこだったかを忘れてるのでしょうか?
どうすればいいのやら??
0215デフォルトの名無しさん
2006/11/20(月) 02:15:570216デフォルトの名無しさん
2006/11/20(月) 02:18:11その原因は呼び方の間違いだろうがな。
0217デフォルトの名無しさん
2006/11/20(月) 02:27:04呼び出し規約とかシグネチャが違うとか?
0218デフォルトの名無しさん
2006/11/20(月) 02:34:40return 0; ← 正常に戻る
b();
return 0; ← 落ちる
だと、明らかに b() の中で落ちてるだろ
0219デフォルトの名無しさん
2006/11/20(月) 02:37:19int Kansu{
MessageBox(NULL,"1","めっせじ",MB_OK);
//return 0; //ここならもちろん戻る。
//中略
//中略
MessageBox(NULL,"2","めっせじ",MB_OK); // ここまでの処理は全部やってくれてるのに・・
return 0; //ここで落ちる。"0x33333231"の命令が"0x33333231"のメモリを参照しましただって・・
}
下記のようにダイアログベースのボタんから読んでるだけの超単純なものなのに。
中略部分がややこしいことしてるのでソースは書けないです。
-------------------------------------------------------
case IDC_BUTTON1:
Kansu();
MessageBox(NULL,"もどったよ","よびだしもと",MB_OK);
return TRUE;
-------------------------------------------------------
わからん。 いままでこんなことなかったのに・・。ねるしかないか・・
0220デフォルトの名無しさん
2006/11/20(月) 02:37:200221デフォルトの名無しさん
2006/11/20(月) 02:39:00お笑いですね。。
0222デフォルトの名無しさん
2006/11/20(月) 02:40:21明らかにそこのせいだろ。>>217も言ってるが呼び出し規約が怪しい
0223デフォルトの名無しさん
2006/11/20(月) 02:41:18もう一度言うけどWin32 APIぜんぜん関係ないので
0224デフォルトの名無しさん
2006/11/20(月) 03:11:27デバッガは学習してきます。圧倒的初心者のお相手ありがとうございました。
すみませんでした。
0225デフォルトの名無しさん
2006/11/20(月) 03:16:17そしてとんでもないアドレスにリターンしようとしているのでわ
0226デフォルトの名無しさん
2006/11/20(月) 03:22:381回使い方分かっちゃえばめっさ楽になるからガンバレ
0227デフォルトの名無しさん
2006/11/20(月) 07:29:04WM_**の文字列で取得するAPIがありましたら教えてください。
0228デフォルトの名無しさん
2006/11/20(月) 08:10:360229デフォルトの名無しさん
2006/11/20(月) 08:20:12ありがとうできました。
0230デフォルトの名無しさん
2006/11/20(月) 09:40:32無いよ。自分で変換テーブル作れ。
0232デフォルトの名無しさん
2006/11/20(月) 10:10:31バッチのサンプル
ttp://www.microsoft.com/msj/archive/SF9C.aspx
ここのW32Q0196.zip
FILE_FLAG_DELETE_ON_CLOSEのサンプル
ttp://www.microsoft.com/msj/0198/win320198.aspx
なぜかダウンロードできない。XPでは不調でした。
0233デフォルトの名無しさん
2006/11/20(月) 11:06:10いろいろ見つけたサンプルを元に FILE_FLAG_DELETE_ON_CLOSE
を試行錯誤してみたが、うまくいかなかった。
(例) 98系と2000系で挙動が違う (すまん、どう違ったかは覚えてない)
(例) EXEがネットワークドライブ上だとうまくいかない
で、結局、俺は以下のようにした。
(1) 削除用プログラム(自分自身)を「<GetTempPath()のディレクトリ>\DeleteMe.tmp」にコピー
(2) (1)をMoveFileEx( MOVEFILE_DELAY_UNTIL_REBOOT )で削除予約。
(3) (1)をCreateProcess()、自分自身は終了。
(1)はユーザーがリブートするまで消えないが、ユーザーの目に触れなきゃOK!
0234デフォルトの名無しさん
2006/11/20(月) 11:10:420235デフォルトの名無しさん
2006/11/20(月) 11:12:41試さずに書くが・・・・・
バッチ(command.com/cmd.exe)をSW_HIDEでCreateProcessしては?
0236デフォルトの名無しさん
2006/11/20(月) 13:03:52その方法も良いと思います。
>>234-235
少なくとも ShellExecute ではうまくいきました。
皆さんお世話になりました。お騒がせしました。
0237デフォルトの名無しさん
2006/11/20(月) 13:11:39参考になりました。
0238デフォルトの名無しさん
2006/11/20(月) 20:31:37SendMessageでWndProcへ構造体をわたそうと思っています。
wParamか、lParamにポインタ入れて。
この構造体を入れる領域をHeapAllocでとって、そこに値を入れてSendMessageで渡した後、
WndProcで処理した後、HeapFreeで開放してやりたいのですが、
開放するタイミングはWndProcしかないのでしょうか。
WndProcへwParamとか、lParamでわたってくるマウスの情報とかは、
WndProcで開放しないのでなんかお作法みたいなのがあるように思えますが、
なにか標準のお作法がありますでしょうか。
お作法、または、ドキュメントへの道しるべ等お教えいただけないですか。
0239デフォルトの名無しさん
2006/11/20(月) 20:36:47イベントがWndProcで処理されるまで戻ってこないので、
−メモリ確保
−SendMessage(ここから投げたスレッドはブロック)
−−メインのGetMessageで取得されて、WndProcで処理される
−SendMessageから戻ってくるのでメモリ開放
といった形になるのでしょうか?
とりあえず、AdvancedWindowsの第26章をみてます。
0240デフォルトの名無しさん
2006/11/20(月) 20:43:23SendMessageから帰ってきたところで消せばいい
ちなみにSendMessageはGetMessageで取得じゃなくて、SendMessageが直接プロシージャを呼ぶ
0241デフォルトの名無しさん
2006/11/20(月) 20:51:19>SendMessageで送信したメッセージの処理内でしか使わないのなら
>SendMessageから帰ってきたところで消せばいい
ありがとうございます。
確信がなかったのですが、自信が持てました。
>ちなみにSendMessageはGetMessageで取得じゃなくて、SendMessageが直接プロシージャを呼ぶ
AdvancedWindowsをちゃんとよんでみたら書いてありました。
スレッド間でのSendMessage呼び出しは複雑だと知り、勉強になりました。
ご指摘、ありがとうございました。
0242デフォルトの名無しさん
2006/11/21(火) 00:30:29する状況なら、
>ちなみにSendMessageはGetMessageで取得じゃなくて、
>SendMessageが直接プロシージャを呼ぶ
は間違いだよ。それは同一スレッドの時限定。
0243デフォルトの名無しさん
2006/11/21(火) 01:02:03Advanced Windows読むまで知らなかった。
0244デフォルトの名無しさん
2006/11/21(火) 01:25:560245デフォルトの名無しさん
2006/11/21(火) 10:07:07構造体を渡す側はsizeof(構造体)でこのセットするサイズわかるし渡される側も構造体がわかってるからsizeof(構造体)でとれますよね
0246デフォルトの名無しさん
2006/11/21(火) 10:23:12後で拡張されてサイズが増える場合があるから
最後に char hoge[1] みたいな可変長メンバのプレースホルダがあったりして
sizeof では正しいサイズを得られない場合があるから。
0248デフォルトの名無しさん
2006/11/21(火) 13:40:05そうなると当然構造体のサイズも変わる
おk?
0249デフォルトの名無しさん
2006/11/21(火) 14:27:23同じ名前を流用するより、
OSVERSIONINFO/OSVERSIONINFOEXみたく、
個別に構造体を定義したほうがスマートに見える。
0250デフォルトの名無しさん
2006/11/21(火) 14:31:14MSがそれに気付いてやってくれないとどうにもならないからな・・・
0252デフォルトの名無しさん
2006/11/21(火) 16:41:25一致してれば、な
0253デフォルトの名無しさん
2006/11/21(火) 17:01:43お客さんのPCのGDI32.DLL の類がどんな環境で
いつコンパイルされたかなんか普通わからんと思うぞ。
0255デフォルトの名無しさん
2006/11/21(火) 17:38:04>何の話してるのかね。
Win32 API のヘッダで構造体のメンバに構造体のサイズを設定するフィールドがあるのはなぜ、という話で、
「後で拡張されてサイズが増える場合があるから」という答えに対して
「コンパイル環境とターゲット環境が一致している限りは問題ない」とアフォな返しをする奴がいたので、
ターゲット環境がわかるケースは一般的ではないと指摘してみたんだが・・・
0257245
2006/11/21(火) 17:55:20ビットマップをいじるプログラムをさわったらなんとなくわかってきました。
教えてくれて、ありがとう。
あと、C言語ポインタ完全制覇という本に構造体の一番後ろで拡張するタイプの話がのってたので、
そっちも読んで理解してみます。な〜んでだろっていうのがすっきりして助かりました。
0258デフォルトの名無しさん
2006/11/21(火) 18:37:27ヘッダを開いて、それぞれの構造体の宣言部を見てみるのもいいと思うぞ
#ifdef _WIN_VER〜#endifとかあるから
0259デフォルトの名無しさん
2006/11/21(火) 18:47:33C言語をベースに勉強していて、
テキストエディタを作っています。
コモンダイアログの「検索」を出して、
エディタ内の文字列を探す所まではなんとかできたのですが、
その結果をエディタに表示する方法がよくかりません。
エディタの内容をchar配列に移して、
そこからstrstrで検索して、
見つかったら戻り値のポイントを調べて、
SendMessage(MyDataGet_hEdit(), EM_SETSEL,[戻り値], [戻り値 + 検索文字数]);
で結果を明示しようとしています。
見つかった文字列がエディタ内に表示されている状態ならば、
これでもよさそうなのですが、
表示されていない場合、スクロールを自分で動かして、
どこが選択されているか調べないといけないという、
検索した意味のない状態になってしまっています。
どうしたら普通の検索のように、
検索結果(選択状態の文字列)まで、
画面表示を自動スクロールさせられるのか、ヒントをください。
ターゲット環境が「分かる」必要なんか無いだろ。
ターゲット環境は「作るときに決める」物なんだから。
「ターゲットを決めうちする限りは問題ない」とする回答に「ターゲットが分からない」と
返す方がよっぽどAFOだと思うが。
0261デフォルトの名無しさん
2006/11/21(火) 19:08:290262デフォルトの名無しさん
2006/11/21(火) 19:29:22biSizeは言ってみれば構造体のバージョンナンバー。
BITMAPINFOHEADER, BITMAPV4HEADER, BITMAPV5HEADERのように
構造体が拡張された場合に、API側がbiSizeを見てどの構造体なのか
判断している。
これのおかげで、BITMAPINFOHEADERを要求するAPIにV4やV5の
構造体を渡すことができる。
ターゲットが分からないなんてのもお前限定の話だろ。
客のターゲットも調べないで要件を定義するのか?
0264259
2006/11/21(火) 19:50:09SendMessage(HANDLEエディタ, EM_SCROLLCARET, 0, 0);
基本的なメッセージ関連を勉強しなおしてきます。orz
0265デフォルトの名無しさん
2006/11/21(火) 19:55:230266デフォルトの名無しさん
2006/11/22(水) 08:17:04>biSizeは言ってみれば構造体のバージョンナンバー。
同意同意。
本当はマズいんだと思うんだけどね。
過去バージョン互換とか考えるとなー。
0267デフォルトの名無しさん
2006/11/22(水) 09:47:00Windows3.0以前から一応ソースレベルの互換性を維持してきたツケだな
0268デフォルトの名無しさん
2006/11/22(水) 13:03:41FillRectangle + LinearGradientBrushを使って四角形を描画すると
Rectのサイズによってはグラデーション開始位置に、グラデーション終了色が
出ます。(LinearGradientModeVerticalモード時は上1行だけ)
これはどうやれば防げるんでしょうか?
0269デフォルトの名無しさん
2006/11/22(水) 13:30:270270268
2006/11/22(水) 13:50:10Graphics g(hdc);
Rect rect(10, 10, 100, 11);
LinearGradientBrush brush( rect, Color(255,255,0,0), Color(255,0,0,0), LinearGradientModeVertical );
g.FillRectangle(&brush, rect);
四角形の上が赤、下が黒になるはずなんですが、一番上の行が黒になってしまいます。2行目以降は
正常です。Y座標を変えると全て正常に表示されることもあります。
0271デフォルトの名無しさん
2006/11/22(水) 13:52:17終了の0の時は、閉じるボタンorWM_CLOSEをPost、
WM_CLOSEはDefWindowProcで処理、
WM_DESTROYが来て、そこでPostQuitMessage(0)、
WM_QUITが来た時、同時にGetMessageの戻り値が0になり
メッセージループを抜けるという感じだと思うんですけど。
0272デフォルトの名無しさん
2006/11/22(水) 14:45:03MSDNくらい嫁や
0273デフォルトの名無しさん
2006/11/22(水) 15:22:58わん わん わわわん わん わん くんくん
(GetMessage関数は、WM_QUIT以外のメッセージを取得した場合は、TRUEを返すんだよ)
わん わん わわわん わん わん
(また、WM_QUITメッセージを取得した場合は、FALSEを返すんだよ)
わん わん くーん?
(わかったかな?)
0274デフォルトの名無しさん
2006/11/22(水) 16:03:37>>272
0275271
2006/11/22(水) 16:21:50>>223
エラーが発生した場合、-1が返ると書いてあります。
しかし、それで戻り値がintでなくBOOLなのがなぞですが。
WM_CLOSE、WM_DESTROY、WM_QUITを経由して
-1を返してくるか、いきなり-1を返すのかが分かりません。
実験しようにも-1戻り値エラーが発生したことがありませんし。
0276デフォルトの名無しさん
2006/11/22(水) 16:30:370277デフォルトの名無しさん
2006/11/22(水) 16:45:15GetMessageは「0、-1、other」の3種類の戻り値が有るから「while (GetMessage(lpMsg, hWnd, 0, 0))」は良くないって書いてあるけど
VCが自動生成するメッセージループって「while (GetMessage(lpMsg, NULL, 0, 0))」なんだよな
これってどうなんかねw
0278デフォルトの名無しさん
2006/11/22(水) 16:48:57> それで戻り値がintでなくBOOLなのがなぞですが。
GetMessageの戻り値は以前はTRUEとFALSEだけだった。
0279デフォルトの名無しさん
2006/11/22(水) 16:50:37を渡すと-1が帰ってくると聞いたことがある。
0280デフォルトの名無しさん
2006/11/22(水) 16:55:46そうか、そういう場合に失敗するのか。
いや、いままでGetMessageが失敗したことなんて無いもんだから。
面倒だから、こういうやり方してしまっているけど
while ( GetMessage( &msg, NULL, 0, 0) > 0 )
{
}
0281デフォルトの名無しさん
2006/11/22(水) 16:59:55while(true)とかで回すことになって、益々ヤバイことにならんか
0283デフォルトの名無しさん
2006/11/22(水) 18:48:41DLLを記述して、
hhk = SetWindowsHookEx(WH_KEYBOARD,// フックタイプはキーストローク
hHOOKKEY, // フック処理プロシジャへ
hInstDLL, //フックプロシジャは同一ファイルで記述
NULL); // 対象スレッドはすべて
if (hhk == NULL)
MessageBox( NULL,TEXT("フックかけられない"),TEXT("Error"),MB_OK)
と記述したところ、フック設定は毎回うまく行っているように見えるのですが、
自分で作成しウインドウへの入力は拾えても、他のプログラムの出した窓への入力
は拾えません。「グローバルフック」はキーロガーのように全部拾ってくれる
と思っていたのですが、こんなもんなんでしょうか。
WinXP,VisualC++2005 です。
0284デフォルトの名無しさん
2006/11/22(水) 19:35:05拾えるのはDLLの注入されたプロセス自身だけ
他のプロセスのメッセージを拾いたいなら、
何らかのプロセス間通信を使って自分のプロセスに送らないと駄目
グローバルフックを仕込んだdllをパスの通ったディレクトリに置く。
0286デフォルトの名無しさん
2006/11/22(水) 19:53:25パスが通ってる必要はない
0287デフォルトの名無しさん
2006/11/22(水) 22:04:48フックの種類はWH_CBTです
0288デフォルトの名無しさん
2006/11/22(水) 22:16:12>>272
0289287
2006/11/22(水) 22:21:17MSDN見たら書いてありましたorz
nCodeによってはwParamとかに入ってるんですね
スレ汚ししてしまってすみませんでした
0290デフォルトの名無しさん
2006/11/23(木) 00:02:42自プロセスでputsとかで出力したものをコンソールに出力せずあとでReadFileでまとめて取得したくて下記のようなコードを書いたのですがうまくいきません
int main() {
SECURITY_ATTRIBUTES sa;
HANDLE hRead, hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if(!CreatePipe(&hRead, &hWrite, &sa, 0)) {
puts("error CreatePipe");
return 1;
}
if(!SetStdHandle(STD_OUTPUT_HANDLE, hWrite)) {
puts("error SetStdHandle");
return 1;
}
const char msg[] = "Hello from new stdout";
puts(msg); // 新しく設定されたstdoutに出力
fflush(stdout);
FlushFileBuffers(hRead);
FlushFileBuffers(hWrite);
char buf[1024] = {0}; DWORD read = 0;
ReadFile(hRead, buf, sizeof(buf)-1, &read, NULL);
if(strcmp(buf, msg) != 0) {
puts("failed");
return 1;
}
return 0;
}
0291デフォルトの名無しさん
2006/11/23(木) 01:50:30的外れだったらすまんが
CreateConsoleScreenBuffer
関連を使えばバックバッファを作成できるけど
0292290
2006/11/23(木) 03:18:04CreatePipeのくだりを消して
HANDLE hWrite = CreateConsoleScreenBuffer(
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
CONSOLE_TEXTMODE_BUFFER,
NULL);
SetConsoleActiveScreenBuffer(hWrite);
を追加したのですがReadFileではなにも読めませんでした
rubyで実現できたのですがこれをWin32APIでもやりたいです
下記は標準出力を横取りしてフィルタリングや整形などを行えます
$stdout_sv = STDOUT.dup # STDOUT を保存
class MyOut < IO
def write(str)
return $stdout_sv.write("-->" + str) #デコレーションして本物の標準出力に
end
end
STDOUT.reopen(MyOut.new(0)) #フィルタ設置 (ファイルディスクリプタ適当
puts "Hello from new stdout\n"
STDOUT.flush
STDOUT.reopen($stdout_sv)
0293デフォルトの名無しさん
2006/11/23(木) 07:37:040294デフォルトの名無しさん
2006/11/23(木) 08:58:52以前、win32アプリでAllocConsoleを使ってコンソールを作成した後標準出力をコンソールスクリーンに割り当てる
って事をやったんだけどAPIでやるとcoutやprintfは機能しなかった。
だけど標準関数(たしかfreopen)を使うとちゃんと出力されたし、
GetStdHandleを使って調べてもちゃんとスクリーンのハンドルが返ってきた
ちなみにcoutを開き直すのは駄目でした(coutはちゃんと出力できたけどprintfとかが駄目)
0295デフォルトの名無しさん
2006/11/23(木) 09:02:340296デフォルトの名無しさん
2006/11/23(木) 10:25:35プログラム内で出力先を選べるようにしたほうが楽だと思う。
C++ならstd::ostreamを引数にとって、呼ぶ側が必要に応じて
std::ostringstreamのオブジェクトを渡すようにするとかさ。
0297デフォルトの名無しさん
2006/11/23(木) 19:37:22拡張子がrtfのファイルに関連するアイコンデータがプログラムから
ひつようなのですが、レジストリエディタで確認すると
"%ProgramFiles%\Windows NT\Accessories\WORDPAD.EXE",1
になっていました。
このリソースIDは何番にしたらいいですか?ワードパッドみても
リソースIDが一番のアイコンはありませんでした。
よろしくお願いします
0298デフォルトの名無しさん
2006/11/23(木) 19:51:50複数行の文字列が表示される領域を正確に知りたいのですがどうすればいいでしょうか?
GetTextExtentPoint32だと折り返しがある場合に位置がずれてしまうのです。
0299デフォルトの名無しさん
2006/11/23(木) 20:01:14正の値 : 0から始まるアイコンのインデックス
負の値 : リソースID(ex. -3 -> リソースID 3)
0300297
2006/11/23(木) 20:14:53理解できました。
ありがとうございました。
0301デフォルトの名無しさん
2006/11/23(木) 20:24:37と
CreateFile
WriteFile
は
どっちが速い?
0302デフォルトの名無しさん
2006/11/23(木) 20:29:01実装と用途による。
0303デフォルトの名無しさん
2006/11/23(木) 20:30:54foutが何かは知りませんが、大き目のファイルを一気に書くような用途では
ストリームを使ってもAPIを直接使っても大して速度は変わらないと思います。
∵一般的にI/Oに時間が掛かりますから。
0304デフォルトの名無しさん
2006/11/23(木) 20:34:39たぶんfopen()とかはCreateFileで実装されてる
0305デフォルトの名無しさん
2006/11/23(木) 20:41:390306デフォルトの名無しさん
2006/11/23(木) 20:58:57って結局ドライブ自体かvwin32をCreateFileで開かないといけないわけか。
0307デフォルトの名無しさん
2006/11/23(木) 21:00:060308デフォルトの名無しさん
2006/11/23(木) 21:19:000309デフォルトの名無しさん
2006/11/23(木) 21:53:00正解は304
0310デフォルトの名無しさん
2006/11/23(木) 22:08:18同様にLoadLibraryで読み込まれたDLL内で確保したメモリがFreeLibraryで解放されるのでしょうか?
0311デフォルトの名無しさん
2006/11/23(木) 22:18:51されない
DLL作る人は気をつけよう
0312デフォルトの名無しさん
2006/11/23(木) 22:32:56レスありがとうございます
解放されないんですね、気をつけます
0313デフォルトの名無しさん
2006/11/23(木) 22:35:23・・・考えたら、されたら困るよな・・・
0314デフォルトの名無しさん
2006/11/23(木) 22:58:050315デフォルトの名無しさん
2006/11/23(木) 23:00:09違う最強なのは僕
0316デフォルトの名無しさん
2006/11/23(木) 23:01:350317デフォルトの名無しさん
2006/11/24(金) 00:14:510318デフォルトの名無しさん
2006/11/24(金) 01:55:46WM_PAINT内に以下の記述をしています。
draw() // OpenGLの描画関数
SwapBuffers(wglGetCurrentDC());
HDC hdc = BeginPaint(hwnd, &ps);
〜マウスドラッグによる四角の描画〜
EndPaint(hwnd, &ps);
すると、マウスドラッグで描かれた四角の部分がチラついてしまいます。
このチラツキを防止するにはどうすればよろしいでしょうか。
0319デフォルトの名無しさん
2006/11/24(金) 01:57:530320318
2006/11/24(金) 02:25:33どうも。以下にようにしてもチラつきました。
何か間違ってるでしょうか?
HDC hdc_bkbuf = CreateCompatibleDC(hdc);
HBITMAP hbmp = CreateCompatibleBitmap(hdc, width, height);
HBITMAP hbmp_old = (HBITMAP)SelectObject(hdc_bkbuf, hbmp);
〜hdc_bkbufに四角を描画〜
BitBlt(hdc, posx, posy, width, height, hdc_bkbuf, 0, 0, SRCCOPY);
SelectObject(hdc_bkbuf, hbmp_old);
DeleteObject(hbmp);
DeleteDC(hdc_bkbuf);
0321デフォルトの名無しさん
2006/11/24(金) 02:33:51SendMessageじゃなくPostするとか
0322デフォルトの名無しさん
2006/11/24(金) 02:35:20SwapBuffersはどこ行った?
0323318
2006/11/24(金) 02:44:33draw(); // OpenGLの描画関数
SwapBuffers(wglGetCurrentDC());
HDC hdc = BeginPaint(hwnd, &ps);
〜320のコード〜
EndPaint(hwnd, &ps);
SwapBuffers(hdc);
てな具合です。
>>321
すみません。いまいちよく分かりませんでした。
0324デフォルトの名無しさん
2006/11/24(金) 02:53:47OpenGLの裏画面ってGDIじゃ描画できないんだっけ?
0325318
2006/11/24(金) 03:00:17> OpenGLの裏画面ってGDIじゃ描画できないんだっけ?
GLとGDIでコンテキストを分けてそれぞれ独立に描画できれば
自由度があって便利なんですが、やり方がよくわからず。
0326321
2006/11/24(金) 03:00:32・・・
WM_PAINを発行
を
case WM_MOUSEMOVE
if(ドラッグの最中){
PostMessage(自分,WM_PAINT・・・)
}
な具合。
0327デフォルトの名無しさん
2006/11/24(金) 03:06:060328318
2006/11/24(金) 03:11:08InvalidateRectでいいですよね。
>>326
それだとドラッグの最中に四角が描画されて、
同時にタイマーでアニメーションが描画されて、結局チラついちゃう気が…。
GL側で全部描こうかなぁ。
半透明とか楽だし…。
0329デフォルトの名無しさん
2006/11/24(金) 04:24:41GDIで書く方法が不明ならそれが一番いいかと。
0330デフォルトの名無しさん
2006/11/24(金) 06:39:42WM_PAINTはあくまで再描画するためのイベントだ
それ以外の描画は他タイミングで描け
つか、タイマー使ってんならWM_TIMERで描きゃいいじゃないかよ
0331デフォルトの名無しさん
2006/11/24(金) 09:25:430332298
2006/11/24(金) 15:23:540333デフォルトの名無しさん
2006/11/24(金) 15:40:370334デフォルトの名無しさん
2006/11/24(金) 16:56:55InvalidateRect(hWnd, NULL, TRUE);ってやってるからじゃないかな
最後FALSEでやっていろいろ調整するといいかも
その前にマウスドラッグで四角書くのにタイマー使う必要があるのかが謎だけど
0335デフォルトの名無しさん
2006/11/24(金) 17:59:40LoadLibraryEx()でDLLのインスタンスハンドル入手した後
どうやって解放すればいいですか?
どなたかお願いします。
0336デフォルトの名無しさん
2006/11/24(金) 18:04:39ハンドルというかただのアドレスだ。開放する必要はない。
DLLの開放という意味ならMSDNを見れ
0337デフォルトの名無しさん
2006/11/24(金) 18:39:04OpenGL のレンダーターゲットを BMPイメージonメモリDC にして そっちを GDI 描画
WM_PAINT はBMPを(BitBlt で)可視化 で多少融通が利くよ
0338デフォルトの名無しさん
2006/11/24(金) 18:48:460339デフォルトの名無しさん
2006/11/24(金) 19:21:01JavaのWindowListenerみたいな感じのが欲しいんだけど・・
0340デフォルトの名無しさん
2006/11/24(金) 19:25:17他人が作ったライブラリを中途半端に使うより、自分で必要な機能を盛り込んで作った方がいいけどな
0341デフォルトの名無しさん
2006/11/24(金) 19:26:510342デフォルトの名無しさん
2006/11/24(金) 19:28:36個人的に好みじゃないんだよな・・
適当に作ってみるか。レスありがとう。
0343デフォルトの名無しさん
2006/11/24(金) 19:36:55(すなわち自分のプロセス内で)実行する方法って
ありますでしょうか?
0344デフォルトの名無しさん
2006/11/24(金) 19:40:36バッチファイルを実行するコードを全部自分で書く。
0345デフォルトの名無しさん
2006/11/24(金) 20:07:33バッチの中に書いてあるコマンドも内蔵させる必要があるのかだな。
あるいは単にコンソールウインドウを不可視にしたいだけのかな?
0346デフォルトの名無しさん
2006/11/24(金) 21:42:42.NET FrameworkのWindows Forms。
あとMS発祥といえばATL/WTL。こっちはマクロ使うけど。
0347デフォルトの名無しさん
2006/11/24(金) 22:25:520348343
2006/11/24(金) 22:53:39WM_QUERYENDSESSION?かなにかが飛んできたときはもう
新規実行はできないと思うので、自分でやりたいのです。
0349デフォルトの名無しさん
2006/11/24(金) 23:20:05>>344
新プロセス起動できないんなら、外部コマンドも取り込まないとな。
0350tsurarete yarou.
2006/11/24(金) 23:42:25OS は何?
すれ違いだけど、Windows 2000/XP/Server 2003 なら
http://q.hatena.ne.jp/1140862112
が参考になるかも。
0351デフォルトの名無しさん
2006/11/24(金) 23:42:44直接の答えではないけれど、ログオフスクリプトではだめか?
0352デフォルトの名無しさん
2006/11/24(金) 23:57:23mem_hdc = CreateCompatibleDC(hdc);
SelectObject(mem_hdc, mem_bmp);
int a = GetDeviceCaps(mem_hdc, HORZRES);
int b = GetDeviceCaps(mem_hdc, VERTRES);
aとbの値が800にならないんだけどなんでだろう
0353デフォルトの名無しさん
2006/11/25(土) 00:07:560354デフォルトの名無しさん
2006/11/25(土) 00:08:29言われたので来ました。
ttp://support.microsoft.com/kb/403844/ja
PGが起動してるときだけスクリーンセーバが動かないPGを作ってるんだけど
リンク先のやり方だとパスワード保護されてるとうまく動かないんです
パスワード保護の時って発行されてるメッセージって違うみたいですが
どうすればフック出来るか知りたいんですが
0356デフォルトの名無しさん
2006/11/25(土) 00:10:16解像度が800x800のディスプレイを接続すればいいと思うよ。
0357デフォルトの名無しさん
2006/11/25(土) 00:24:15対象がビットマップじゃなくてデバイス(スクリーン)だから
0359デフォルトの名無しさん
2006/11/25(土) 00:42:04GetObject
0360デフォルトの名無しさん
2006/11/25(土) 00:47:37WlxIsLockOk
0361352
2006/11/25(土) 00:47:37GetBitmapDimensionEx(mem_bmp, &sz);
でいけた
0362デフォルトの名無しさん
2006/11/25(土) 01:01:110363352
2006/11/25(土) 01:18:04あらかじめSetBitmapDimensionExでサイズを設定しておかなきゃいけないらしい
なんで初めだけ取得できたんだろ・・・?
0364デフォルトの名無しさん
2006/11/25(土) 05:00:540365デフォルトの名無しさん
2006/11/25(土) 09:27:29それで得られるサイズの単位はピクセルじゃないぞ
0366デフォルトの名無しさん
2006/11/25(土) 09:31:380367デフォルトの名無しさん
2006/11/25(土) 09:59:120368デフォルトの名無しさん
2006/11/25(土) 10:02:37COMスレで聞くべきか迷ったのですが…
FrapsやGameCamなどのDirectX乗っ取り型のキャプチャソフトなんですが
どうもキャプチャ動画を見たところDirect3Dのフロントバッファ(かバックバッファ)を
直接取得して録画してるみたいなんですが、どうやって取得しているのかその挙動が良く分かりません。
最初はSetWindowsHookEx()で全プロセスにdllをマッピングして、PEヘッダを見て
Direct3Dの初期化関数(Direct3DCreate8()等)を見つけたらフックして、
出てきたインターフェース(IDirect3DDevice8等)のGetFrontBufferData()を呼び出して
フロントバッファをコピーしているのかと思ったのですが、PEヘッダが暗号化されて
INTにDirect3DCreate8等が存在しないゲーム(具体的にはMaster of Epicというゲームです)でも
ちゃんと録画が可能な上に、この方法だとゲーム起動前にキャプチャプログラムを
起動しないといけない(Direct3DCreateをゲームが呼び出す前にフックしないといけない)ので
ゲーム起動後に起動してもちゃんと動作するFraps等では違った技法を使ってると思うのですが、
その方法がどうしても思い浮かびません。漠然とですがもしかしてIDirect3DDeviceには
メモリ検索で探せるような特定のメモリパターンがあるのかな?と思ったりするのですが…
ご存知の方いらっしゃいましたら是非ご教授お願いしたいです。
しかし…見返してみると…長文杉でホント申し訳ないorz
0369デフォルトの名無しさん
2006/11/25(土) 10:15:20CLSID乗っ取って、アプリとDirectXの間に一枚噛ませてるんじゃね?
0370デフォルトの名無しさん
2006/11/25(土) 11:10:56�dクス
0371デフォルトの名無しさん
2006/11/25(土) 11:13:18逆に自ウィンドウからD&Dして(Spy++のファインダツールのように)エクスプローラを指定→
フォルダパスを取得する方法はどのようにすればいいですか?
アドレスバーから取得する方法を試してみたのですが、
非表示の環境の場合に取得できないのでうまくいきませんでした。
CabinetWClass
-WorkerW
-RrBarWindow32
-ComboBoxEx32
-ComboBox
-Edit ←ここにWM_GETTEXTを投げてみました
0372デフォルトの名無しさん
2006/11/25(土) 12:12:13無理じゃね?
DnDのファイルコピーとかのオペレーションは受けとり側が操作するから。
ターゲットソースは受け取り側にファイル名渡すだけ。
0373デフォルトの名無しさん
2006/11/25(土) 13:00:10例えばダイアログをリサイズしたときに、
どういうイベントがどういう順番で飛ばされるのか、などを知りたいのだけど
0375デフォルトの名無しさん
2006/11/25(土) 13:07:11つ[Spy++]
0376デフォルトの名無しさん
2006/11/25(土) 13:08:45MSDN
>Size and Position Messages
ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowfeatures.asp
0377デフォルトの名無しさん
2006/11/25(土) 14:27:21全く同じことしようとしている人がいて驚愕>MoE
0378デフォルトの名無しさん
2006/11/25(土) 16:02:34>cl test.c user32.lib gdi32.lib
みたいに*.libっていうファイルをリンクしないとエラーが出るんですが、
これって静的リンクになっちゃってるってことですか?
0379デフォルトの名無しさん
2006/11/25(土) 16:48:20静的ライブラリがリンクされているわけではない。
0380デフォルトの名無しさん
2006/11/25(土) 17:17:15なるほどそうなんですか。
.libファイルをインポートライブラリ・スタティックリンクライブラリと
見分ける方法でもあるのかな??
0381デフォルトの名無しさん
2006/11/25(土) 17:43:15dumpbinでどうよ?詳しく使った事無いけど。
0382デフォルトの名無しさん
2006/11/25(土) 17:55:000383デフォルトの名無しさん
2006/11/25(土) 18:55:14dumpbinは有料のVS買わないと付いてこないみたいですね。
.libの中でも、
インポートライブラリというのはシンボルテーブルだけのオブジェクトファイルのアーカイブ
静的リンク用ライブラリは実コードも入ったオブジェクトファイルのアーカイブ
ってことで、arなんかのツールでファイル取り出してobjdumpして確認するのがいいみたいですね。
0384デフォルトの名無しさん
2006/11/25(土) 18:56:19自分からメモリデバイスコンテキストを使うことはできる?
フックと併せて作ったんだけどローカルではできてもグローバルでは失敗する・・・
0385デフォルトの名無しさん
2006/11/25(土) 19:45:420386デフォルトの名無しさん
2006/11/25(土) 20:18:16なるほど。SendMessageで自分のウィンドウで処理した方が良さそうだな・・・
0387デフォルトの名無しさん
2006/11/25(土) 20:44:20http://www.geocities.com/SiliconValley/4942/cabmsgs.html
このページをShellGetPathで検索
0388デフォルトの名無しさん
2006/11/25(土) 21:33:50サンクス
0389デフォルトの名無しさん
2006/11/26(日) 01:10:58参考にしているソースに"CCFree"って関数がでてきたんです。
これはなんでしょう?
http://bcbjournal.com/free_issue/June03-01.htm
のコードの一部です
// global PIDL, use CCFree()
ITEMIDLIST* pidl = static_cast<ITEMIDLIST*>(hMem);
if (pidl != NULL)
{
ITEMIDLIST* pidlcopy = shutils::ILClone(pidl);
shutils::CCFree(pidl);
return pidlcopy;
}
相当するWin32APIとかマネージAPIとかありましたら教えてください
0390デフォルトの名無しさん
2006/11/26(日) 01:20:290391デフォルトの名無しさん
2006/11/26(日) 02:19:21もう売ってない
どうすればいいの?
0392デフォルトの名無しさん
2006/11/26(日) 02:21:340393デフォルトの名無しさん
2006/11/26(日) 02:21:420394デフォルトの名無しさん
2006/11/26(日) 03:14:06メモリにロードされたあとにも暗号化されてるのか?
0395名無しさん
2006/11/26(日) 03:50:46現在、WindowsXP Pro+ VS2005 Proを使って開発中です。
1を入力されるとIMEがONになって、'あ' と表示するプログラムの作成中です。
以下のコードではIMEがONになってくれなくて、'a' と表示されます。
ご指摘お願いします。
void fnConvert(MSG *pMsg)
{
static int iCnt= 1;
if( (pMsg->wParam == 0x31) && (pMsg->message == WM_KEYDOWN) )
{
pMsg->wParam= 0x41;
break;
}
}
0396デフォルトの名無しさん
2006/11/26(日) 03:54:31IMEをオンにするコードはどこにあるんだよ
0397395
2006/11/26(日) 04:06:23>>396さん
IMEをONにするコードがわからないのですが、、、
ご教授尾根がいします。
0398デフォルトの名無しさん
2006/11/26(日) 04:12:22MessageBox(NULL, "IMEをONにしてください", "", MB_OK);
if(MessageBox(NULL, "IMEをONにしましたか?", "", MB_YESNO | MB_ICONQUESTION) == IDYES) {
break;
}
}
0399デフォルトの名無しさん
2006/11/26(日) 04:14:58というか最初からそれを聞けよwwwwww
IMEの操作なら>>4の猫でもわかるをみとけ
ImmSetOpenStatus
0402デフォルトの名無しさん
2006/11/26(日) 06:49:250403デフォルトの名無しさん
2006/11/26(日) 11:22:27CLSID乗っ取り…というのが良く分からないのですが、
IDirect3DDeviceのCLSIDを書き換えるという感じでしょうか?(超適当)
実はCOMはバイナリ互換のコンポネートモデルであるという程度しか
知識が無いもので、お恥ずかしながらその辺りの応用に疎いのです。
>>377
なんと同じ事をしようとしている人が居るとは!
プログラム自体はキャプチャプログラムをMoEに限定するならd3d8.dllクローンを作って
偽Direct3DCreate8を作れば簡単にMoEのフロントバッファは取得出来るのですが、
Fraps等はどうやって認識しているんだろうな〜という知的好奇心から質問させてもらいました。
>>394
ちょっとグレーな話になるんですが、ゲームはASProtectで圧縮されてるみたいで、バイナリ自体を見ても
インポートされてる関数が明らかに少ないのです(おそらく元インポートテーブル展開用ルーチン)。
そしてロードされた後(正確にはゲームウィンドウが出た時)のメモリ上のヘッダでは、
INTが消されてIATがあるだけという状態になっています。もちろんIATがあるならd3d8.dllの
Direct3DCreate8をGetProcAddressでアドレスを取得し、アドレスを決め打ちで書き換えてもいいんですが、
どうもIATの展開が終わった時には既にD3Dの初期化は完了しているみたいで、
IATを書き換えた所でDirect3DCreate8を呼び出される事はありませんでした。
また長文で申し訳ない。
もっと簡潔に書けないのか自分はorz
0405デフォルトの名無しさん
2006/11/26(日) 12:12:350406デフォルトの名無しさん
2006/11/26(日) 12:17:36>CLSID乗っ取り…というのが良く分からないのですが
CoCreateInstanceとかはレジストリを見てCLSIDから必要なdllやexeをロードするわけだから
DirectXのCLSIDに自分のモジュールを登録しておくの。
やったことないし、できるのかもわからんけど。
0407デフォルトの名無しさん
2006/11/26(日) 12:18:32MSDN読め
0408デフォルトの名無しさん
2006/11/26(日) 12:57:39Sorceforgeあさってて見つけたんだが
http://sourceforge.net/projects/taksi/
これは参考にならんかね
0409デフォルトの名無しさん
2006/11/26(日) 12:58:44Vistaでは使えない。
0410デフォルトの名無しさん
2006/11/26(日) 13:17:03NetDDE が使用不能になるってのは見つけたが、DDE そのものが使用不能になるって記事が見つからんのだが。
0411デフォルトの名無しさん
2006/11/26(日) 13:32:200412デフォルトの名無しさん
2006/11/26(日) 13:40:240413デフォルトの名無しさん
2006/11/26(日) 13:45:38VistaのエクスプローラのフォルダウインドウじゃDDE使ってないみたいね
レジストリ(HKEY_CLASSES_ROOT\Folder)もなくなってる
>>389
も無駄な技術になったか
0414デフォルトの名無しさん
2006/11/26(日) 13:46:23実際、Vistaで動かしてみそ。ほとんど動かないから。(DDEサーバーがほぼ使えない)
ただ、中途半端にスダブが残っているので、その機能だけなら動くけど
0415デフォルトの名無しさん
2006/11/26(日) 14:22:440416デフォルトの名無しさん
2006/11/26(日) 15:14:15DLL Injecttionで相手先のIDirect*インターフェースの
vtable乗っ取りしてるっぽいね。やっぱりこれしかないか
0417デフォルトの名無しさん
2006/11/26(日) 15:31:53いくつか書き直さないといけなくなるな。
0418デフォルトの名無しさん
2006/11/26(日) 15:51:320419デフォルトの名無しさん
2006/11/26(日) 15:54:220420デフォルトの名無しさん
2006/11/26(日) 15:59:04・DDE
・window message
・named pipe(NT系)
・DCOM
が用意されてるんだが
DCOMはレジストリがウザい
named pipeは98系で使えない
ってことでwindow messageかddeになるのよね
他にあったら教えてたもれ
0421デフォルトの名無しさん
2006/11/26(日) 16:03:04mailslot
RPC
後者2つは使ったこともないが
0422デフォルトの名無しさん
2006/11/26(日) 16:06:57メールスロット
RPC
(メッセージの一種だけど)WM_COPYDATA
0423デフォルトの名無しさん
2006/11/26(日) 16:14:580424デフォルトの名無しさん
2006/11/26(日) 16:21:21イベント通知ができません...
0425デフォルトの名無しさん
2006/11/26(日) 16:56:40名前付きイベントと組み合わせれば・・・
0426デフォルトの名無しさん
2006/11/26(日) 17:06:45成程、CoCreateInstanceはレジストリのCLSID見てモジュールをロードするんですか、勉強になります。
しかしDirect3Dに関してはCOMで作ってるクセにDirectX8からCOMを逸脱しているらしく
CLSIDが登録されていない(=CoCreateInstanceでインスタンスを作れない)みたいです。
なんでこんな仕様になったのか理解不能なんですが、ともあれCLSIDからの乗っ取りアプローチは
Direct3D8に関しては無理みたいです(´・ω・`)
>>408
おお…これは、すごい。動画処理をVfWでやってるのが多少残念ですが(僕のプログラムでも
最初の実装ではVfWでしたが、処理が遅い+マルチスレッドを想定していないらしく、
プログラミングしづらい上に、2GB制限等のユーザー側の利便性を損なう欠点が多々見つかった事から、
DirctShowへの乗り換えを検討しています。)参考になりそうな部分はとても多いです。
実は僕C++は始めたばかりで、テンプレートクラス等個人的に見慣れない部分はありますが
がんばって解読してみようと思います。情報有難うございました。
そろそろ長引いちゃってアレなのでこの辺りで消えます。
付き合ってくださった皆さん本当に有難うございましたm(_ _)m
0427デフォルトの名無しさん
2006/11/26(日) 17:07:340428デフォルトの名無しさん
2006/11/26(日) 17:14:50Firefoxでフォルダ開くとどんどん新しい窓ができるのはそのせいカー
0429デフォルトの名無しさん
2006/11/26(日) 17:15:33多分知ってると思うが
ttp://saw.minidns.net/software/
DirectXのHookはこれも参考になる
0430デフォルトの名無しさん
2006/11/26(日) 17:18:25フルスクリーンのゲームなどより前に出てきません。
フルスクリーンより前に持ってくることはできるのでしょうか?
0431デフォルトの名無しさん
2006/11/26(日) 17:24:15ゲームがフルスクリーンになったあとに最前面にもってくる
0432デフォルトの名無しさん
2006/11/26(日) 17:29:58ゲームを起動した後に起動するということですよね?
それをしても負けてしまうのです;
0433デフォルトの名無しさん
2006/11/26(日) 18:04:40タイマーで定期的に最前面にもってきてもだめか?
0434デフォルトの名無しさん
2006/11/26(日) 18:07:09という事に、ツッコミを入れない件について
0435デフォルトの名無しさん
2006/11/26(日) 18:23:17タイマーで呼んだらきました。WM_CREATEでつくってそれっきりでした。
ありでした
0436デフォルトの名無しさん
2006/11/26(日) 18:29:51そんなコード誰も書かないだろ
常識的に考えて
0437デフォルトの名無しさん
2006/11/26(日) 18:33:16そんな風に考えて(ry
まあ、解決したようでなによりだけどな
0438デフォルトの名無しさん
2006/11/26(日) 18:33:51SetWindowPosで最前面にできないなら、ゲーム側で
何かしているとしか、考えられない。
それに、ベクターにいけば、そんなウンコアプリなんて
いくらでも存在してるから、恐ろしいのだよ。
0439デフォルトの名無しさん
2006/11/26(日) 19:28:40まだウインドウないんだし
0440デフォルトの名無しさん
2006/11/26(日) 19:38:35最後にアクティブになるゲーム画面が前面に出ちゃうでしょ
だからフルスクリーンになった後に最前面化させないと出てこない
0441デフォルトの名無しさん
2006/11/26(日) 20:31:060442デフォルトの名無しさん
2006/11/26(日) 20:40:210443デフォルトの名無しさん
2006/11/26(日) 20:41:32ゲームの描画で上書きされる可能性はあるけど
ウィンドウマネージャ的には手前に出せる
0444デフォルトの名無しさん
2006/11/26(日) 21:08:400445デフォルトの名無しさん
2006/11/26(日) 21:12:10開発環境はVS2003です。SDKで作っています。
リストビュー(レポート)の中でドラッグの開始位置と終了位置のアイテムとサブアイテムを取得するために、
リストビューをサブクラス化してWM_LBUTTONDOWNとWM_LBUTTONUPを受け取ろうとしたのですが、
WM_LBUTTONDOWNは通知されるのに、WM_LBUTTONUPはプロシージャに通知されず困っています。
WM_LBUTTONUPを取得する方法を教えていただけないでしょうか?
0446デフォルトの名無しさん
2006/11/26(日) 21:22:00画面外の情報もちゃんと取れたのにちょっと感動
0447445
2006/11/26(日) 21:24:58ダブルクリックの後にはWM_LBUTTONUPが通知されました。
プログラムはこのHPのサンプルを書き換えました。
ttp://wisdom.sakura.ne.jp/system/winapi/common/common15.html
WNDPROC DefListProc;
LRESULT CALLBACK ListProc(
HWND WH_Window,
UINT msg,
WPARAM wp,
LPARAM lp)
{
switch(msg)
{
case WM_LBUTTONUP:
MessageBox(WH_Window,"","",MB_OK);
break;
}
return CallWindowProc(DefListProc,WH_Window,msg,wp,lp);
}
hList = CreateWindowEx(0 , WC_LISTVIEW , 0 ,
WS_CHILD | WS_VISIBLE | LVS_REPORT ,
0 , 0 , 10 , 10 , hWnd , (HMENU)1 ,
((LPCREATESTRUCT)lp)->hInstance , NULL);
DefListProc = (WNDPROC)GetWindowLong(hList,GWL_WNDPROC);
SetWindowLong(hList,GWL_WNDPROC,(LONG)ListProc);
よろしくお願いいたします。
0448デフォルトの名無しさん
2006/11/26(日) 21:38:59ちゃんと、LBUTTONDOWN→MOUSEMOVE→LBUTTONUP来てたがね
まぁ、何かやってることがおかしいんだろうけど・・・
0449デフォルトの名無しさん
2006/11/26(日) 21:57:43画面全体を有効に使っているならまだしも、
黒いスペースが埋められているだけだし。
せめてタクスバーを残してくれ。
0450445
2006/11/26(日) 22:18:17問題のプログラムをSpy++で覗いた所WM_LBUTTONUPは発行されていました。
ためしに
return CallWindowProc(DefListProc,WH_Window,msg,wp,lp);
↓
return DefWindowProc(WH_Window,msg,wp,lp);
に変えてみたところ、WM_LBUTTONUPメッセージを取得できました。
リストビューのプロシージャが悪さをしているようなので、調べてみます。
ありがとうございました。
0451デフォルトの名無しさん
2006/11/26(日) 23:35:16CreateWindowExで拡張ウィンドウスタイルを使わないようにするには
CreateWindowを使えばいいんですがExのみを使うっていう前提の場合、
CreateWindowEx(NULL,・・・);でいいんでしょうか?
0452デフォルトの名無しさん
2006/11/26(日) 23:55:05イエス。拡張ウィンドウスタイルは(普通のスタイルもそうですが)スタイルを示すビットフラグの
論理和で示されるので、全てのビットが0=NULLを指定すれば拡張ウィンドウスタイルは無効になります。
正確には、なると思います。実際やって見た事がないので。
0453451
2006/11/27(月) 00:08:22ありがとうございます。
WS_EX_LEFT
WS_EX_LTRREADING
WS_EX_RIGHTSCROLLBAR
の定義も0x00000000なんですがこれはデフォルトでそうなってると解釈しました。
0454デフォルトの名無しさん
2006/11/27(月) 00:15:24その通り。それらは拡張スタイルを指定しなくても自動でそうなっているスタイル、
要するに拡張スタイルの指定と対比させるために敢えて定義された定数です。
0455デフォルトの名無しさん
2006/11/27(月) 00:26:34細かいことと思うかもしれないが、NULLはポインタ専用だ。そこには0使え。
0456デフォルトの名無しさん
2006/11/27(月) 00:27:13haxa?
0458デフォルトの名無しさん
2006/11/27(月) 00:44:570459デフォルトの名無しさん
2006/11/27(月) 04:39:11この先、microsoftが提供する開発環境って
platform sdk が無くなって、.net flameworkだけになるってことはありますか?
ちょっと疑問に思っただけなんですが
0460デフォルトの名無しさん
2006/11/27(月) 04:51:25従来のPlatform SDKの内容(+Vistaの新API)は今のところそのまま入ってる。
将来的には(かつてのWin16 APIみたいに)Win32 APIはWDKに追いやられて
ユーザーモードアプリはWinFX API一本になるということもあるかもね
0461デフォルトの名無しさん
2006/11/27(月) 06:56:20ウィンドウ関係のAPIラッパクラスを作ってる時にはじめて知ったわ
0462デフォルトの名無しさん
2006/11/27(月) 12:08:07LVN_BEGINDRAGでメッセージループを廻しているかDoDragDropしているのか
0463デフォルトの名無しさん
2006/11/27(月) 12:38:15チェックが付いているかどうかって、レジストリから確認できるの
でしょうか。
0464デフォルトの名無しさん
2006/11/27(月) 13:04:26http://pc7.2ch.net/pcqa/
Windows
http://pc8.2ch.net/win/
0465デフォルトの名無しさん
2006/11/27(月) 14:13:54HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveActive
0466465
2006/11/27(月) 14:16:37間違えた・・・・
HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaverIsSecure
だ。
0467デフォルトの名無しさん
2006/11/27(月) 18:31:49クリップボード内のデータの履歴を取り,再利用するものを想定しています.
テキストだけでなく,画像やリンクなどを含めたデータをクリップボードから取り出し,
保存するにはどのようにしたらよいでしょうか?
0468デフォルトの名無しさん
2006/11/27(月) 18:42:380469デフォルトの名無しさん
2006/11/27(月) 18:47:21取り出すのはOpenClipboard, EnumClipboardFormats, GetClipboardDataなど。
保存は御自由に。
わからない事をもっと具体的に端的に質問することをお勧めします。
0470デフォルトの名無しさん
2006/11/27(月) 18:49:520471デフォルトの名無しさん
2006/11/27(月) 22:01:30今の規格上はNULLはゼロと同じ。
0472デフォルトの名無しさん
2006/11/27(月) 22:04:370473デフォルトの名無しさん
2006/11/27(月) 22:11:360474デフォルトの名無しさん
2006/11/27(月) 22:30:47他にFtpでのダウンロードを中断する方法があったら教えてください。
お願いします、ほんとに。
環境はWinXP+VS2005のMFC+SDKです。
Win2000以降のみ対応できればよいです。
0475デフォルトの名無しさん
2006/11/27(月) 22:36:060476デフォルトの名無しさん
2006/11/27(月) 22:37:49コンパイラによって、ならまだ解るが。
0477デフォルトの名無しさん
2006/11/27(月) 22:39:240478デフォルトの名無しさん
2006/11/27(月) 22:40:31コンパイル環境によっては0じゃない場合もあるのは確か
0479デフォルトの名無しさん
2006/11/27(月) 22:51:25WinINet使えば?
0480デフォルトの名無しさん
2006/11/27(月) 22:59:040481デフォルトの名無しさん
2006/11/27(月) 23:03:280482デフォルトの名無しさん
2006/11/27(月) 23:21:240483デフォルトの名無しさん
2006/11/27(月) 23:26:000484デフォルトの名無しさん
2006/11/27(月) 23:58:51OleGetClipboardのほうが形式を考えなくてすむから楽だと思うぞ。
0485デフォルトの名無しさん
2006/11/28(火) 01:24:15大変遅くなって申し訳ありませんがレスをいただきありがとうございました。
恥ずかしながらWindows SDKやWinFX APIというのは意味をよく知りませんでしたので
勉強になりました。ありがとうございます。
0486デフォルトの名無しさん
2006/11/28(火) 02:47:44内部表現の話とごっちゃにしてる。ここはWin32 APIスレだし。
それともWin32sではヌルポインタをアクセス違反にするためWin32アプリから見える
アドレスとVxDから見えるアドレスが64KBずれてるなんてトリビアを話したいのか。
0487デフォルトの名無しさん
2006/11/28(火) 06:49:16具体的にはどの関数を使えば…
0488デフォルトの名無しさん
2006/11/28(火) 08:40:420489デフォルトの名無しさん
2006/11/28(火) 08:52:56目的と手段を逆に取り違えている奴が世の中多すぎ。
0490デフォルトの名無しさん
2006/11/28(火) 08:59:100491デフォルトの名無しさん
2006/11/28(火) 09:04:360492デフォルトの名無しさん
2006/11/28(火) 09:38:170493デフォルトの名無しさん
2006/11/28(火) 09:42:130494デフォルトの名無しさん
2006/11/28(火) 09:45:11それぐらい自分で調べろよ。
0495デフォルトの名無しさん
2006/11/28(火) 09:52:26は、ヌルポインタの値が0でなくても、コンパイラによってその型のヌルポインタの値に変換される
と聞いたことがある。
だからC++ではNULLと0は等価らしい。
0496デフォルトの名無しさん
2006/11/28(火) 10:23:31FONTEDIT\FONTEDIT.C(566): (HWND)NULL, /* no parent */
FONTEDIT\FONTEDIT.C(567): (HMENU)NULL, /* use class menu */
0497デフォルトの名無しさん
2006/11/28(火) 10:26:150498デフォルトの名無しさん
2006/11/28(火) 10:28:52Wininetよく知らないからなんともいえないけど、
FtpOpenFileとInternetReadFileでやるんじゃない?
もしGUIアプリ作ってるんなら、これをスレッドでやる方法と
内部でメッセージループでやる方法があると思う。
結構大変だよ。
0499デフォルトの名無しさん
2006/11/28(火) 11:19:22SDKは空ハンドルにもNULL使うよな
0500デフォルトの名無しさん
2006/11/28(火) 11:40:40それとは別に INVALID_HANDLE_VALUE も使うし ややこしい
0501デフォルトの名無しさん
2006/11/28(火) 11:48:350502デフォルトの名無しさん
2006/11/28(火) 12:16:52CM_TEXTCHANGEでチェックするしかないんでしょうか‥‥
0503デフォルトの名無しさん
2006/11/28(火) 12:52:52エンターキーで次のエディットにフォーカスを移動
させようと思っています。
サブクラス化されたウィンドウプロシージャでイベントを
捕まえてSetFocusで移動はできるのですが、
TABキーを送ってまとめて処理したいです。
TABキーの送り方を教えてください。
0504デフォルトの名無しさん
2006/11/28(火) 12:55:27ハンドルはOSが内部で確保する構造体へのポインタだからなんだよ。
0505デフォルトの名無しさん
2006/11/28(火) 13:36:38DWORDの引数にNULLを渡すのはおかしいという話題なのに、
なぜいきなりポインタであるハンドルの話を出してきたのか。
0506デフォルトの名無しさん
2006/11/28(火) 14:44:11COM風のDLLを作ってるときに、
void IHOGE::Release()
{
// あらかじめ保存しておいた、exe側のWinAPIのFreeLibrary()のアドレスと
BOOL (WINAPI *fpFreeLibrary)(HMODULE) = m_fpFreeLibrary;
// DLLのハンドルをローカル変数にコピーしてから、
HMODULE hLibrary = m_hLibrary;
// 自殺して
delete this;
// DLL解放
fpFreeLibrary(hLibrary);
}
なんてやろうとしたんですが、DLL解放のところでバグってしまいました。
以前VC6でやっててうまくいってたんですが
(実行時にDLLの方がDLL解放の処理を書いてないバージョンのままだった可能性はあります・・・)
VC2005Expressでやるとダメでした。
こんなことせずに自前で解放すれば大丈夫なのですが、
DLLから得た関数の中でDLLを解放することはそもそも原理的にダメなのでしょうか?
そのあたりの理屈が知りたいので、よろしければ教えてください。
0507デフォルトの名無しさん
2006/11/28(火) 15:14:56そのDLLを解放するコードIHOGE::Releaseは、解放しようとしているDLLにあるわけで。
列車が走ってるレールを破棄するようなもんだ。
0508デフォルトの名無しさん
2006/11/28(火) 16:29:210509デフォルトの名無しさん
2006/11/28(火) 16:49:18やるとしたら、一時的にスレッドを作って(そのスレッドはDLL内の関数で良い)、
そこでFreeLibraryAndExitThreadを呼ぶという方法がある。
ちなみに本物のCOMでは、COMがDLLを管理している。
(ある程度はDLL自身も制御できるが、直接FreeLibraryを呼ぶという事態はない)
0510デフォルトの名無しさん
2006/11/28(火) 16:54:59こんなもん何に使うんだよwwwwwってなるよな。
0511デフォルトの名無しさん
2006/11/28(火) 17:09:58FreeLibraryAndExitThread呼ぶスレッドをIHOGE::Release()で作っても
FreeLibraryAndExitThreadが呼ばれる前にIHOGE::Release()から抜けて
EXE側のコードに戻らないとダメだな。
0512デフォルトの名無しさん
2006/11/28(火) 17:29:18>FreeLibrary(hModule);
>ExitThread(dwExitCode);
こんな感じで実装されてるってだけのことだろうが酷い説明だな
0513デフォルトの名無しさん
2006/11/28(火) 17:38:49でもAdvanced Windowsにはきちんと使い方が書いてあったよ。
0514デフォルトの名無しさん
2006/11/28(火) 17:57:40メニューバーからダイアログの表示
ShowWindow( hDlg, SW_SHOW )
を使用すると何故か↓の様に、ダイアログから下の部分が更新されていません。
http://gamdev.org/up/img/8238.jpg
ダイアログが親?ウィンドウより外側に持って行くか
キーボードを押してSW_SHOWを呼び出す様な処理の場合は
問題なく全体を更新します。
メニューバーまたはメッセージに何かしらあるのでしょうか。
0515デフォルトの名無しさん
2006/11/28(火) 18:06:40WM_PAINTの処理がおかしいだけじゃない?
BeginPaint使わないで、ValidateRect(hWnd, NULL)してるとか。
0516デフォルトの名無しさん
2006/11/28(火) 18:19:51ハンドルから手を離して挨拶するって危険なんじゃないかって
思うんだ。しかし、運転士たちは危ないと思ってない。
ここに行って
http://hobby7.2ch.net/test/read.cgi/bus/1162901425
挙手してんじゃねえよ
って教えてあげて。よろしくお願いしますね。
0517デフォルトの名無しさん
2006/11/28(火) 18:24:32それはそれで表示板にそういうのあるんだっけ?
0518514
2006/11/28(火) 19:01:47WM_PAINTは使ってないですが
ちょいと調べてみます。有難うございます。
現在のメッセージ処理
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
if( !DialogMessage( &msg ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
else
{
Update();
Render();
Sleep( 1 );
}
0519デフォルトの名無しさん
2006/11/28(火) 19:26:22楽できました。ありがとう。
0520デフォルトの名無しさん
2006/11/28(火) 21:18:18Win32API的にはどのように再現できるでしょうか?
0521デフォルトの名無しさん
2006/11/28(火) 21:37:250522514
2006/11/28(火) 21:43:43メニューバーに触れると、SSの様な事態になるので
メニューバーの使用をやめるか、モーダルダイアログにするなりしてみます。
0523520
2006/11/28(火) 22:12:13確かに自プロセスならreturnでことたりるのですが
Visual Studioのような他プロセスがどうのような方法で
ステップアウト等の処理をしてるか分かりません
0524デフォルトの名無しさん
2006/11/28(火) 22:16:310525デフォルトの名無しさん
2006/11/28(火) 22:18:350527デフォルトの名無しさん
2006/11/28(火) 22:55:48>>524
0528デフォルトの名無しさん
2006/11/28(火) 23:08:43驚いたことに最近はね、プロセッサ例えばPentium(というかi386からだけど)
の中にはデバッグレジスタ(DRレジスタ)なるものが存在するんだよ。
どう使うのかは知らんw
さわらぬ神にタタリなしww
0529デフォルトの名無しさん
2006/11/28(火) 23:24:37例えばだけど、0番地付近がシステムで予約されている場合とかさ。
そういう環境用のコンパイラはきっとNULLを-1とかにするんだろうね。
0530デフォルトの名無しさん
2006/11/28(火) 23:37:19内部表現が-1でもC/C++のソース上は常に0。
0531デフォルトの名無しさん
2006/11/28(火) 23:45:13C++は、じゃない?
0532デフォルトの名無しさん
2006/11/28(火) 23:47:48でも 0 の部分がほかの数値になることはない
0533デフォルトの名無しさん
2006/11/28(火) 23:53:190534デフォルトの名無しさん
2006/11/29(水) 00:09:19ただしポインタであるべき文脈で 0 を使ってもいいことは保証されてる。
0535デフォルトの名無しさん
2006/11/29(水) 00:18:08デバッグレジスタへのアクセスはリアルモードなどの状態でしか許されていない
そのかわりWaitForDebugEventとかいうAPIが提供されてるがどう使うか分からん
どっちにしろさわらぬ神にタタリなしww
0536デフォルトの名無しさん
2006/11/29(水) 00:28:130537デフォルトの名無しさん
2006/11/29(水) 00:32:52IntPtr.Zero渡していいのかな?
C#はよく知らんが
0538デフォルトの名無しさん
2006/11/29(水) 00:33:55OllyDbgは余裕でハードウェアブレークポイント提供してますが何か?
0539デフォルトの名無しさん
2006/11/29(水) 00:39:28Win32の世界に限ればNULLは内部表現も0であると決め付けてまったく問題ない
>>538
MS純正のi386kdにもあると思う
0540デフォルトの名無しさん
2006/11/29(水) 00:57:46NULL使っててもいいんじゃないか?
>>539がいうように"Win32の世界に限れば"な
0541デフォルトの名無しさん
2006/11/29(水) 01:03:20どさくさに紛れやがって・・・・
ガッ!!!
0542デフォルトの名無しさん
2006/11/29(水) 01:08:02とりあえず開発環境で定義されている、MB_OK辺りでも使っとくか。
ポインタよりは、数値の定義という点でマシだから。
0543デフォルトの名無しさん
2006/11/29(水) 01:14:42テラワロス
0544デフォルトの名無しさん
2006/11/29(水) 01:35:17DrawText((hdc, MB_OK, MB_OK, "かんべんしてください",10);
0545デフォルトの名無しさん
2006/11/29(水) 01:54:22http://www.kouno.jp/home/c_faq/c5.html
0546デフォルトの名無しさん
2006/11/29(水) 03:08:49for( j=MB_OK; j<10; j++)
for( k=MB_OK; k<10; k++)
…
0547デフォルトの名無しさん
2006/11/29(水) 05:14:120548デフォルトの名無しさん
2006/11/29(水) 05:15:54( ゚д゚)
0549デフォルトの名無しさん
2006/11/29(水) 08:38:36そんなものを使う意味は無いよな。独自定義か、そのまま0でおk。
0550デフォルトの名無しさん
2006/11/29(水) 11:28:22ダイアログのCS_SAVEBITS。Saveされた絵を無効にすればいい。
それと、メニュー表示時は518のメッセージループを通らない。
あと、WM_PAINTハンドラはあった方がいい。
0551506
2006/11/29(水) 16:47:53なるほど、ちゃんと方法があるんだなぁ・・・
と、思ったもののなかなかDLL側だけでどうこうというのは
難しいですね(´・ω・`)
少しSleepでもさせてからFreeLibraryAndExitThreadを呼ぶとか
そんな方法しかないかなぁ(->Release()だけで済ませたいなら)。
色々やってみます、ありがとうございました。
0552デフォルトの名無しさん
2006/11/29(水) 21:54:46>>523
そもそも途中でreturnしたら関数の結果が変わるからNG
一般的には対象関数のreturn先にブレークポイントを敷いて
関数内ではステップ実行しない
本気で勉強したいならこちらをどうぞ
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756117457
0553デフォルトの名無しさん
2006/11/29(水) 21:56:50523じゃないけど音速で注文した
0554520
2006/11/30(木) 01:43:58注文したいけど品切れorz
けどわくわくするAPIとかハッケンー
基本的なデバッグAPI
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/debugging_reference.asp
もうちょい踏み込んだデバッグAPI (devenv.exeと同じディレクトリにdbghelp.dllがあったのでVisual Studioはこっち使ってそう
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/dbghelp_functions.asp
pdb弄ぶライブラリ
ttp://msdn2.microsoft.com/en-us/library/x93ctkx8(VS.80).aspx
なんかできそうな気がしてきた
0555デフォルトの名無しさん
2006/11/30(木) 10:17:31なんて卑猥なライブラリなんだ
0556デフォルトの名無しさん
2006/11/30(木) 11:28:02亀だがwine検索してみたら
/***********************************************************************
* FreeLibraryAndExitThread (KERNEL32.@)
*/
void WINAPI FreeLibraryAndExitThread(HINSTANCE hLibModule, DWORD dwExitCode)
{
FreeLibrary(hLibModule);
ExitThread(dwExitCode);
}
_, ._
( ゚ Д゚) マジで?
0557デフォルトの名無しさん
2006/11/30(木) 11:37:14バロスwwwwwwww
なんだこの関数wwwwwwwww
0558デフォルトの名無しさん
2006/11/30(木) 11:40:370559デフォルトの名無しさん
2006/11/30(木) 12:42:420560デフォルトの名無しさん
2006/11/30(木) 13:41:49いや、そのコードで正しいんだよ。
>>559氏も書いているが、FreeLibraryAndExitThread()が
kernel32.dll内にあることに重大な意味がある。
0561デフォルトの名無しさん
2006/11/30(木) 13:43:51ロード済みのダイナミックリンクライブラリ(DLL)の参照カウントを 1 減らし、
ExitThread ... VOID FreeLibraryAndExitThread( HMODULE hModule,
// DLL モジュールのハンドル DWORD dwExitCode // スレッドの終了コード); ...
www.microsoft.com/japan/developer/library/Jpwinpf/_win32_freelibraryandexitthread.htm - 4k -
0562デフォルトの名無しさん
2006/11/30(木) 13:59:560563デフォルトの名無しさん
2006/11/30(木) 14:14:22吸うもんだ。
0564デフォルトの名無しさん
2006/11/30(木) 14:16:10AdvancedWindowsでも、kernel32.dllの中で次のように実装されているといって、
全く同じコードが載せられている。
0565デフォルトの名無しさん
2006/11/30(木) 22:28:250566デフォルトの名無しさん
2006/11/30(木) 22:41:15ああ成程。kernel32からFreeLibraryとExitThread投げてくれるから
ちゃんと解放してくれるわけか。勉強になった。
0567デフォルトの名無しさん
2006/12/01(金) 00:37:17で質問なのですが
INFINITEで無制限待機になったスレッドを起こす方法はないのでしょうか?
javaや.NET Frameworkのスレッドメソッドだと
sleep,join,wait 状態を解除するinterruptメソッドがあるのですが・・・
linux系の一部実装だとwakeupとかかな・・・?
ともかく、これに相当するようなWin32 APIはないのでしょうか。
0568デフォルトの名無しさん
2006/12/01(金) 00:40:02WaitForSingleObjectとかで待機させろよ
0569デフォルトの名無しさん
2006/12/01(金) 00:46:30SuspendThreadとResumeThreadってのがるけど、
あれ?自分をsuspendって出来るんだっけ?
0570デフォルトの名無しさん
2006/12/01(金) 00:58:09SleepとかWaitForSingleObjectとかしてちゃ何もできんだろ・・・
>>567は他スレッドから待機を終わらせる方法を聞いてるんじゃないのか?
0571デフォルトの名無しさん
2006/12/01(金) 01:05:200572567
2006/12/01(金) 01:30:09ハンドルはセマフォ(1,1)あたりを渡す方法ですかね?
0573デフォルトの名無しさん
2006/12/01(金) 01:31:420574569
2006/12/01(金) 01:50:53Sleepする代わりにSuspendThread(自分)ってやったら
他スレッドから起こすことが出来るかな?と思って。
今、試せないからどうなるのか分からないので。
でもまあ、スレッド間で同期を取ることを考えると、
普通にWaitFor〜がいいとは思うけど。
0575デフォルトの名無しさん
2006/12/01(金) 02:43:310576デフォルトの名無しさん
2006/12/01(金) 09:48:30寝るようにしてるな
0577デフォルトの名無しさん
2006/12/01(金) 10:08:22今何してるか分からん奴を突然止めてしまうのは気持ち悪い。
0578デフォルトの名無しさん
2006/12/01(金) 11:25:490579デフォルトの名無しさん
2006/12/01(金) 11:56:02着陸直前のジャンボのパイロットをSuspend
0580デフォルトの名無しさん
2006/12/01(金) 12:04:520581デフォルトの名無しさん
2006/12/01(金) 12:16:370582デフォルトの名無しさん
2006/12/01(金) 12:17:56\(
∧_∧ ハァハァ
シコ ( ´Д`/"lヽ
/´ ( ,人)
シコ ( ) ゚ ゚| | オナヌーしてます
\ \__,| ⊂llll
\_つ ⊂llll
( ノ ノ
| (__人_) \
0583デフォルトの名無しさん
2006/12/01(金) 13:44:422000でもサポートしてくれよぉ。
0584デフォルトの名無しさん
2006/12/01(金) 22:55:02起動時(とか復元時)にウィンドウを表示しつつも
そのウィンドウがアクティブにならないで最前面に表示されるソフトは、
どういうやり方をしていますか?
0585デフォルトの名無しさん
2006/12/01(金) 23:05:12TopMostで表示して、ユーザーが触ったら元に戻す
とかすればええんちゃう?
0586デフォルトの名無しさん
2006/12/01(金) 23:19:57書き方が悪くて申し訳ない。
ただ、作業中のソフトから入力カーソルを奪わないで起動したかっただけなのです。
いろいろ試しているうちに、
SetWindowPosにSWP_NOACTIVATEというフラグがあるのを発見しました。
どうやら、これでうまくいきそうです。多分。
0588デフォルトの名無しさん
2006/12/02(土) 01:04:38移動することって可能ですか?
0589デフォルトの名無しさん
2006/12/02(土) 01:08:350590デフォルトの名無しさん
2006/12/02(土) 01:43:06thanx!!
できました!
0591デフォルトの名無しさん
2006/12/02(土) 02:50:20Vistaってそういうカーネルレベルの改良意外と多いんだよね。
Win板とか行くとみんなAeroくらいしかないと思ってるみたいだけど
0592デフォルトの名無しさん
2006/12/02(土) 09:09:330593デフォルトの名無しさん
2006/12/02(土) 10:14:48System.Threading.ReaderWriterLock
プラットフォーム Win98以上
ってのがあるようだ。
スレ違いだけど。
0594デフォルトの名無しさん
2006/12/02(土) 10:17:280595デフォルトの名無しさん
2006/12/02(土) 11:05:03─────────────────
using System.Runtime.InteropServices;
─────────────────
[DllImport("coredll.dll")]
private static extern int GetSystemMetrics(int nIndex);
private int titlebar { get{ return (GetSystemMetrics(SM_CYCAPTION)); }}
─────────────────
これで実行すると「SM_CYCAPTIONはクラスまたは名前空間に存在しません」
と出てしまいます。まだ何かたりないのでしょうか。初心者な質問ですいませんがお願いします。
0596デフォルトの名無しさん
2006/12/02(土) 11:08:250597デフォルトの名無しさん
2006/12/02(土) 11:12:19C#スレで訊いた方がええんちゃうん?
0598デフォルトの名無しさん
2006/12/02(土) 11:15:23SM_CYCAPTIONをconstで宣言しろ。
0599デフォルトの名無しさん
2006/12/02(土) 11:18:22Win32のヘッダファイルを漁って、SM_CYCAPTIONの定義を見つけて
自分でconstとかで定義する。
0600デフォルトの名無しさん
2006/12/02(土) 11:42:39そもそもC#というか、.NET Frameworkの
System.Windows.Forms.SystemInformation.CaptionHeight プロパティ
じゃ駄目なのか?
0601デフォルトの名無しさん
2006/12/02(土) 12:47:340602デフォルトの名無しさん
2006/12/02(土) 15:01:200603デフォルトの名無しさん
2006/12/02(土) 16:20:340604デフォルトの名無しさん
2006/12/02(土) 16:30:370605デフォルトの名無しさん
2006/12/02(土) 16:43:440606デフォルトの名無しさん
2006/12/02(土) 18:30:40具体的にはどのようにすれば良いのですか?
0607デフォルトの名無しさん
2006/12/02(土) 18:38:01自分で作ったプログラムから、
指定したcppファイルを指定したコンパイラでコンパイルするプグラムを作りたいのですが、
ShellExecuteをつかって、コンパイルするところまではできたのですが、
コンパイラからのメッセージ文(エラーが出てコンパイルできなかったとか、正常にできたとか)を、
どうやって自分のプログラムに取り込めばよいのかがわかりません。
使っているコンパイラはbcc55なので、
ShellExecute(
NULL,
NULL,
TEXT("bcc32"),
TEXT("test.cpp > message.txt"),
NULL,
SW_SHOWNORMAL);
という感じにすれば、
message.txt で取れるかと思ったのですが、できませんでした。
どうしたらいいのか、なにかヒントを教えてもらえると助かります。
0608デフォルトの名無しさん
2006/12/02(土) 18:51:15ちったぁ自分で調べるってことしろや
>>1にも書いてあろうがよ
「ウィンドウスタイル 変更」でググるだけでいくらでも参考になりそうなものが出てくるぜ?
0609デフォルトの名無しさん
2006/12/02(土) 19:22:00パイプ
0610デフォルトの名無しさん
2006/12/02(土) 19:24:48「>」とか「2>」はcmd.exeの機能だからcmd.exeを実行してやる必要がある。
0611610
2006/12/02(土) 19:26:460612デフォルトの名無しさん
2006/12/02(土) 19:32:57ありがとうございます。早速ググッて見たのですが、説明が難しかったので、勉強してきます。
0613デフォルトの名無しさん
2006/12/02(土) 22:48:08>>610は"cmd.exe /c bcc32.exe -h > message.txt"
0614607
2006/12/02(土) 22:55:19下のように作ったら、思ったように動かせました。
ありがとうございました。
BOOL MyFunc_CreateProcess
(LPSTR lpszCommandLine, LPSTR lpszFilePath)
{
HANDLE hFile;
STARTUPINFO si;
PROCESS_INFORMATION pi;
hFile = CreateFile(lpszFilePath,GENERIC_WRITE,0,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
ZeroMemory(&si,sizeof(si));
ZeroMemory(&pi,sizeof(pi));
si.cb=sizeof(si);
si.dwFlags=STARTF_USESTDHANDLES;
si.hStdOutput=hFile;
CreateProcess(NULL,lpszCommandLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle(hFile);
return TRUE;
}
0616デフォルトの名無しさん
2006/12/02(土) 23:09:12607のようにプログラムでリダイレクトしてやるほうがいいと思う。
0617デフォルトの名無しさん
2006/12/02(土) 23:24:160618デフォルトの名無しさん
2006/12/02(土) 23:44:060619デフォルトの名無しさん
2006/12/03(日) 00:14:28完全に忘れていた。%ComSpec%
思い出させてくれてありがとう。
0620デフォルトの名無しさん
2006/12/03(日) 00:19:520621デフォルトの名無しさん
2006/12/03(日) 00:35:340622デフォルトの名無しさん
2006/12/03(日) 00:39:160623デフォルトの名無しさん
2006/12/03(日) 01:10:170624デフォルトの名無しさん
2006/12/03(日) 01:11:04専用スレ池
0625デフォルトの名無しさん
2006/12/03(日) 01:22:220626デフォルトの名無しさん
2006/12/03(日) 01:23:14MSXML
0627デフォルトの名無しさん
2006/12/03(日) 01:28:21チョイ仕事では済みそうにないですね。
とにかくサンキュー
0628デフォルトの名無しさん
2006/12/03(日) 01:38:050629デフォルトの名無しさん
2006/12/03(日) 02:10:15del %comspec%
0630デフォルトの名無しさん
2006/12/03(日) 07:59:58それを実行すると日本語環境と英語環境でプロパティシート
のサイズが変わってしまいます。中身のサイズは同じよう
です。
何が原因かわかりますでしょうか?
0631デフォルトの名無しさん
2006/12/03(日) 08:02:58フォントが違うんじゃない?
0632デフォルトの名無しさん
2006/12/03(日) 08:09:36しています。
実際に表示されるフォントが違うかどうかは確認して
ないんですが、中身のサイズは同じようなので
違うと思ってたんですが。
0633デフォルトの名無しさん
2006/12/03(日) 11:42:200634デフォルトの名無しさん
2006/12/03(日) 12:02:17プロパティシート自体がトップウインドウなんです。
0635デフォルトの名無しさん
2006/12/03(日) 12:28:02影響を受けないフォント(Arialとか)にしてみたらどうだろう。
0636デフォルトの名無しさん
2006/12/03(日) 13:03:21Arialにしてみましたが、だめでした。
Arialにすると、英語windowsで内部がはみ出してしまいました。
0637デフォルトの名無しさん
2006/12/03(日) 14:39:361. ページの大きさは互換性の関係で、
指定フォントではなく'MS Shell Dlg'を基に計算される。
2. Windows2000以降では、
DIALOGEXテンプレートでDS_SHELLFONTスタイルを指定した時、
指定フォントに基づいて計算される。
訳が間違っていたらすまん。
0638デフォルトの名無しさん
2006/12/03(日) 14:59:35フォントが違うよ。
プロパティーシートにする前に、普通のダイアログで試してみそ。
よって、プロパティーシートの親ウィンドウのサイズは決め打ちではNG。
0639デフォルトの名無しさん
2006/12/03(日) 15:00:32シートのDLGTEMPLATE中のそれは日英で異なる。
DLLを覗くか、シートのフォントを調べられたし。
0640デフォルトの名無しさん
2006/12/03(日) 15:53:30ありがとう。いろいろやってたらできたみたいです。
PROPSHEETHEADERのフラグにPSH_USEPAGELANGを追加したら
シートの大きさが同じになりました。
ただタブのフォントが若干ちがくなりましたが、
これはOKとします。
0641デフォルトの名無しさん
2006/12/03(日) 20:58:460642デフォルトの名無しさん
2006/12/03(日) 23:45:54セクタサイズが4KByteだけど1001KByteのファイルを作成したい場合は
最後の1KB書き込むときにはCloseHandleしてCreateFileしなおすか
最初からFILE_FLAG_NO_BUFFERINGを諦めるしかないんでしょうか
0643デフォルトの名無しさん
2006/12/03(日) 23:52:05日本語でおk
とりあえず、セクタサイズは通常512byte、MOとかDVD-RAMとかで2KBの場合あり。
4KBなんてものは普通はないが。
0644642
2006/12/04(月) 00:07:29すみません
セクタサイズではなくクラスタサイズでした
MSDNには、FILE_FLAG_NO_BUFFERINGフラグを指定した場合
書き込み&読み込みサイズと、バッファーのアドレスと、ファイルの書き込み&読み込み開始位置が
ディスクのクラスタサイズと一致してなければいけないと書いてありました。
そのため、クラスタサイズが4KBのディスクに1001KBのファイルを作ろうとすると
最後の1KBが書き込めなくなってしまうので
1、FILE_FLAG_NO_BUFFERINGを諦める
(このフラグを指定すると非同期書き込みのパフォーマンスが上がると書いてあったので、できれば諦めたくない)
2、一度ファイルを開き直してから書き込む
(わざわざ開き直すのは面倒でスマートではない気がするので、他にいい方法があるなら避けたい)
この二つ以外に方法は無いのかと思って質問させていただきました
0645デフォルトの名無しさん
2006/12/04(月) 00:07:500646tsurarete yarou.
2006/12/04(月) 00:15:50やったことないのでおおはずしかもしれないが、ダミーで埋めて 1004KB まで
書き込んでから、SetFilePointer() と SetEndOfFile() で余分なところを切
り捨てるんじゃだめ?
0647デフォルトの名無しさん
2006/12/04(月) 00:19:07セクタサイズ単位のはずだが。
0648デフォルトの名無しさん
2006/12/04(月) 00:21:180649デフォルトの名無しさん
2006/12/04(月) 00:28:13ちなみに、大抵の場合パフォーマンスが低下するので使用はお勧めしない。
0650642
2006/12/04(月) 00:40:31MSDNに思いっきりセクタサイズって書いてありましたねorz
>>646
SetFilePointerもセクタサイズ単位でしか移動できないようです
>>648
それはわかってるんですけどOSがバッファリングしなくなるので
その分早くなるのかと思いまして
>>649
>書き込みの境界さえあってれば、サイズは可変でいけた気がする。
やってみたところ、WriteFileがエラーを吐きました
GetLastErrorしてみたらエラーコードは0x57で「パラメータが間違っています。」だそうです
セクタサイズの整数倍にした場合はエラーになりませんでした。
>ちなみに、大抵の場合パフォーマンスが低下するので使用はお勧めしない。
そうなんですか・・・
こういうのはあまり詳しくないのでMSDNの記述を鵜呑みにしてました
勉強してちゃんと理解できるようになるまではFILE_FLAG_NO_BUFFERINGを諦めることにします
>>643-649
ありがとうございました
0651デフォルトの名無しさん
2006/12/04(月) 01:04:390652デフォルトの名無しさん
2006/12/04(月) 01:09:58>>650
NO_BUFFERINGは、ディスクキャッシュをあまり汚さずに済むのが唯一の利点かな。
FFCとかは使ってるのかもしれない。
0653デフォルトの名無しさん
2006/12/04(月) 02:29:37DBMSのように自前でバッファリングしてI/O回数の最適化を意識した処理を作っているのでなければ、
NO_BUFFERINGを使うメリットなんてないだろう。
通常のアプリくらいならやらないほうがいいと思う。
0654デフォルトの名無しさん
2006/12/04(月) 03:04:42ISO-9660ディスクの仕様なら見つかるのですが・・・
0655デフォルトの名無しさん
2006/12/04(月) 06:08:24reader/writer lockってvista以上でサポートかよ。
2000でもサポートしてくれよぉ。
591 名前: デフォルトの名無しさん [sage] 投稿日: 2006/12/02(土) 02:50:20
>>583
Vistaってそういうカーネルレベルの改良意外と多いんだよね。
Win板とか行くとみんなAeroくらいしかないと思ってるみたいだけど
592 名前: デフォルトの名無しさん [sage] 投稿日: 2006/12/02(土) 09:09:33
Win板の連中は表面しか見ない(見えない)からね〜。
ntdll内で実装されているのでカーネルレベルの変更ではない。
目糞鼻糞だな。
0656デフォルトの名無しさん
2006/12/04(月) 13:44:340657デフォルトの名無しさん
2006/12/04(月) 14:15:49やぁ、目糞君www
0658デフォルトの名無しさん
2006/12/04(月) 14:58:170659デフォルトの名無しさん
2006/12/04(月) 15:05:14スレ違いだが、まずは手元の適当なISOイメージが、そのISO-9660ディスクの仕様と一致しているか確かめろ。
一致しているならそれで良し、違ったらお前のググり方が悪い。
0660デフォルトの名無しさん
2006/12/04(月) 15:14:47raw image fileに仕様があると思っているのか?
>>658
素人乙
0661デフォルトの名無しさん
2006/12/04(月) 15:22:020662デフォルトの名無しさん
2006/12/04(月) 19:56:34reader/writer lockってどんなの?
APIの名前じゃ無さそうだが
0663デフォルトの名無しさん
2006/12/04(月) 20:01:07・誰かが読み中なら、書き込み要求は待たされ
・皆読み中での、読み込み要求は待たされずにすんなり通る
をプロセス/スレッドまたいで、うまく解決できるようにする機構
0664デフォルトの名無しさん
2006/12/04(月) 20:32:050665デフォルトの名無しさん
2006/12/04(月) 21:24:00とりあえずISOディスクイメージファイルって何ぞやってことだな.
自分用語だから誰もそれが何なのか分からない.
CD-ROM及びDVD-ROMは1セクタにつき2048バイトをデータとする論理構造を持ち
一般的にはそれの1トラックの連結ストリームをイメージファイルとするけど、CD-R
では本来の補助情報を含めた2352バイトを物理的に焼きこめることもあって、各ソフト
毎に好き勝手に独自フォーマットを持っている. (DVDはRAW焼きはできません)
また、TOC情報とかもイメージに取り込んでいるのもあるな.
ので、一般的にisoイメージと呼ばれているものはその実はそれが何なのかは、
それだけでは分からない. 一番可能性が高いのは1セクタ2048バイトなシングル
トラックイメージというだけ.
0666デフォルトの名無しさん
2006/12/05(火) 00:33:47お勧めな書籍はありますか?
Delphiのですと下記のが一応見つかりましたが、VCでお勧めがありましたら…。
シェルプログラミング入門
ttp://www.amazon.co.jp/exec/obidos/ASIN/479730782X
0667デフォルトの名無しさん
2006/12/05(火) 00:55:340668デフォルトの名無しさん
2006/12/05(火) 01:48:44ウィンドウとダイアログの違いって?(^^;
0669デフォルトの名無しさん
2006/12/05(火) 05:42:42ExpandEnvironmentStringsの話ならおk?
0670デフォルトの名無しさん
2006/12/05(火) 05:47:34Vistaに限らずNT系の新APIに見えるものは実はntdllの非公開APIに公開の皮を
かぶせただけ、ってパターンも結構あるな。
Win9x切り捨てたので遠慮する必要がなくなったんだろう
0671デフォルトの名無しさん
2006/12/05(火) 09:51:21ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/aboutdialogboxes.asp
>Dialog boxes usually belong to a predefined, exclusive window class.
>The system uses this window class and its corresponding window procedure for both modal and modeless dialog boxes.
>When the function is called, it creates the window for the dialog box, as well as the windows for the controls in the dialog box,
>then sends selected messages to the dialog box procedure.
0672デフォルトの名無しさん
2006/12/05(火) 10:15:18VisualC++ 2005 EE を使い始めたのですが、
VisualC++ 6.0と違ってリソースエディタがありません。
なので、無理矢理コントロールをウインドウに貼り付けて処理したいと思うのですが、
どのように貼り付ければ良いのか、参考となるサイトなど教えていただけないでしょか?
0673デフォルトの名無しさん
2006/12/05(火) 10:33:34VC6のリソースエディタなりサードパーティ製リソースエディタ使えば?BCCFormとか。
0674デフォルトの名無しさん
2006/12/05(火) 10:41:56LRESULT API DefDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
BOOL result = FALSE;
hwnd->DWL_MSGRESULT = 0;
if(hwnd->DWL_DLGPROC
&& (result = CallDlgProc(hwnd, message, wParam, lParam))
{
//メッセージに応じてDWL_MSGRESULTかresultを返す
return DWL_MDGRESULT or result;
}
else
{
switch(message)
{
/*さまざまなメッセージハンドラ*/
case WM_XXXX:
return 何とか
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
}
}
DlgProcはダイアログのWindowProcのフロントエンドなので、
DlgProcでデフォルト処理後に独自の処理を加えるのはメンド臭いです。
0675672
2006/12/05(火) 11:14:36迅速なレス有難う御座います。
方法すら見当もつかなかった自分としては、お二方のご指南本当に有難いです。
やはりソースコードで全て処理するとなるとやや時間もかかり、
面倒かもしれませんが、頑張ってみようと思います。
0676デフォルトの名無しさん
2006/12/05(火) 11:28:37DragQueryFile関数を使いパスつきのファイル名が取得できますが
パスなしのファイル名が取得できる関数はあるのでしょうか?
0677デフォルトの名無しさん
2006/12/05(火) 11:30:530678デフォルトの名無しさん
2006/12/05(火) 11:37:490680デフォルトの名無しさん
2006/12/05(火) 13:35:57その方法は面倒だが、それだって探せばいくらでも見つかる。
親のWM_CREATEで子をCreateWindow(Ex)すればいいだけ。
0681デフォルトの名無しさん
2006/12/06(水) 13:52:31接続されたイベントを取得したい場合どうすればいいでしょうか?
ipodを繋いだらitunesが起動するみたいなことがやりたいです。
msdnとかで調べたけどわかりませんでした。
お願いします。
0682デフォルトの名無しさん
2006/12/06(水) 14:04:190683デフォルトの名無しさん
2006/12/06(水) 15:19:42日本語入力をしたいのですが
IMEに未確定文字を表示させないようにして
独自で描画することはできますか?
0684683
2006/12/06(水) 15:49:390685デフォルトの名無しさん
2006/12/06(水) 17:10:55SHCNE_MEDIAINSERTEDだな。
0686デフォルトの名無しさん
2006/12/06(水) 19:21:50ValidateRectで描画を更新しているのですが
VC++6.0から実行すると、ツールバーが消えてしまいますが
exeから動かすとツールバーが表示されています。
これはどうしようも無いんでしょうか。
BeginPaint〜EndPaintだとVC++6.0の実行でも問題なし
0687デフォルトの名無しさん
2006/12/06(水) 21:16:06絶対なんかやってることがおかしい。
あと「ValidateRectで描画を更新」って何だよ?
0688デフォルトの名無しさん
2006/12/06(水) 21:33:280689デフォルトの名無しさん
2006/12/06(水) 21:35:210690デフォルトの名無しさん
2006/12/06(水) 21:37:140691203
2006/12/06(水) 21:48:28while( 1 )
{
if( ::PeekMessage( &msg, NULL, 0U, 0U, PM_NOREMOVE ) )
{
if( ::GetMessage( &msg, NULL, 0, 0 ) <= 0 )
return msg.wParam;
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
プロシージャでは
GetClientRect( g_hWnd, &wrc );
GetClientRect( g_hTool, &trc );
wrc.top = trc.bottom;
を
case WM_TIMER:
InvalidateRect( g_hWnd, &wrc, TRUE );
UpdateWindow( g_hWnd );
break;
case WM_PAINT:
ValidateRect( g_hWnd, &wrc );
break;
といった感じで処理しています。
たまにツールバーが出現したりして謎です。
ValidateRectの描画の更新は、すいません表現を間違えました。
0692デフォルトの名無しさん
2006/12/06(水) 21:50:27やり方教えてください。
0693691
2006/12/06(水) 21:50:56×203
○686
0694デフォルトの名無しさん
2006/12/06(水) 21:51:250695692
2006/12/06(水) 21:51:310696デフォルトの名無しさん
2006/12/06(水) 21:52:500697デフォルトの名無しさん
2006/12/06(水) 21:53:280698696
2006/12/06(水) 21:54:44他ののWindowバージョンだとどうでしょうか。
0699デフォルトの名無しさん
2006/12/06(水) 21:57:100700デフォルトの名無しさん
2006/12/06(水) 21:59:53http://www.google.com/search?num=100&hl=ja&ie=EUC-JP&q=%A5%EA%A5%B9%A5%C8%A5%D3%A5%E5%A1%BC%A4%CE%B9%D4%A4%CE%B9%E2%A4%B5
0701デフォルトの名無しさん
2006/12/06(水) 22:00:33ゲーム作ってる時とか
0702デフォルトの名無しさん
2006/12/06(水) 22:02:11WM_PAINT内の処理がありえないな
せっかく描画しようとしてるところを、描画もせずに「もう描画しなくていいよ」なんていや消えるのは当たり前だろ
ツールバーも親ウィンドウ上にあるものだぞ?
0703デフォルトの名無しさん
2006/12/06(水) 22:05:48人に「ちょっとこっち来て!」って呼んどいて
来たら「こっち来るんじゃねーよ!」って言うようなもんだな。
0704686
2006/12/06(水) 22:06:39NULLなりGetClientで得た領域をそのまま渡すと
ツールバーが塗り潰されてしまいます。
ツールバーとValidateRectは合わないのだろうか
0705デフォルトの名無しさん
2006/12/06(水) 22:07:49>>695
0706デフォルトの名無しさん
2006/12/06(水) 22:09:42つーかあんた、最初の自分の書き込みで最後に結論出してるだろうが
0707686
2006/12/06(水) 22:12:12BeginPaint〜EndPaint を使うと
DirectXの
Clear, BeginScene, EndScene, Present使うと
チラチラチラチラするもんで
出来れば ValidateRect を使いたいなと
0708704
2006/12/06(水) 22:12:300709デフォルトの名無しさん
2006/12/06(水) 22:44:13>>686=>>704=>>708なの?
0710708=706
2006/12/06(水) 22:46:580712デフォルトの名無しさん
2006/12/06(水) 22:56:44文字化けするかしないかってだけなら
そ ん な こ た ぁ 自 分 で 実 行 し て み り ゃ わ か る だ ろ
0713デフォルトの名無しさん
2006/12/06(水) 22:59:31>>696みたいな質問は出てくるわけがないと思うんだが。
0714デフォルトの名無しさん
2006/12/06(水) 23:00:38まあソフトで使う分には、対象言語圏が日本なら心配要らないだろう
0715デフォルトの名無しさん
2006/12/06(水) 23:03:070716デフォルトの名無しさん
2006/12/06(水) 23:05:44丸数字の文字化けを考えないといけないのは違うOSで表示させる場合
(WEBアプリケーションとか)
0717デフォルトの名無しさん
2006/12/06(水) 23:06:26この場合も化けはしないけどな
0718696
2006/12/06(水) 23:21:48参考になりました。
0719デフォルトの名無しさん
2006/12/06(水) 23:34:04勿論丸付き数字どころの騒ぎではない。
0720デフォルトの名無しさん
2006/12/07(木) 00:09:420721デフォルトの名無しさん
2006/12/07(木) 00:15:000722デフォルトの名無しさん
2006/12/07(木) 00:26:590723720
2006/12/07(木) 00:41:14に表示させない(つかわない)方法はないでしょうか?
0724デフォルトの名無しさん
2006/12/07(木) 01:09:400725デフォルトの名無しさん
2006/12/07(木) 01:20:220726デフォルトの名無しさん
2006/12/07(木) 02:07:180727デフォルトの名無しさん
2006/12/07(木) 05:58:30その他のアイコンエディタをほとんど使ってないから、
他と比べてどうかは知らんが満足してる。
0728デフォルトの名無しさん
2006/12/07(木) 07:05:56不可視の親ウィンドウ
0729デフォルトの名無しさん
2006/12/07(木) 10:15:11>ツールバーが塗り潰されてしまいます。
DirectXが塗りつぶしているのなら、DirectXの使う領域を指定する。
単一色で塗りつぶされているのなら、ウィンドウスタイルにWS_CLIPCHILDRENをつける。
または、WNDCLASS(EX)のhbrBackground=NULLでもいいと思う。
それより、DirectX描画用の子ウィンドウをつくり、
WM_SIZEでクライアント領域のツールバーの下に移動する方が簡単。
0730デフォルトの名無しさん
2006/12/07(木) 10:27:26別にウィンドウが一旦隠れたわけでもないのに
メッセージループ内からWM_PAINT発生させてんのか理解できんのだが
そんなことすりゃチラつくのは当たり前だろうと
WM_PAINTの存在意味を解って無いだろ
0731デフォルトの名無しさん
2006/12/07(木) 11:39:00BeginPaintせずにValidateRectしてるんだからちらつきましぇん。
0732686
2006/12/07(木) 11:59:59有難うございます
WS_CLIPCHILDRENで解決しました。
領域を指定しての最初のValidateRect
は無効領域を残したままだったので
いつまでもWM_PAINTが残っている状態でした。
かといって全領域を指定するとWM_PAINTは消えますが
ツールバーごと塗り潰すといった事態に
DirectXに関してはPresentに
ツールバー分を引いたクライアント領域に
転送(2番目引数)するようにしています。
>DirectX描画用の子ウィンドウをつくり、
>WM_SIZEでクライアント領域のツールバーの下に移動する方が簡単。
その内使わせて頂きます。
>>730
アニメーションやらシミュレーションやらを入れたいと思ったので
WM_PAINTを発生させまくる状況を作ってみました。
0733デフォルトの名無しさん
2006/12/07(木) 16:31:03@icon + ドットエディタ
0734デフォルトの名無しさん
2006/12/07(木) 20:26:05アニメーションやらシミュレーションやらを入れるのにWM_PAINT連打せねばならぬのか
0735デフォルトの名無しさん
2006/12/07(木) 23:34:51他アプリケーションのDataGridに表示されている値を取得する方法はありますでしょうか?
LABELやConboBoxの値はWin32APIを使って取得する方法は分かるのですが
DataGrid系に表示されている値の取得方法がどうしても分かりません・・・('A`)
0736デフォルトの名無しさん
2006/12/08(金) 01:29:31CD-Rや、DVD-Rなどの光メディアに、プログラムから書き込むことって可能ですか?
API名とか、ヒント下さい。
0737デフォルトの名無しさん
2006/12/08(金) 01:56:42IMAPI
0738デフォルトの名無しさん
2006/12/08(金) 01:59:27SPTI
0739デフォルトの名無しさん
2006/12/08(金) 02:00:54どうしても0が返されます。
DirectXアプリ以外のエリアで情報を取得する分には問題ないのですが。
特殊なやり方をしないととれないのでしょうか。
0740デフォルトの名無しさん
2006/12/08(金) 02:07:02なるほど、こんなのが有ったんですね。
ありがとうございます。助かりました。
0741デフォルトの名無しさん
2006/12/08(金) 03:15:590742デフォルトの名無しさん
2006/12/08(金) 04:25:420743デフォルトの名無しさん
2006/12/08(金) 05:08:280744kk
2006/12/08(金) 08:51:48ダイアログのエディットボックスに入力されてる文字列はどうすれば
PTSTRなどに入れられるのでしょうか
0745デフォルトの名無しさん
2006/12/08(金) 08:57:560746kk
2006/12/08(金) 09:17:280747デフォルトの名無しさん
2006/12/08(金) 10:02:430748245
2006/12/08(金) 11:21:04rectangleで書きこんで一部消去とか(真中だけ抜く)は、
抜きたい部分をXORで合成するしかないでしょうか?
指定したrectの分だけ消去するとかできないもんでしょうか。
CreateCompatibleDCで作った場所に書きこんで、
ほかのDCに書きこんだら、CreateCompatibleDCにrectangleしたところ意外は、
透明でほかのDCに書きこまれるので、rectangleの真中だけ書きこむ前の透明にしたいです。
0749デフォルトの名無しさん
2006/12/08(金) 11:23:28日本語でおk
rectangleしたところって意味不明すぎるw
0750デフォルトの名無しさん
2006/12/08(金) 11:25:40GetDlgItemTextは親のウィンドウハンドルと子のIDがあれば十分。
GetWindowTextLengthとGetWindowTextのコンビを行いたければ、GetDlgItem使え。
0751748
2006/12/08(金) 12:33:40HDC hDC = GetDC(hWnd)
HCD hMemoryDC = CreateCompatibleDC(hDC);
HBITMAP hBitmap = CreateComatibleBitmap(hDC, 640, 480);
SelectObject(hMemoryDC, hBitmap);
DeleteObject(hBitmap);
SelectObject(hMemoryDC, GetStockObject(GRAY_BRUSH));
Rectangle(hMemoryDC, 0, 0, 640, 480);
ClearRect(hMemoryDC, 160, 120, 480, 360);// Rectangleで書いたところの一部を消したい
----------
WndProcでWM_PAINTのところ
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
BitBlt(hDC, 0, 0, 640, 480, hMemoryDC, 0, 0, SRCCOPY);
EndPaint(hWnd, &ps)
↑みたいな処理で、ClearRectに該当する処理を探しています
0752デフォルトの名無しさん
2006/12/08(金) 12:47:57>SelectObject(hMemoryDC, hBitmap);
>DeleteObject(hBitmap);
こういうところ見ると仕組みを理解してないのがよくわかる。
ここを一通り呼んで勉強してくれ。
ttp://msdn.microsoft.com/library/en-us/dnanchor/html/gdi.asp
0753748
2006/12/08(金) 13:02:33ttp://www13.plala.or.jp/kymats/study/MULTIMEDIA/bmp_multibuf.html
ここを参考にしました
0754748
2006/12/08(金) 13:11:20使っている間は、DeleteObjectしたらあかんという意味ですね。
プログラミングWindowsを読むと、WM_DESTROYでDeleteObject(hBitmap)みたくなっているのが多いので。
0755kk
2006/12/08(金) 13:27:56ありがとうございます。
>>747
そう思ったのは、リソーススクリプトを使用したので
HWND = CreateWindow(--------,---,-,-,.....);
と書かなかったからです。
>>750
GetDlgItemText()で、ちゃんと入力された文字列を取り入れることができました。
ありがとうございます。
0756デフォルトの名無しさん
2006/12/08(金) 15:17:28何そのダメすぎるサイト
そんなとこ参考にしてたらキミも終わっちまうぜ
0757748
2006/12/08(金) 15:39:200758デフォルトの名無しさん
2006/12/08(金) 16:50:470759デフォルトの名無しさん
2006/12/08(金) 16:54:01JavaでいうところのSystem.currentTimeMillisはありますか?
GetLocalTimeでSYSTEMTIMEとって自分で掛け算ですか?
0760デフォルトの名無しさん
2006/12/08(金) 17:00:460761デフォルトの名無しさん
2006/12/08(金) 18:57:27どんな方法がよさげ?
コマンドラインパラメータ以外で。
0762デフォルトの名無しさん
2006/12/08(金) 19:10:59コマンドライン以外だと渡して起動というよりも起動後通信だな。
pipe、共有メモリ、ネットワーク等。
0763デフォルトの名無しさん
2006/12/08(金) 19:18:10量は多くても1KBくらい。
確実に渡せる方法がいいです。
0764デフォルトの名無しさん
2006/12/08(金) 19:39:200765デフォルトの名無しさん
2006/12/08(金) 19:46:54そうしてみるわ
トンクス
0766デフォルトの名無しさん
2006/12/08(金) 20:30:14Windowsのエクスプローラの、ファイルやフォルダが表示される部分を
自分で作ったウィンドウに埋め込むにはどうすれば良いでしょうか。
0767デフォルトの名無しさん
2006/12/08(金) 20:37:23IEコンポーネントを使っている例だが参考になる。
アドレスバーに入力すればわかるが、フォルダだって表示できる。
0768デフォルトの名無しさん
2006/12/08(金) 20:43:300769デフォルトの名無しさん
2006/12/08(金) 20:52:36メモリマップの表示っていうのありますが、あれはどの API
をつかってるんでしょうか?
開始アドレス フラグ サイズ
00010000 -RW- 1000
00020000 -RW- 1000
0011F000 -RW- 11000
....
77FDF000 -ERW- 1000
77FFE000 -R- 1000
こういうやつです。
0770デフォルトの名無しさん
2006/12/08(金) 21:02:390771デフォルトの名無しさん
2006/12/08(金) 21:46:580772デフォルトの名無しさん
2006/12/08(金) 21:50:10無理。
スタティックリンクライブラリに置くことは可能。
0773デフォルトの名無しさん
2006/12/08(金) 21:53:060774デフォルトの名無しさん
2006/12/08(金) 22:23:21ワイルドカード+拡張子でファイルを検索してるのですが、これで引っ張ってくる
ファイル名の順番はどういう順で返されるのでしょうか?
最初は名前順かと思ったのですが違うようで…
0775デフォルトの名無しさん
2006/12/08(金) 22:44:57MSDN読めよ
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/findnextfile.asp
>The order in which this function returns the file names is dependent on the file system type.
>With the NTFS file system and CDFS file systems, the names are returned in alphabetical order.
>With FAT file systems, the names are returned in the order the files were written to the disk,
>which may or may not be in alphabetical order.
0776デフォルトの名無しさん
2006/12/08(金) 22:51:29それは邦訳を読んだけどそれでもイマイチ疑問なのヨ
具体的な例で、検索対象フォルダに名前が"a.txt"と"_.txt"で始まるファイルがあるとき、
explorerで「アイコンの整列->名前順」とすると
_.txt
a.txt
という順で表示されますが、FindFirst/FindNextで検索すると逆に出てくる。
なぜ?('A`)
'_' = 0x5f
'a' = 0x61
ってことを考慮するとexplorerの名前表示順がしっくりくるんだけどな…
0777デフォルトの名無しさん
2006/12/08(金) 22:52:55>>775 読め
0778デフォルトの名無しさん
2006/12/08(金) 23:00:34回避方法見つけたからもういいわ
0779デフォルトの名無しさん
2006/12/08(金) 23:03:26てか自前でソートすれ
0780デフォルトの名無しさん
2006/12/08(金) 23:05:34それを解った上で776を書いたんだが
>てか自前でソートすれ
そうしたよ
0781デフォルトの名無しさん
2006/12/08(金) 23:23:39内部でファイルを列挙して並び替えて・・・って処理をやってくれというのか?
0782デフォルトの名無しさん
2006/12/08(金) 23:29:18>781
誰が何時そんな事を言ったのか言ってみ
0783デフォルトの名無しさん
2006/12/08(金) 23:34:48ファイル名に数字がついた時とか
0784デフォルトの名無しさん
2006/12/08(金) 23:51:570785デフォルトの名無しさん
2006/12/09(土) 00:09:27FindNextFileはファイルシステムに物理的に格納されている順番で列挙するんだから。
z.txt
a.txt
の順で格納されていたら。その順で出てくるだけだと思うが。
たぶん、その実験した環境では、
a.txt
_.txt
の順番に格納されていたんだろうね。
explorerは表示する時に、ソートしなおしているんだから、「しっくりくる」順番なのは当然。
0786デフォルトの名無しさん
2006/12/09(土) 00:19:13>>775 読め
0787デフォルトの名無しさん
2006/12/09(土) 00:30:070788デフォルトの名無しさん
2006/12/09(土) 00:30:172052
3076
3com_dmi
6to4svc.dll
a15.tbl
a234.tbl
aaaamon.dll
Accesor.dll
access.cpl
acctres.dll
accwiz.exe
acelpdec.ax
acledit.dll
aclui.dll
acode.tbl
activeds.dll
activeds.tlb
actmovie.exe
actskin4.ocx
actxprxy.dll
adddrv.exe
admparse.dll
ADODC.SRG
ADODCJP.DLL
adptif.dll
adsldp.dll
adsldpc.dll
adsmsext.dll
adsnds.dll
adsnt.dll
勝手にソートしてんじゃん
0789774
2006/12/09(土) 00:33:39正にそれで済ませたワケだが
>788
先頭に'_'の付いたファイルも検索すれば言ってる事判ると思われ
0790デフォルトの名無しさん
2006/12/09(土) 00:40:13b.txt、c.txtも検索すれば皆が言ってる事判ると思われ
0791デフォルトの名無しさん
2006/12/09(土) 00:41:36何故か?については誰も答えられない
0792デフォルトの名無しさん
2006/12/09(土) 00:43:35多分一番解ってないのはお前
0793デフォルトの名無しさん
2006/12/09(土) 00:48:34GetSystemInfo
VirtualQueryEx
0794デフォルトの名無しさん
2006/12/09(土) 01:01:25区別をつけないように組まれていることを考えればわかるだろうに。
0795デフォルトの名無しさん
2006/12/09(土) 01:02:28LBS_STANDARDフラグは付けたの?
0796デフォルトの名無しさん
2006/12/09(土) 01:03:280797デフォルトの名無しさん
2006/12/09(土) 01:09:12NTFSなのかFATなのかくらい書けよ。
0798デフォルトの名無しさん
2006/12/09(土) 01:16:440799デフォルトの名無しさん
2006/12/09(土) 01:39:48B < D < _ < a < c と並び替えられる。
a より B が前に来るのは、直感的に分かりにくい。
そのためエクスプローラでは、いわゆる辞書順に並び替えるため、
おそらくアルファベット大文字を小文字に変換してからソートしている。
_, a, B, c, D
→ _, a, b, c, d
→ _ < a < b < c < d
→ _ < a < B < c < D
こうして、アンダーバーは先頭に持ってこられる。
全部予想だけど。
0800デフォルトの名無しさん
2006/12/09(土) 01:50:29言語の設定を日本語にしてるときだけかもしれんけど
0801デフォルトの名無しさん
2006/12/09(土) 03:25:26任意のアプリからフォルダのように見えるようにする事は無理なのでしょうか?
0802デフォルトの名無しさん
2006/12/09(土) 05:40:170803デフォルトの名無しさん
2006/12/09(土) 08:12:360804デフォルトの名無しさん
2006/12/09(土) 08:39:04それはAPIの質問なのか?
そのアプリ作った奴に頼め
0805デフォルトの名無しさん
2006/12/09(土) 08:43:410806デフォルトの名無しさん
2006/12/09(土) 09:11:450807デフォルトの名無しさん
2006/12/09(土) 09:36:30英文を読めるような頭を持った人間なら、そもそもここまで話を引き伸ばせません。
0808デフォルトの名無しさん
2006/12/09(土) 09:47:51! < 0 < A,a < _ < α < あ < ア < 亜 < A,a
Unicode順で、英字は大小の区別なし(大文字と見なす)、全角半角の区別あり、カタカナひらがなの区別あり
といった感じだな。
explorerは、英字は大小の区別なし(小文字と見なす)、全角半角の区別なし、カタカナひらがなの区別なし、
漢字はJISコード順って感じかな。
0809デフォルトの名無しさん
2006/12/09(土) 09:56:13本当に知らなくて恥ずかしかったんだろうな
0810デフォルトの名無しさん
2006/12/09(土) 09:57:22何故なのかが話題であって誰も同じであるべきとは言っていない事に気付け
0811kk
2006/12/09(土) 10:37:43うまく取得できてなく、
取得した文字列をatoiでintで変換したときにエラーになります。
エディットボックスに何を入れても、PTSTRにはいるのは「・U駆Qテ・」となっています。
何が原因なのでしょうか。
0812デフォルトの名無しさん
2006/12/09(土) 10:43:150813デフォルトの名無しさん
2006/12/09(土) 10:59:50返り値が返されるタイミングというのは
ダウンロードが完了した時、接続に成功したときのどちらでしょうか?
0814デフォルトの名無しさん
2006/12/09(土) 12:04:570815デフォルトの名無しさん
2006/12/09(土) 12:05:340816デフォルトの名無しさん
2006/12/09(土) 12:07:16すいません。教えていただけると幸いです。
0817デフォルトの名無しさん
2006/12/09(土) 12:28:140818デフォルトの名無しさん
2006/12/09(土) 12:36:03そもそも整数値を取るつもりなら始めからGetDlgItemIntを使ったらどうか。
0819デフォルトの名無しさん
2006/12/09(土) 13:39:16アンカーの間違いに気づけ
0820デフォルトの名無しさん
2006/12/09(土) 18:04:38どのAPIをつかえばいいの?
0821デフォルトの名無しさん
2006/12/09(土) 18:22:43というわけでXMLに保存しようかと思うんだけど.NET使わずにXMLにアクセスする手段はありますか?
MSXMLとかになるんでしょうか
0822デフォルトの名無しさん
2006/12/09(土) 18:28:52XMLのほうが遅くなるんじゃね?
0823デフォルトの名無しさん
2006/12/09(土) 18:30:040824デフォルトの名無しさん
2006/12/09(土) 18:44:150825デフォルトの名無しさん
2006/12/09(土) 18:45:55INIで木構造を維持するいい方法があったら教えてもらえると助かる
0826デフォルトの名無しさん
2006/12/09(土) 18:57:120827デフォルトの名無しさん
2006/12/09(土) 19:01:310828デフォルトの名無しさん
2006/12/09(土) 19:02:45タブの個数とかでやってみたら?
0829デフォルトの名無しさん
2006/12/09(土) 19:34:57どうもありがとうございました
0830デフォルトの名無しさん
2006/12/09(土) 19:44:16Get/WritePrivateProfile系APIでの読み書きしてるなら絶対遅いよ。
内部で1行ごとにOpen/Closeされてるだろうし..
0831デフォルトの名無しさん
2006/12/09(土) 19:49:080832デフォルトの名無しさん
2006/12/09(土) 19:52:04RUBY最強だけどね
0833デフォルトの名無しさん
2006/12/09(土) 19:55:250834デフォルトの名無しさん
2006/12/09(土) 20:06:19ちゃんとしたやり方 or もっとスマートなやり方があるかも知れんけど、
SetWindowsHook系のAPI使うなりなんなりして自前のDLLを調べたい
プロセスにロードさせてやればそのDLLから取得できるべ。
0835デフォルトの名無しさん
2006/12/09(土) 20:08:18GlobalMemoryStatus
0836デフォルトの名無しさん
2006/12/09(土) 21:02:27これは車輪の再発名なんていう問題じゃないだろ。
すべてのソートにバブルソートを用いるとか、
君がツリーで管理しているデータなんかをすべて、たんなる配列で管理するとか、そういうレベルだろうが。
0837デフォルトの名無しさん
2006/12/09(土) 21:04:43その程度の知識しか無いんだろ。
0838デフォルトの名無しさん
2006/12/09(土) 21:11:01Delphi/BCBなら64KBの制限なくて早いよ('(゚∀゚∩
0839a
2006/12/09(土) 22:28:52Microsoft の Windows 開発者 Dave 氏による Windows NT カーネル
解説講義のビデオをストリーミング公開!
http://d.hatena.ne.jp/softether/20061209#p2
0840デフォルトの名無しさん
2006/12/09(土) 23:21:260841デフォルトの名無しさん
2006/12/10(日) 00:45:120842デフォルトの名無しさん
2006/12/10(日) 01:56:12ちなみにProcess Explorerはドライバをロードしているので
自前でカーネル空間から情報収集していると思う。
0843801
2006/12/10(日) 03:13:03SUBSTってコマンドとかありますよね。
仮想ドライブにアクセスすると
代わりに実際のフォルダをシステムが提供してくれるわけじゃないですか。
その場合任意のアプリが「だまされる」事になりますよね。
Windows、もしくはデバイスドライバなどの機能でそういった事ができないか、
という質問な訳です。
0844デフォルトの名無しさん
2006/12/10(日) 04:28:340845デフォルトの名無しさん
2006/12/10(日) 05:15:250846デフォルトの名無しさん
2006/12/10(日) 05:21:28ようこそカーネルモードの世界へ。
0847デフォルトの名無しさん
2006/12/10(日) 06:02:37win32apiを使って、c言語での処理の仕方を一通り学びました。
で、c言語での処理をしていたら、メッセージが来た時にそこに
長々とした処理を書くしか無い(知識不足ですが)ように思うんですが
api関数をC++で独自でクラス化していく方法は有るんでしょうか。
mfcのヘッダーを見てたら、afx_msgが付いてる関数と#pragma comment(lib, "・・・")が目に付き
で、#pragma commentを見てると、libを#ifdef#undef等で詰め込んでるように
見えます。あとPASCAL形式が気になります。
ついで、afx_msgがmessageに送られるWM_・・・ととらえて良いんでしょうか
なぜ、このような質問をするかというと、単純にMFCがとっつきにくいというか
マクロ等で、フレームワークとその子ウィンドウ、ツールバー等が最初の設定時点で
作成されてしまい、順序としてはフレーム、ビュー(子ウィンドウ)←→ドキュメント
となってるのはわかりますが、マクロや関数が呼ばれていく順序が
Cなら、WinMainのHINCTANCEをグローバルで持っておき、WNDCLASSEXで
RegisterClassExで登録しウィンドウの生成でならまずNULL指定でオーナーとして存在させ・・・
と順に理解できるんですが、MFCだと、どうしても僕のレベルでは可読できません。
どなたか、このページなら参考になるとか、このオープンソースならわかりやすい
と言う物を教えていただけないでしょうか。
初心者の質問でもうしわけありませんが、どなたかお願いいたします。
0848デフォルトの名無しさん
2006/12/10(日) 07:04:57まず日本語を勉強しましょう。
言葉を理路整然と書き連ねる工夫をしましょう。
改行を不自然な位置で使用するのをやめましょう。
初心者である事は免罪符になりません。
0849デフォルトの名無しさん
2006/12/10(日) 09:04:48もちろん、それで801のやりたいZipをということはできないだろうが。
>>847
> 長々とした処理を書くしか無い
そんなことはない。処理毎に関数を書いて、全てのメッセージの処理を関数呼出だけにすれば、
それだけでウィンドウプロシージャはだいぶすっきりする。
というわけで、とりあえずメッセージクラッカはどうよ。
0850デフォルトの名無しさん
2006/12/10(日) 09:48:54いったんどっかの隠しディレクトリに物理的にファイルを展開しておいて
ファイルシステムフィルタドライバでパスをリダイレクトすればできる。
ネットワーク上のファイルをアクセスする時も同じような方法で処理されている。
0851デフォルトの名無しさん
2006/12/10(日) 12:46:32フォーカスを失っても閉じないことが結構あるんですが何で?
0852デフォルトの名無しさん
2006/12/10(日) 12:49:31タスクトレイの話?
だったら、WM_NULL
0853デフォルトの名無しさん
2006/12/10(日) 13:06:34それはオフラインファイルの場合だけじゃまいか
0854デフォルトの名無しさん
2006/12/10(日) 14:24:34自分で作ったもんでもなければクラックして動作確認したわけでもないから
違うかもしれんが、少なくとも俺はそう聞いている。なんでも、ネットワーク
上のものだからいつアクセスできなくなるかわかったもんじゃないし、
第一、ファイルI/Oがある度にネットワーク経由のアクセスしてたんじゃ
パフォーマンスが最悪になるとかで、ネットワーク上のファイルが開かれる
場合はとにかくいったんファイル全体をダウンロードしてしまうらしい。
0855デフォルトの名無しさん
2006/12/10(日) 14:36:340856デフォルトの名無しさん
2006/12/10(日) 14:40:46他のアプリケーションプログラムを起動させたりするのはSystem.Diagnostics.Processで可能らしいのですが入力ボックスに自動で入力したり、ボタンを押したりさせるような
関数とかってWIN32APIで準備されているのでしょうか?
0857デフォルトの名無しさん
2006/12/10(日) 15:00:070858デフォルトの名無しさん
2006/12/10(日) 15:27:36サンクス856です
具体的な関数名を教えてもらえませんか
0859デフォルトの名無しさん
2006/12/10(日) 15:53:510860デフォルトの名無しさん
2006/12/10(日) 16:07:44どうもありがとう。
0861デフォルトの名無しさん
2006/12/10(日) 16:08:33本ならMFCインターナル、ただしこれはもう古いかもしれない。
それかソース追う。ただし全部把握するのはかなり大変。
ドキュメントビューアーキテクチャーは最初はやめた
法がいいと思う。
0862デフォルトの名無しさん
2006/12/10(日) 16:11:51smbがそうなっているってだけで関係ねぇだろ。
ちなみにレドモンド帰りのヤツから聞いた話だ。
0863デフォルトの名無しさん
2006/12/10(日) 16:20:45ちなみにレドモンド帰りの知人は何時頃どんな仕事をしていたのですか?
日本人は意外と少ないので知っている人かもしれませんね。
0864デフォルトの名無しさん
2006/12/10(日) 17:11:39アホか。プロトコルとしてのsmbの話してるんだったらそれこそ関係ねぇだろ。
クライアント内でファイルをどう扱うかの話なんだから。
MS内ではわりかし有名な人だったみたいだから、本当にドンピシャで誰かわかるかもしれんから教えない。
0865デフォルトの名無しさん
2006/12/10(日) 17:22:26どうすればいいですか?
0866デフォルトの名無しさん
2006/12/10(日) 17:26:400867デフォルトの名無しさん
2006/12/10(日) 17:28:240868デフォルトの名無しさん
2006/12/10(日) 17:38:460869デフォルトの名無しさん
2006/12/10(日) 17:50:590870デフォルトの名無しさん
2006/12/10(日) 17:53:510871デフォルトの名無しさん
2006/12/10(日) 17:57:370872デフォルトの名無しさん
2006/12/10(日) 18:39:130873デフォルトの名無しさん
2006/12/10(日) 18:50:24> アホか。プロトコルとしてのsmbの話してるんだったらそれこそ関係ねぇだろ。
> クライアント内でファイルをどう扱うかの話なんだから。
だからオフラインファイルだけじゃまいかと言ってるのに
> なんでも、ネットワーク
> 上のものだからいつアクセスできなくなるかわかったもんじゃないし、
> 第一、ファイルI/Oがある度にネットワーク経由のアクセスしてたんじゃ
> パフォーマンスが最悪になるとかで、ネットワーク上のファイルが開かれる
> 場合はとにかくいったんファイル全体をダウンロードしてしまうらしい。
とかオフラインファイルの説明そのものだし。
0874デフォルトの名無しさん
2006/12/10(日) 21:26:37もうだめだ
おしまいだ
しぬしかない
0875デフォルトの名無しさん
2006/12/10(日) 21:41:33なんでここまでもったのか分らん。
0876デフォルトの名無しさん
2006/12/10(日) 21:46:280877デフォルトの名無しさん
2006/12/10(日) 22:10:400878デフォルトの名無しさん
2006/12/10(日) 23:13:10> アホか。プロトコルとしてのsmbの話してるんだったらそれこそ関係ねぇだろ。
どのプロトコルでアクセスするかによって処理が違うのですけど、ご存じない?
0880デフォルトの名無しさん
2006/12/11(月) 04:12:43まあインジェクトしてプロセス情報取得でもいけるから、さほど難しくはないよね。
0881デフォルトの名無しさん
2006/12/11(月) 17:29:38マウスボタンの状態を得る方法はありませんか?
イベントハンドラを捕らえるしかないですか?
0882デフォルトの名無しさん
2006/12/11(月) 17:34:300883720
2006/12/11(月) 22:03:49ダイアログボックスをメインにするにはどうすればいいでしょうか?
”ファイル名を指定して実行”のウインドウみたいにタスクバーに表示されず
ダイアロボックスを表示させたいです。
0884デフォルトの名無しさん
2006/12/11(月) 22:08:580885720
2006/12/11(月) 22:43:140886デフォルトの名無しさん
2006/12/11(月) 23:04:30何かおススメの参考書はありますか?
とりあえずWin32APIオフィシャルリファレンス改訂3版グラフィック・GUI編は購入しました
具体的には以下のサイトにあるようなアプリケーションを作成したいと思ってます
http://www.cs.washington.edu/homes/yangli/research/sketchpoint/
0887デフォルトの名無しさん
2006/12/11(月) 23:25:42ペイントならMSDNのサンプルにあったような気がする
0888デフォルトの名無しさん
2006/12/12(火) 03:33:130889デフォルトの名無しさん
2006/12/12(火) 06:23:39んなこたぁ無いから、黙って>>720に付いてるレスを全部見るんだ
0890デフォルトの名無しさん
2006/12/12(火) 10:45:53Advanced Windows
MSDNライブラリ
以外でWin32API、SDKプログラミングを学ぶ上で日本語なおすすめ良書教えてください。
0891デフォルトの名無しさん
2006/12/12(火) 10:52:350892デフォルトの名無しさん
2006/12/12(火) 11:00:27てかプログラミングWindowsで何の不満が‥‥
あとはMFCやVCLのソースくらいじゃないか?日本語じゃないけど。
0893デフォルトの名無しさん
2006/12/12(火) 11:00:30>Advanced Windows
>MSDNライブラリ
これだけやったらあとは自分で判断できるだろう
その本持て余すようだったら向いてないからあきらめた方がいい。
0894デフォルトの名無しさん
2006/12/12(火) 11:09:06猫シリーズも読みました
丁寧な本だとおもった
>>893
えらく厳しいですね
ほかになんかイイ本ないかなーとおもってきいてます
ある程度読んで実践できるようになったから
0895デフォルトの名無しさん
2006/12/12(火) 11:18:58このスレと過去スレ
0896デフォルトの名無しさん
2006/12/12(火) 11:29:210897デフォルトの名無しさん
2006/12/12(火) 11:34:02基礎はできてるみたいだから作りたいもの作れ
その都度MSDN等を参照しつつ覚えていけばいい
0898デフォルトの名無しさん
2006/12/12(火) 11:38:040899890
2006/12/12(火) 11:39:33みたよ
Amazon見てたときは
Windows Server2003完全技術解説
インサイドMicrosoft Windows
Win32システムサービスプログラミング
とかをよもうとおもいましたがどんなもんでしょ
>>896
みんなどんなのよんでんのかなーとかいうレベルの質問ですよ
>>897
やっぱそうなりますよね
通勤長いんで(90分)本読むんですが、そのとき読みたいなーというかんじ
>>898
想像におまかせ
0900デフォルトの名無しさん
2006/12/12(火) 12:10:15批判じゃないけどなんか漠然としてるんだよね
俺も楽しい本探すことが半ば趣味だからこの手のレス書いてみたいともったことはあるし
でも>>892の言うとおりで、ある程度知識吸収すると、
もうテクニック的には適当なソース読むのぐらいしかないんだよね
で、WTLとかWineとかおもしれーぞ、と
始発で座れるならノートにソース落としておくと退屈しねーぞ、と
0901デフォルトの名無しさん
2006/12/12(火) 12:53:090902デフォルトの名無しさん
2006/12/12(火) 15:48:250903デフォルトの名無しさん
2006/12/12(火) 16:37:53俺...orz
0904デフォルトの名無しさん
2006/12/12(火) 17:14:17何か実用的なプログラムのソースコードを読むのはどうかな。
数百〜数千行がいいかな。
きっと本を読んだ程度じゃスッと理解できない事が出てくるよ。
本のサンプルには載らないようなテクニックとかも学べそうだし。
0905デフォルトの名無しさん
2006/12/12(火) 18:00:10部分の勉強もいいいけどスレ違いだな。
0906デフォルトの名無しさん
2006/12/12(火) 18:45:29本は読まないよ。
本に載る程度の簡単な内容ならネット上にごろごろ解説サイトがあるし。
詳しさを求めるならMSDN読むし。
0907デフォルトの名無しさん
2006/12/12(火) 18:46:17このソースは読んどけ、みたいなお勧めはありますか?
0908デフォルトの名無しさん
2006/12/12(火) 19:53:14何のためにプログラムを勉強するのかにもよる
目的すら無いならやめちまえ
0909デフォルトの名無しさん
2006/12/12(火) 19:58:050910デフォルトの名無しさん
2006/12/12(火) 20:15:260911デフォルトの名無しさん
2006/12/12(火) 20:39:020912デフォルトの名無しさん
2006/12/12(火) 21:03:560913デフォルトの名無しさん
2006/12/12(火) 21:33:120914デフォルトの名無しさん
2006/12/13(水) 00:19:040915デフォルトの名無しさん
2006/12/13(水) 01:14:41俺と同じ事してる奴がいるとはwwwwwwwwww
引数付関数なんてほとんど作ってなかった俺wwwwwwwww
0916デフォルトの名無しさん
2006/12/13(水) 08:30:44メッセージの処理をどうやってたのか疑問
0917デフォルトの名無しさん
2006/12/13(水) 08:43:39自前でループ回して
GetAsyncKeyStateとか使ってたんじゃないのw
WM_CLOSE拾えないから少なくともクローズボックスは反応しないな。
0918890
2006/12/13(水) 08:52:35なるほど。プログラミングWindowsやAdvancedWindowsみたいな入門書ではなく、
入門書の次に読むような本を期待していたんですがないんですね。
Windows、SDKとかの知識を深めようとおもったら、MSDN読み、人のソース読みしかなくなるっぽいので、
通勤にノートPCの導入を考えてみます。参考になりました。ありがとうございます。
0919デフォルトの名無しさん
2006/12/13(水) 09:02:53>>918
もう知ってるとおもうけどMSDNは日本語でおkな文面が多いから読むには結構気合が居るぞ。
あとこれは個人的な意見でしかないから深く考えないで欲しいんだが
電車の中とかでノート開いてる人ってキモくないか…?
0920デフォルトの名無しさん
2006/12/13(水) 09:13:58ぁぁ、キモイとおもう。けど、知識はほしいから天秤にかけたら知識に成った。
すでにDELLに発注してしまった。自分のキモサが+1された。
0921デフォルトの名無しさん
2006/12/13(水) 09:23:31あどばんすどういんどうずハにゅうもんしょデス
ほんとうニミタコトアリマスカ
かくしょうのタイトルをみてみましょう
0922デフォルトの名無しさん
2006/12/13(水) 12:10:52SetWindowsHookExとWH_CALLWNDPROCを使ってよそのプロセスに送られるメッセージを
見ることができるようになったのですが、この方法だとメッセージを見るだけで変更することが出来ません。
一部のメッセージ(WM_KILLFOCUS)が渡されることを阻止したいのですが、どうすればいいでしょうか?
0923デフォルトの名無しさん
2006/12/13(水) 12:21:22WH_CBTを使うとか
0924デフォルトの名無しさん
2006/12/13(水) 12:55:460925デフォルトの名無しさん
2006/12/13(水) 12:58:02やったことないけど
0926デフォルトの名無しさん
2006/12/13(水) 14:18:14WH_GETMESSAGEならできたと思うけど
0927デフォルトの名無しさん
2006/12/13(水) 15:14:23探したのですが見つかりません。どこにあるんでしょ・・・。(環境:Vista)
0928デフォルトの名無しさん
2006/12/13(水) 16:18:030929デフォルトの名無しさん
2006/12/13(水) 16:20:380930デフォルトの名無しさん
2006/12/13(水) 16:22:400931デフォルトの名無しさん
2006/12/13(水) 16:44:120932デフォルトの名無しさん
2006/12/13(水) 17:00:160933デフォルトの名無しさん
2006/12/13(水) 17:05:040934デフォルトの名無しさん
2006/12/13(水) 17:09:250935デフォルトの名無しさん
2006/12/13(水) 17:26:17サービス(違うユーザー)からのEnumWindows等はできなくなったんじゃない?
0936デフォルトの名無しさん
2006/12/13(水) 17:35:11クラス名も可変ってwwww
何言ってんだwwww
それとも、vistaから可変になったのか?
0937デフォルトの名無しさん
2006/12/13(水) 17:42:080938デフォルトの名無しさん
2006/12/13(水) 17:46:360939デフォルトの名無しさん
2006/12/13(水) 17:49:360940デフォルトの名無しさん
2006/12/13(水) 17:58:36GetWindowRectで取得したRect.Left及び、Rect.Topは、ウインドウの左上のようです。
クライアント内の座標がほしいです。
0941デフォルトの名無しさん
2006/12/13(水) 18:01:000942デフォルトの名無しさん
2006/12/13(水) 18:02:17GetWindowRectに対して、ゲットクライアントレクト(つづり忘れた)があるよ。
0943デフォルトの名無しさん
2006/12/13(水) 18:05:470944デフォルトの名無しさん
2006/12/13(水) 18:06:03ClientToScreenに、0, 0 の座標を渡せばいいんですね。
なあんだ、こんなことか。
0945デフォルトの名無しさん
2006/12/13(水) 18:09:51GetClientRectの結果を渡した方が、何かあった時困らなくていいと思うけどな
0946デフォルトの名無しさん
2006/12/13(水) 18:15:25フックして潜り込んだ後、サブクラス化してしまえばどうにでもなるのでは?
0948デフォルトの名無しさん
2006/12/13(水) 22:41:30どうもVistaで動作しません。
対策を御存知の方はいらっしゃらないでしょうか。
SHELLEXECUTEINFO sei;
ZeroMemory(&sei, sizeof(sei));
sei.cbSize = sizeof(sei);
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.hwnd = 0;
sei.lpVerb = "open";
sei.lpFile = FileName;
sei.lpParameters = NULL;
sei.lpDirectory = NULL;
sei.nShow = SW_NORMAL;
ShellExecuteEx( &sei );
FileNameが".\\xxx.txt"だとしっかりメモ帳が開きますが、
FileNameが".\\xxx.html"だとIEが開いてくれない。。
0949デフォルトの名無しさん
2006/12/13(水) 22:42:470950デフォルトの名無しさん
2006/12/14(木) 00:24:50verbが"open"で登録されてないんじゃないか?
sei.lpVerb = NULL;
で、やってみ?
0951デフォルトの名無しさん
2006/12/14(木) 01:02:220952デフォルトの名無しさん
2006/12/14(木) 01:26:52sei.lpIDList
0953デフォルトの名無しさん
2006/12/14(木) 01:28:38WM_CLOSE、WM_COMMANDを拾えないのホント不便だよな。
0954デフォルトの名無しさん
2006/12/14(木) 01:30:07omanko.cppをよく見ろ
#if AGE <= SYOUGAKUSEI
#include "ochinchin.h"
#else
#error doutei ga yurusareru noha syougakusei made dayone
#endif
0955デフォルトの名無しさん
2006/12/14(木) 09:05:51で、LISTBOXにアイテムを追加したいのですが、
Windowプロシージャの中に書かないとLISTBOXにアイテムが追加されません。
Windowプロシージャの外からはできないのでしょうか
0956デフォルトの名無しさん
2006/12/14(木) 10:07:32その場合ちゃんとウィンドウハンドルはとれてるのか?
0957デフォルトの名無しさん
2006/12/14(木) 10:40:57コンソールアプリを実行して、コンソールに表示される文字列を拾ってくるには
どうやったらいいのでしょうか?
0958デフォルトの名無しさん
2006/12/14(木) 11:01:53パイプ
0959デフォルトの名無しさん
2006/12/14(木) 13:48:220960デフォルトの名無しさん
2006/12/14(木) 13:51:340961デフォルトの名無しさん
2006/12/14(木) 13:57:140962デフォルトの名無しさん
2006/12/14(木) 13:59:43>httpプロトコルに関連付けられたブラウザ
意味不明
0963デフォルトの名無しさん
2006/12/14(木) 14:02:03例えば
ShellExecute(NULL, "open", "http://www.google.co.jp/", NULL, NULL, SW_SHOWNORMAL)
ってやったら漏れの場合operaが開くんですが、
開く前にどのブラウザが関連付けられているか調べたいのです。
0964デフォルトの名無しさん
2006/12/14(木) 14:10:32HKEY_CLASSES_ROOT\http\shell\open\command
HKEY_CLASSES_ROOT\http\shell\open\ddeexec\Application
このへん
0965デフォルトの名無しさん
2006/12/14(木) 14:21:38ありが�d�d�d
0966デフォルトの名無しさん
2006/12/14(木) 14:36:57レジストリのHKEY_CLASSES_ROOT\http\shell\openとかいう部分は
95からvistaまで同じなんだろうか?
0967デフォルトの名無しさん
2006/12/14(木) 14:46:36それ、試してから言ってる?
ローカルの.htmlならそれでいけるだろうけどねー
0968デフォルトの名無しさん
2006/12/14(木) 14:51:000969デフォルトの名無しさん
2006/12/14(木) 16:37:15HKEY_CLASSES_ROOT\htmlfile\shellの既定の値も見ないと。
0970デフォルトの名無しさん
2006/12/14(木) 16:39:21HKEY_CLASSES_ROOT\HTTP\shellの既定の値。
0971デフォルトの名無しさん
2006/12/14(木) 17:15:28hWndが適切な値になってないだけとか。
0972デフォルトの名無しさん
2006/12/14(木) 17:32:49>>963は"open"と指定してるから既定値みる必要ないんでない?
0973デフォルトの名無しさん
2006/12/14(木) 22:02:58教えていただけませんか?
エクセルでいうなら一番上のA,B,Cとかいう選択できるタブみたいな奴なんですが
うまく言葉で表せれないorz
0974973
2006/12/14(木) 22:19:08http://chiffon.ty.land.to/src/Chiffontea0457.bmp
0975デフォルトの名無しさん
2006/12/14(木) 22:23:03ListViewでググれ
0976デフォルトの名無しさん
2006/12/14(木) 22:26:52ヒント: ウィンドウステーションとデスクトップ
0979デフォルトの名無しさん
2006/12/15(金) 08:48:46というか、されると思うのですが、それって、直ぐに再利用の対象になるのでしょうか?それともずっと後になるのでしょうか?
0980デフォルトの名無しさん
2006/12/15(金) 09:42:300981デフォルトの名無しさん
2006/12/15(金) 10:54:23システムによるし、そういうのを前提としたものを作ってはいけない
0982デフォルトの名無しさん
2006/12/15(金) 14:59:13Microsoft is conducting an online survey to understand use of MSDN Online.
We’d like to see which pages you visit today and then have you complete a
survey when you leave MSDN Online. Would you like to participate?
ってウインドウが突然上から降りてきて死ぬほどびびった〜
ええかげんにせえよ心臓止まるかと
0983デフォルトの名無しさん
2006/12/15(金) 15:14:07項目がダブルクリックされたときにだけイベントを発生させるにはどうすればいいのでしょうか
0984デフォルトの名無しさん
2006/12/15(金) 15:31:53LBN_DBLCLK
0985デフォルトの名無しさん
2006/12/15(金) 15:41:42case WM_COMMAND:
switch(LOWORD(wParam)) {
case .....
となっているのですが、switch(LOWORD(wParam)){
のcaseに
case LBN_DBLCLKを書くんですか?
それとも、case リスト:内にif文を書くんですか?
0986デフォルトの名無しさん
2006/12/15(金) 15:50:320987デフォルトの名無しさん
2006/12/15(金) 16:54:280988デフォルトの名無しさん
2006/12/15(金) 17:19:58>>990
次スレよろしく
0989デフォルトの名無しさん
2006/12/15(金) 17:20:370990デフォルトの名無しさん
2006/12/15(金) 17:41:42Win32API質問箱 Build48
ttp://pc8.2ch.net/test/read.cgi/tech/1166172047/
0991デフォルトの名無しさん
2006/12/15(金) 17:49:280992979
2006/12/15(金) 17:51:29デバッガなどで表示して、しばらく確認した感じだと、
うちの環境(XP SP2)では、再利用されているのは無かったんですが、
そのへんの仕様が知りたいなと思いまして・・・
>>981
ごもっともです。。
他プロセスのウィンドウを区別するのに、一番手軽なので、
ウィンドウハンドルをキーにしていたのですが、考え直そうと思います。
今後の参考に、「システムによる」の部分を教えていただけると嬉しいです。
0993デフォルトの名無しさん
2006/12/15(金) 18:33:350994デフォルトの名無しさん
2006/12/15(金) 18:40:50Win16とWin32でメモリ空間の扱いがかわったからね。
0995デフォルトの名無しさん
2006/12/15(金) 20:16:18GetWindowThreadProcessId()
ただしIDもプロセスが終了してすべてのハンドルが閉じられると再利用されるので
それが困る場合はプロセスハンドルを1つは開いておくように
0996デフォルトの名無しさん
2006/12/15(金) 20:53:140997デフォルトの名無しさん
2006/12/15(金) 20:56:330998デフォルトの名無しさん
2006/12/15(金) 20:59:040999デフォルトの名無しさん
2006/12/15(金) 21:01:081000デフォルトの名無しさん
2006/12/15(金) 21:07:2210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。