5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Win32API質問箱 Build47

1 :デフォルトの名無しさん:2006/11/13(月) 08:56:12
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

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

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

2 :デフォルトの名無しさん:2006/11/13(月) 08:57:14
46 ttp://pc8.2ch.net/test/read.cgi/tech/1159158014/
45 ttp://pc8.2ch.net/test/read.cgi/tech/1156032806/
44 ttp://pc8.2ch.net/test/read.cgi/tech/1151501925/
43 ttp://pc8.2ch.net/test/read.cgi/tech/1148005509/
42 ttp://pc8.2ch.net/test/read.cgi/tech/1144962549/
41 ttp://pc8.2ch.net/test/read.cgi/tech/1141392216/
40 ttp://pc8.2ch.net/test/read.cgi/tech/1138893959/
39 ttp://pc8.2ch.net/test/read.cgi/tech/1136673250/
38 ttp://pc8.2ch.net/test/read.cgi/tech/1133798345/
37 ttp://pc8.2ch.net/test/read.cgi/tech/1131884991/
36 ttp://pc8.2ch.net/test/read.cgi/tech/1128951330/
35 ttp://pc8.2ch.net/test/read.cgi/tech/1125850096/
34 ttp://pc8.2ch.net/test/read.cgi/tech/1122723009/
33 ttp://pc8.2ch.net/test/read.cgi/tech/1120153520/

3 :デフォルトの名無しさん:2006/11/13(月) 08:57:45
32 ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/
31 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
30 ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
29 ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
28 ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
27 ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
26 ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
25 ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
24 ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
23 ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
22 ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
21 ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
20 ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
19 ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
18 ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
17 ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
16 ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/★
15 ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/★
14 ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
13 ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
12 ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
11 ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
10 ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
9 ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
8 ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
7 ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
6 ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
5 ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
4 ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
3 ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
2 ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
1 ttp://pc.2ch.net/tech/kako/991/991576947.html

4 :デフォルトの名無しさん:2006/11/13(月) 08:58:22
- MSDN ホームページ
http://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/
- Google
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

5 :デフォルトの名無しさん:2006/11/13(月) 09:14:06
勝手に追加

MSDN日本語版は誤訳があったり、一部欠けていたりするなど不完全なため、英語版推奨。
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/

6 :デフォルトの名無しさん:2006/11/13(月) 10:08:02
これも

MSDN ライブラリ 2006年8月版
http://www.microsoft.com/downloads/details.aspx?FamilyID=6671F8DA-B0CB-41DE-AD93-798FC71D344D&displaylang=ja

7 :デフォルトの名無しさん:2006/11/13(月) 10:21:14
プリンタとFAXを開くのは、
>CreateProcess()で"c:\windows\system32\control.exe printers"をキックる
でできました。

次に、デフォルトプリンタの印刷設定プロパティを開く方法を教えて下さい。


8 :デフォルトの名無しさん:2006/11/13(月) 12:42:49
>>7
うっきききー!!
(DocumentProperties関数じゃないっけ?)

9 :7:2006/11/13(月) 12:44:19
DocumentProperties関数でやったところ、Windowsに保存されませんですた。

で、あきらめて、シェルのコマンドラインでWindowsに起動&保存を丸ごとお願いしようかな、と。

10 :7:2006/11/13(月) 12:45:46
ttp://support.microsoft.com/kb/167345/ja

このソースでやってみましたが、保存されないんです><

11 :デフォルトの名無しさん:2006/11/13(月) 13:07:25
>>7
またそれか
printui.dll PrintUIEntryでできるんじゃないの?

12 :7:2006/11/13(月) 13:57:31
>printui.dll PrintUIEntry

ファイル名を指定して実行、で上手く動きません><

13 :デフォルトの名無しさん:2006/11/13(月) 14:11:37
>>7
rundll32 printui.dll,PrintUIEntry /e /n"(標準のプリンタ名を取得してここに入れる)"
罵倒と煽りは面倒なので省略

14 :デフォルトの名無しさん:2006/11/13(月) 14:38:09
UNICODE や _UNICODE 定義済でコンパイルされたバイナリ(W系API使ってるって意味?)は
9xでは起動すらしないんでしょうか? 
よく「対応していない」って表現されてるんですがもってないのでよくわからないです

15 :デフォルトの名無しさん:2006/11/13(月) 15:07:05
>>14
CreateFile関数の場合#defineでCreateFileAとCreateFileWを振り分けている。
意図してCreateFileWを利用すると起動時にDLLエラーが出ると思う。

16 :7:2006/11/13(月) 15:25:20
上手くいきました、有難うございました>>13


ttp://support.microsoft.com/kb/167345/ja

最後の最後ですが、このソースでPCの設定変更出来た方ありますか?

全然上手く行かないお。

17 :デフォルトの名無しさん:2006/11/13(月) 15:26:21
複数あるWindowからIEのWindowを絞り出し、そのHTMLDocumentを抜き出すという
事をしたいのですが、その方法で煮詰まっています。

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内のオブジェクトを取得する
方法が分からなくて困っています。
どなたかご教授していただけませんでしょうか?よろしくお願い致します。
※板違いだったらすいません。。。

18 :デフォルトの名無しさん:2006/11/13(月) 15:40:30
>>15サンクス
9xのDLLはW系をエクスポートしてないってことか

19 :デフォルトの名無しさん:2006/11/13(月) 15:54:43
>>14>>18
エントリポイントはあるので、プログラムの起動はできる。
しかし中身がなく、W版関数を呼び出すと失敗となって帰ってくる。
GetLastError()を呼ぶとERROR_CALL_NOT_IMPLEMENTEDが返ってくることがある。

Programming WindowsかAdvanced Windowsのどっちかでは、
MessageBoxWが9xにも実装されていることを使って、RegisterClassが失敗したら
MessageBoxで9xに対応していないというメッセージを表示するというコードを使っていた。

また、Microsoft Layer for Unicodeを使えば、9xでもW版APIを使えるようになる。
実態は文字列を変換してA版APIを呼ぶラッパだったと思う。

20 :デフォルトの名無しさん:2006/11/13(月) 16:07:12
なんで9XはW系サポートしないの?

あほじゃね?

21 :デフォルトの名無しさん:2006/11/13(月) 17:03:22
>>17
http://www.google.co.jp/search?sourceid=navclient&ie=UTF-8&q=IE+Iunknown+AtlAxGetControl

22 :デフォルトの名無しさん:2006/11/13(月) 17:13:35
つまらない質問だが
今画面に

 A  B  C  D

と表示されてるとする
設定によってはCとDは不必要なのでSetWindowPos()を使って画面サイズを変更して

見えてる   隠れている
 A B  | C D

として隠して無かったことにして処理を続けてしまうのはテクニック的に有り?

23 :デフォルトの名無しさん:2006/11/13(月) 17:15:14
ヒント:ダブルディスプレイ

24 :デフォルトの名無しさん:2006/11/13(月) 17:23:14
ヒントの意味がわからない

orz

25 :23:2006/11/13(月) 17:25:42
ごめん、画面の位置を右にして画面からはみ出させるのと勘違いした。
サイズ変更なら大丈夫かも。





変だけど

26 :デフォルトの名無しさん:2006/11/13(月) 17:33:30
>>23
やっぱり変か・・・

ダイアログベースなのだが
WM_CREATE:のタイミングで設定用ダイアログを出して、
その内容によってメインウィンドウのダイアログの内容を変えるって可能?



27 :デフォルトの名無しさん:2006/11/13(月) 18:11:30
>>22
俺ならShowWindow(SW_HIDE)で隠す。

28 :デフォルトの名無しさん:2006/11/13(月) 18:14:51
ダイアログの実サイズってフォント設定によって違うから
動的にウィンドウサイズいじるのは面倒なんだよね。
俺は外見を切り替えるときは、ダイアログそのものを
切り替えるようにしている。

29 :デフォルトの名無しさん:2006/11/13(月) 18:33:52
>>28
フォントによって表示が変わるのか・・・

エントリポイントでCreateDialog()したダイアログの内容を途中から切り替える方法
もしくはそれ以前に設定値を入力できる方法
ってありますかね・・・?

30 :デフォルトの名無しさん:2006/11/13(月) 19:13:38
> 9xでW系
MSLU使えばいろいろ問題はあるけど一応動くよ。

31 :デフォルトの名無しさん:2006/11/13(月) 19:54:49
もう面倒だからCHtmlDialogでいいじゃないか、と。Win32APIじゃないが。

32 :tsurarete yarou.:2006/11/13(月) 21:54:57
>>20
今時 9x ?

貧乏なの?

33 :デフォルトの名無しさん:2006/11/13(月) 22:30:46
CreateProsecceでできたプロセスIDから
OpenProsecceでハンドルは取得できないの?

34 :デフォルトの名無しさん:2006/11/13(月) 22:41:54
>>32
貧乏言うなー!って、俺は20じゃねぇけど、未だに Win98 や WinMe 使ってるヤツって結構居るらしいぞ。
一般的なコンシューマなユーザはウェブブラウザとメーラが使えりゃそれで充分だしなぁ。
で、そういうマシンがボットネットの温床と化していたりもするらしい。

35 :デフォルトの名無しさん:2006/11/13(月) 23:03:19
名前とかに予防線貼ってあるあたり
余程喰らいつきたかったんだろうから
そっとしておいてあげなよw

36 :デフォルトの名無しさん:2006/11/13(月) 23:04:51
>>33
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/process_information_str.asp
CreateProcess が返してくるのはプロセスIDでは無くプロセスハンドル。

37 :デフォルトの名無しさん:2006/11/13(月) 23:13:24
ウィルス対策ソフトも、9x系は非対応になってきてるしなあ。
早くLinux陣営がそういうユーザを取り込んでくれればいいのに。もっと頑張れ。

38 :デフォルトの名無しさん:2006/11/13(月) 23:18:36
>>36
あれ、ハンドル??
ハンドルだったの?

確かに、
BOOL TerminateProcess(
HANDLE hProcess,
UINT uExitCode
);

とかって、ゆってるけど、よく見るとハンドル?!


すっげぇ衝撃だ!

39 :デフォルトの名無しさん:2006/11/13(月) 23:56:32
つっこむところなのか?

40 :764:2006/11/14(火) 00:13:40
>>22 ChooseColor

41 :デフォルトの名無しさん:2006/11/14(火) 05:01:55
>>37
最近のLinuxはカーネルだけじゃなくていろんなもんがごてごてしすぎて、
9xの代わりにはならなそう。

42 :567:2006/11/14(火) 05:53:02
                             |
                             |
       {    !      _,, -ェェュ、   |
ィ彡三ミヽ  `ヽ     ,ィハミミミミミミミミミヽ、|
彡'⌒ヾミヽ   `ー  /ililハilミilミliliミliliミ.  |
     ヾ、        /iiiiイ!ヾヾミ、ミニ=ー-ミ |
  _    `ー―' i!ハ:.:.\\_::::::::::::::/:.|
彡三ミミヽ        i! ヽ:.:.:.:冫': : :::/,,∠|
彡'   ヾ、    _ノ i!::: ̄二ー:: : ::::ソ ・ ,|
      `ー '    {ヘラ' ・_>シ;テツ"''''"|
 ,ィ彡三ニミヽ  __ノ ヽヘ`" 彡' 〈     |
彡'      ` ̄       `\   ー-=ェっ |
      _  __ ノ  {ミ;ヽ、   ⌒   |
   ,ィ彡'   ̄        ヾミミミミト-- '  |
ミ三彡'        /⌒ / ̄ ̄ | : ::::::::::|
       ィニニ=- '     / i   `ー-(二つ
     ,ィ彡'         { ミi      (二⊃
   //        /  l ミii       ト、二)
 彡'       __,ノ   | ミソ     :..`ト-'
        /          | ミ{     :.:.:..:|

43 :デフォルトの名無しさん:2006/11/14(火) 07:02:52
私鉄?

44 :デフォルトの名無しさん:2006/11/14(火) 10:07:58
オーバーレイ周りはおいといて
拡張子ごとではなくファイルごとにアイコンが変化しうるものって
.lnk .exe .ico, フォルダ以外にありますか?
また、これのリストを厳密に取得することは出来ますか?

45 :デフォルトの名無しさん:2006/11/14(火) 10:47:04
はい
はい

46 :デフォルトの名無しさん:2006/11/14(火) 13:47:34
BMPファイルの読み込みと表示をするプログラム↓
ソース→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
このプログラムを動かしたいのに出来ない。
実行できるけど画像読み込みのところで止まる。画像を小さくすればなぜかそのまま
進むけど画像表示されず。
なんで?


47 :デフォルトの名無しさん:2006/11/14(火) 14:08:39
適当にいってみるとdeleteのタイミングが怪しい

48 :デフォルトの名無しさん:2006/11/14(火) 14:16:05
delete 後に値参照かましてるな。
 |delete pIn;
........
 |width=pH->biWidth;

49 :デフォルトの名無しさん:2006/11/14(火) 14:22:51
そうでした。
47,48の人ありがとう!

50 :デフォルトの名無しさん:2006/11/14(火) 14:37:36
deleteに[]つけなくていいんだっけ?

51 :デフォルトの名無しさん:2006/11/14(火) 14:40:09
この場合は結果的にセーフだろうけど… [] つけるべきだろうな。

52 :デフォルトの名無しさん:2006/11/14(火) 14:46:25
質問者があほしてるんじゃなくて、サンプルソースに非があるケースってのも珍しいな('A`)

53 :デフォルトの名無しさん:2006/11/14(火) 14:52:38
入力データは用済みってコメントの次の行で使ってるからな・・・

54 :デフォルトの名無しさん:2006/11/14(火) 18:58:50
配列をnewするようなソースは古い。

55 :デフォルトの名無しさん:2006/11/14(火) 19:04:21
>>54
STL と WinAPI 相性悪そうな組み合わせだけど、実際のトコロどうなん?

56 :デフォルトの名無しさん:2006/11/14(火) 19:25:16
このネタスレ違いだろ

57 :デフォルトの名無しさん:2006/11/14(火) 19:25:20
STLは内部でnewしてるしな
newせず動的にメモリー確保する新しい方法って何だ?
gcnew?

58 :デフォルトの名無しさん:2006/11/14(火) 19:42:18
おや?アロケータの存在を知っていれば、
「STLは内部でnewしてる」などという(ry

59 :デフォルトの名無しさん:2006/11/14(火) 20:09:47
黙ってLoadImage使っとけってこった

60 :デフォルトの名無しさん:2006/11/14(火) 20:34:03
>>55
std::basic_stringが文字列を受け取るバッファに使えないのが痛い。

61 :デフォルトの名無しさん:2006/11/14(火) 20:51:30
気にせずstd::vector<TCHAR>でGO

62 :デフォルトの名無しさん:2006/11/14(火) 21:39:16
>>44
他にもいろいろあります。

調べる方法としてはレジストリのDefaultIconキーとshellex¥IconHandlerキーをチェックします。
「DefaultIconキーに%1が*含まれて*いる」もしくは「shellex¥IconHandler キーがあれば」、
ファイル毎にかわるもんだと思っていいです。

63 :デフォルトの名無しさん:2006/11/14(火) 22:18:24
モーダルダイアログ内でキーボードフォーカスを持つコントロールを調べるAPIってありませんか?
GetFocusはNULLが帰ってくるので・・・

64 :デフォルトの名無しさん:2006/11/14(火) 22:35:01
>>63
> 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.

65 :デフォルトの名無しさん:2006/11/14(火) 22:35:13
GetFocusだが。

66 :デフォルトの名無しさん:2006/11/15(水) 04:48:00
1000バイトのファイルがあるとして、先頭の100バイトを削って
900バイトのファイルにしたいんですが、どうやるのが最もよいでしょうか?

お願いします。


67 :デフォルトの名無しさん:2006/11/15(水) 05:21:10
切り取り線を入れる

68 :66:2006/11/15(水) 05:36:23
SetFilePointer()で一発でできたらうれしいんですが無理ですよね。

69 :デフォルトの名無しさん:2006/11/15(水) 06:04:19
読んで書くだけ

70 :66:2006/11/15(水) 07:32:56
すいません。もうひとつ質問があります。

WriteFileでファイルに書いている際、PCが落ちた場合、元のファイル
がどの程度まで壊れているかの情報ってありますでしょうか?

それとも全部壊れたとみなすべきでしょうか?

少なくとも、すでに存在していたファイルの場合で、そのファイルに
追加書き込みしていた場合、元のファイル分までは壊れてないと
みなしていいのでしょうか?


71 :デフォルトの名無しさん:2006/11/15(水) 07:51:17
俺には解答が分からないが
俺なら作業用のテンポラリファイル作って、作業が終わったら上書き保存する。

72 :デフォルトの名無しさん:2006/11/15(水) 08:16:11
ntfsなら壊れない

73 :デフォルトの名無しさん:2006/11/15(水) 15:58:11
>>66
SetEndOfFile

74 :デフォルトの名無しさん:2006/11/15(水) 16:02:24
まぁ
その時書いてた部分までは残ってるわな

75 :デフォルトの名無しさん:2006/11/15(水) 16:34:32
WriteFileしただけじゃ、バッファに書かれただけで、
実際にディスクに書かれてるかどうかは分からんけどナ

76 :デフォルトの名無しさん:2006/11/15(水) 20:33:07
>>72
NTFSはメタデータのジャーナルしか取らないよ。
だからファイルシステムが矛盾しないことは保証されるけど
ユーザーデータが壊れてないかどうかまではNTFSの関知するところではない

77 :デフォルトの名無しさん:2006/11/15(水) 20:33:40
>>73
先頭と末尾を取り違えてませんか

78 :デフォルトの名無しさん:2006/11/15(水) 21:15:05
ホントダー

79 :デフォルトの名無しさん:2006/11/15(水) 22:12:24
結論:NTFSは屑(pgr

80 :デフォルトの名無しさん:2006/11/15(水) 22:43:24
_beginthreadを使用しているコードはWM_CREATEを処理する時に_beginthreadを呼び出しているみたいですが、
ウィンドウプロシージャでスレッドを作成しないとダメなんでしょうか。

81 :デフォルトの名無しさん:2006/11/15(水) 22:47:49
そんなことはない。
そのプログラムではたまたまWM_CREATEのときに作る必要があっただけだろう。

82 :デフォルトの名無しさん:2006/11/15(水) 22:48:17
>>80
そのサンプルがたまたまWM_CREATEの処理中に _beginthread を使ってるだけ。
基本的にはどこでやってもええよ。

83 :デフォルトの名無しさん:2006/11/15(水) 23:14:22
>>81
>>82
ありがとうございます。

84 :デフォルトの名無しさん:2006/11/15(水) 23:43:27
どこでもいいわけではない。
DllMainや一部のコールバックでは制限されている。

85 :デフォルトの名無しさん:2006/11/15(水) 23:47:55
スレッドで実行してる長いループはちゃんと1000msでSleep呼び出してるのに、
肝心のWinMainがスレッド作成から動いていない・・・何故だ・・・。

86 :デフォルトの名無しさん:2006/11/15(水) 23:48:11
>>84
ソースきぼんぬ(死語?)

87 :デフォルトの名無しさん:2006/11/15(水) 23:53:51
きぼんぬ!出た!きぼんぬ出た!得意技!きぼんぬ出た!きぼんぬ!これ!きぼんぬ出たよ〜〜!

88 :デフォルトの名無しさん:2006/11/16(木) 00:12:05
>>87
俺は限界だと思った。

89 :デフォルトの名無しさん:2006/11/16(木) 01:14:04
XPまではデスクトップのlistviewのLVITEM.lParamにpidlが入ってたのに
Vistaじゃ入ってない?

90 :デフォルトの名無しさん:2006/11/16(木) 02:12:00
MSDNにそんなこと書いてあった?

91 :84ではない:2006/11/16(木) 02:28:16
記憶が確かならCOM関係の本で見かけたような。
具体的にはDLLを動的にロードしたあとDLL側が勝手にスレッドを作ったりして作られたスレッドが走ってる最中にアンロードされたりすると・・・
だったような・・・
・・・でCOMでスレッドを作りたい場合はプロセス内サーバは避けろとかあったような。
(とりあえずEffective COMの項目32で確認)


92 :デフォルトの名無しさん:2006/11/16(木) 06:40:53
Win32Apiの勉強をかねてVC2005EEでランチャーソフトを作ってます。

ボタンを押し、その状態のままボタン外へマウスをドラッグさせ、マウスのボタンを放すと
ボタンに登録したアイコンを消す。

という動作をさせようと思い "WM_LBUTTONDOWN" / "WM_LNCBUTTONDOWN" /
"WM_LBUTTONUP" / " WM_LNCBUTTONUP" で処理を書いてみたのですが。
どうもメインフォーム上でのみ反応し、ボタン上では反応しませんでした。

ボタンを対象に何かをしなくてはならないとは思うのですが
良い方法が思い浮かびません。アドバイスをお願いします。

93 :デフォルトの名無しさん:2006/11/16(木) 07:05:11
>>92
SetCapture

94 :デフォルトの名無しさん:2006/11/16(木) 07:08:52
つ SetCapture/ReleaseCapture

95 :デフォルトの名無しさん:2006/11/16(木) 07:14:05
>>93-94
ありがとうございます。
早速調べてみます。

96 :デフォルトの名無しさん:2006/11/16(木) 07:21:25
PtInRegionとの組み合わせで解決しそうですありがとうございました。



.NET Framework 2.0 廃止予定の API 一覧
ttp://www.microsoft.com/japan/msdn/netframework/programming/obsoleteapi/
他スレで見かけたので貼っておきますね。

97 :デフォルトの名無しさん:2006/11/16(木) 13:48:00
はじめまして、
C++Builderで画像処理ソフトを作っているものですが、
VideoForWindowsで動画をチャプチャしております。
そこで質問なんですが、

1.bmpを介さずに直接メモリにチャプチャする方法
2.動画の描画を行わずに画像を取得(表示すると遅くなるため)

を教えていただけませんか。
いろいろ調べてみたものの解決に至っていません。
DirectShowはちょっと難しかったので使っていません。
どうぞよろしくお願いいたします。

98 :デフォルトの名無しさん:2006/11/16(木) 14:04:09 ?2BP(200)
DirectShowの方が圧倒的に簡単。

99 :デフォルトの名無しさん:2006/11/16(木) 20:23:43
ttp://wisdom.sakura.ne.jp/system/winapi/win32/index.html
だとCでコンパイルしろっていってるけどC++でWin32APIは使えないの?
このサイトだけでの話?

100 :デフォルトの名無しさん:2006/11/16(木) 20:28:15
帰れ低脳
使える使えないを語る以前の問題じゃ

101 :99:2006/11/16(木) 20:33:25
自己解決したわ。そのサイトだけっぽい。
猫のとこなら.cppだったわ・・・

102 :デフォルトの名無しさん:2006/11/16(木) 20:40:23
絶対、注意書きの意味を理解してないな

103 :デフォルトの名無しさん:2006/11/16(木) 20:52:20
apiの勉強する前に
C/C++の基本を勉強する方が先みたいだな

104 :デフォルトの名無しさん:2006/11/16(木) 20:54:59
禿do

105 :デフォルトの名無しさん:2006/11/16(木) 21:31:53
CをC++でコンパイルするとパソコンが爆発するよ。

106 :デフォルトの名無しさん:2006/11/16(木) 21:44:09
マジで?やべーな・・・

107 :デフォルトの名無しさん:2006/11/16(木) 23:47:05
C++を学ぶと頭が禿げると聞いたのですが?

108 :デフォルトの名無しさん:2006/11/16(木) 23:58:32
そりゃコンパイラ開発者がアレだからなぁ

109 :デフォルトの名無しさん:2006/11/17(金) 00:01:04
Delphiばかりやってると馬鹿になると聞いたのですが?wwww

110 :デフォルトの名無しさん:2006/11/17(金) 00:04:01
俺はC++勉強し始めて10年後くらいから薄くなってきた。

111 :デフォルトの名無しさん:2006/11/17(金) 00:05:38
デルポイ

112 :デフォルトの名無しさん:2006/11/17(金) 00:17:45
>>110
勉強しなかった場合と比較できないので科学的実験結果としては有意でないと考えられる。

113 :デフォルトの名無しさん:2006/11/17(金) 12:57:59
カレントディレクトリに指定したファイル名のファイルが
存在するかを調べる関数がありましたら教えてください。

CreateFileとかで失敗したらとかでもできると思いますが、
正規のがありましたら教えてください。

114 :デフォルトの名無しさん:2006/11/17(金) 13:25:32
SearchPath
FindFirstFile

好きな方でどうぞ

115 :デフォルトの名無しさん:2006/11/17(金) 15:00:48
普通はopenでやっちゃうと思う。

116 :113:2006/11/17(金) 15:16:46
>>114>>115
ありがとうございます。使ってみます。

117 :デフォルトの名無しさん:2006/11/17(金) 16:39:28
絶対パスを相対パスに変換するAPIがあったら教えてください。

118 :デフォルトの名無しさん:2006/11/17(金) 16:42:27
PathMakeRelative

119 :デフォルトの名無しさん:2006/11/17(金) 16:48:43
PathRelativePathTo で出来そうです。
本当にありがとうございました。

120 :デフォルトの名無しさん:2006/11/17(金) 18:50:32
>>113
PathFileExists というズバリな関数がある

121 :デフォルトの名無しさん:2006/11/17(金) 19:21:57
>>120
知らなんだー
GetFileAttributes使ってた。


122 :デフォルトの名無しさん:2006/11/17(金) 23:41:07
おらもだ

123 :デフォルトの名無しさん:2006/11/17(金) 23:45:50
一応書いておくが、shlwapi.dllの関数で要IE4以上。

124 :デフォルトの名無しさん:2006/11/18(土) 00:33:17
#pragma comment(lib, "SHLWAPI.lib");

125 :デフォルトの名無しさん:2006/11/18(土) 01:36:31
shlwapiは便利だね
wsnprintfとかワイルドカードでのマッチングもたしかあの中だったよね?

126 :デフォルトの名無しさん:2006/11/18(土) 01:40:28
APIらしくGetProcAddressを使うんだよ!

やったことないけどさ

なぜかPath〜系は未だにMSDNが日本語じゃないんだよな
8月版になったからといって更新されるわけもなし

127 :デフォルトの名無しさん:2006/11/18(土) 01:49:24
ウィンドウズプログラムで質問したい事があります。
ググったのですがいまい解決できそうなページがありませんでした。
作っているのはアナログ時計です。
開発環境はVC++6.0 Proです。SDKで作っています。
丸いリージョンで表示した時計のウィンドウがあります。
ウィンドウのクライアント領域はマウスでドラッグして移動できるように
細工をしております。
アナログ時計のウィンドウをデスクトップ領域の上端より超えて移動すると
ウィンドウのキャプションが隠れるあたりでマウスのボタンを離すと
自動的にキャップションが少しだけ見える位置に移動してしまいます。
ウィンドウのクライアント領域でのマウスの移動が出来るのでできれば
デスクトップの上端から上へキャプションが隠れてもそのままウィンドウが
移動できるようにはできないでしょうか。
よろしくお願いします。

128 :デフォルトの名無しさん:2006/11/18(土) 02:29:18
>>127
よく分からんけど足りなさそうな情報を質問。
細工ってヒットテストにキャプションって返すやつ?

129 :127:2006/11/18(土) 02:46:30
ヒットテストでクライアント領域はキャプションとして返してます。
それによりウィンドウのクライアント領域をドラッグしてウィンドウを移動できます。

例えると以上の設定をして、普通のウィンドウのクライアント領域をドラッグして、
ウィンドウのキャプションをデスクトップの上端より隠れるように
ウィンドウを移動させると自動的にウィンドウがキャプションを少しだけ表示した状態に
なってしまうのです。それを移動してキャプションが隠れるようにしたいのです。

130 :デフォルトの名無しさん:2006/11/18(土) 07:25:34
ダイアログ上にグループボックスを配置し、その上辺に重なるように
チェックボックスを置いています。

表示すると、グループボックスのほうが上に来てしまうんですが、
どうすればチェックボックスを上に持ってこれますか?

たぶんZオーダーの問題だと思うんですが、以下のようにしても
うまくいきませんでした。

SetWindowPos(groupbox, checkbox, 0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

131 :デフォルトの名無しさん:2006/11/18(土) 08:01:48
>>130

132 :130:2006/11/18(土) 10:06:29
逆にしたらできました。orz

133 :デフォルトの名無しさん:2006/11/18(土) 13:39:41
今読んでる本には
『CreateSolidBrushで得たHBRUSH型変数は、不要になればDeleteObjectで破棄してください』
と書いてあるんですが、その本のサンプルプログラムでは破棄していないみたいなんです。
プログラムが終了すれば自動的に破棄されると考えれば、そのサンプルプログラムが破棄しないのも納得がいくのですが、
自動で破棄されるんでしょうか。

134 :デフォルトの名無しさん:2006/11/18(土) 13:46:46
プロセスが終了すると、そのプロセスが握っているリソースはすべて解放されるよ
他プロセスと共有している場合は参照カウンタが1減り、0になったらOSにより解放される

現存するメジャーなOSのほとんどはこうなってるよ

135 :デフォルトの名無しさん:2006/11/18(土) 14:11:19
プロセスが終了するか、DeleteObjectで明示的に破棄しないと解放されないから
プロセスが走ってる間にいくつも作っては捨てをする場合は要らなくなったらDeleteObjectした方がいいね
1個2個作ってそのままくらいなら、プロセス終了時のリソース解放に任せてもいい

136 :デフォルトの名無しさん:2006/11/18(土) 14:49:31
>>134>>135
ありがとうございました

137 :デフォルトの名無しさん:2006/11/18(土) 14:53:20
HFONTからLOGFONT取得って可能ですか? 
CreateFontIndirectの逆のことしたいんですけれども

138 :デフォルトの名無しさん:2006/11/18(土) 15:01:09
GetObject

139 :デフォルトの名無しさん:2006/11/18(土) 15:04:48
ぉぅぃぇ盲点だった  orz
ありがとう

140 :デフォルトの名無しさん:2006/11/18(土) 15:25:04
>>136
いちおう念を押しておくとWM_PAINTは再描画のたびに呼ばれるからな

141 :デフォルトの名無しさん:2006/11/18(土) 23:10:31
ウィンドウを作成して、タスクバーにそのウィンドウを表示させないように
したいのですが、どうしたら良いのでしょうか・・・

ツールウィンドウ を使うしか無いのでしょうか>< 
教えて下さいエロい人


142 :デフォルトの名無しさん:2006/11/18(土) 23:13:29 ?2BP(0)
>>141
不可視のオーナーウィンドウ

143 :デフォルトの名無しさん:2006/11/18(土) 23:24:28
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_TaskTray.html

144 :デフォルトの名無しさん:2006/11/18(土) 23:27:26
ありがとう >>142 >>143

解決出来ました。

145 :デフォルトの名無しさん:2006/11/19(日) 02:24:00
2つのpathが同じかどうか簡単に調べる方法はないでしょうか?


146 :デフォルトの名無しさん:2006/11/19(日) 02:44:04
GetVolumePathNameとGetVolumeInformationでボリュームが同じかどうか調べて
(同じボリュームでなければ当然同一パスでもない)
GetFileInformationByHandleでファイルIDを比較する。

147 :デフォルトの名無しさん:2006/11/19(日) 06:06:44
>>145
PathSearchAndQualifyとかPathCanonicalizeが使えないかな?

148 :デフォルトの名無しさん:2006/11/19(日) 07:32:00
ここかどうか分からないですが
ISUファイルの作り方ってどこかに載っていませんか?

149 :デフォルトの名無しさん:2006/11/19(日) 07:33:15
>ここかどうか分からないですが
質問がここで良いかどうか分からないという意味です。

150 :145:2006/11/19(日) 09:27:15
>>146,147
ありがとう。API調べてみます。

151 :デフォルトの名無しさん:2006/11/19(日) 09:36:23
>>148
一般的にアンインストール情報ファイルに付加される拡張子、らしいね。
インストーラ作ってるメーカに問い合わせてみれば?

152 :デフォルトの名無しさん:2006/11/19(日) 10:16:15
インストーラ作ってるメーカーって、ありゃMSインストーラ・・・

153 :デフォルトの名無しさん:2006/11/19(日) 11:08:39
再起動しないでアンインストールする方法がないかと思いまして。
BATファイルは自分自身を削除できますが、コマンドプロンプトが表示されてしまいます。

154 :Kioo:2006/11/19(日) 11:22:32
Dialogにあるエディットボックスの内容を入手して、char[]又はstringにいれたいのですが、
どうすればいいのでしょうか

155 :デフォルトの名無しさん:2006/11/19(日) 11:25:37
>>154
言語は?

156 :Kioo:2006/11/19(日) 11:34:35
すいません言語書き忘れました。
C++です。

157 :デフォルトの名無しさん:2006/11/19(日) 11:38:56
そのダイアログってのはどのダイアログなんだ

158 :Kioo:2006/11/19(日) 11:42:36
RCファイルで作ってあるダイアログで、

IDD_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のエディットボックスです。

159 :デフォルトの名無しさん:2006/11/19(日) 11:44:45
>>153
DELETE_ON_CLOSE付きCreateFileで
Tmp辺りにアンインストーラをコピーしてそれを起動する、だったと思う。
「アプリケーションの追加と削除」が微妙な動きをした記憶もあるけど(w

そうそう、削除する時は自分のアプリ関連のファイルのみを対象にする事。
誤って他のアプリやデータが入ったフォルダにインストールしていたら、
目も当てられない状態に。というか昔やっちゃったよ orz

160 :デフォルトの名無しさん:2006/11/19(日) 11:56:24
>>159
なるほど、目に付かない場所に作って後で消すように設定すれば同じですね。

>>158
MFCのCDialogの派生クラスでなら

CWnd* pWnd = GetDlgItem(IDC_EDIT_ID);
char buff[256];
CString str;

pWnd->GetWindowText(buff, 255);
pWnd->GetWindowText(str);

CStringとcharの配列に文字列が入ります。
ダイアログ表示中以外のタイミングですか?

161 :デフォルトの名無しさん:2006/11/19(日) 12:02:41
>>158
エディットボックスの内容が書き換えられた時に
GetWindowTextLength(GetDlgItem(IDC_EDIT_ID));で文字列の長さを取得
それに+1したサイズで、new char[]なりGlobalAllocなりでバッファを確保
GetWindowTextで文字列を取得する

stringが使いたかったら、さらにバッファからstringへ代入すればいい

162 :デフォルトの名無しさん:2006/11/19(日) 12:16:40
エディットボックスの入力できる文字数は最大255バイトとか制限あったっけ?

163 :Kioo:2006/11/19(日) 12:25:51
>>160
今はまだありませんが、ダイアログの下部にボタンをひとつおき、それが押されたら、文字列を変数に入れてダイアログを閉じるようにする予定です

164 :デフォルトの名無しさん:2006/11/19(日) 12:36:34
GetDlgItemText()ってのもあるよ

165 :デフォルトの名無しさん:2006/11/19(日) 13:27:57
const int len = GetWindowTextLength(hEdit) +1;
TCHAR* 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);

半ば定型文

166 :デフォルトの名無しさん:2006/11/19(日) 13:32:26
あ、stringのとこおかしいや コンパイル通してないから気付かんかったorz

167 :デフォルトの名無しさん:2006/11/19(日) 13:35:32
コンパイル通さんでも気付くような間違いだがよw

168 :デフォルトの名無しさん:2006/11/19(日) 14:35:57
>>159
FILE_FLAG_DELETE_ON_CLOSE だったんですね。ちょっと気が付きませんでした。

169 :デフォルトの名無しさん:2006/11/19(日) 15:49:02
しまった。APIスレなのにMFCで答えてしまった。MFCを使用している場合はこちら。
■MFC相談室 mfc16d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1146117893/

170 :デフォルトの名無しさん:2006/11/19(日) 17:14:47
PlaySoundで.wavを1回でも再生したプログラムを
終了する時についての質問です。

通常の閉じるをクリックしての終了、
右クリックした時にWM_CLOSEを投げての終了はうまくいくのですが、
ESC(WM_KEYDOWN)が押された時にWM_CLOSEを投げての終了が、
ウィンドウが閉じられるまでに、
CPU率が高くなった状態ですこし止まってしまいます。

原因はどこにあるのでしょうか。

PlaySound(NULL, NULL, 0);はいれています。
また、なぜかMessageBeep(MB_OK);を
抜ける直前に挟むと、ちゃんと終了できます。

171 :153:2006/11/19(日) 17:58:24
>>159 を試してみましたが、作った実行ファイルによるプロセスが先に終了する場合しか
ファイルが削除されません。
何か継承しなければいけないのでしょうか?


172 :デフォルトの名無しさん:2006/11/19(日) 18:17:21
>>171
FILE_FLAG_DELETE_ON_CLOSE法はうまくいかない。
たぶんみんな試さないで書いてると思う。
漏れが昔ここで聞いた方法
1. rundll32で削除用dllを起動する。
2. 削除用dllからアンインストーラの終了を待って消す。
3. FreeLibraryしてから自分自身を消すコードをヒープにコピーして呼び出す。
 (ヒープにPAGE_EXECUTEをつけるのをお忘れなく)

173 :デフォルトの名無しさん:2006/11/19(日) 19:23:45
>>172
試さないで書くけど FILE_FLAG_DELETE_ON_CLOSE によるサンプル。
ttp://web.archive.org/web/20051123112406/http://www.numeric.co.jp/Win32.htm

174 :デフォルトの名無しさん:2006/11/19(日) 19:34:50
> このとき、SYNCHRONIZEでオープンし、分身モジュールにハンドルを継承できる
> ようにする。
これがポイントか?

175 :デフォルトの名無しさん:2006/11/19(日) 19:38:34
>>174
よくわからんけどそれはハンドルを共用するためだろう。
ハンドルは何で共用する必要があるかというと、
 分身起動→本体終了→分身により本体削除
のシーケンスを同期をとって実行するため。

176 :153:2006/11/19(日) 20:04:41
SYNCHRONIZEフラグはNT系のみ使用できるようです。

177 :デフォルトの名無しさん:2006/11/19(日) 20:31:15
>>173
試してみたけどやっぱり消えないぞ。
むちゃくちゃコードを補う必要があったからどっかでミスってるのかもしれんが

178 :153:2006/11/19(日) 21:09:01
>>172
3. 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;
}
こんな感じでしょうか?

179 :デフォルトの名無しさん:2006/11/19(日) 21:38:30
> LPVOID pMem = (LPVOID)GlobalAlloc(GMEM_FIXED, size);
> pMem = VirtualAlloc(pMem, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
上のGlobalAllocは何のためにあるんだ?

180 :デフォルトの名無しさん:2006/11/19(日) 21:38:50
ちょwwwVirtualAllocwwwww

181 :153:2006/11/19(日) 21:41:02
PAGE_EXECUTEを受け付ける確保がVirtualAllocだけのようなので。
GlobalAllocは必要ありませんでしたか。

182 :デフォルトの名無しさん:2006/11/19(日) 21:47:50
API以前にC言語の基本からやり直せ
そのレベルじゃ>>172のコードを書くのは無理

183 :デフォルトの名無しさん:2006/11/19(日) 21:55:25
CD/DVD焼ソフトみたいにCD/DVD挿入時の自動再生を
一時的に無効にする方法を教えてください。
OS は Windows MeとXPです。

184 :デフォルトの名無しさん:2006/11/19(日) 22:01:49
RegisterWindowMessage("QueryCancelAutoPlay");
なメッセージを処理して1を返す

185 :デフォルトの名無しさん:2006/11/19(日) 22:06:24
俺も新人にCやDOSコマンドを教えた事があるが、理解できなかった時は常に教えた側に
問題があったぞ。
>FreeLibraryしてから自分自身を消すコードをヒープにコピーして呼び出す
この手段に対して何も触れてないじゃないか。

186 :デフォルトの名無しさん:2006/11/19(日) 22:08:26
>>185
そもそもそんなとこから教えなきゃならん事態が既に間違ってるってことはわかってるか?

187 :デフォルトの名無しさん:2006/11/19(日) 22:09:13
GlobalAllocで割り当てたメモリが入ってるpMemを黙って上書きしてるのも
教えた側の責任か? それ見てこれ以上付き合う気なくしたんだが。

188 :デフォルトの名無しさん:2006/11/19(日) 22:10:40
ここはあくまで善意の質問箱であり
プログラム教室ではない

189 :デフォルトの名無しさん:2006/11/19(日) 22:13:33
×俺も新人にCやDOSコマンドを教えた事があるが、理解できなかった時は常に教えた側に
問題があったぞ。
○俺も新人のときCやDOSコマンドを教わった事があるが、この俺様に理解できなかった
のだから常に教えた側の問題に決まってる。

×この手段に対して何も触れてないじゃないか。
○とっとと手段を教えろよ情報を小出しにしやがって使えねーパソヲタども

つーか本当にそこが問題でできないなら聞き返してさえこない時点でオhル

190 :デフォルトの名無しさん:2006/11/19(日) 22:15:29
テンプレすら読めない人がデカい顔してるスレはここですか?
>・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。

191 :デフォルトの名無しさん:2006/11/19(日) 22:20:54
GlobalAllocにGMEM_FIXEDフラグを入れれば直接アドレスが返ってくるのも知らんのか。
格下に聞いちまったようだな。

192 :デフォルトの名無しさん:2006/11/19(日) 22:23:48
触らない方がいいのかな

193 :デフォルトの名無しさん:2006/11/19(日) 22:28:02
>知らないから答えられません。
って素直に言えばいいのによ

194 :デフォルトの名無しさん:2006/11/19(日) 22:29:55
知らないから答えられません

195 :デフォルトの名無しさん:2006/11/19(日) 22:31:15
知ってても答えません

196 :デフォルトの名無しさん:2006/11/19(日) 22:34:48
本当は知らないんだけど、知らないっていうの癪だから
知ってるけど、教えてやらない。

197 :デフォルトの名無しさん:2006/11/19(日) 23:12:47
ヒープてことは動的だけど、
ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_123.htm
(くメィさん使わしてもらいます)
これじゃないの?やるのは。

198 :デフォルトの名無しさん:2006/11/19(日) 23:12:58
> GlobalAllocにGMEM_FIXEDフラグを入れれば直接アドレスが返ってくるのも知らんのか。
そんなことぐらい誰でも知ってる。
問題はそこじゃねーよアホ。メモリリークという言葉も知らんのか

> 知らないから教えてください
って素直に言えばいいのに

199 :デフォルトの名無しさん:2006/11/19(日) 23:17:04
>>197
全然関係ない。
つーか>>172でコピー先がヒープであることは本質的じゃない。
別にVirtualAllocでもいいから(むしろMSの推奨はそっちだった気がする)
>>180が何を笑ってるのかよくわからん。
問題は意味もなくGlobalAllocしてメモリリーク起こすようなコードを平然と書く奴に
手取り足取り教えてられるほど暇じゃないってこと。

つーかコードをメモリ上でコピーするやり方はAdvanced Windowsに載ってるんだから
マジで読んでくれ

200 :デフォルトの名無しさん:2006/11/19(日) 23:31:39
推奨はVirtualってか、Virtualは仮想メモリに直接確保、Globalはプロセスのヒープに確保じゃなかったかいの?
MSがGlobalよりこっち使えって言ってるのは確かHeapAlloc

201 :デフォルトの名無しさん:2006/11/19(日) 23:49:05
>>198
嘘吐け、俺が教えてやったから言えるんだろうが。
最初は頭下げてただろうが下衆野郎。しらねーくせに威張ってんじゃねえよ。

>>199
最初から本でも書いときゃ良いだろうがよ。暇じゃない割に2chにへばりついてやがんな。

202 :デフォルトの名無しさん:2006/11/19(日) 23:54:10
>俺が教えてやったから言えるんだろうが

203 :デフォルトの名無しさん:2006/11/19(日) 23:58:18
ここでおかしな流れをぶった切って・・・


>>153
WSHなら自分自身を削除できるし、コマンドプロンプトも出ない。

var fso = WScript.CreateObject("Scripting.FileSystemObject");
fso.DeleteFile("c:\\test.js");

これでアンインストーラを作ったことはないがなw

204 :デフォルトの名無しさん:2006/11/20(月) 00:05:47
>>203
簡易的には使えそう。
どうせならバッチファイルで

205 :デフォルトの名無しさん:2006/11/20(月) 00:18:02
>>203
98以降には一応装備されているから、バージョンが古いけど簡単な操作なら充分かもしれない。
どうしても駄目なら「BATファイルで御免なさい」ですね。

206 :デフォルトの名無しさん:2006/11/20(月) 00:27:54
>>200
WinXP SP2から、VirtualAllocでPAGE_EXECUTE付けて、
その領域のコードを実行できるようにせんと
アクセス違反になるんじゃなかったけ?
たしか、バッファーオーバーフローで任意コードを実行されるのを防ぐためとかだったはず。
ただのデータ置き場ならGlobalAllocでもいいけど。


207 :デフォルトの名無しさん:2006/11/20(月) 00:36:24
>>204
や、バッチファイルだとコマンドプロンプトが出てしまうって話でそ?
まあバッチファイルでも、CreateProcess()でDETACHED_PROCESSで起動すれば
コマンドプロンプトは出ないはず。

208 :デフォルトの名無しさん:2006/11/20(月) 00:43:53
ショートカットを右クリックして「リンク先を探す」を実行すると、
エクスプローラが立ち上がって、当該ファイルが選択されますが、
これと同じことをするにはどうすればいいんでしょうか?

お願いします。

209 :デフォルトの名無しさん:2006/11/20(月) 00:57:40
>>201
> 最初は頭下げてただろうが
誰に言ってるの? 頭大丈夫?
> 最初から
>>1に書いてるが何か?

210 :デフォルトの名無しさん:2006/11/20(月) 01:00:07
> しらねーくせに威張ってんじゃねえよ。
鏡に向かって話すのが好きなんですね

211 :デフォルトの名無しさん:2006/11/20(月) 01:02:28
>>206
GlobalAllocでもHeapAllocでもスタックでもVirtualProtectでPAGE_EXECUTEを
付けてやれば実行できるようになる。
当然同じページにある周囲のメモリも巻き込まれるのであまりよろしくないけど

212 :デフォルトの名無しさん:2006/11/20(月) 01:05:09
> 教えてやったから言えるんだろうが
いやあ仮にそのとおりだとしても
返すものがハンドルだろうがポインタだろうがメモリリークしてることに変わりないし
そもそもGlobalALlocを呼び出す意味自体一切ないと教えてあげてるのに
理解しないばかりか逆切れしてるどっかのバカには負けますよw

213 :デフォルトの名無しさん:2006/11/20(月) 01:16:20
(´・ω・`)   n
⌒`γ´⌒`ヽ( E)
( .人 .人 γ ノ
ミ(こノこノ `ー´
)にノこ(

214 :デフォルトの名無しさん:2006/11/20(月) 02:11:17
intを戻す関数の中で、return 0;を書く位置が早いとちゃんとreturnされるが、
遅い(関数の最後)だと エラーがでる。
少しずつreturn 0をずらして書いてみると、ある位置より早ければちゃんとreturnされる。

コンパイル時はエラー0となってて実行時に メモリがreadになれませんでした。となる。
関数のなかで、他の関数を呼びまくってるから呼び出し元がどこだったかを忘れてるのでしょうか?
どうすればいいのやら??


215 :デフォルトの名無しさん:2006/11/20(月) 02:15:57
APIと何の関係もないな

216 :デフォルトの名無しさん:2006/11/20(月) 02:18:11
んな馬鹿な。単に「他の関数」とやらで落ちているのだろ。
その原因は呼び方の間違いだろうがな。

217 :デフォルトの名無しさん:2006/11/20(月) 02:27:04
>>216も同じ意味かもしれんが、returnで落ちるなら
呼び出し規約とかシグネチャが違うとか?

218 :デフォルトの名無しさん:2006/11/20(月) 02:34:40
a();

return 0;  ← 正常に戻る

b();

return 0;  ← 落ちる


だと、明らかに b() の中で落ちてるだろ

219 :デフォルトの名無しさん:2006/11/20(月) 02:37:19
相手してくれてありがとう。

int 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;
-------------------------------------------------------
わからん。 いままでこんなことなかったのに・・。ねるしかないか・・


220 :デフォルトの名無しさん:2006/11/20(月) 02:37:20
デバッガ使えば

221 :デフォルトの名無しさん:2006/11/20(月) 02:39:00
デバッガ使い方わかんないです。 messageboxをはさみまくってたしかめる方法でいままでがんばってきました。
お笑いですね。。

222 :デフォルトの名無しさん:2006/11/20(月) 02:40:21
> 中略部分がややこしいことしてるのでソースは書けないです。
明らかにそこのせいだろ。>>217も言ってるが呼び出し規約が怪しい

223 :デフォルトの名無しさん:2006/11/20(月) 02:41:18
悪いことは言わんからデバッガの使い方学習して来い。
もう一度言うけどWin32 APIぜんぜん関係ないので

224 :デフォルトの名無しさん:2006/11/20(月) 03:11:27
解決しました。構造体のメモリ確保が1個分足りないのが原因でした。
デバッガは学習してきます。圧倒的初心者のお相手ありがとうございました。
すみませんでした。

225 :デフォルトの名無しさん:2006/11/20(月) 03:16:17
途中の関数でスタック壊してるんじゃ舞か
そしてとんでもないアドレスにリターンしようとしているのでわ

226 :デフォルトの名無しさん:2006/11/20(月) 03:22:38
>>224
1回使い方分かっちゃえばめっさ楽になるからガンバレ

227 :デフォルトの名無しさん:2006/11/20(月) 07:29:04
ウィンドウメッセージの数値から、
WM_**の文字列で取得するAPIがありましたら教えてください。

228 :デフォルトの名無しさん:2006/11/20(月) 08:10:36
取得するもなにも switch( message ) で case WM_***: やってると思うけど

229 :デフォルトの名無しさん:2006/11/20(月) 08:20:12
>>184
ありがとうできました。

230 :デフォルトの名無しさん:2006/11/20(月) 09:40:32
>>227
無いよ。自分で変換テーブル作れ。

231 :227:2006/11/20(月) 10:06:05
>>228>>230
分かりました。ありがとうございます。

232 :デフォルトの名無しさん:2006/11/20(月) 10:10:31
Jeffrey Richter
バッチのサンプル
 ttp://www.microsoft.com/msj/archive/SF9C.aspx
 ここのW32Q0196.zip
FILE_FLAG_DELETE_ON_CLOSEのサンプル
 ttp://www.microsoft.com/msj/0198/win320198.aspx
 なぜかダウンロードできない。XPでは不調でした。

233 :デフォルトの名無しさん:2006/11/20(月) 11:06:10
以前に、EXE自分自身を削除するプログラムを作ることがあって、
いろいろ見つけたサンプルを元に FILE_FLAG_DELETE_ON_CLOSE
を試行錯誤してみたが、うまくいかなかった。
(例) 98系と2000系で挙動が違う (すまん、どう違ったかは覚えてない)
(例) EXEがネットワークドライブ上だとうまくいかない

で、結局、俺は以下のようにした。
(1) 削除用プログラム(自分自身)を「<GetTempPath()のディレクトリ>\DeleteMe.tmp」にコピー
(2) (1)をMoveFileEx( MOVEFILE_DELAY_UNTIL_REBOOT )で削除予約。
(3) (1)をCreateProcess()、自分自身は終了。

(1)はユーザーがリブートするまで消えないが、ユーザーの目に触れなきゃOK!


234 :デフォルトの名無しさん:2006/11/20(月) 11:10:42
試さずに書くが・・・・・

235 :デフォルトの名無しさん:2006/11/20(月) 11:12:41
(スマン、234はしくじった)

試さずに書くが・・・・・

バッチ(command.com/cmd.exe)をSW_HIDEでCreateProcessしては?


236 :デフォルトの名無しさん:2006/11/20(月) 13:03:52
>>233
その方法も良いと思います。
>>234-235
少なくとも ShellExecute ではうまくいきました。

皆さんお世話になりました。お騒がせしました。

237 :デフォルトの名無しさん:2006/11/20(月) 13:11:39
>>232
参考になりました。

238 :デフォルトの名無しさん:2006/11/20(月) 20:31:37
メインのGetMessageをまわしているループとは別のスレッドから、
SendMessageでWndProcへ構造体をわたそうと思っています。
wParamか、lParamにポインタ入れて。
この構造体を入れる領域をHeapAllocでとって、そこに値を入れてSendMessageで渡した後、
WndProcで処理した後、HeapFreeで開放してやりたいのですが、
開放するタイミングはWndProcしかないのでしょうか。
WndProcへwParamとか、lParamでわたってくるマウスの情報とかは、
WndProcで開放しないのでなんかお作法みたいなのがあるように思えますが、
なにか標準のお作法がありますでしょうか。
お作法、または、ドキュメントへの道しるべ等お教えいただけないですか。

239 :デフォルトの名無しさん:2006/11/20(月) 20:36:47
もしかして、SendMessageを呼び出した後は、
イベントがWndProcで処理されるまで戻ってこないので、
−メモリ確保
−SendMessage(ここから投げたスレッドはブロック)
−−メインのGetMessageで取得されて、WndProcで処理される
−SendMessageから戻ってくるのでメモリ開放
といった形になるのでしょうか?
とりあえず、AdvancedWindowsの第26章をみてます。

240 :デフォルトの名無しさん:2006/11/20(月) 20:43:23
SendMessageで送信したメッセージの処理内でしか使わないのなら
SendMessageから帰ってきたところで消せばいい

ちなみにSendMessageはGetMessageで取得じゃなくて、SendMessageが直接プロシージャを呼ぶ

241 :デフォルトの名無しさん:2006/11/20(月) 20:51:19
>240

>SendMessageで送信したメッセージの処理内でしか使わないのなら
>SendMessageから帰ってきたところで消せばいい
ありがとうございます。
確信がなかったのですが、自信が持てました。

>ちなみにSendMessageはGetMessageで取得じゃなくて、SendMessageが直接プロシージャを呼ぶ
AdvancedWindowsをちゃんとよんでみたら書いてありました。
スレッド間でのSendMessage呼び出しは複雑だと知り、勉強になりました。
ご指摘、ありがとうございました。

242 :デフォルトの名無しさん:2006/11/21(火) 00:30:29
>メインのGetMessageをまわしているループとは別のスレッドから、SendMessage
する状況なら、
>ちなみにSendMessageはGetMessageで取得じゃなくて、
>SendMessageが直接プロシージャを呼ぶ
は間違いだよ。それは同一スレッドの時限定。

243 :デフォルトの名無しさん:2006/11/21(火) 01:02:03
でもそんな感じだと思っていて構わないと思う。
Advanced Windows読むまで知らなかった。

244 :デフォルトの名無しさん:2006/11/21(火) 01:25:56
実は16bitWindowsの頃からGetMessageで取得していた

245 :デフォルトの名無しさん:2006/11/21(火) 10:07:07
ヘッダ見てるといろんな構造体にbiSizeとかcbSizeとか構造体のサイズを設定するところがありますがこれって何のためですか?
構造体を渡す側はsizeof(構造体)でこのセットするサイズわかるし渡される側も構造体がわかってるからsizeof(構造体)でとれますよね

246 :デフォルトの名無しさん:2006/11/21(火) 10:23:12
>>245
後で拡張されてサイズが増える場合があるから

247 :デフォルトの名無しさん:2006/11/21(火) 11:27:43 ?2BP(200)
>>245
最後に char hoge[1] みたいな可変長メンバのプレースホルダがあったりして
sizeof では正しいサイズを得られない場合があるから。

248 :デフォルトの名無しさん:2006/11/21(火) 13:40:05
構造体によっては、コンパイル時の_WIN_VERの値で使用可能なメンバの数が変わったりする
そうなると当然構造体のサイズも変わる
おk?

249 :デフォルトの名無しさん:2006/11/21(火) 14:27:23
でも、NOTIFYICONDATAとか結構ぐだぐだだよな。
同じ名前を流用するより、
OSVERSIONINFO/OSVERSIONINFOEXみたく、
個別に構造体を定義したほうがスマートに見える。

250 :デフォルトの名無しさん:2006/11/21(火) 14:31:14
まぁ、俺らがここでそれを言っても
MSがそれに気付いてやってくれないとどうにもならないからな・・・

251 :デフォルトの名無しさん:2006/11/21(火) 15:50:27 ?2BP(200)
>>246>>248
その場合はコンパイル環境とターゲット環境が一致している限りは問題ない。
sizeof自体が役に立たないのは、BITMAPINFOみたいな可変長メンバを含む場合。

252 :デフォルトの名無しさん:2006/11/21(火) 16:41:25
>>251
一致してれば、な

253 :デフォルトの名無しさん:2006/11/21(火) 17:01:43
>>251
お客さんのPCのGDI32.DLL の類がどんな環境で
いつコンパイルされたかなんか普通わからんと思うぞ。

254 :デフォルトの名無しさん:2006/11/21(火) 17:33:52 ?2BP(200)
>>252
ま、それは要件によるが。

>>253
何の話してるのかね。

255 :デフォルトの名無しさん:2006/11/21(火) 17:38:04
>>254
>何の話してるのかね。

Win32 API のヘッダで構造体のメンバに構造体のサイズを設定するフィールドがあるのはなぜ、という話で、
「後で拡張されてサイズが増える場合があるから」という答えに対して
「コンパイル環境とターゲット環境が一致している限りは問題ない」とアフォな返しをする奴がいたので、
ターゲット環境がわかるケースは一般的ではないと指摘してみたんだが・・・

256 :デフォルトの名無しさん:2006/11/21(火) 17:38:46 ?2BP(0)
具体例を出さんと>>254は解らなさそうだ

257 :245:2006/11/21(火) 17:55:20
>>246-256
ビットマップをいじるプログラムをさわったらなんとなくわかってきました。
教えてくれて、ありがとう。
あと、C言語ポインタ完全制覇という本に構造体の一番後ろで拡張するタイプの話がのってたので、
そっちも読んで理解してみます。な〜んでだろっていうのがすっきりして助かりました。

258 :デフォルトの名無しさん:2006/11/21(火) 18:37:27
>>257
ヘッダを開いて、それぞれの構造体の宣言部を見てみるのもいいと思うぞ
#ifdef _WIN_VER〜#endifとかあるから

259 :デフォルトの名無しさん:2006/11/21(火) 18:47:33
質問です。
C言語をベースに勉強していて、
テキストエディタを作っています。
コモンダイアログの「検索」を出して、
エディタ内の文字列を探す所まではなんとかできたのですが、
その結果をエディタに表示する方法がよくかりません。

エディタの内容をchar配列に移して、
そこからstrstrで検索して、
見つかったら戻り値のポイントを調べて、
SendMessage(MyDataGet_hEdit(), EM_SETSEL,[戻り値], [戻り値 + 検索文字数]);
で結果を明示しようとしています。
見つかった文字列がエディタ内に表示されている状態ならば、
これでもよさそうなのですが、
表示されていない場合、スクロールを自分で動かして、
どこが選択されているか調べないといけないという、
検索した意味のない状態になってしまっています。

どうしたら普通の検索のように、
検索結果(選択状態の文字列)まで、
画面表示を自動スクロールさせられるのか、ヒントをください。



260 :デフォルトの名無しさん:2006/11/21(火) 18:54:07 ?2BP(200)
>>255
ターゲット環境が「分かる」必要なんか無いだろ。
ターゲット環境は「作るときに決める」物なんだから。

「ターゲットを決めうちする限りは問題ない」とする回答に「ターゲットが分からない」と
返す方がよっぽどAFOだと思うが。

261 :デフォルトの名無しさん:2006/11/21(火) 19:08:29
なんでおまえの限定の話に乗っからないといけないんだよ

262 :デフォルトの名無しさん:2006/11/21(火) 19:29:22
>>245
biSizeは言ってみれば構造体のバージョンナンバー。
BITMAPINFOHEADER, BITMAPV4HEADER, BITMAPV5HEADERのように
構造体が拡張された場合に、API側がbiSizeを見てどの構造体なのか
判断している。

これのおかげで、BITMAPINFOHEADERを要求するAPIにV4やV5の
構造体を渡すことができる。

263 :デフォルトの名無しさん:2006/11/21(火) 19:37:02 ?2BP(200)
>>261
ターゲットが分からないなんてのもお前限定の話だろ。
客のターゲットも調べないで要件を定義するのか?

264 :259:2006/11/21(火) 19:50:09
流れ無視してゴメンなさい。自己解決しました。
SendMessage(HANDLEエディタ, EM_SCROLLCARET, 0, 0);
基本的なメッセージ関連を勉強しなおしてきます。orz

265 :デフォルトの名無しさん:2006/11/21(火) 19:55:23
ターゲットを限定しないとバージョンアップのたびに金を取れないだろ。

266 :デフォルトの名無しさん:2006/11/22(水) 08:17:04
>>262
>biSizeは言ってみれば構造体のバージョンナンバー。
同意同意。

本当はマズいんだと思うんだけどね。
過去バージョン互換とか考えるとなー。



267 :デフォルトの名無しさん:2006/11/22(水) 09:47:00
ビットマップ等の場合、渡されるOS側がサイズを確定できないのだから仕方が無い
Windows3.0以前から一応ソースレベルの互換性を維持してきたツケだな

268 :デフォルトの名無しさん:2006/11/22(水) 13:03:41
ここでGDI+の質問してもOKでしょうか?

FillRectangle + LinearGradientBrushを使って四角形を描画すると
Rectのサイズによってはグラデーション開始位置に、グラデーション終了色が
出ます。(LinearGradientModeVerticalモード時は上1行だけ)
これはどうやれば防げるんでしょうか?

269 :デフォルトの名無しさん:2006/11/22(水) 13:30:27
どういうコード書いてるかも言わずに解るわけないだろ


270 :268:2006/11/22(水) 13:50:10
失礼しました。以下のコードです。

Graphics 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座標を変えると全て正常に表示されることもあります。

271 :デフォルトの名無しさん:2006/11/22(水) 13:52:17
GetMessageの戻り値が負になるのはどういう時でしょうか。

終了の0の時は、閉じるボタンorWM_CLOSEをPost、
WM_CLOSEはDefWindowProcで処理、
WM_DESTROYが来て、そこでPostQuitMessage(0)、
WM_QUITが来た時、同時にGetMessageの戻り値が0になり
メッセージループを抜けるという感じだと思うんですけど。

272 :デフォルトの名無しさん:2006/11/22(水) 14:45:03
>>271
MSDNくらい嫁や

273 :デフォルトの名無しさん:2006/11/22(水) 15:22:58
>>271
わん わん わわわん わん わん くんくん
(GetMessage関数は、WM_QUIT以外のメッセージを取得した場合は、TRUEを返すんだよ)

わん わん わわわん わん わん
(また、WM_QUITメッセージを取得した場合は、FALSEを返すんだよ)

わん わん くーん?
(わかったかな?)

274 :デフォルトの名無しさん:2006/11/22(水) 16:03:37
>>273
>>272

275 :271:2006/11/22(水) 16:21:50
ありがとうございます。

>>223
エラーが発生した場合、-1が返ると書いてあります。
しかし、それで戻り値がintでなくBOOLなのがなぞですが。

WM_CLOSE、WM_DESTROY、WM_QUITを経由して
-1を返してくるか、いきなり-1を返すのかが分かりません。
実験しようにも-1戻り値エラーが発生したことがありませんし。

276 :デフォルトの名無しさん:2006/11/22(水) 16:30:37
typedef int   BOOL;

277 :デフォルトの名無しさん:2006/11/22(水) 16:45:15
そういやさ、MSDNのGetMessageの解説には、
GetMessageは「0、-1、other」の3種類の戻り値が有るから「while (GetMessage(lpMsg, hWnd, 0, 0))」は良くないって書いてあるけど
VCが自動生成するメッセージループって「while (GetMessage(lpMsg, NULL, 0, 0))」なんだよな
これってどうなんかねw

278 :デフォルトの名無しさん:2006/11/22(水) 16:48:57
>>275
> それで戻り値がintでなくBOOLなのがなぞですが。
GetMessageの戻り値は以前はTRUEとFALSEだけだった。

279 :デフォルトの名無しさん:2006/11/22(水) 16:50:37
GetMessageのウィンドウハンドルの引数に無効な値(削除されたウィンドウのハンドルなど)
を渡すと-1が帰ってくると聞いたことがある。

280 :デフォルトの名無しさん:2006/11/22(水) 16:55:46
>>279
そうか、そういう場合に失敗するのか。

いや、いままでGetMessageが失敗したことなんて無いもんだから。
面倒だから、こういうやり方してしまっているけど

while ( GetMessage( &msg, NULL, 0, 0) > 0 )
{
}

281 :デフォルトの名無しさん:2006/11/22(水) 16:59:55
つか、MSDNの警告に従えば、GetMessageはwhileの条件式に書かないほうがいいってことだから
while(true)とかで回すことになって、益々ヤバイことにならんか

282 :271:2006/11/22(水) 18:30:03
>>279
なるほど。
こわいですが、わざと変な値を使ってエラーさせて実験してみます。

283 :デフォルトの名無しさん:2006/11/22(水) 18:48:41
他のプログラムの出しているウィンドウへのキー入力もフックに引っかけたくて、
DLLを記述して、

hhk = SetWindowsHookEx(WH_KEYBOARD,// フックタイプはキーストローク
hHOOKKEY, // フック処理プロシジャへ
hInstDLL, //フックプロシジャは同一ファイルで記述
NULL); // 対象スレッドはすべて
if (hhk == NULL)
  MessageBox( NULL,TEXT("フックかけられない"),TEXT("Error"),MB_OK)

と記述したところ、フック設定は毎回うまく行っているように見えるのですが、

自分で作成しウインドウへの入力は拾えても、他のプログラムの出した窓への入力
は拾えません。「グローバルフック」はキーロガーのように全部拾ってくれる
と思っていたのですが、こんなもんなんでしょうか。

WinXP,VisualC++2005 です。

284 :デフォルトの名無しさん:2006/11/22(水) 19:35:05
>>283
拾えるのはDLLの注入されたプロセス自身だけ
他のプロセスのメッセージを拾いたいなら、
何らかのプロセス間通信を使って自分のプロセスに送らないと駄目

285 :デフォルトの名無しさん:2006/11/22(水) 19:43:55 ?2BP(200)
>>283
グローバルフックを仕込んだdllをパスの通ったディレクトリに置く。

286 :デフォルトの名無しさん:2006/11/22(水) 19:53:25
>>285
パスが通ってる必要はない

287 :デフォルトの名無しさん:2006/11/22(水) 22:04:48
フックプロシージャでメッセージを受け取るウィンドウのハンドルを取得することはできないのでしょうか?
フックの種類はWH_CBTです

288 :デフォルトの名無しさん:2006/11/22(水) 22:16:12
>>287
>>272

289 :287:2006/11/22(水) 22:21:17
>>288
MSDN見たら書いてありましたorz
nCodeによってはwParamとかに入ってるんですね
スレ汚ししてしまってすみませんでした

290 :デフォルトの名無しさん:2006/11/23(木) 00:02:42
SetStdHandleでググって見つかるサンプルって子プロセスの標準出力等を親からReadFileで読み出す感じなのが大半だと思うのですが
自プロセスで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;
}

291 :デフォルトの名無しさん:2006/11/23(木) 01:50:30
>>290
的外れだったらすまんが
CreateConsoleScreenBuffer
関連を使えばバックバッファを作成できるけど

292 :290:2006/11/23(木) 03:18:04
>>291 レスありがとうございます
CreatePipeのくだりを消して
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)

293 :デフォルトの名無しさん:2006/11/23(木) 07:37:04
rubyのソースを読めば方法がわかる予感。

294 :デフォルトの名無しさん:2006/11/23(木) 08:58:52
ていうか標準関数を使うべきかと

以前、win32アプリでAllocConsoleを使ってコンソールを作成した後標準出力をコンソールスクリーンに割り当てる
って事をやったんだけどAPIでやるとcoutやprintfは機能しなかった。
だけど標準関数(たしかfreopen)を使うとちゃんと出力されたし、
GetStdHandleを使って調べてもちゃんとスクリーンのハンドルが返ってきた

ちなみにcoutを開き直すのは駄目でした(coutはちゃんと出力できたけどprintfとかが駄目)

295 :デフォルトの名無しさん:2006/11/23(木) 09:02:34
あと入出力の関数は標準関数かAPIかで統一した方がいいと思う

296 :デフォルトの名無しさん:2006/11/23(木) 10:25:35
そもそもAPIで標準出力の出力先を変更しようというのではなく、
プログラム内で出力先を選べるようにしたほうが楽だと思う。

C++ならstd::ostreamを引数にとって、呼ぶ側が必要に応じて
std::ostringstreamのオブジェクトを渡すようにするとかさ。

297 :デフォルトの名無しさん:2006/11/23(木) 19:37:22
質問があります。
拡張子がrtfのファイルに関連するアイコンデータがプログラムから
ひつようなのですが、レジストリエディタで確認すると
"%ProgramFiles%\Windows NT\Accessories\WORDPAD.EXE",1
になっていました。
このリソースIDは何番にしたらいいですか?ワードパッドみても
リソースIDが一番のアイコンはありませんでした。

よろしくお願いします


298 :デフォルトの名無しさん:2006/11/23(木) 19:51:50
標準のスタティックコントロールが自動折り返しの設定になっているときに、
複数行の文字列が表示される領域を正確に知りたいのですがどうすればいいでしょうか?
GetTextExtentPoint32だと折り返しがある場合に位置がずれてしまうのです。

299 :デフォルトの名無しさん:2006/11/23(木) 20:01:14
>>297
正の値 : 0から始まるアイコンのインデックス
負の値 : リソースID(ex. -3 -> リソースID 3)

300 :297:2006/11/23(木) 20:14:53
>>299
理解できました。
ありがとうございました。

301 :デフォルトの名無しさん:2006/11/23(木) 20:24:37
fopen fout

CreateFile
WriteFile

どっちが速い?

302 :デフォルトの名無しさん:2006/11/23(木) 20:29:01
>>301
実装と用途による。

303 :デフォルトの名無しさん:2006/11/23(木) 20:30:54
>>301
foutが何かは知りませんが、大き目のファイルを一気に書くような用途では
ストリームを使ってもAPIを直接使っても大して速度は変わらないと思います。
∵一般的にI/Oに時間が掛かりますから。

304 :デフォルトの名無しさん:2006/11/23(木) 20:34:39
根拠なしに適当いうと
たぶんfopen()とかはCreateFileで実装されてる

305 :デフォルトの名無しさん:2006/11/23(木) 20:41:39
それ以外でどう実装しろと

306 :デフォルトの名無しさん:2006/11/23(木) 20:58:57
直にディスクアクセスする方法がある。
って結局ドライブ自体かvwin32をCreateFileで開かないといけないわけか。

307 :デフォルトの名無しさん:2006/11/23(木) 21:00:06
隠しAPIがあるとか

308 :デフォルトの名無しさん:2006/11/23(木) 21:19:00
NtCreateFileとかZwCreateFileとか

309 :デフォルトの名無しさん:2006/11/23(木) 21:53:00
Cランタイムのソースコードは誰でも見れるだろ。
正解は304

310 :デフォルトの名無しさん:2006/11/23(木) 22:08:18
解放し忘れたメモリもプロセスが終了するときに解放されると聞いたことがあるのですが、
同様にLoadLibraryで読み込まれたDLL内で確保したメモリがFreeLibraryで解放されるのでしょうか?

311 :デフォルトの名無しさん:2006/11/23(木) 22:18:51
>>310
されない
DLL作る人は気をつけよう

312 :デフォルトの名無しさん:2006/11/23(木) 22:32:56
>>311
レスありがとうございます
解放されないんですね、気をつけます

313 :デフォルトの名無しさん:2006/11/23(木) 22:35:23
されないのか、知らんかった
・・・考えたら、されたら困るよな・・・

314 :デフォルトの名無しさん:2006/11/23(木) 22:58:05
COM最強杉とだけ言っておこう

315 :デフォルトの名無しさん:2006/11/23(木) 23:00:09
>>314
違う最強なのは僕

316 :デフォルトの名無しさん:2006/11/23(木) 23:01:35
なのは最強

317 :デフォルトの名無しさん:2006/11/24(金) 00:14:51
最強はケンイチ

318 :デフォルトの名無しさん:2006/11/24(金) 01:55:46
アニメーションを行うためにタイマーイベントでWM_PAINTを発行して、
WM_PAINT内に以下の記述をしています。

 draw() // OpenGLの描画関数
 SwapBuffers(wglGetCurrentDC());
 HDC hdc = BeginPaint(hwnd, &ps);
 〜マウスドラッグによる四角の描画〜
 EndPaint(hwnd, &ps);

すると、マウスドラッグで描かれた四角の部分がチラついてしまいます。
このチラツキを防止するにはどうすればよろしいでしょうか。


319 :デフォルトの名無しさん:2006/11/24(金) 01:57:53
画面に直接書かずバックバッファのほうに書け

320 :318:2006/11/24(金) 02:25:33
>>319
どうも。以下にようにしてもチラつきました。
何か間違ってるでしょうか?

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);


321 :デフォルトの名無しさん:2006/11/24(金) 02:33:51
WM_TIMERの代わりにWM_MOUSEMOVEで更新するとか
SendMessageじゃなくPostするとか

322 :デフォルトの名無しさん:2006/11/24(金) 02:35:20
>>320
SwapBuffersはどこ行った?

323 :318:2006/11/24(金) 02:44:33
>>322
 draw(); // OpenGLの描画関数
 SwapBuffers(wglGetCurrentDC());
 HDC hdc = BeginPaint(hwnd, &ps);
 〜320のコード〜
 EndPaint(hwnd, &ps);
 SwapBuffers(hdc);
てな具合です。

>>321
すみません。いまいちよく分かりませんでした。


324 :デフォルトの名無しさん:2006/11/24(金) 02:53:47
それじゃまったく意味ないだろ。
OpenGLの裏画面ってGDIじゃ描画できないんだっけ?

325 :318:2006/11/24(金) 03:00:17
そうですね。意味ないですね…。

> OpenGLの裏画面ってGDIじゃ描画できないんだっけ?
GLとGDIでコンテキストを分けてそれぞれ独立に描画できれば
自由度があって便利なんですが、やり方がよくわからず。


326 :321:2006/11/24(金) 03:00:32
case WM_TIMER
・・・
WM_PAINを発行

case WM_MOUSEMOVE
if(ドラッグの最中){
PostMessage(自分,WM_PAINT・・・)
}
な具合。

327 :デフォルトの名無しさん:2006/11/24(金) 03:06:06
WM_PAINTって自分で送るものじゃないんじゃないの?

328 :318:2006/11/24(金) 03:11:08
>>327
InvalidateRectでいいですよね。

>>326
それだとドラッグの最中に四角が描画されて、
同時にタイマーでアニメーションが描画されて、結局チラついちゃう気が…。

GL側で全部描こうかなぁ。
半透明とか楽だし…。

329 :デフォルトの名無しさん:2006/11/24(金) 04:24:41
> GL側で全部描こうかなぁ。
GDIで書く方法が不明ならそれが一番いいかと。

330 :デフォルトの名無しさん:2006/11/24(金) 06:39:42
そもそもWM_PAINTで描くからチラつくんだが
WM_PAINTはあくまで再描画するためのイベントだ
それ以外の描画は他タイミングで描け
つか、タイマー使ってんならWM_TIMERで描きゃいいじゃないかよ

331 :デフォルトの名無しさん:2006/11/24(金) 09:25:43
WM_ERASEBKGNDで描けばいいんじゃね


332 :298:2006/11/24(金) 15:23:54
API組み合わせたら、たぶん自己解決しました

333 :デフォルトの名無しさん:2006/11/24(金) 15:40:37
腰痛い

334 :デフォルトの名無しさん:2006/11/24(金) 16:56:55
ダブルバッファリングでちらつくのは
InvalidateRect(hWnd, NULL, TRUE);ってやってるからじゃないかな
最後FALSEでやっていろいろ調整するといいかも

その前にマウスドラッグで四角書くのにタイマー使う必要があるのかが謎だけど

335 :デフォルトの名無しさん:2006/11/24(金) 17:59:40

LoadLibraryEx()でDLLのインスタンスハンドル入手した後
どうやって解放すればいいですか?
どなたかお願いします。

336 :デフォルトの名無しさん:2006/11/24(金) 18:04:39
>>335
ハンドルというかただのアドレスだ。開放する必要はない。
DLLの開放という意味ならMSDNを見れ

337 :デフォルトの名無しさん:2006/11/24(金) 18:39:04
>>324-325
OpenGL のレンダーターゲットを BMPイメージonメモリDC にして そっちを GDI 描画
WM_PAINT はBMPを(BitBlt で)可視化 で多少融通が利くよ

338 :デフォルトの名無しさん:2006/11/24(金) 18:48:46
ハードウェアアクセラレーション利く環境少ないけどな。

339 :デフォルトの名無しさん:2006/11/24(金) 19:21:01
ウィンドウプロシージャをC++のクラスでうまくラッピングしてるライブラリってない?
JavaのWindowListenerみたいな感じのが欲しいんだけど・・

340 :デフォルトの名無しさん:2006/11/24(金) 19:25:17
ライブラリを求めるんならMFCでも使っとけば?
他人が作ったライブラリを中途半端に使うより、自分で必要な機能を盛り込んで作った方がいいけどな

341 :デフォルトの名無しさん:2006/11/24(金) 19:26:51
windowsx.h

342 :デフォルトの名無しさん:2006/11/24(金) 19:28:36
MFC・windowsx.hはイベントハンドラ定義するのにマクロ使うんで
個人的に好みじゃないんだよな・・
適当に作ってみるか。レスありがとう。

343 :デフォルトの名無しさん:2006/11/24(金) 19:36:55
バッチファイルをアプリを起動することなく、
(すなわち自分のプロセス内で)実行する方法って
ありますでしょうか?

344 :デフォルトの名無しさん:2006/11/24(金) 19:40:36
>>343
バッチファイルを実行するコードを全部自分で書く。

345 :デフォルトの名無しさん:2006/11/24(金) 20:07:33
cmd.exe/command.comを介入させたくないのか、
バッチの中に書いてあるコマンドも内蔵させる必要があるのかだな。

あるいは単にコンソールウインドウを不可視にしたいだけのかな?

346 :デフォルトの名無しさん:2006/11/24(金) 21:42:42
>>342
.NET FrameworkのWindows Forms。
あとMS発祥といえばATL/WTL。こっちはマクロ使うけど。

347 :デフォルトの名無しさん:2006/11/24(金) 22:25:52
Qt4はどうよ

348 :343:2006/11/24(金) 22:53:39
シャットダウン中にバッチファイルを実行したいんです。
WM_QUERYENDSESSION?かなにかが飛んできたときはもう
新規実行はできないと思うので、自分でやりたいのです。


349 :デフォルトの名無しさん:2006/11/24(金) 23:20:05
>>348
>>344
新プロセス起動できないんなら、外部コマンドも取り込まないとな。

350 :tsurarete yarou.:2006/11/24(金) 23:42:25
>>348
OS は何?

すれ違いだけど、Windows 2000/XP/Server 2003 なら

http://q.hatena.ne.jp/1140862112

が参考になるかも。

351 :デフォルトの名無しさん:2006/11/24(金) 23:42:44
>>348
直接の答えではないけれど、ログオフスクリプトではだめか?

352 :デフォルトの名無しさん:2006/11/24(金) 23:57:23
mem_bmp = CreateCompatibleBitmap(hdc, 800, 800);
mem_hdc = CreateCompatibleDC(hdc);
SelectObject(mem_hdc, mem_bmp);
int a = GetDeviceCaps(mem_hdc, HORZRES);
int b = GetDeviceCaps(mem_hdc, VERTRES);

aとbの値が800にならないんだけどなんでだろう

353 :デフォルトの名無しさん:2006/11/25(土) 00:07:56
実際にはどうなるんだよ

354 :デフォルトの名無しさん:2006/11/25(土) 00:08:29
言語スレ行って質問したらWin32APIのほうが質問場所は良いって
言われたので来ました。

ttp://support.microsoft.com/kb/403844/ja
PGが起動してるときだけスクリーンセーバが動かないPGを作ってるんだけど
リンク先のやり方だとパスワード保護されてるとうまく動かないんです
パスワード保護の時って発行されてるメッセージって違うみたいですが
どうすればフック出来るか知りたいんですが


355 :352:2006/11/25(土) 00:09:53
>>353
実際にはデスクトップ領域の解像度が入った
1600と1200みたいな

356 :デフォルトの名無しさん:2006/11/25(土) 00:10:16
>>352
解像度が800x800のディスプレイを接続すればいいと思うよ。

357 :デフォルトの名無しさん:2006/11/25(土) 00:24:15
>>352
対象がビットマップじゃなくてデバイス(スクリーン)だから

358 :352:2006/11/25(土) 00:37:44
>>357
スクリーンと互換のデバイスってことでスクリーンの値を取得してるのか・・・
ビットマップの値を取得する方法はないですか?

359 :デフォルトの名無しさん:2006/11/25(土) 00:42:04
>>358
GetObject

360 :デフォルトの名無しさん:2006/11/25(土) 00:47:37
>>354
WlxIsLockOk

361 :352:2006/11/25(土) 00:47:37
ありがとう
GetBitmapDimensionEx(mem_bmp, &sz);
でいけた

362 :デフォルトの名無しさん:2006/11/25(土) 01:01:11
初めて知った<GetBitmapDimensionEx。

363 :352:2006/11/25(土) 01:18:04
と思ったら2回目以降使えなくなった
あらかじめSetBitmapDimensionExでサイズを設定しておかなきゃいけないらしい
なんで初めだけ取得できたんだろ・・・?

364 :デフォルトの名無しさん:2006/11/25(土) 05:00:54
セイント聖矢のジェミニを思い出したのは俺だけで良いはずだ

365 :デフォルトの名無しさん:2006/11/25(土) 09:27:29
>>361
それで得られるサイズの単位はピクセルじゃないぞ

366 :デフォルトの名無しさん:2006/11/25(土) 09:31:38
どうせユーザ定義なんだから何でも良いんじゃね?

367 :デフォルトの名無しさん:2006/11/25(土) 09:59:12
>>359で答えが出てるのに、何悩んでるんだろう?

368 :デフォルトの名無しさん:2006/11/25(土) 10:02:37
ここで聞くべきかDirectXスレで聞くべきか
COMスレで聞くべきか迷ったのですが…

FrapsやGameCamなどのDirectX乗っ取り型のキャプチャソフトなんですが
どうもキャプチャ動画を見たところDirect3Dのフロントバッファ(かバックバッファ)を
直接取得して録画してるみたいなんですが、どうやって取得しているのかその挙動が良く分かりません。
最初はSetWindowsHookEx()で全プロセスにdllをマッピングして、PEヘッダを見て
Direct3Dの初期化関数(Direct3DCreate8()等)を見つけたらフックして、
出てきたインターフェース(IDirect3DDevice8等)のGetFrontBufferData()を呼び出して
フロントバッファをコピーしているのかと思ったのですが、PEヘッダが暗号化されて
INTにDirect3DCreate8等が存在しないゲーム(具体的にはMaster of Epicというゲームです)でも
ちゃんと録画が可能な上に、この方法だとゲーム起動前にキャプチャプログラムを
起動しないといけない(Direct3DCreateをゲームが呼び出す前にフックしないといけない)ので
ゲーム起動後に起動してもちゃんと動作するFraps等では違った技法を使ってると思うのですが、
その方法がどうしても思い浮かびません。漠然とですがもしかしてIDirect3DDeviceには
メモリ検索で探せるような特定のメモリパターンがあるのかな?と思ったりするのですが…
ご存知の方いらっしゃいましたら是非ご教授お願いしたいです。

しかし…見返してみると…長文杉でホント申し訳ないorz


369 :デフォルトの名無しさん:2006/11/25(土) 10:15:20
>>368
CLSID乗っ取って、アプリとDirectXの間に一枚噛ませてるんじゃね?

370 :デフォルトの名無しさん:2006/11/25(土) 11:10:56
>>360
dクス

371 :デフォルトの名無しさん:2006/11/25(土) 11:13:18
エクスプローラでファイルを自ウィンドウにD&Dして、フォルダパスを取得することはできるのですが、
逆に自ウィンドウからD&Dして(Spy++のファインダツールのように)エクスプローラを指定→
フォルダパスを取得する方法はどのようにすればいいですか?

アドレスバーから取得する方法を試してみたのですが、
非表示の環境の場合に取得できないのでうまくいきませんでした。
CabinetWClass
-WorkerW
-RrBarWindow32
-ComboBoxEx32
-ComboBox
-Edit ←ここにWM_GETTEXTを投げてみました

372 :デフォルトの名無しさん:2006/11/25(土) 12:12:13
>>371
無理じゃね?
DnDのファイルコピーとかのオペレーションは受けとり側が操作するから。
ターゲットソースは受け取り側にファイル名渡すだけ。

373 :デフォルトの名無しさん:2006/11/25(土) 13:00:10
イベントの飛ぶ順序ってどの本に載ってるの?

例えばダイアログをリサイズしたときに、
どういうイベントがどういう順番で飛ばされるのか、などを知りたいのだけど

374 :371:2006/11/25(土) 13:02:15
>>372
そうですか(´・ω・`)
残念。。

375 :デフォルトの名無しさん:2006/11/25(土) 13:07:11
>>373
つ[Spy++]

376 :デフォルトの名無しさん:2006/11/25(土) 13:08:45
>>373
MSDN
>Size and Position Messages
ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowfeatures.asp

377 :デフォルトの名無しさん:2006/11/25(土) 14:27:21
>>368
全く同じことしようとしている人がいて驚愕>MoE


378 :デフォルトの名無しさん:2006/11/25(土) 16:02:34
簡単なサンプルプログラムをコンパイルするのに、
>cl test.c user32.lib gdi32.lib

みたいに*.libっていうファイルをリンクしないとエラーが出るんですが、
これって静的リンクになっちゃってるってことですか?

379 :デフォルトの名無しさん:2006/11/25(土) 16:48:20
そのLIBはDLLへの参照を含んでいるインポートライブラリ。
静的ライブラリがリンクされているわけではない。

380 :デフォルトの名無しさん:2006/11/25(土) 17:17:15
>>379
なるほどそうなんですか。
.libファイルをインポートライブラリ・スタティックリンクライブラリと
見分ける方法でもあるのかな??

381 :デフォルトの名無しさん:2006/11/25(土) 17:43:15
>>380
dumpbinでどうよ?詳しく使った事無いけど。

382 :デフォルトの名無しさん:2006/11/25(土) 17:55:00


383 :デフォルトの名無しさん:2006/11/25(土) 18:55:14
>>381
dumpbinは有料のVS買わないと付いてこないみたいですね。

.libの中でも、
インポートライブラリというのはシンボルテーブルだけのオブジェクトファイルのアーカイブ
静的リンク用ライブラリは実コードも入ったオブジェクトファイルのアーカイブ

ってことで、arなんかのツールでファイル取り出してobjdumpして確認するのがいいみたいですね。

384 :デフォルトの名無しさん:2006/11/25(土) 18:56:19
他のプロセスで作ったメモリデバイスコンテキストのハンドルを自分に渡して
自分からメモリデバイスコンテキストを使うことはできる?

フックと併せて作ったんだけどローカルではできてもグローバルでは失敗する・・・

385 :デフォルトの名無しさん:2006/11/25(土) 19:45:42
HDCはローカルなハンドルなのでHDCを操作するのも対象のプロセス内で行う必要がある。

386 :デフォルトの名無しさん:2006/11/25(土) 20:18:16
>>385
なるほど。SendMessageで自分のウィンドウで処理した方が良さそうだな・・・

387 :デフォルトの名無しさん:2006/11/25(土) 20:44:20
>>374
http://www.geocities.com/SiliconValley/4942/cabmsgs.html
このページをShellGetPathで検索

388 :デフォルトの名無しさん:2006/11/25(土) 21:33:50
>>375-376
サンクス

389 :デフォルトの名無しさん:2006/11/26(日) 01:10:58
C#で遊んでるんですが、
参考にしているソースに"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とかありましたら教えてください


390 :デフォルトの名無しさん:2006/11/26(日) 01:20:29
PIDLを解放するのに使っているから、CoTaskMemFreeやMarshal.FreeCoTaskMemに相当するものだと思う。

391 :デフォルトの名無しさん:2006/11/26(日) 02:19:21
いまさらVS6が欲しくても
もう売ってない
どうすればいいの?

392 :デフォルトの名無しさん:2006/11/26(日) 02:21:34
Javaの関係でMSDNからも削除されてたな

393 :デフォルトの名無しさん:2006/11/26(日) 02:21:42
エアーVS6でガマンする

394 :デフォルトの名無しさん:2006/11/26(日) 03:14:06
>>368
メモリにロードされたあとにも暗号化されてるのか?

395 :名無しさん: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;
}
}

396 :デフォルトの名無しさん:2006/11/26(日) 03:54:31
>>395
IMEをオンにするコードはどこにあるんだよ

397 :395:2006/11/26(日) 04:06:23
395です。
>>396さん
IMEをONにするコードがわからないのですが、、、
ご教授尾根がいします。

398 :デフォルトの名無しさん:2006/11/26(日) 04:12:22
while(1){
MessageBox(NULL, "IMEをONにしてください", "", MB_OK);
if(MessageBox(NULL, "IMEをONにしましたか?", "", MB_YESNO | MB_ICONQUESTION) == IDYES) {
break;
}
}

399 :デフォルトの名無しさん:2006/11/26(日) 04:14:58
>>397
というか最初からそれを聞けよwwwwww
IMEの操作なら>>4の猫でもわかるをみとけ

400 :デフォルトの名無しさん:2006/11/26(日) 04:15:29 ?2BP(0)
>>395
ImmSetOpenStatus

401 :395:2006/11/26(日) 04:22:14
>>396 >>400

ご教授ありがとうございます。
完成したら、報告します。

402 :デフォルトの名無しさん:2006/11/26(日) 06:49:25
所詮、マルチ厨なんてこの程度か

403 :デフォルトの名無しさん:2006/11/26(日) 11:22:27
>>369
CLSID乗っ取り…というのが良く分からないのですが、
IDirect3DDeviceのCLSIDを書き換えるという感じでしょうか?(超適当)
実はCOMはバイナリ互換のコンポネートモデルであるという程度しか
知識が無いもので、お恥ずかしながらその辺りの応用に疎いのです。

>>377
なんと同じ事をしようとしている人が居るとは!
プログラム自体はキャプチャプログラムをMoEに限定するならd3d8.dllクローンを作って
偽Direct3DCreate8を作れば簡単にMoEのフロントバッファは取得出来るのですが、
Fraps等はどうやって認識しているんだろうな〜という知的好奇心から質問させてもらいました。

>>394
ちょっとグレーな話になるんですが、ゲームはASProtectで圧縮されてるみたいで、バイナリ自体を見ても
インポートされてる関数が明らかに少ないのです(おそらく元インポートテーブル展開用ルーチン)。
そしてロードされた後(正確にはゲームウィンドウが出た時)のメモリ上のヘッダでは、
INTが消されてIATがあるだけという状態になっています。もちろんIATがあるならd3d8.dllの
Direct3DCreate8をGetProcAddressでアドレスを取得し、アドレスを決め打ちで書き換えてもいいんですが、
どうもIATの展開が終わった時には既にD3Dの初期化は完了しているみたいで、
IATを書き換えた所でDirect3DCreate8を呼び出される事はありませんでした。

また長文で申し訳ない。
もっと簡潔に書けないのか自分はorz

404 :389:2006/11/26(日) 11:45:34
>>390
レスありがとう
pidlはいつもCoTaskMemFreeで解放するものなんですか?

405 :デフォルトの名無しさん:2006/11/26(日) 12:12:35
DDEってまだ使えるのかね

406 :デフォルトの名無しさん:2006/11/26(日) 12:17:36
>>403
>CLSID乗っ取り…というのが良く分からないのですが
CoCreateInstanceとかはレジストリを見てCLSIDから必要なdllやexeをロードするわけだから
DirectXのCLSIDに自分のモジュールを登録しておくの。
やったことないし、できるのかもわからんけど。

407 :デフォルトの名無しさん:2006/11/26(日) 12:18:32
>>404
MSDN読め

408 :デフォルトの名無しさん:2006/11/26(日) 12:57:39
>>403
Sorceforgeあさってて見つけたんだが
http://sourceforge.net/projects/taksi/
これは参考にならんかね

409 :デフォルトの名無しさん:2006/11/26(日) 12:58:44
>>405
Vistaでは使えない。

410 :デフォルトの名無しさん:2006/11/26(日) 13:17:03
>>409
NetDDE が使用不能になるってのは見つけたが、DDE そのものが使用不能になるって記事が見つからんのだが。

411 :デフォルトの名無しさん:2006/11/26(日) 13:32:20
DDE使えなくなったら動かなくなるアプリが大量にでないか?

412 :デフォルトの名無しさん:2006/11/26(日) 13:40:24
もともと動かなくなるアプリ大量にあるから問題なくね?

413 :デフォルトの名無しさん:2006/11/26(日) 13:45:38
今ちょっと試してみたら、
VistaのエクスプローラのフォルダウインドウじゃDDE使ってないみたいね
レジストリ(HKEY_CLASSES_ROOT\Folder)もなくなってる

>>389
も無駄な技術になったか

414 :デフォルトの名無しさん:2006/11/26(日) 13:46:23
>>410-411
実際、Vistaで動かしてみそ。ほとんど動かないから。(DDEサーバーがほぼ使えない)
ただ、中途半端にスダブが残っているので、その機能だけなら動くけど

415 :デフォルトの名無しさん:2006/11/26(日) 14:22:44
もしかすっとIE7にDDEでURL渡せないとか?

416 :デフォルトの名無しさん:2006/11/26(日) 15:14:15
>>408
DLL Injecttionで相手先のIDirect*インターフェースの
vtable乗っ取りしてるっぽいね。やっぱりこれしかないか

417 :デフォルトの名無しさん:2006/11/26(日) 15:31:53
めんどくさいなぁ。
いくつか書き直さないといけなくなるな。

418 :デフォルトの名無しさん:2006/11/26(日) 15:51:32
DDEって良く分からんが、何のためにあるの?

419 :デフォルトの名無しさん:2006/11/26(日) 15:54:22
お気楽プロセス間通信と理解している

420 :デフォルトの名無しさん:2006/11/26(日) 15:59:04
IPCは
・DDE
・window message
・named pipe(NT系)
・DCOM
が用意されてるんだが
DCOMはレジストリがウザい
named pipeは98系で使えない
ってことでwindow messageかddeになるのよね
他にあったら教えてたもれ

421 :デフォルトの名無しさん:2006/11/26(日) 16:03:04
socket
mailslot
RPC

後者2つは使ったこともないが

422 :デフォルトの名無しさん:2006/11/26(日) 16:06:57
名前なしのパイプ
メールスロット
RPC
(メッセージの一種だけど)WM_COPYDATA

423 :デフォルトの名無しさん:2006/11/26(日) 16:14:58
これこれ、共有メモリを忘れていますよ

424 :デフォルトの名無しさん:2006/11/26(日) 16:21:21
>>423
イベント通知ができません...

425 :デフォルトの名無しさん:2006/11/26(日) 16:56:40
>>424
名前付きイベントと組み合わせれば・・・

426 :デフォルトの名無しさん:2006/11/26(日) 17:06:45
>>406
成程、CoCreateInstanceはレジストリのCLSID見てモジュールをロードするんですか、勉強になります。
しかしDirect3Dに関してはCOMで作ってるクセにDirectX8からCOMを逸脱しているらしく
CLSIDが登録されていない(=CoCreateInstanceでインスタンスを作れない)みたいです。
なんでこんな仕様になったのか理解不能なんですが、ともあれCLSIDからの乗っ取りアプローチは
Direct3D8に関しては無理みたいです(´・ω・`)

>>408
おお…これは、すごい。動画処理をVfWでやってるのが多少残念ですが(僕のプログラムでも
最初の実装ではVfWでしたが、処理が遅い+マルチスレッドを想定していないらしく、
プログラミングしづらい上に、2GB制限等のユーザー側の利便性を損なう欠点が多々見つかった事から、
DirctShowへの乗り換えを検討しています。)参考になりそうな部分はとても多いです。
実は僕C++は始めたばかりで、テンプレートクラス等個人的に見慣れない部分はありますが
がんばって解読してみようと思います。情報有難うございました。

そろそろ長引いちゃってアレなのでこの辺りで消えます。
付き合ってくださった皆さん本当に有難うございましたm(_ _)m

427 :デフォルトの名無しさん:2006/11/26(日) 17:07:34
つまりwin9xしねばいいのにってことだな

428 :デフォルトの名無しさん:2006/11/26(日) 17:14:50
>>413
Firefoxでフォルダ開くとどんどん新しい窓ができるのはそのせいカー

429 :デフォルトの名無しさん:2006/11/26(日) 17:15:33
>>426
多分知ってると思うが
ttp://saw.minidns.net/software/
DirectXのHookはこれも参考になる

430 :デフォルトの名無しさん:2006/11/26(日) 17:18:25
今SetWindowPosを使ってWindowを常に最前面に出しているのですが
フルスクリーンのゲームなどより前に出てきません。
フルスクリーンより前に持ってくることはできるのでしょうか?

431 :デフォルトの名無しさん:2006/11/26(日) 17:24:15
>>430
ゲームがフルスクリーンになったあとに最前面にもってくる

432 :デフォルトの名無しさん:2006/11/26(日) 17:29:58
>>431
ゲームを起動した後に起動するということですよね?
それをしても負けてしまうのです;

433 :デフォルトの名無しさん:2006/11/26(日) 18:04:40
>>432
タイマーで定期的に最前面にもってきてもだめか?

434 :デフォルトの名無しさん:2006/11/26(日) 18:07:09
誰一人、ゲームが再描画の度に最前面に持ってきているのでは
という事に、ツッコミを入れない件について

435 :デフォルトの名無しさん:2006/11/26(日) 18:23:17
>>433
タイマーで呼んだらきました。WM_CREATEでつくってそれっきりでした。
ありでした

436 :デフォルトの名無しさん:2006/11/26(日) 18:29:51
>>434
そんなコード誰も書かないだろ
常識的に考えて

437 :デフォルトの名無しさん:2006/11/26(日) 18:33:16
プログラマの常識的に考えて〜〜しない
そんな風に考えて(ry

まあ、解決したようでなによりだけどな

438 :デフォルトの名無しさん:2006/11/26(日) 18:33:51
すまんな
SetWindowPosで最前面にできないなら、ゲーム側で
何かしているとしか、考えられない。

それに、ベクターにいけば、そんなウンコアプリなんて
いくらでも存在してるから、恐ろしいのだよ。

439 :デフォルトの名無しさん:2006/11/26(日) 19:28:40
Createじゃタイミングが悪いんじゃないの?
まだウインドウないんだし

440 :デフォルトの名無しさん:2006/11/26(日) 19:38:35
いやフルスクリーンのゲームもまた最前面ウィンドウなんだから
最後にアクティブになるゲーム画面が前面に出ちゃうでしょ
だからフルスクリーンになった後に最前面化させないと出てこない

441 :デフォルトの名無しさん:2006/11/26(日) 20:31:06
ゲームのウィンドウをオーナーに指定すれば必ず手前に出る

442 :デフォルトの名無しさん:2006/11/26(日) 20:40:21
DirectXのフルスクリーンだと、どうしようもないんじゃね?

443 :デフォルトの名無しさん:2006/11/26(日) 20:41:32
フルスクリーンだとGDIのクリッピングを無視するから
ゲームの描画で上書きされる可能性はあるけど
ウィンドウマネージャ的には手前に出せる

444 :デフォルトの名無しさん:2006/11/26(日) 21:08:40
Vistaはまた挙動が違うんだろうなあ・・・

445 :デフォルトの名無しさん:2006/11/26(日) 21:12:10
ウィンドウズプログラムで質問したい事があります。
開発環境はVS2003です。SDKで作っています。

リストビュー(レポート)の中でドラッグの開始位置と終了位置のアイテムとサブアイテムを取得するために、
リストビューをサブクラス化してWM_LBUTTONDOWNとWM_LBUTTONUPを受け取ろうとしたのですが、
WM_LBUTTONDOWNは通知されるのに、WM_LBUTTONUPはプロシージャに通知されず困っています。
WM_LBUTTONUPを取得する方法を教えていただけないでしょうか?

446 :デフォルトの名無しさん:2006/11/26(日) 21:22:00
VistaのAeroモードでウィンドウの内容をBitBltすると
画面外の情報もちゃんと取れたのにちょっと感動

447 :445: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);

よろしくお願いいたします。

448 :デフォルトの名無しさん:2006/11/26(日) 21:38:59
試しにSpy++でマイコンピュータのリストビューのメッセージを見てみたが
ちゃんと、LBUTTONDOWN→MOUSEMOVE→LBUTTONUP来てたがね
まぁ、何かやってることがおかしいんだろうけど・・・

449 :デフォルトの名無しさん:2006/11/26(日) 21:57:43
フルスクリーンうぜぇ。
画面全体を有効に使っているならまだしも、
黒いスペースが埋められているだけだし。
せめてタクスバーを残してくれ。

450 :445:2006/11/26(日) 22:18:17
>>448
問題のプログラムをSpy++で覗いた所WM_LBUTTONUPは発行されていました。

ためしに
return CallWindowProc(DefListProc,WH_Window,msg,wp,lp);

return DefWindowProc(WH_Window,msg,wp,lp);
に変えてみたところ、WM_LBUTTONUPメッセージを取得できました。

リストビューのプロシージャが悪さをしているようなので、調べてみます。
ありがとうございました。

451 :デフォルトの名無しさん:2006/11/26(日) 23:35:16
教えてください。

CreateWindowExで拡張ウィンドウスタイルを使わないようにするには
CreateWindowを使えばいいんですがExのみを使うっていう前提の場合、
CreateWindowEx(NULL,・・・);でいいんでしょうか?


452 :デフォルトの名無しさん:2006/11/26(日) 23:55:05
>>451
イエス。拡張ウィンドウスタイルは(普通のスタイルもそうですが)スタイルを示すビットフラグの
論理和で示されるので、全てのビットが0=NULLを指定すれば拡張ウィンドウスタイルは無効になります。

正確には、なると思います。実際やって見た事がないので。

453 :451:2006/11/27(月) 00:08:22
>>452
ありがとうございます。

WS_EX_LEFT
WS_EX_LTRREADING
WS_EX_RIGHTSCROLLBAR

の定義も0x00000000なんですがこれはデフォルトでそうなってると解釈しました。

454 :デフォルトの名無しさん:2006/11/27(月) 00:15:24
>>453
その通り。それらは拡張スタイルを指定しなくても自動でそうなっているスタイル、
要するに拡張スタイルの指定と対比させるために敢えて定義された定数です。


455 :デフォルトの名無しさん:2006/11/27(月) 00:26:34
>>451
細かいことと思うかもしれないが、NULLはポインタ専用だ。そこには0使え。

456 :デフォルトの名無しさん:2006/11/27(月) 00:27:13
>>455
haxa?

457 :451:2006/11/27(月) 00:28:33
>>455
その辺はワーニング対策で#define DF_NULL 0x00000000を定義してそれ使ってます。

458 :デフォルトの名無しさん:2006/11/27(月) 00:44:57
CreateWindowは0Lを渡してるな。

459 :デフォルトの名無しさん:2006/11/27(月) 04:39:11
ものすごく見当違い名事をいってたらすいません
この先、microsoftが提供する開発環境って
platform sdk が無くなって、.net flameworkだけになるってことはありますか?

ちょっと疑問に思っただけなんですが

460 :デフォルトの名無しさん:2006/11/27(月) 04:51:25
Platform SDKと.NET Framework SDKはすでに統合されてWindows SDKになったけど
従来のPlatform SDKの内容(+Vistaの新API)は今のところそのまま入ってる。
将来的には(かつてのWin16 APIみたいに)Win32 APIはWDKに追いやられて
ユーザーモードアプリはWinFX API一本になるということもあるかもね

461 :デフォルトの名無しさん:2006/11/27(月) 06:56:20
CreateWindowも実は、CreateWindowExのマクロだからな・・・
ウィンドウ関係のAPIラッパクラスを作ってる時にはじめて知ったわ

462 :デフォルトの名無しさん:2006/11/27(月) 12:08:07
>>445
LVN_BEGINDRAGでメッセージループを廻しているかDoDragDropしているのか

463 :デフォルトの名無しさん:2006/11/27(月) 12:38:15
354と似た話になりますが、スクリーンセーバーのパスワード保護の
チェックが付いているかどうかって、レジストリから確認できるの
でしょうか。

464 :デフォルトの名無しさん:2006/11/27(月) 13:04:26
PC初心者
http://pc7.2ch.net/pcqa/
Windows
http://pc8.2ch.net/win/

465 :デフォルトの名無しさん:2006/11/27(月) 14:13:54
>>463
HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveActive

466 :465:2006/11/27(月) 14:16:37
>>463
間違えた・・・・
HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaverIsSecure
だ。


467 :デフォルトの名無しさん:2006/11/27(月) 18:31:49
質問いたします.
クリップボード内のデータの履歴を取り,再利用するものを想定しています.
テキストだけでなく,画像やリンクなどを含めたデータをクリップボードから取り出し,
保存するにはどのようにしたらよいでしょうか?

468 :デフォルトの名無しさん:2006/11/27(月) 18:42:38
調べたらわかりそうな気がするんだけど

469 :デフォルトの名無しさん:2006/11/27(月) 18:47:21
>>467
取り出すのはOpenClipboard, EnumClipboardFormats, GetClipboardDataなど。
保存は御自由に。
わからない事をもっと具体的に端的に質問することをお勧めします。

470 :デフォルトの名無しさん:2006/11/27(月) 18:49:52
http://pc8.2ch.net/test/read.cgi/tech/1162215248/817

471 :デフォルトの名無しさん:2006/11/27(月) 22:01:30
>>455
今の規格上はNULLはゼロと同じ。

472 :デフォルトの名無しさん:2006/11/27(月) 22:04:37
そういう問題じゃ無いと思うが

473 :デフォルトの名無しさん:2006/11/27(月) 22:11:36
じゃあどういう問題なんだ?

474 :デフォルトの名無しさん:2006/11/27(月) 22:30:47
FtpGetFile()でのダウンロード処理って途中で中断できないんでしょうか。
他にFtpでのダウンロードを中断する方法があったら教えてください。
お願いします、ほんとに。

環境はWinXP+VS2005のMFC+SDKです。
Win2000以降のみ対応できればよいです。

475 :デフォルトの名無しさん:2006/11/27(月) 22:36:06
NULLはOSによっては0じゃない場合もあると昔聞いた事がある。-1も有りうると。記憶が頼りだけど。

476 :デフォルトの名無しさん:2006/11/27(月) 22:37:49
NULLが実行環境に依存するのか?
コンパイラによって、ならまだ解るが。

477 :デフォルトの名無しさん:2006/11/27(月) 22:39:24
折角Win32APIスレなのに

478 :デフォルトの名無しさん:2006/11/27(月) 22:40:31
実行環境には依存しないがな
コンパイル環境によっては0じゃない場合もあるのは確か

479 :デフォルトの名無しさん:2006/11/27(月) 22:51:25
>>474
WinINet使えば?

480 :デフォルトの名無しさん:2006/11/27(月) 22:59:04
が、うまくゼロであるとみなせるようにすることが規格として求められてる。 <NULL

481 :デフォルトの名無しさん:2006/11/27(月) 23:03:28
C と C++ でも違うんじゃなかったっけか

482 :デフォルトの名無しさん:2006/11/27(月) 23:21:24
ぬるぽの話題ここまで

483 :デフォルトの名無しさん:2006/11/27(月) 23:26:00
■━⊂( ‘ー‘)☆彡 ガッ☆`Д´)ノ

484 :デフォルトの名無しさん:2006/11/27(月) 23:58:51
>>467>>769
OleGetClipboardのほうが形式を考えなくてすむから楽だと思うぞ。

485 :デフォルトの名無しさん:2006/11/28(火) 01:24:15
>>460
大変遅くなって申し訳ありませんがレスをいただきありがとうございました。
恥ずかしながらWindows SDKやWinFX APIというのは意味をよく知りませんでしたので
勉強になりました。ありがとうございます。

486 :デフォルトの名無しさん:2006/11/28(火) 02:47:44
>>475
内部表現の話とごっちゃにしてる。ここはWin32 APIスレだし。
それともWin32sではヌルポインタをアクセス違反にするためWin32アプリから見える
アドレスとVxDから見えるアドレスが64KBずれてるなんてトリビアを話したいのか。

487 :デフォルトの名無しさん:2006/11/28(火) 06:49:16
>>479
具体的にはどの関数を使えば…

488 :デフォルトの名無しさん:2006/11/28(火) 08:40:42
Win32環境だと0番地でいいけど、セグメンテーションだかの関係で0じゃない環境もあると聞いたな。

489 :デフォルトの名無しさん:2006/11/28(火) 08:52:56
NULLは、あくまでも無効(?)番地であって。数値の0をマクロで使えるようにしたものじゃない。
目的と手段を逆に取り違えている奴が世の中多すぎ。

490 :デフォルトの名無しさん:2006/11/28(火) 08:59:10
NULLが0なのではなく、0がNULLなのです。

491 :デフォルトの名無しさん:2006/11/28(火) 09:04:36
どうでもいい

492 :デフォルトの名無しさん:2006/11/28(火) 09:38:17
某流出ソースの中見てみたら数値の0として使ってますよ。

493 :デフォルトの名無しさん:2006/11/28(火) 09:42:13
「Half Life 2」のソース?

494 :デフォルトの名無しさん:2006/11/28(火) 09:45:11
>>487
それぐらい自分で調べろよ。

495 :デフォルトの名無しさん:2006/11/28(火) 09:52:26
HOGE* p = 0;
は、ヌルポインタの値が0でなくても、コンパイラによってその型のヌルポインタの値に変換される
と聞いたことがある。
だからC++ではNULLと0は等価らしい。

496 :デフォルトの名無しさん:2006/11/28(火) 10:23:31
MSDNのsdkのサンプルでこんなのが見つかるけど
FONTEDIT\FONTEDIT.C(566): (HWND)NULL, /* no parent */
FONTEDIT\FONTEDIT.C(567): (HMENU)NULL, /* use class menu */

497 :デフォルトの名無しさん:2006/11/28(火) 10:26:15
おまえらぬるぽ好きだな

498 :デフォルトの名無しさん:2006/11/28(火) 10:28:52
>>474
Wininetよく知らないからなんともいえないけど、
FtpOpenFileとInternetReadFileでやるんじゃない?

もしGUIアプリ作ってるんなら、これをスレッドでやる方法と
内部でメッセージループでやる方法があると思う。

結構大変だよ。

499 :デフォルトの名無しさん:2006/11/28(火) 11:19:22
>>496
SDKは空ハンドルにもNULL使うよな

500 :デフォルトの名無しさん:2006/11/28(火) 11:40:40
>>499
それとは別に INVALID_HANDLE_VALUE も使うし ややこしい

501 :デフォルトの名無しさん:2006/11/28(火) 11:48:35
単なる仕様概念の違いやん

502 :デフォルトの名無しさん:2006/11/28(火) 12:16:52
ES_NUMBERを付けた単一行エディットコントロールに文字列をクリップボードからペーストするとしっかり文字列が入っちゃうんですが、
CM_TEXTCHANGEでチェックするしかないんでしょうか‥‥

503 :デフォルトの名無しさん:2006/11/28(火) 12:52:52
ダイアログでエディットを数個配置して
エンターキーで次のエディットにフォーカスを移動
させようと思っています。

サブクラス化されたウィンドウプロシージャでイベントを
捕まえてSetFocusで移動はできるのですが、
TABキーを送ってまとめて処理したいです。

TABキーの送り方を教えてください。

504 :デフォルトの名無しさん:2006/11/28(火) 12:55:27
>>496
ハンドルはOSが内部で確保する構造体へのポインタだからなんだよ。

505 :デフォルトの名無しさん:2006/11/28(火) 13:36:38
>>496
DWORDの引数にNULLを渡すのはおかしいという話題なのに、
なぜいきなりポインタであるハンドルの話を出してきたのか。

506 :デフォルトの名無しさん:2006/11/28(火) 14:44:11
質問させてください、
COM風の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を解放することはそもそも原理的にダメなのでしょうか?
そのあたりの理屈が知りたいので、よろしければ教えてください。

507 :デフォルトの名無しさん:2006/11/28(火) 15:14:56
>>506
そのDLLを解放するコードIHOGE::Releaseは、解放しようとしているDLLにあるわけで。
列車が走ってるレールを破棄するようなもんだ。

508 :デフォルトの名無しさん:2006/11/28(火) 16:29:21
>>503 WM_NEXTDLGCTL使えば楽できる。たぶん。

509 :デフォルトの名無しさん:2006/11/28(火) 16:49:18
>>506
やるとしたら、一時的にスレッドを作って(そのスレッドはDLL内の関数で良い)、
そこでFreeLibraryAndExitThreadを呼ぶという方法がある。

ちなみに本物のCOMでは、COMがDLLを管理している。
(ある程度はDLL自身も制御できるが、直接FreeLibraryを呼ぶという事態はない)

510 :デフォルトの名無しさん:2006/11/28(火) 16:54:59
FreeLibraryAndExitThreadって初めて見たとき、
こんなもん何に使うんだよwwwwwってなるよな。

511 :デフォルトの名無しさん:2006/11/28(火) 17:09:58
>>509
FreeLibraryAndExitThread呼ぶスレッドをIHOGE::Release()で作っても
FreeLibraryAndExitThreadが呼ばれる前にIHOGE::Release()から抜けて
EXE側のコードに戻らないとダメだな。

512 :デフォルトの名無しさん:2006/11/28(火) 17:29:18
>FreeLibraryAndExitThread 関数は、次のように実装されています。
>FreeLibrary(hModule);
>ExitThread(dwExitCode);
こんな感じで実装されてるってだけのことだろうが酷い説明だな

513 :デフォルトの名無しさん:2006/11/28(火) 17:38:49
俺も510と同じだった。
でもAdvanced Windowsにはきちんと使い方が書いてあったよ。


514 :デフォルトの名無しさん:2006/11/28(火) 17:57:40
モーダレスダイアログに付いて質問なのですが
メニューバーからダイアログの表示
ShowWindow( hDlg, SW_SHOW )
を使用すると何故か↓の様に、ダイアログから下の部分が更新されていません。
http://gamdev.org/up/img/8238.jpg

ダイアログが親?ウィンドウより外側に持って行くか
キーボードを押してSW_SHOWを呼び出す様な処理の場合は
問題なく全体を更新します。

メニューバーまたはメッセージに何かしらあるのでしょうか。

515 :デフォルトの名無しさん:2006/11/28(火) 18:06:40
>>514
WM_PAINTの処理がおかしいだけじゃない?
BeginPaint使わないで、ValidateRect(hWnd, NULL)してるとか。

516 :デフォルトの名無しさん:2006/11/28(火) 18:19:51
路線バスってすれ違う時に挨拶するでしょ。
ハンドルから手を離して挨拶するって危険なんじゃないかって
思うんだ。しかし、運転士たちは危ないと思ってない。

ここに行って
http://hobby7.2ch.net/test/read.cgi/bus/1162901425

挙手してんじゃねえよ

って教えてあげて。よろしくお願いしますね。

517 :デフォルトの名無しさん:2006/11/28(火) 18:24:32
あれってバスジャックとか異常事態がないかの合図じゃないの?
それはそれで表示板にそういうのあるんだっけ?

518 :514:2006/11/28(火) 19:01:47
>>515
WM_PAINTは使ってないですが
ちょいと調べてみます。有難うございます。

現在のメッセージ処理
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
if( !DialogMessage( &msg ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
else
{
Update();
Render();
Sleep( 1 );
}

519 :デフォルトの名無しさん:2006/11/28(火) 19:26:22
>>508
楽できました。ありがとう。

520 :デフォルトの名無しさん:2006/11/28(火) 21:18:18
Visual Studioでデバッグするとき使える「ステップアウト」は
Win32API的にはどのように再現できるでしょうか?

521 :デフォルトの名無しさん:2006/11/28(火) 21:37:25
return

522 :514:2006/11/28(火) 21:43:43
WM_PAINTに持って行きましたが、結果は変わらず。
メニューバーに触れると、SSの様な事態になるので
メニューバーの使用をやめるか、モーダルダイアログにするなりしてみます。

523 :520:2006/11/28(火) 22:12:13
>>521
確かに自プロセスならreturnでことたりるのですが
Visual Studioのような他プロセスがどうのような方法で
ステップアウト等の処理をしてるか分かりません

524 :デフォルトの名無しさん:2006/11/28(火) 22:16:31
君には無理。

525 :デフォルトの名無しさん:2006/11/28(火) 22:18:35
そもそもVSはOSの製造元が作ってるわけで

526 :520:2006/11/28(火) 22:45:34
>>525
でもボーランドのIDEでも同じようなことできますよね?

527 :デフォルトの名無しさん:2006/11/28(火) 22:55:48
>>526
>>524


528 :デフォルトの名無しさん:2006/11/28(火) 23:08:43
>>523
驚いたことに最近はね、プロセッサ例えばPentium(というかi386からだけど)
の中にはデバッグレジスタ(DRレジスタ)なるものが存在するんだよ。
どう使うのかは知らんw
さわらぬ神にタタリなしww

529 :デフォルトの名無しさん:2006/11/28(火) 23:24:37
>>476
例えばだけど、0番地付近がシステムで予約されている場合とかさ。
そういう環境用のコンパイラはきっとNULLを-1とかにするんだろうね。

530 :デフォルトの名無しさん:2006/11/28(火) 23:37:19
>>529
内部表現が-1でもC/C++のソース上は常に0。

531 :デフォルトの名無しさん:2006/11/28(火) 23:45:13
>>530
C++は、じゃない?

532 :デフォルトの名無しさん:2006/11/28(火) 23:47:48
ああ、C言語だと (void*)0 な場合もあるな。
でも 0 の部分がほかの数値になることはない

533 :デフォルトの名無しさん:2006/11/28(火) 23:53:19
だとすれば、数値の0として使えるのか。

534 :デフォルトの名無しさん:2006/11/29(水) 00:09:19
(void*)0 な実装の存在を考えると NULL を数値の 0 として使うのは移植性がない。
ただしポインタであるべき文脈で 0 を使ってもいいことは保証されてる。

535 :デフォルトの名無しさん:2006/11/29(水) 00:18:08
>>528
デバッグレジスタへのアクセスはリアルモードなどの状態でしか許されていない
そのかわりWaitForDebugEventとかいうAPIが提供されてるがどう使うか分からん
どっちにしろさわらぬ神にタタリなしww

536 :デフォルトの名無しさん:2006/11/29(水) 00:28:13
( ´∀`)<ぬるぽ

537 :デフォルトの名無しさん:2006/11/29(水) 00:32:52
C#でPInvokeするとき、NULLを渡したいとき
IntPtr.Zero渡していいのかな?
C#はよく知らんが

538 :デフォルトの名無しさん:2006/11/29(水) 00:33:55
>>535
OllyDbgは余裕でハードウェアブレークポイント提供してますが何か?

539 :デフォルトの名無しさん:2006/11/29(水) 00:39:28
>>537
Win32の世界に限ればNULLは内部表現も0であると決め付けてまったく問題ない
>>538
MS純正のi386kdにもあると思う

540 :デフォルトの名無しさん:2006/11/29(水) 00:57:46
実際Microsoftでのサンプルコードでも0として使われてるから
NULL使っててもいいんじゃないか?

>>539がいうように"Win32の世界に限れば"な

541 :デフォルトの名無しさん:2006/11/29(水) 01:03:20
>>536
どさくさに紛れやがって・・・・

ガッ!!!


542 :デフォルトの名無しさん:2006/11/29(水) 01:08:02
数値としての0を定義するマクロってあるかな?ZEROとか?
とりあえず開発環境で定義されている、MB_OK辺りでも使っとくか。
ポインタよりは、数値の定義という点でマシだから。

543 :デフォルトの名無しさん:2006/11/29(水) 01:14:42
hWnd=CreateWindowEx(MB_OK, "MyWndClass",…
テラワロス

544 :デフォルトの名無しさん:2006/11/29(水) 01:35:17
if(a-b == MB_OK)
  DrawText((hdc, MB_OK, MB_OK, "かんべんしてください",10);

545 :デフォルトの名無しさん:2006/11/29(水) 01:54:22
ヌルポインタをわかっているつもりのやつもそうでないやつも全員ここ読め。
http://www.kouno.jp/home/c_faq/c5.html

546 :デフォルトの名無しさん:2006/11/29(水) 03:08:49
for( i=MB_OK; i<10; i++)
for( j=MB_OK; j<10; j++)
for( k=MB_OK; k<10; k++)


547 :デフォルトの名無しさん:2006/11/29(水) 05:14:12
そもそもCでは10進数の0を表現できる手段がないのがいけない。

548 :デフォルトの名無しさん:2006/11/29(水) 05:15:54
>>547
( ゚д゚)

549 :デフォルトの名無しさん:2006/11/29(水) 08:38:36
NULLとかMB_OKだと、0以外の値にする必要が生じても定義を変えられないわけだから、
そんなものを使う意味は無いよな。独自定義か、そのまま0でおk。

550 :デフォルトの名無しさん:2006/11/29(水) 11:28:22
>>514
ダイアログのCS_SAVEBITS。Saveされた絵を無効にすればいい。
それと、メニュー表示時は518のメッセージループを通らない。
あと、WM_PAINTハンドラはあった方がいい。

551 :506:2006/11/29(水) 16:47:53
遅レスですみませんm(_ _)m
なるほど、ちゃんと方法があるんだなぁ・・・
と、思ったもののなかなかDLL側だけでどうこうというのは
難しいですね(´・ω・`)

少しSleepでもさせてからFreeLibraryAndExitThreadを呼ぶとか
そんな方法しかないかなぁ(->Release()だけで済ませたいなら)。

色々やってみます、ありがとうございました。

552 :デフォルトの名無しさん:2006/11/29(水) 21:54:46
スレ違いだけど

>>523
そもそも途中でreturnしたら関数の結果が変わるからNG

一般的には対象関数のreturn先にブレークポイントを敷いて
関数内ではステップ実行しない

本気で勉強したいならこちらをどうぞ
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756117457

553 :デフォルトの名無しさん:2006/11/29(水) 21:56:50
>>552
523じゃないけど音速で注文した

554 :520:2006/11/30(木) 01:43:58
>>552
注文したいけど品切れ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

なんかできそうな気がしてきた

555 :デフォルトの名無しさん:2006/11/30(木) 10:17:31
> pdb弄ぶライブラリ
なんて卑猥なライブラリなんだ

556 :デフォルトの名無しさん:2006/11/30(木) 11:28:02
>>512
亀だがwine検索してみたら

/***********************************************************************
* FreeLibraryAndExitThread (KERNEL32.@)
*/
void WINAPI FreeLibraryAndExitThread(HINSTANCE hLibModule, DWORD dwExitCode)
{
FreeLibrary(hLibModule);
ExitThread(dwExitCode);
}

  _, ._
( ゚ Д゚) マジで?

557 :デフォルトの名無しさん:2006/11/30(木) 11:37:14
>>556
バロスwwwwwwww
なんだこの関数wwwwwwwww

558 :デフォルトの名無しさん:2006/11/30(木) 11:40:37
イカスw

559 :デフォルトの名無しさん:2006/11/30(木) 12:42:42
DLL内で同じ事をするとFreeLibraryから帰ってきた瞬間に死亡するから有用なAPIだよ

560 :デフォルトの名無しさん:2006/11/30(木) 13:41:49
>>556
いや、そのコードで正しいんだよ。
>>559氏も書いているが、FreeLibraryAndExitThread()が
kernel32.dll内にあることに重大な意味がある。


561 :デフォルトの名無しさん:2006/11/30(木) 13:43:51
FreeLibraryAndExitThreadFreeLibraryAndExitThread.
ロード済みのダイナミックリンクライブラリ(DLL)の参照カウントを 1 減らし、
ExitThread ... VOID FreeLibraryAndExitThread( HMODULE hModule,
// DLL モジュールのハンドル DWORD dwExitCode // スレッドの終了コード); ...
www.microsoft.com/japan/developer/library/Jpwinpf/_win32_freelibraryandexitthread.htm - 4k -



562 :デフォルトの名無しさん:2006/11/30(木) 13:59:56
空気が読めない奴はこれだから

563 :デフォルトの名無しさん:2006/11/30(木) 14:14:22
空気は読むもんじゃない。
吸うもんだ。

564 :デフォルトの名無しさん:2006/11/30(木) 14:16:10
>>556
AdvancedWindowsでも、kernel32.dllの中で次のように実装されているといって、
全く同じコードが載せられている。

565 :デフォルトの名無しさん:2006/11/30(木) 22:28:25
FreeLibraryでエラーでたらどうすんの?

566 :デフォルトの名無しさん:2006/11/30(木) 22:41:15
>>560
ああ成程。kernel32からFreeLibraryとExitThread投げてくれるから
ちゃんと解放してくれるわけか。勉強になった。

567 :デフォルトの名無しさん:2006/12/01(金) 00:37:17
Sleep(INFINITE)
で質問なのですが
INFINITEで無制限待機になったスレッドを起こす方法はないのでしょうか?

javaや.NET Frameworkのスレッドメソッドだと
sleep,join,wait 状態を解除するinterruptメソッドがあるのですが・・・
linux系の一部実装だとwakeupとかかな・・・?
ともかく、これに相当するようなWin32 APIはないのでしょうか。



568 :デフォルトの名無しさん:2006/12/01(金) 00:40:02
>>567
WaitForSingleObjectとかで待機させろよ

569 :デフォルトの名無しさん:2006/12/01(金) 00:46:30
>>567
SuspendThreadとResumeThreadってのがるけど、
あれ?自分をsuspendって出来るんだっけ?

570 :デフォルトの名無しさん:2006/12/01(金) 00:58:09
>>569
SleepとかWaitForSingleObjectとかしてちゃ何もできんだろ・・・
>>567は他スレッドから待機を終わらせる方法を聞いてるんじゃないのか?

571 :デフォルトの名無しさん:2006/12/01(金) 01:05:20
WaitForSingleObjectでいいだろ、常識的に考えて

572 :567:2006/12/01(金) 01:30:09
WaitForSingleObject,timeout=INFINITEで
ハンドルはセマフォ(1,1)あたりを渡す方法ですかね?



573 :デフォルトの名無しさん:2006/12/01(金) 01:31:42
createEvent

574 :569:2006/12/01(金) 01:50:53
>>570
Sleepする代わりにSuspendThread(自分)ってやったら
他スレッドから起こすことが出来るかな?と思って。
今、試せないからどうなるのか分からないので。

でもまあ、スレッド間で同期を取ることを考えると、
普通にWaitFor〜がいいとは思うけど。

575 :デフォルトの名無しさん:2006/12/01(金) 02:43:31
俺は普通に使ってる>Suspend自分

576 :デフォルトの名無しさん:2006/12/01(金) 09:48:30
待機だけじゃなくて、非常脱出もみたいから WaitForMultipleObjects で
寝るようにしてるな

577 :デフォルトの名無しさん:2006/12/01(金) 10:08:22
逆にSuspendって自分以外に使うの怖くない?
今何してるか分からん奴を突然止めてしまうのは気持ち悪い。

578 :デフォルトの名無しさん:2006/12/01(金) 11:25:49
ハァハァ、今ナニしてるの・・・?

579 :デフォルトの名無しさん:2006/12/01(金) 11:56:02
手術中の医者をSuspend
着陸直前のジャンボのパイロットをSuspend

580 :デフォルトの名無しさん:2006/12/01(金) 12:04:52
あの娘をSuspendしていろんな事を

581 :デフォルトの名無しさん:2006/12/01(金) 12:16:37
気づいたときにはTerminate

582 :デフォルトの名無しさん:2006/12/01(金) 12:17:56
>>578
        \(
        ∧_∧ ハァハァ
  シコ   ( ´Д`/"lヽ
      /´   ( ,人)
  シコ  (  ) ゚  ゚|  |  オナヌーしてます
      \ \__,|  ⊂llll
        \_つ ⊂llll
        (  ノ  ノ
        | (__人_) \


583 :デフォルトの名無しさん:2006/12/01(金) 13:44:42
reader/writer lockってvista以上でサポートかよ。
2000でもサポートしてくれよぉ。

584 :デフォルトの名無しさん:2006/12/01(金) 22:55:02
RSSチェッカーやメールチェッカーなどのプログラムでよく実現されていますが、
起動時(とか復元時)にウィンドウを表示しつつも
そのウィンドウがアクティブにならないで最前面に表示されるソフトは、
どういうやり方をしていますか?

585 :デフォルトの名無しさん:2006/12/01(金) 23:05:12
>>584
TopMostで表示して、ユーザーが触ったら元に戻す
とかすればええんちゃう?

586 :デフォルトの名無しさん:2006/12/01(金) 23:19:57
>>584
書き方が悪くて申し訳ない。
ただ、作業中のソフトから入力カーソルを奪わないで起動したかっただけなのです。
いろいろ試しているうちに、
SetWindowPosにSWP_NOACTIVATEというフラグがあるのを発見しました。
どうやら、これでうまくいきそうです。多分。

587 :586:2006/12/01(金) 23:21:34
レスアンカー間違えた・・・
>>585でした。レスありがとう。

588 :デフォルトの名無しさん:2006/12/02(土) 01:04:38
あるウィンドウに貼り付けられてるコントロールを別のウィンドウにコントロールのハンドルを維持したまま
移動することって可能ですか?

589 :デフォルトの名無しさん:2006/12/02(土) 01:08:35
SetParentは試してみました?

590 :デフォルトの名無しさん:2006/12/02(土) 01:43:06
>>589
thanx!!
できました!

591 :デフォルトの名無しさん:2006/12/02(土) 02:50:20
>>583
Vistaってそういうカーネルレベルの改良意外と多いんだよね。
Win板とか行くとみんなAeroくらいしかないと思ってるみたいだけど

592 :デフォルトの名無しさん:2006/12/02(土) 09:09:33
Win板の連中は表面しか見ない(見えない)からね〜。


593 :デフォルトの名無しさん:2006/12/02(土) 10:14:48
よく分からないんだけど、

System.Threading.ReaderWriterLock
プラットフォーム Win98以上

ってのがあるようだ。
スレ違いだけど。

594 :デフォルトの名無しさん:2006/12/02(土) 10:17:28
それ.NET Framework

595 :デフォルトの名無しさん:2006/12/02(土) 11:05:03
質問です。C# でタイトルバーの縦幅のピクセル数をAPI取得したいんですが
─────────────────
using System.Runtime.InteropServices;
─────────────────
[DllImport("coredll.dll")]
private static extern int GetSystemMetrics(int nIndex);
private int titlebar { get{ return (GetSystemMetrics(SM_CYCAPTION)); }}
─────────────────
これで実行すると「SM_CYCAPTIONはクラスまたは名前空間に存在しません」
と出てしまいます。まだ何かたりないのでしょうか。初心者な質問ですいませんがお願いします。

596 :デフォルトの名無しさん:2006/12/02(土) 11:08:25
NTではRtlAquireResourceExclusive/RtlAquireResourceSharedがあったようですが。

597 :デフォルトの名無しさん:2006/12/02(土) 11:12:19
>>595
C#スレで訊いた方がええんちゃうん?

598 :デフォルトの名無しさん:2006/12/02(土) 11:15:23
>>595
SM_CYCAPTIONをconstで宣言しろ。

599 :デフォルトの名無しさん:2006/12/02(土) 11:18:22
>>595
Win32のヘッダファイルを漁って、SM_CYCAPTIONの定義を見つけて
自分でconstとかで定義する。

600 :デフォルトの名無しさん:2006/12/02(土) 11:42:39
>>595
そもそもC#というか、.NET Frameworkの
System.Windows.Forms.SystemInformation.CaptionHeight プロパティ
じゃ駄目なのか?

601 :デフォルトの名無しさん:2006/12/02(土) 12:47:34
リストビューを作ったんですけど、水平スクロールバーを消すにはどうすればいいですか?

602 :デフォルトの名無しさん:2006/12/02(土) 15:01:20
そのリストビューのスタイルからWS_HSCROLLを除外すればいい

603 :デフォルトの名無しさん:2006/12/02(土) 16:20:34
自分で作ったプログラムからメモ帳とかIEを開くにはどうすればいいですか?

604 :デフォルトの名無しさん:2006/12/02(土) 16:30:37
ShellExecute or ShellExecuteEx

605 :デフォルトの名無しさん:2006/12/02(土) 16:43:44
>>604 できました。ありがとうございます。

606 :デフォルトの名無しさん:2006/12/02(土) 18:30:40
>>602
具体的にはどのようにすれば良いのですか?

607 :デフォルトの名無しさん:2006/12/02(土) 18:38:01
すみません、また分からないところが…
自分で作ったプログラムから、
指定したcppファイルを指定したコンパイラでコンパイルするプグラムを作りたいのですが、
ShellExecuteをつかって、コンパイルするところまではできたのですが、
コンパイラからのメッセージ文(エラーが出てコンパイルできなかったとか、正常にできたとか)を、
どうやって自分のプログラムに取り込めばよいのかがわかりません。
使っているコンパイラはbcc55なので、
ShellExecute(
    NULL,
NULL,
TEXT("bcc32"),
TEXT("test.cpp > message.txt"),
NULL,
SW_SHOWNORMAL);
という感じにすれば、
message.txt で取れるかと思ったのですが、できませんでした。
どうしたらいいのか、なにかヒントを教えてもらえると助かります。

608 :デフォルトの名無しさん:2006/12/02(土) 18:51:15
>>606
ちったぁ自分で調べるってことしろや
>>1にも書いてあろうがよ
「ウィンドウスタイル 変更」でググるだけでいくらでも参考になりそうなものが出てくるぜ?

609 :デフォルトの名無しさん:2006/12/02(土) 19:22:00
>>607
パイプ

610 :デフォルトの名無しさん:2006/12/02(土) 19:24:48
>>607
「>」とか「2>」はcmd.exeの機能だからcmd.exeを実行してやる必要がある。

611 :610:2006/12/02(土) 19:26:46
書いてて自信がなくなってきたが

612 :デフォルトの名無しさん:2006/12/02(土) 19:32:57
>>609 >>610
ありがとうございます。早速ググッて見たのですが、説明が難しかったので、勉強してきます。

613 :デフォルトの名無しさん:2006/12/02(土) 22:48:08
>>612
>>610は"cmd.exe /c bcc32.exe -h > message.txt"


614 :607: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;
}

615 :607:2006/12/02(土) 22:57:29
>>613
リロード忘れてました。orz
そ、そんな簡単にできるんですか……orz

616 :デフォルトの名無しさん:2006/12/02(土) 23:09:12
でも9xにcmd.exeは無い罠。
607のようにプログラムでリダイレクトしてやるほうがいいと思う。

617 :デフォルトの名無しさん:2006/12/02(土) 23:24:16
じゃぁ,command.comでいいじゃん。


618 :デフォルトの名無しさん:2006/12/02(土) 23:44:06
%comspec%を知らないやつがこんなにいるとは・・・

619 :デフォルトの名無しさん:2006/12/03(日) 00:14:28
>>618
完全に忘れていた。%ComSpec%
思い出させてくれてありがとう。

620 :デフォルトの名無しさん:2006/12/03(日) 00:19:52
スクリプトの話しなどしていない罠

621 :デフォルトの名無しさん:2006/12/03(日) 00:35:34
うん。スクリプトの話なんか誰もしてないね。

622 :デフォルトの名無しさん:2006/12/03(日) 00:39:16
>>620pugya-

623 :デフォルトの名無しさん:2006/12/03(日) 01:10:17
スプリクトの話はしてもいい?


624 :デフォルトの名無しさん:2006/12/03(日) 01:11:04
>>623
専用スレ池

625 :デフォルトの名無しさん:2006/12/03(日) 01:22:22
Win32でXMLを扱うことができるAPIはありませんか?

626 :デフォルトの名無しさん:2006/12/03(日) 01:23:14
>>625
MSXML

627 :デフォルトの名無しさん:2006/12/03(日) 01:28:21
ありがとう。SDKを導入しないといけないのですね。。
チョイ仕事では済みそうにないですね。
とにかくサンキュー

628 :デフォルトの名無しさん:2006/12/03(日) 01:38:05
先生、%ComSpec%の使い方を教えてください! マジで!

629 :デフォルトの名無しさん:2006/12/03(日) 02:10:15
>>628
del %comspec%

630 :デフォルトの名無しさん:2006/12/03(日) 07:59:58
英語版のプロパティシートを作ったんですが、
それを実行すると日本語環境と英語環境でプロパティシート
のサイズが変わってしまいます。中身のサイズは同じよう
です。

何が原因かわかりますでしょうか?

631 :デフォルトの名無しさん:2006/12/03(日) 08:02:58
>>630
フォントが違うんじゃない?

632 :デフォルトの名無しさん:2006/12/03(日) 08:09:36
fontはダイアログプロパティにてms sans serif 9に
しています。
実際に表示されるフォントが違うかどうかは確認して
ないんですが、中身のサイズは同じようなので
違うと思ってたんですが。

633 :デフォルトの名無しさん:2006/12/03(日) 11:42:20
いや、親ウィンドウのフォントが違うんじゃないかと思ったんだけど。

634 :デフォルトの名無しさん:2006/12/03(日) 12:02:17
>>633
プロパティシート自体がトップウインドウなんです。

635 :デフォルトの名無しさん:2006/12/03(日) 12:28:02
FontLinkの影響か?
影響を受けないフォント(Arialとか)にしてみたらどうだろう。

636 :デフォルトの名無しさん:2006/12/03(日) 13:03:21
>>635
Arialにしてみましたが、だめでした。
Arialにすると、英語windowsで内部がはみ出してしまいました。

637 :デフォルトの名無しさん:2006/12/03(日) 14:39:36
SDKのプロパティシート関係を真面目に読んでみた。

1. ページの大きさは互換性の関係で、
指定フォントではなく'MS Shell Dlg'を基に計算される。

2. Windows2000以降では、
DIALOGEXテンプレートでDS_SHELLFONTスタイルを指定した時、
指定フォントに基づいて計算される。

訳が間違っていたらすまん。

638 :デフォルトの名無しさん:2006/12/03(日) 14:59:35
同じ MS Sans Serif でも日本語Windowsと英語Windowsでは(更に言うなら中国語他も)
フォントが違うよ。
プロパティーシートにする前に、普通のダイアログで試してみそ。
よって、プロパティーシートの親ウィンドウのサイズは決め打ちではNG。


639 :デフォルトの名無しさん:2006/12/03(日) 15:00:32
ページのそれとシートのそれとは関係が無い。
シートのDLGTEMPLATE中のそれは日英で異なる。
DLLを覗くか、シートのフォントを調べられたし。

640 :デフォルトの名無しさん:2006/12/03(日) 15:53:30
>>638,639
ありがとう。いろいろやってたらできたみたいです。
PROPSHEETHEADERのフラグにPSH_USEPAGELANGを追加したら
シートの大きさが同じになりました。

ただタブのフォントが若干ちがくなりましたが、
これはOKとします。

641 :デフォルトの名無しさん:2006/12/03(日) 20:58:46
ああごめん>>637の人もありがとう

642 :デフォルトの名無しさん:2006/12/03(日) 23:45:54
CreateFileの引数にFILE_FLAG_NO_BUFFERING | FILE_FLAG_OVERLAPPEDを指定して、
セクタサイズが4KByteだけど1001KByteのファイルを作成したい場合は
最後の1KB書き込むときにはCloseHandleしてCreateFileしなおすか
最初からFILE_FLAG_NO_BUFFERINGを諦めるしかないんでしょうか

643 :デフォルトの名無しさん:2006/12/03(日) 23:52:05
>>642
日本語でおk

とりあえず、セクタサイズは通常512byte、MOとかDVD-RAMとかで2KBの場合あり。
4KBなんてものは普通はないが。

644 :642:2006/12/04(月) 00:07:29
>>643
すみません
セクタサイズではなくクラスタサイズでした
MSDNには、FILE_FLAG_NO_BUFFERINGフラグを指定した場合
書き込み&読み込みサイズと、バッファーのアドレスと、ファイルの書き込み&読み込み開始位置が
ディスクのクラスタサイズと一致してなければいけないと書いてありました。

そのため、クラスタサイズが4KBのディスクに1001KBのファイルを作ろうとすると
最後の1KBが書き込めなくなってしまうので

1、FILE_FLAG_NO_BUFFERINGを諦める 
  (このフラグを指定すると非同期書き込みのパフォーマンスが上がると書いてあったので、できれば諦めたくない)
2、一度ファイルを開き直してから書き込む
  (わざわざ開き直すのは面倒でスマートではない気がするので、他にいい方法があるなら避けたい)

この二つ以外に方法は無いのかと思って質問させていただきました


645 :デフォルトの名無しさん:2006/12/04(月) 00:07:50
アロケーションユニットサイズのこと?

646 :tsurarete yarou.:2006/12/04(月) 00:15:50
>>642
やったことないのでおおはずしかもしれないが、ダミーで埋めて 1004KB まで
書き込んでから、SetFilePointer() と SetEndOfFile() で余分なところを切
り捨てるんじゃだめ?

647 :デフォルトの名無しさん:2006/12/04(月) 00:19:07
>>644
セクタサイズ単位のはずだが。

648 :デフォルトの名無しさん:2006/12/04(月) 00:21:18
つーか、そんな小細工したってしなくたって、メディアの速度は変わらないよ。

649 :デフォルトの名無しさん:2006/12/04(月) 00:28:13
書き込みの境界さえあってれば、サイズは可変でいけた気がする。
ちなみに、大抵の場合パフォーマンスが低下するので使用はお勧めしない。

650 :642:2006/12/04(月) 00:40:31
>>647
MSDNに思いっきりセクタサイズって書いてありましたねorz

>>646
SetFilePointerもセクタサイズ単位でしか移動できないようです

>>648
それはわかってるんですけどOSがバッファリングしなくなるので
その分早くなるのかと思いまして

>>649
>書き込みの境界さえあってれば、サイズは可変でいけた気がする。
やってみたところ、WriteFileがエラーを吐きました
GetLastErrorしてみたらエラーコードは0x57で「パラメータが間違っています。」だそうです
セクタサイズの整数倍にした場合はエラーになりませんでした。

>ちなみに、大抵の場合パフォーマンスが低下するので使用はお勧めしない。
そうなんですか・・・
こういうのはあまり詳しくないのでMSDNの記述を鵜呑みにしてました


勉強してちゃんと理解できるようになるまではFILE_FLAG_NO_BUFFERINGを諦めることにします
>>643-649
ありがとうございました


651 :デフォルトの名無しさん:2006/12/04(月) 01:04:39
最適化(と本人は思ってる)に凝る時期が俺にもありました。

652 :デフォルトの名無しさん:2006/12/04(月) 01:09:58
Win32触った奴なら、NO_BUFFERINGに夢見てしまう事が一度はあるだろうな。

>>650
NO_BUFFERINGは、ディスクキャッシュをあまり汚さずに済むのが唯一の利点かな。
FFCとかは使ってるのかもしれない。

653 :デフォルトの名無しさん:2006/12/04(月) 02:29:37
>>650
DBMSのように自前でバッファリングしてI/O回数の最適化を意識した処理を作っているのでなければ、
NO_BUFFERINGを使うメリットなんてないだろう。
通常のアプリくらいならやらないほうがいいと思う。

654 :デフォルトの名無しさん:2006/12/04(月) 03:04:42
ISOディスクイメージファイルの仕様が見つかりません。
ISO-9660ディスクの仕様なら見つかるのですが・・・

655 :デフォルトの名無しさん:2006/12/04(月) 06:08:24
583 名前: デフォルトの名無しさん [sage] 投稿日: 2006/12/01(金) 13:44:42
reader/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内で実装されているのでカーネルレベルの変更ではない。
目糞鼻糞だな。

656 :デフォルトの名無しさん:2006/12/04(月) 13:44:34
わざわざコピペしてまで言いたかったんだね。

657 :デフォルトの名無しさん:2006/12/04(月) 14:15:49
>>656
やぁ、目糞君www

658 :デフォルトの名無しさん:2006/12/04(月) 14:58:17
リバースエンジニアリングを行わないとntdll内で完結しているとは断言できないな

659 :デフォルトの名無しさん:2006/12/04(月) 15:05:14
>>654
スレ違いだが、まずは手元の適当なISOイメージが、そのISO-9660ディスクの仕様と一致しているか確かめろ。
一致しているならそれで良し、違ったらお前のググり方が悪い。

660 :デフォルトの名無しさん:2006/12/04(月) 15:14:47
>>654
raw image fileに仕様があると思っているのか?

>>658
素人乙


661 :デフォルトの名無しさん:2006/12/04(月) 15:22:02
なんか一人暴れてる馬鹿がいるな

662 :デフォルトの名無しさん:2006/12/04(月) 19:56:34
ド素人の質問で悪いんだが
reader/writer lockってどんなの?
APIの名前じゃ無さそうだが

663 :デフォルトの名無しさん:2006/12/04(月) 20:01:07
・誰かが書き込み中なら、読み込み要求は待たされ
・誰かが読み中なら、書き込み要求は待たされ
・皆読み中での、読み込み要求は待たされずにすんなり通る

をプロセス/スレッドまたいで、うまく解決できるようにする機構

664 :デフォルトの名無しさん:2006/12/04(月) 20:32:05
どうも

665 :デフォルトの名無しさん:2006/12/04(月) 21:24:00
>>654
とりあえずISOディスクイメージファイルって何ぞやってことだな.
自分用語だから誰もそれが何なのか分からない.

CD-ROM及びDVD-ROMは1セクタにつき2048バイトをデータとする論理構造を持ち
一般的にはそれの1トラックの連結ストリームをイメージファイルとするけど、CD-R
では本来の補助情報を含めた2352バイトを物理的に焼きこめることもあって、各ソフト
毎に好き勝手に独自フォーマットを持っている. (DVDはRAW焼きはできません)
また、TOC情報とかもイメージに取り込んでいるのもあるな.

ので、一般的にisoイメージと呼ばれているものはその実はそれが何なのかは、
それだけでは分からない. 一番可能性が高いのは1セクタ2048バイトなシングル
トラックイメージというだけ.

666 :デフォルトの名無しさん:2006/12/05(火) 00:33:47
アイコンハンドラやコンテキストメニューハンドラ等のShell Extension関連の
お勧めな書籍はありますか?
Delphiのですと下記のが一応見つかりましたが、VCでお勧めがありましたら…。
シェルプログラミング入門
ttp://www.amazon.co.jp/exec/obidos/ASIN/479730782X

667 :デフォルトの名無しさん:2006/12/05(火) 00:55:34
MSDN マジオススメ

668 :デフォルトの名無しさん:2006/12/05(火) 01:48:44
GetWindowLong()で、GWL_WNDPROCとDWL_DLGPROCの違いがわからない。
ウィンドウとダイアログの違いって?(^^;

669 :デフォルトの名無しさん:2006/12/05(火) 05:42:42
>>620
ExpandEnvironmentStringsの話ならおk?

670 :デフォルトの名無しさん:2006/12/05(火) 05:47:34
>>596
Vistaに限らずNT系の新APIに見えるものは実はntdllの非公開APIに公開の皮を
かぶせただけ、ってパターンも結構あるな。
Win9x切り捨てたので遠慮する必要がなくなったんだろう

671 :デフォルトの名無しさん:2006/12/05(火) 09:51:21
>>668
ttp://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.

672 :デフォルトの名無しさん:2006/12/05(火) 10:15:18
初歩的な質問ですみません。

VisualC++ 2005 EE を使い始めたのですが、
VisualC++ 6.0と違ってリソースエディタがありません。

なので、無理矢理コントロールをウインドウに貼り付けて処理したいと思うのですが、
どのように貼り付ければ良いのか、参考となるサイトなど教えていただけないでしょか?

673 :デフォルトの名無しさん:2006/12/05(火) 10:33:34
>>672
VC6のリソースエディタなりサードパーティ製リソースエディタ使えば?BCCFormとか。

674 :デフォルトの名無しさん:2006/12/05(火) 10:41:56
ダイアログのWindowProc(DefDlgProc)はこんな感じ。

LRESULT 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でデフォルト処理後に独自の処理を加えるのはメンド臭いです。


675 :672:2006/12/05(火) 11:14:36
>>673-674
迅速なレス有難う御座います。
方法すら見当もつかなかった自分としては、お二方のご指南本当に有難いです。
やはりソースコードで全て処理するとなるとやや時間もかかり、
面倒かもしれませんが、頑張ってみようと思います。

676 :デフォルトの名無しさん:2006/12/05(火) 11:28:37
ドラッグ・アンド・ドロップで
DragQueryFile関数を使いパスつきのファイル名が取得できますが
パスなしのファイル名が取得できる関数はあるのでしょうか?

677 :デフォルトの名無しさん:2006/12/05(火) 11:30:53
パス削ったらいいがな(´・ω・`)

678 :デフォルトの名無しさん:2006/12/05(火) 11:37:49
PathFindFileName

679 :676:2006/12/05(火) 11:44:27
>>678
ありがとうございます。

680 :デフォルトの名無しさん:2006/12/05(火) 13:35:57
>>672
その方法は面倒だが、それだって探せばいくらでも見つかる。
親のWM_CREATEで子をCreateWindow(Ex)すればいいだけ。


681 :デフォルトの名無しさん:2006/12/06(水) 13:52:31
WindowsでUSBメモリとかで繋いだときにそのタイミングで
接続されたイベントを取得したい場合どうすればいいでしょうか?
ipodを繋いだらitunesが起動するみたいなことがやりたいです。
msdnとかで調べたけどわかりませんでした。
お願いします。

682 :デフォルトの名無しさん:2006/12/06(水) 14:04:19
WM_DEVICECHANGE

683 :デフォルトの名無しさん:2006/12/06(水) 15:19:42
DirectXを利用しているプログラムで
日本語入力をしたいのですが
IMEに未確定文字を表示させないようにして
独自で描画することはできますか?


684 :683:2006/12/06(水) 15:49:39
すまん、やっぱDirectXスレのほうで聞いてくる。


685 :デフォルトの名無しさん:2006/12/06(水) 17:10:55
>>681
SHCNE_MEDIAINSERTEDだな。

686 :デフォルトの名無しさん:2006/12/06(水) 19:21:50
ツールバーのあるアプリケーションを
ValidateRectで描画を更新しているのですが

VC++6.0から実行すると、ツールバーが消えてしまいますが
exeから動かすとツールバーが表示されています。

これはどうしようも無いんでしょうか。
BeginPaint〜EndPaintだとVC++6.0の実行でも問題なし

687 :デフォルトの名無しさん:2006/12/06(水) 21:16:06
>>686
絶対なんかやってることがおかしい。

あと「ValidateRectで描画を更新」って何だよ?

688 :デフォルトの名無しさん:2006/12/06(水) 21:33:28
ValidateRectって「もう描画しなくてもいいよ」って命令じゃなかったぽ?


689 :デフォルトの名無しさん:2006/12/06(水) 21:35:21
WM_PAINTする領域に含めなくていいよ、という命令

690 :デフォルトの名無しさん:2006/12/06(水) 21:37:14
その逆はそのまんまでInvalidateRect。

691 :203:2006/12/06(水) 21:48:28
メッセージは
while( 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の描画の更新は、すいません表現を間違えました。

692 :デフォルトの名無しさん:2006/12/06(水) 21:50:27
標準リストビューの行の高さって変更できますか?
やり方教えてください。

693 :691:2006/12/06(水) 21:50:56
名前欄間違えた。
×203
○686

694 :デフォルトの名無しさん:2006/12/06(水) 21:51:25
そのビジーループには何か意味があるの?

695 :692:2006/12/06(水) 21:51:31
全部の行ではなくて指定した行の高さってことです。

696 :デフォルトの名無しさん:2006/12/06(水) 21:52:50
TextOutで@、Tとかの表示の文字化けは大丈夫でしょうか。

697 :デフォルトの名無しさん:2006/12/06(水) 21:53:28
Sleep(1)とかしろよ。

698 :696:2006/12/06(水) 21:54:44
自分は9x系を使っていて、9x系なら大丈夫みたいですが、
他ののWindowバージョンだとどうでしょうか。

699 :デフォルトの名無しさん:2006/12/06(水) 21:57:10
PeekMessageは何の意味が?

700 :デフォルトの名無しさん:2006/12/06(水) 21:59:53
>>692
http://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

701 :デフォルトの名無しさん:2006/12/06(水) 22:00:33
IDLE時に何かしたい時にあういうループ組むね
ゲーム作ってる時とか

702 :デフォルトの名無しさん:2006/12/06(水) 22:02:11
ループなんてどうでもいいが
WM_PAINT内の処理がありえないな
せっかく描画しようとしてるところを、描画もせずに「もう描画しなくていいよ」なんていや消えるのは当たり前だろ
ツールバーも親ウィンドウ上にあるものだぞ?

703 :デフォルトの名無しさん:2006/12/06(水) 22:05:48
>>691は要は
人に「ちょっとこっち来て!」って呼んどいて
来たら「こっち来るんじゃねーよ!」って言うようなもんだな。

704 :686:2006/12/06(水) 22:06:39
InvalidateRect と ValidateRect に
NULLなりGetClientで得た領域をそのまま渡すと
ツールバーが塗り潰されてしまいます。

ツールバーとValidateRectは合わないのだろうか

705 :デフォルトの名無しさん:2006/12/06(水) 22:07:49
>>700
>>695

706 :デフォルトの名無しさん:2006/12/06(水) 22:09:42
>>704
つーかあんた、最初の自分の書き込みで最後に結論出してるだろうが

707 :686:2006/12/06(水) 22:12:12
>>706
BeginPaint〜EndPaint を使うと
DirectXの
Clear, BeginScene, EndScene, Present使うと
チラチラチラチラするもんで
出来れば ValidateRect を使いたいなと

708 :704:2006/12/06(水) 22:12:30
後キミ、InvalidateRectを目が痛くなるまで調べてこい

709 :デフォルトの名無しさん:2006/12/06(水) 22:44:13
ちょっと待って
>>686=>>704=>>708なの?

710 :708=706:2006/12/06(水) 22:46:58
すごく、ミスです・・・orz

711 :696:2006/12/06(水) 22:54:02
どなたか、>>696>>698についてお願いします。

712 :デフォルトの名無しさん:2006/12/06(水) 22:56:44
文字化けが大丈夫かって、どう大丈夫なのかわかりゃせんし
文字化けするかしないかってだけなら

そ ん な こ た ぁ 自 分 で 実 行 し て み り ゃ わ か る だ ろ

713 :デフォルトの名無しさん:2006/12/06(水) 22:59:31
そもそも、@とかTとかの文字化けがなぜ起こるのかを知ってたら
>>696みたいな質問は出てくるわけがないと思うんだが。

714 :デフォルトの名無しさん:2006/12/06(水) 23:00:38
丸数字とかはOSの違いによる文字化けじゃなかったか?
まあソフトで使う分には、対象言語圏が日本なら心配要らないだろう

715 :デフォルトの名無しさん:2006/12/06(水) 23:03:07
そんなに心配ならTextOutW使っておけ。9xでも対応している。

716 :デフォルトの名無しさん:2006/12/06(水) 23:05:44
かなり誤解を招きそうなので訂正

丸数字の文字化けを考えないといけないのは違うOSで表示させる場合
(WEBアプリケーションとか)

717 :デフォルトの名無しさん:2006/12/06(水) 23:06:26
つ プリンタにフォントが無い

この場合も化けはしないけどな

718 :696:2006/12/06(水) 23:21:48
みなさまありがとうございます。
参考になりました。

719 :デフォルトの名無しさん:2006/12/06(水) 23:34:04
うっかりCreateFontでCharSet(文字集合)がとんでもないものを指定してしまったフォントでは化ける。
勿論丸付き数字どころの騒ぎではない。

720 :デフォルトの名無しさん:2006/12/07(木) 00:09:42
タスクバーに表示させない方法はあるのでしょうか?

721 :デフォルトの名無しさん:2006/12/07(木) 00:15:00
何を?

722 :デフォルトの名無しさん:2006/12/07(木) 00:26:59
天は自ら助くる者をタスク

723 :720:2006/12/07(木) 00:41:14
ウインドウが開いているときにタスクバー
に表示させない(つかわない)方法はないでしょうか?

724 :デフォルトの名無しさん:2006/12/07(木) 01:09:40
ウィンドウのスタイルを変えるかタスクバーのリストビューをフック

725 :デフォルトの名無しさん:2006/12/07(木) 01:20:22
WS_EX_APPWINDOWだっけ?

726 :デフォルトの名無しさん:2006/12/07(木) 02:07:18
アイコンエディタって何が使いやすい?

727 :デフォルトの名無しさん:2006/12/07(木) 05:58:30
俺は Axialis のシェアウェア使ってる。
その他のアイコンエディタをほとんど使ってないから、
他と比べてどうかは知らんが満足してる。

728 :デフォルトの名無しさん:2006/12/07(木) 07:05:56
>>720
不可視の親ウィンドウ

729 :デフォルトの名無しさん:2006/12/07(木) 10:15:11
>>704
>ツールバーが塗り潰されてしまいます。
DirectXが塗りつぶしているのなら、DirectXの使う領域を指定する。
単一色で塗りつぶされているのなら、ウィンドウスタイルにWS_CLIPCHILDRENをつける。
または、WNDCLASS(EX)のhbrBackground=NULLでもいいと思う。

それより、DirectX描画用の子ウィンドウをつくり、
WM_SIZEでクライアント領域のツールバーの下に移動する方が簡単。


730 :デフォルトの名無しさん:2006/12/07(木) 10:27:26
つーか何ゆえに
別にウィンドウが一旦隠れたわけでもないのに
メッセージループ内からWM_PAINT発生させてんのか理解できんのだが
そんなことすりゃチラつくのは当たり前だろうと
WM_PAINTの存在意味を解って無いだろ

731 :デフォルトの名無しさん:2006/12/07(木) 11:39:00
>そんなことすりゃチラつくのは当たり前だろうと
BeginPaintせずにValidateRectしてるんだからちらつきましぇん。


732 :686:2006/12/07(木) 11:59:59
>>729
有難うございます
WS_CLIPCHILDRENで解決しました。

領域を指定しての最初のValidateRect
は無効領域を残したままだったので
いつまでもWM_PAINTが残っている状態でした。
かといって全領域を指定するとWM_PAINTは消えますが
ツールバーごと塗り潰すといった事態に

DirectXに関してはPresentに
ツールバー分を引いたクライアント領域に
転送(2番目引数)するようにしています。

>DirectX描画用の子ウィンドウをつくり、
>WM_SIZEでクライアント領域のツールバーの下に移動する方が簡単。
その内使わせて頂きます。

>>730
アニメーションやらシミュレーションやらを入れたいと思ったので
WM_PAINTを発生させまくる状況を作ってみました。

733 :デフォルトの名無しさん:2006/12/07(木) 16:31:03
>>726
@icon + ドットエディタ

734 :デフォルトの名無しさん:2006/12/07(木) 20:26:05
Direct3Dを使っていてなぜ
アニメーションやらシミュレーションやらを入れるのにWM_PAINT連打せねばならぬのか


735 :デフォルトの名無しさん:2006/12/07(木) 23:34:51
C#を使ってプログラミングしてます。
他アプリケーションのDataGridに表示されている値を取得する方法はありますでしょうか?
LABELやConboBoxの値はWin32APIを使って取得する方法は分かるのですが
DataGrid系に表示されている値の取得方法がどうしても分かりません・・・('A`)

736 :デフォルトの名無しさん:2006/12/08(金) 01:29:31
マ板で質問したのですが、ム板に誘導されましたので、こちらで質問します。

CD-Rや、DVD-Rなどの光メディアに、プログラムから書き込むことって可能ですか?
API名とか、ヒント下さい。



737 :デフォルトの名無しさん:2006/12/08(金) 01:56:42
>>736
IMAPI

738 :デフォルトの名無しさん:2006/12/08(金) 01:59:27
>736
SPTI

739 :デフォルトの名無しさん:2006/12/08(金) 02:00:54
GetPixel()でDirectX使ったアプリの色情報を取得したいのですが、
どうしても0が返されます。

DirectXアプリ以外のエリアで情報を取得する分には問題ないのですが。

特殊なやり方をしないととれないのでしょうか。

740 :デフォルトの名無しさん:2006/12/08(金) 02:07:02
>>737-738
なるほど、こんなのが有ったんですね。
ありがとうございます。助かりました。

741 :デフォルトの名無しさん:2006/12/08(金) 03:15:59
文字認識や手書き認識の再利用可能なモジュールってどこかにあるのだろうか?

742 :デフォルトの名無しさん:2006/12/08(金) 04:25:42
Win32 APIに?

743 :デフォルトの名無しさん:2006/12/08(金) 05:08:28
Tablet PC Platform SDKでは提供されているみたいだけどね。

744 :kk:2006/12/08(金) 08:51:48
WinAPI + C++で、リソーススクリプトで作った
ダイアログのエディットボックスに入力されてる文字列はどうすれば
PTSTRなどに入れられるのでしょうか

745 :デフォルトの名無しさん:2006/12/08(金) 08:57:56
普通にGetDlgItemText/GetWindowText

746 :kk:2006/12/08(金) 09:17:28
リソーススクリプトを使用しているので、エディットボックスのHWNDがないのですが。。。

747 :デフォルトの名無しさん:2006/12/08(金) 10:02:43
なんで、リソーススクリプトを使用していると、エディットボックスのHWNDが無いと思うの?

748 :245:2006/12/08(金) 11:21:04
CreateCompatibleDCで作った場所に、
rectangleで書きこんで一部消去とか(真中だけ抜く)は、
抜きたい部分をXORで合成するしかないでしょうか?
指定したrectの分だけ消去するとかできないもんでしょうか。
CreateCompatibleDCで作った場所に書きこんで、
ほかのDCに書きこんだら、CreateCompatibleDCにrectangleしたところ意外は、
透明でほかのDCに書きこまれるので、rectangleの真中だけ書きこむ前の透明にしたいです。

749 :デフォルトの名無しさん:2006/12/08(金) 11:23:28
>>748
日本語でおk

rectangleしたところって意味不明すぎるw

750 :デフォルトの名無しさん:2006/12/08(金) 11:25:40
>>746
GetDlgItemTextは親のウィンドウハンドルと子のIDがあれば十分。
GetWindowTextLengthとGetWindowTextのコンビを行いたければ、GetDlgItem使え。

751 :748:2006/12/08(金) 12:33:40
// Rectangleするとこ
HDC 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に該当する処理を探しています

752 :デフォルトの名無しさん:2006/12/08(金) 12:47:57
>>751
>SelectObject(hMemoryDC, hBitmap);
>DeleteObject(hBitmap);

こういうところ見ると仕組みを理解してないのがよくわかる。
ここを一通り呼んで勉強してくれ。
ttp://msdn.microsoft.com/library/en-us/dnanchor/html/gdi.asp

753 :748:2006/12/08(金) 13:02:33
>>752
ttp://www13.plala.or.jp/kymats/study/MULTIMEDIA/bmp_multibuf.html
ここを参考にしました

754 :748:2006/12/08(金) 13:11:20
>>751
使っている間は、DeleteObjectしたらあかんという意味ですね。
プログラミングWindowsを読むと、WM_DESTROYでDeleteObject(hBitmap)みたくなっているのが多いので。

755 :kk:2006/12/08(金) 13:27:56
>>745>>747>>750
ありがとうございます。
>>747
そう思ったのは、リソーススクリプトを使用したので
HWND = CreateWindow(--------,---,-,-,.....);
と書かなかったからです。
>>750
GetDlgItemText()で、ちゃんと入力された文字列を取り入れることができました。
ありがとうございます。

756 :デフォルトの名無しさん:2006/12/08(金) 15:17:28
>>753
何そのダメすぎるサイト
そんなとこ参考にしてたらキミも終わっちまうぜ

757 :748:2006/12/08(金) 15:39:20
オレ・オワタ

758 :デフォルトの名無しさん:2006/12/08(金) 16:50:47
JavaでいうところのSystem.currentTimeMillisはありますか?

759 :デフォルトの名無しさん:2006/12/08(金) 16:54:01
途中で投稿してしまいました。

JavaでいうところのSystem.currentTimeMillisはありますか?
GetLocalTimeでSYSTEMTIMEとって自分で掛け算ですか?

760 :デフォルトの名無しさん:2006/12/08(金) 17:00:46
ttp://msdn.microsoft.com/library/en-us/sysinfo/base/time_functions.asp

761 :デフォルトの名無しさん:2006/12/08(金) 18:57:27
ほかのプログラムにバイナリデータを渡して起動するには
どんな方法がよさげ?

コマンドラインパラメータ以外で。


762 :デフォルトの名無しさん:2006/12/08(金) 19:10:59
量とかどういう処理なのかとかもっと具体的じゃないと検討しようがない。

コマンドライン以外だと渡して起動というよりも起動後通信だな。
pipe、共有メモリ、ネットワーク等。

763 :デフォルトの名無しさん:2006/12/08(金) 19:18:10
>>762
量は多くても1KBくらい。
確実に渡せる方法がいいです。


764 :デフォルトの名無しさん:2006/12/08(金) 19:39:20
データ受け渡し用ファイルでも作れば?

765 :デフォルトの名無しさん:2006/12/08(金) 19:46:54
>>764
そうしてみるわ
トンクス

766 :デフォルトの名無しさん:2006/12/08(金) 20:30:14
質問です。
Windowsのエクスプローラの、ファイルやフォルダが表示される部分を
自分で作ったウィンドウに埋め込むにはどうすれば良いでしょうか。

767 :デフォルトの名無しさん:2006/12/08(金) 20:37:23
ttp://www.nitoyon.com/vc/tips/ie_component.htm
IEコンポーネントを使っている例だが参考になる。
アドレスバーに入力すればわかるが、フォルダだって表示できる。

768 :デフォルトの名無しさん:2006/12/08(金) 20:43:30
右クリックで警告がでたりするがな。

769 :デフォルトの名無しさん:2006/12/08(金) 20:52:36
うさみみハリケーンとか、ねこまんまとか ollydbg とかで
メモリマップの表示っていうのありますが、あれはどの API
をつかってるんでしょうか?

開始アドレス フラグ サイズ
00010000 -RW- 1000
00020000 -RW- 1000
0011F000 -RW- 11000
....

77FDF000 -ERW- 1000
77FFE000 -R- 1000

こういうやつです。

770 :デフォルトの名無しさん:2006/12/08(金) 21:02:39
VirtualProtectExとかReadProcessMemoryとかそこらへんだと思う。

771 :デフォルトの名無しさん:2006/12/08(金) 21:46:58
WinMainをDLLに置くことは可能ですか?

772 :デフォルトの名無しさん:2006/12/08(金) 21:50:10
>>771
無理。

スタティックリンクライブラリに置くことは可能。

773 :デフォルトの名無しさん:2006/12/08(金) 21:53:06
エントリポイントから自分で書けばできるのではないだろうか。

774 :デフォルトの名無しさん:2006/12/08(金) 22:23:21
FindFirstFile()/FindNextFile()で教えて下さい。

ワイルドカード+拡張子でファイルを検索してるのですが、これで引っ張ってくる
ファイル名の順番はどういう順で返されるのでしょうか?
最初は名前順かと思ったのですが違うようで…

775 :デフォルトの名無しさん:2006/12/08(金) 22:44:57
>>774
MSDN読めよ
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.

776 :デフォルトの名無しさん:2006/12/08(金) 22:51:29
>775
それは邦訳を読んだけどそれでもイマイチ疑問なのヨ

具体的な例で、検索対象フォルダに名前が"a.txt"と"_.txt"で始まるファイルがあるとき、
explorerで「アイコンの整列->名前順」とすると

_.txt
a.txt

という順で表示されますが、FindFirst/FindNextで検索すると逆に出てくる。
なぜ?('A`)

'_' = 0x5f
'a' = 0x61

ってことを考慮するとexplorerの名前表示順がしっくりくるんだけどな…

777 :デフォルトの名無しさん:2006/12/08(金) 22:52:55
>>776
>>775 読め

778 :デフォルトの名無しさん:2006/12/08(金) 23:00:34
質問の意図を伝えられなかったようで

回避方法見つけたからもういいわ

779 :デフォルトの名無しさん:2006/12/08(金) 23:03:26
ファイルシステムに依存すると書いてあるじゃないか
てか自前でソートすれ

780 :デフォルトの名無しさん:2006/12/08(金) 23:05:34
>ファイルシステムに依存すると書いてあるじゃないか

それを解った上で776を書いたんだが

>てか自前でソートすれ

そうしたよ

781 :デフォルトの名無しさん:2006/12/08(金) 23:23:39
すると何か、FindFirst/FindNext を呼ぶたびに、
内部でファイルを列挙して並び替えて・・・って処理をやってくれというのか?


782 :デフォルトの名無しさん:2006/12/08(金) 23:29:18
explorerとFindNextFile()の名前順の解釈が違うのは何故かを聞きたかったのだが

>781
誰が何時そんな事を言ったのか言ってみ

783 :デフォルトの名無しさん:2006/12/08(金) 23:34:48
つうかexplorerもXPとそれ以前でソートの仕方が違うよね
ファイル名に数字がついた時とか

784 :デフォルトの名無しさん:2006/12/08(金) 23:51:57
Explorer が >>779 だからに決まってるじゃないか

785 :デフォルトの名無しさん:2006/12/09(土) 00:09:27
>>776
FindNextFileはファイルシステムに物理的に格納されている順番で列挙するんだから。
z.txt
a.txt
の順で格納されていたら。その順で出てくるだけだと思うが。
たぶん、その実験した環境では、
a.txt
_.txt
の順番に格納されていたんだろうね。

explorerは表示する時に、ソートしなおしているんだから、「しっくりくる」順番なのは当然。

786 :デフォルトの名無しさん:2006/12/09(土) 00:19:13
>>785
>>775 読め

787 :デフォルトの名無しさん:2006/12/09(土) 00:30:07
見えないリストボックスに読み込めばソートもしてくれると思うんだけど...


788 :デフォルトの名無しさん:2006/12/09(土) 00:30:17
12520850.cpx
2052
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
勝手にソートしてんじゃん

789 :774:2006/12/09(土) 00:33:39
>787
正にそれで済ませたワケだが

>788
先頭に'_'の付いたファイルも検索すれば言ってる事判ると思われ

790 :デフォルトの名無しさん:2006/12/09(土) 00:40:13
>>789
b.txt、c.txtも検索すれば皆が言ってる事判ると思われ

791 :デフォルトの名無しさん:2006/12/09(土) 00:41:36
取り敢えず名前順といってもAPIとExplorerで一貫してないっぽい
何故か?については誰も答えられない

792 :デフォルトの名無しさん:2006/12/09(土) 00:43:35
>790
多分一番解ってないのはお前

793 :デフォルトの名無しさん:2006/12/09(土) 00:48:34
>>769
GetSystemInfo
VirtualQueryEx

794 :デフォルトの名無しさん:2006/12/09(土) 01:01:25
Windowsのファイルシステムドライバがファイル名の大文字小文字の
区別をつけないように組まれていることを考えればわかるだろうに。

795 :デフォルトの名無しさん:2006/12/09(土) 01:02:28
>>789
LBS_STANDARDフラグは付けたの?


796 :デフォルトの名無しさん:2006/12/09(土) 01:03:28
と、今更解ったような口を利く奴が登場ですよ

797 :デフォルトの名無しさん:2006/12/09(土) 01:09:12
つうか>>774はどのファイルシステム使ってるんだよ?
NTFSなのかFATなのかくらい書けよ。

798 :デフォルトの名無しさん:2006/12/09(土) 01:16:44
知ったかが答えられずに妙な突っかかり方してるようにしか見えんな

799 :デフォルトの名無しさん:2006/12/09(土) 01:39:48
例えば、_, a, B, c, D を並び替えた場合、文字コード順にやってしまうと、
B < D < _ < a < c と並び替えられる。

a より B が前に来るのは、直感的に分かりにくい。
そのためエクスプローラでは、いわゆる辞書順に並び替えるため、
おそらくアルファベット大文字を小文字に変換してからソートしている。

_, a, B, c, D
→ _, a, b, c, d
→ _ < a < b < c < d
→ _ < a < B < c < D

こうして、アンダーバーは先頭に持ってこられる。

全部予想だけど。


800 :デフォルトの名無しさん:2006/12/09(土) 01:50:29
全角のA、aも半角と入り混じって辞書順になるよ
言語の設定を日本語にしてるときだけかもしれんけど

801 :デフォルトの名無しさん:2006/12/09(土) 03:25:26
Zipフォルダを、エクスプローラだけじゃなくて
任意のアプリからフォルダのように見えるようにする事は無理なのでしょうか?


802 :デフォルトの名無しさん:2006/12/09(土) 05:40:17
エクスプローラで全角スペースで始まるファイル名より前に来るファイル名を探せ

803 :デフォルトの名無しさん:2006/12/09(土) 08:12:36
ファイル順がどうのと訳知り顔で囁いてる香具師らはまとめて>>775見ろ

804 :デフォルトの名無しさん:2006/12/09(土) 08:39:04
>>801
それはAPIの質問なのか?
そのアプリ作った奴に頼め

805 :デフォルトの名無しさん:2006/12/09(土) 08:43:41
おはようございます

806 :デフォルトの名無しさん:2006/12/09(土) 09:11:45
ExplorerとAPIは同じであるべきだ、という前提が間違っているとは考えないのかな

807 :デフォルトの名無しさん:2006/12/09(土) 09:36:30
>>803
英文を読めるような頭を持った人間なら、そもそもここまで話を引き伸ばせません。

808 :デフォルトの名無しさん:2006/12/09(土) 09:47:51
NTFS上のソート順は
! < 0 < A,a < _ < α < あ < ア < 亜 < A,a

Unicode順で、英字は大小の区別なし(大文字と見なす)、全角半角の区別あり、カタカナひらがなの区別あり
といった感じだな。

explorerは、英字は大小の区別なし(小文字と見なす)、全角半角の区別なし、カタカナひらがなの区別なし、
漢字はJISコード順って感じかな。

809 :デフォルトの名無しさん:2006/12/09(土) 09:56:13
>>807
本当に知らなくて恥ずかしかったんだろうな

810 :デフォルトの名無しさん:2006/12/09(土) 09:57:22
>>806-807
何故なのかが話題であって誰も同じであるべきとは言っていない事に気付け

811 :kk:2006/12/09(土) 10:37:43
GetDlgItemText()で文字列を取得できたと思ったのですが、
うまく取得できてなく、
取得した文字列をatoiでintで変換したときにエラーになります。
エディットボックスに何を入れても、PTSTRにはいるのは「・U駆Qテ・」となっています。
何が原因なのでしょうか。

812 :デフォルトの名無しさん:2006/12/09(土) 10:43:15
エクスプローラの順序でファイル名比較をするAPIがshlwapiか何かにあったはず

813 :デフォルトの名無しさん:2006/12/09(土) 10:59:50
URLDownloadToFile関数で
返り値が返されるタイミングというのは
ダウンロードが完了した時、接続に成功したときのどちらでしょうか?


814 :デフォルトの名無しさん:2006/12/09(土) 12:04:57
自分のプロセスがどのくらいメモリを使用しているか取得する API はありますか?

815 :デフォルトの名無しさん:2006/12/09(土) 12:05:34
ありますよ

816 :デフォルトの名無しさん:2006/12/09(土) 12:07:16
>>815
すいません。教えていただけると幸いです。

817 :デフォルトの名無しさん:2006/12/09(土) 12:28:14
PurosesuMemoriDorekurai( PUROSESUHANDORU ph );

818 :デフォルトの名無しさん:2006/12/09(土) 12:36:03
>>811
そもそも整数値を取るつもりなら始めからGetDlgItemIntを使ったらどうか。

819 :デフォルトの名無しさん:2006/12/09(土) 13:39:16
>>810
アンカーの間違いに気づけ

820 :デフォルトの名無しさん:2006/12/09(土) 18:04:38
Process Explorerみたいに他のプロセスの環境変数を取得するには
どのAPIをつかえばいいの?

821 :デフォルトの名無しさん:2006/12/09(土) 18:22:43
ツリー構造のデータを外部に保存したいんだけど、データが大きいんでINIファイルだと遅くなりそう・・・
というわけでXMLに保存しようかと思うんだけど.NET使わずにXMLにアクセスする手段はありますか?
MSXMLとかになるんでしょうか

822 :デフォルトの名無しさん:2006/12/09(土) 18:28:52
>>821
XMLのほうが遅くなるんじゃね?

823 :デフォルトの名無しさん:2006/12/09(土) 18:30:04
MSXMLは高機能で便利だけど遅いよ。

824 :デフォルトの名無しさん:2006/12/09(土) 18:44:15
iniファイルって64KBの制限があったような。

825 :デフォルトの名無しさん:2006/12/09(土) 18:45:55
ありがとう、じゃあINIファイルで一度やってみる
INIで木構造を維持するいい方法があったら教えてもらえると助かる

826 :デフォルトの名無しさん:2006/12/09(土) 18:57:12
そのぐらい自分で考えろよ

827 :デフォルトの名無しさん:2006/12/09(土) 19:01:31
分かった

828 :デフォルトの名無しさん:2006/12/09(土) 19:02:45
別に ini にせんでも、独自形式にして
タブの個数とかでやってみたら?


829 :デフォルトの名無しさん:2006/12/09(土) 19:34:57
車輪の再発明は馬鹿げているので今後ともiniファイルでいきます
どうもありがとうございました

830 :デフォルトの名無しさん:2006/12/09(土) 19:44:16
ファイルの拡張子がINIということ自体は問題ないけど
Get/WritePrivateProfile系APIでの読み書きしてるなら絶対遅いよ。
内部で1行ごとにOpen/Closeされてるだろうし..

831 :デフォルトの名無しさん:2006/12/09(土) 19:49:08
試してから言えや

832 :デフォルトの名無しさん:2006/12/09(土) 19:52:04
コーディング量が一番少ないのを薦めるよ
RUBY最強だけどね

833 :デフォルトの名無しさん:2006/12/09(土) 19:55:25
実行環境が問題無いならxmliteという手もある

834 :デフォルトの名無しさん:2006/12/09(土) 20:06:19
>>820
ちゃんとしたやり方 or もっとスマートなやり方があるかも知れんけど、
SetWindowsHook系のAPI使うなりなんなりして自前のDLLを調べたい
プロセスにロードさせてやればそのDLLから取得できるべ。

835 :デフォルトの名無しさん:2006/12/09(土) 20:08:18
>>816
GlobalMemoryStatus

836 :デフォルトの名無しさん:2006/12/09(土) 21:02:27
>>829
これは車輪の再発名なんていう問題じゃないだろ。

すべてのソートにバブルソートを用いるとか、
君がツリーで管理しているデータなんかをすべて、たんなる配列で管理するとか、そういうレベルだろうが。

837 :デフォルトの名無しさん:2006/12/09(土) 21:04:43
まぁ、スレ違いの質問するぐらいだから
その程度の知識しか無いんだろ。

838 :デフォルトの名無しさん:2006/12/09(土) 21:11:01
>>824
Delphi/BCBなら64KBの制限なくて早いよ('(゚∀゚∩

839 :a:2006/12/09(土) 22:28:52
既出かも知れないけど

Microsoft の Windows 開発者 Dave 氏による Windows NT カーネル
解説講義のビデオをストリーミング公開!
http://d.hatena.ne.jp/softether/20061209#p2

840 :デフォルトの名無しさん:2006/12/09(土) 23:21:26
俺にとっては既出じゃないからありがとうと言ってやる

841 :デフォルトの名無しさん:2006/12/10(日) 00:45:12
カトラーかと思ったら違うのね

842 :デフォルトの名無しさん:2006/12/10(日) 01:56:12
>>820
ちなみにProcess Explorerはドライバをロードしているので
自前でカーネル空間から情報収集していると思う。


843 :801:2006/12/10(日) 03:13:03
そうじゃなくて・・・
SUBSTってコマンドとかありますよね。
仮想ドライブにアクセスすると
代わりに実際のフォルダをシステムが提供してくれるわけじゃないですか。
その場合任意のアプリが「だまされる」事になりますよね。
Windows、もしくはデバイスドライバなどの機能でそういった事ができないか、
という質問な訳です。

844 :デフォルトの名無しさん:2006/12/10(日) 04:28:34
たぶんできないから、ドライバ書くかAPIフック。

845 :デフォルトの名無しさん:2006/12/10(日) 05:15:25
APIフックじゃできない事が大杉。

846 :デフォルトの名無しさん:2006/12/10(日) 05:21:28
すなおにドライバ書いた方がよさげ。
ようこそカーネルモードの世界へ。

847 :デフォルトの名無しさん :2006/12/10(日) 06:02:37
すいません、教えてください。
win32apiを使って、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だと、どうしても僕のレベルでは可読できません。
どなたか、このページなら参考になるとか、このオープンソースならわかりやすい
と言う物を教えていただけないでしょうか。
初心者の質問でもうしわけありませんが、どなたかお願いいたします。


848 :デフォルトの名無しさん:2006/12/10(日) 07:04:57
>>847
まず日本語を勉強しましょう。
言葉を理路整然と書き連ねる工夫をしましょう。
改行を不自然な位置で使用するのをやめましょう。
初心者である事は免罪符になりません。

849 :デフォルトの名無しさん:2006/12/10(日) 09:04:48
subst自体は単にDefineDosDeviceを呼んでいるだけ。
もちろん、それで801のやりたいZipをということはできないだろうが。

>>847
> 長々とした処理を書くしか無い
そんなことはない。処理毎に関数を書いて、全てのメッセージの処理を関数呼出だけにすれば、
それだけでウィンドウプロシージャはだいぶすっきりする。
というわけで、とりあえずメッセージクラッカはどうよ。

850 :デフォルトの名無しさん:2006/12/10(日) 09:48:54
>>843
いったんどっかの隠しディレクトリに物理的にファイルを展開しておいて
ファイルシステムフィルタドライバでパスをリダイレクトすればできる。
ネットワーク上のファイルをアクセスする時も同じような方法で処理されている。

851 :デフォルトの名無しさん:2006/12/10(日) 12:46:32
Windows2000だけどポップアップメニューが馬鹿過ぎる…
フォーカスを失っても閉じないことが結構あるんですが何で?

852 :デフォルトの名無しさん:2006/12/10(日) 12:49:31
>>851
タスクトレイの話?
だったら、WM_NULL

853 :デフォルトの名無しさん:2006/12/10(日) 13:06:34
> ネットワーク上のファイルをアクセスする時も同じような方法で処理されている。
それはオフラインファイルの場合だけじゃまいか

854 :デフォルトの名無しさん:2006/12/10(日) 14:24:34
>>853
自分で作ったもんでもなければクラックして動作確認したわけでもないから
違うかもしれんが、少なくとも俺はそう聞いている。なんでも、ネットワーク
上のものだからいつアクセスできなくなるかわかったもんじゃないし、
第一、ファイルI/Oがある度にネットワーク経由のアクセスしてたんじゃ
パフォーマンスが最悪になるとかで、ネットワーク上のファイルが開かれる
場合はとにかくいったんファイル全体をダウンロードしてしまうらしい。

855 :デフォルトの名無しさん:2006/12/10(日) 14:36:34
smbではそんな事してない。

856 :デフォルトの名無しさん:2006/12/10(日) 14:40:46
VB NETスレで聞いてみたのですが、.NETでの関数では無理なようなのでここで質問させてください
他のアプリケーションプログラムを起動させたりするのはSystem.Diagnostics.Processで可能らしいのですが入力ボックスに自動で入力したり、ボタンを押したりさせるような
関数とかってWIN32APIで準備されているのでしょうか?


857 :デフォルトの名無しさん:2006/12/10(日) 15:00:07
用意されてるよ

858 :デフォルトの名無しさん:2006/12/10(日) 15:27:36
>>857
サンクス856です
具体的な関数名を教えてもらえませんか

859 :デフォルトの名無しさん:2006/12/10(日) 15:53:51
SendMessage

860 :デフォルトの名無しさん:2006/12/10(日) 16:07:44
>>859
どうもありがとう。

861 :デフォルトの名無しさん:2006/12/10(日) 16:08:33
>>847
本ならMFCインターナル、ただしこれはもう古いかもしれない。
それかソース追う。ただし全部把握するのはかなり大変。

ドキュメントビューアーキテクチャーは最初はやめた
法がいいと思う。

862 :デフォルトの名無しさん:2006/12/10(日) 16:11:51
>>855
smbがそうなっているってだけで関係ねぇだろ。
ちなみにレドモンド帰りのヤツから聞いた話だ。

863 :デフォルトの名無しさん:2006/12/10(日) 16:20:45
smb以外のプロトコルでファイルアクセスですかwww

ちなみにレドモンド帰りの知人は何時頃どんな仕事をしていたのですか?
日本人は意外と少ないので知っている人かもしれませんね。

864 :デフォルトの名無しさん:2006/12/10(日) 17:11:39
>>863
アホか。プロトコルとしてのsmbの話してるんだったらそれこそ関係ねぇだろ。
クライアント内でファイルをどう扱うかの話なんだから。
MS内ではわりかし有名な人だったみたいだから、本当にドンピシャで誰かわかるかもしれんから教えない。

865 :デフォルトの名無しさん:2006/12/10(日) 17:22:26
画像に書かれている文字列をテキストデータとして取り出したいのですが
どうすればいいですか?

866 :デフォルトの名無しさん:2006/12/10(日) 17:26:40
入力作業のバイト君を雇うために募集広告を出す。

867 :デフォルトの名無しさん:2006/12/10(日) 17:28:24
今から院生になって10年ぐらい研究する。

868 :デフォルトの名無しさん:2006/12/10(日) 17:38:46
簡単には無理ってことか…

869 :デフォルトの名無しさん:2006/12/10(日) 17:50:59
プリントアウトしてからスキャナにかけてOCRで読み込む

870 :デフォルトの名無しさん:2006/12/10(日) 17:53:51
直接画像を OCR かけろw

871 :デフォルトの名無しさん:2006/12/10(日) 17:57:37
フリーのOCR APIって無いの?

872 :デフォルトの名無しさん:2006/12/10(日) 18:39:13
スレ違い

873 :デフォルトの名無しさん:2006/12/10(日) 18:50:24
>>864
> アホか。プロトコルとしてのsmbの話してるんだったらそれこそ関係ねぇだろ。
> クライアント内でファイルをどう扱うかの話なんだから。
だからオフラインファイルだけじゃまいかと言ってるのに

> なんでも、ネットワーク
> 上のものだからいつアクセスできなくなるかわかったもんじゃないし、
> 第一、ファイルI/Oがある度にネットワーク経由のアクセスしてたんじゃ
> パフォーマンスが最悪になるとかで、ネットワーク上のファイルが開かれる
> 場合はとにかくいったんファイル全体をダウンロードしてしまうらしい。
とかオフラインファイルの説明そのものだし。

874 :デフォルトの名無しさん:2006/12/10(日) 21:26:37
Cマガジンに続きWindowsDeveloperマガジンまで廃刊とは
もうだめだ
おしまいだ
しぬしかない

875 :デフォルトの名無しさん:2006/12/10(日) 21:41:33
WindowsDeveloperマガジンは1年で休刊だと思ったんだがなぁ。
なんでここまでもったのか分らん。

876 :デフォルトの名無しさん:2006/12/10(日) 21:46:28
そういえば開発系週刊誌とか皆何読んでたりする?

877 :デフォルトの名無しさん:2006/12/10(日) 22:10:40
開発系で週刊誌なんかあったか?

878 :デフォルトの名無しさん:2006/12/10(日) 23:13:10
>>864
> アホか。プロトコルとしてのsmbの話してるんだったらそれこそ関係ねぇだろ。

どのプロトコルでアクセスするかによって処理が違うのですけど、ご存じない?

879 :820:2006/12/11(月) 02:40:18
>>842
ありがとう。簡単にはできなさそうか…

880 :デフォルトの名無しさん:2006/12/11(月) 04:12:43
隠しAPIだった、APIを使っているとか聞いたことがあるけど。その資料どこだったか見つけられない・・・。
まあインジェクトしてプロセス情報取得でもいけるから、さほど難しくはないよね。

881 :デフォルトの名無しさん:2006/12/11(月) 17:29:38
マウスの位置は、GetCursorPosですよね?
マウスボタンの状態を得る方法はありませんか?
イベントハンドラを捕らえるしかないですか?

882 :デフォルトの名無しさん:2006/12/11(月) 17:34:30
あ、GetAsyncKeyState(VK_LBUTTON) でいいのか。


883 :720:2006/12/11(月) 22:03:49
タスクバーの非表示はWS_EX_TOOLWINDOW を指定しできたのですが
ダイアログボックスをメインにするにはどうすればいいでしょうか?
”ファイル名を指定して実行”のウインドウみたいにタスクバーに表示されず
ダイアロボックスを表示させたいです。

884 :デフォルトの名無しさん:2006/12/11(月) 22:08:58
>>720に付いてるレスをよく見るんだ

885 :720:2006/12/11(月) 22:43:14
モーダルダイアログではメインにできないですか?

886 :デフォルトの名無しさん:2006/12/11(月) 23:04:30
Win32プログラミングでペイントに近いソフトを作りたいのですが、
何かおススメの参考書はありますか?
とりあえずWin32APIオフィシャルリファレンス改訂3版グラフィック・GUI編は購入しました

具体的には以下のサイトにあるようなアプリケーションを作成したいと思ってます
http://www.cs.washington.edu/homes/yangli/research/sketchpoint/



887 :デフォルトの名無しさん:2006/12/11(月) 23:25:42
gimpとかオープンソースを参考にする と言おうと思ったけど
ペイントならMSDNのサンプルにあったような気がする

888 :デフォルトの名無しさん:2006/12/12(火) 03:33:13
マウスキャプチャって他のプロセスにはできないんですか?

889 :デフォルトの名無しさん:2006/12/12(火) 06:23:39
>>885
んなこたぁ無いから、黙って>>720に付いてるレスを全部見るんだ

890 :デフォルトの名無しさん:2006/12/12(火) 10:45:53
プログラミングWindows 上下
Advanced Windows
MSDNライブラリ
以外でWin32API、SDKプログラミングを学ぶ上で日本語なおすすめ良書教えてください。

891 :デフォルトの名無しさん:2006/12/12(火) 10:52:35


892 :デフォルトの名無しさん:2006/12/12(火) 11:00:27
猫はWebで十分な気が。
てかプログラミングWindowsで何の不満が‥‥

あとはMFCやVCLのソースくらいじゃないか?日本語じゃないけど。

893 :デフォルトの名無しさん:2006/12/12(火) 11:00:30
>プログラミングWindows 上下
>Advanced Windows
>MSDNライブラリ
これだけやったらあとは自分で判断できるだろう
その本持て余すようだったら向いてないからあきらめた方がいい。

894 :デフォルトの名無しさん:2006/12/12(火) 11:09:06
>>892
猫シリーズも読みました
丁寧な本だとおもった

>>893
えらく厳しいですね
ほかになんかイイ本ないかなーとおもってきいてます
ある程度読んで実践できるようになったから

895 :デフォルトの名無しさん:2006/12/12(火) 11:18:58
>>890
このスレと過去スレ


896 :デフォルトの名無しさん:2006/12/12(火) 11:29:21
ある程度読んで実践できるにしては質問が漠然としてる。

897 :デフォルトの名無しさん:2006/12/12(火) 11:34:02
>>894
基礎はできてるみたいだから作りたいもの作れ
その都度MSDN等を参照しつつ覚えていけばいい

898 :デフォルトの名無しさん:2006/12/12(火) 11:38:04
たぶん本に書いてある範囲ならできるけど、自力では何も作れないタイプ

899 :890:2006/12/12(火) 11:39:33
>>895
みたよ

Amazon見てたときは
Windows Server2003完全技術解説
インサイドMicrosoft Windows
Win32システムサービスプログラミング
とかをよもうとおもいましたがどんなもんでしょ

>>896
みんなどんなのよんでんのかなーとかいうレベルの質問ですよ

>>897
やっぱそうなりますよね
通勤長いんで(90分)本読むんですが、そのとき読みたいなーというかんじ

>>898
想像におまかせ

900 :デフォルトの名無しさん:2006/12/12(火) 12:10:15
>>899
批判じゃないけどなんか漠然としてるんだよね
俺も楽しい本探すことが半ば趣味だからこの手のレス書いてみたいともったことはあるし

でも>>892の言うとおりで、ある程度知識吸収すると、
もうテクニック的には適当なソース読むのぐらいしかないんだよね
で、WTLとかWineとかおもしれーぞ、と
始発で座れるならノートにソース落としておくと退屈しねーぞ、と

901 :デフォルトの名無しさん:2006/12/12(火) 12:53:09
通勤途中で見るとかなったら、後はアルゴリズム本とか開発系雑誌なんじゃね?

902 :デフォルトの名無しさん:2006/12/12(火) 15:48:25
Robbinsのデバッグ本

903 :デフォルトの名無しさん:2006/12/12(火) 16:37:53
>>898
俺...orz

904 :デフォルトの名無しさん:2006/12/12(火) 17:14:17
実践的なことができるようになったなら本はそろそろ卒業したら?
何か実用的なプログラムのソースコードを読むのはどうかな。
数百〜数千行がいいかな。
きっと本を読んだ程度じゃスッと理解できない事が出てくるよ。
本のサンプルには載らないようなテクニックとかも学べそうだし。

905 :デフォルトの名無しさん:2006/12/12(火) 18:00:10
基礎が終わったなら、コーディングスタイルとかの思想的な
部分の勉強もいいいけどスレ違いだな。

906 :デフォルトの名無しさん:2006/12/12(火) 18:45:29
>みんなどんなのよんでんのかなーとかいうレベルの質問ですよ
本は読まないよ。
本に載る程度の簡単な内容ならネット上にごろごろ解説サイトがあるし。
詳しさを求めるならMSDN読むし。

907 :デフォルトの名無しさん:2006/12/12(火) 18:46:17
>>900さんの見てふと思った。
このソースは読んどけ、みたいなお勧めはありますか?

908 :デフォルトの名無しさん:2006/12/12(火) 19:53:14
自分のレベルに合ったソースじゃないと意味がないし
何のためにプログラムを勉強するのかにもよる
目的すら無いならやめちまえ

909 :デフォルトの名無しさん:2006/12/12(火) 19:58:05
半年前の自分のソースを読むといいってのをスラドで見かけた。


910 :デフォルトの名無しさん:2006/12/12(火) 20:15:26
勉強中だと半年前の自分のソースって見てて恥ずかしくなるよね。

911 :デフォルトの名無しさん:2006/12/12(火) 20:39:02
勉強初めて3ヶ月余りの俺は(ry

912 :デフォルトの名無しさん:2006/12/12(火) 21:03:56
WinMainにシューティングゲームのソース1万行を全て書いていた俺

913 :デフォルトの名無しさん:2006/12/12(火) 21:33:12
目くそが鼻くそをばかにしててワロタ

914 :デフォルトの名無しさん:2006/12/13(水) 00:19:04
↑のどくそ

915 :デフォルトの名無しさん:2006/12/13(水) 01:14:41
>>912
俺と同じ事してる奴がいるとはwwwwwwwwww
引数付関数なんてほとんど作ってなかった俺wwwwwwwww

916 :デフォルトの名無しさん:2006/12/13(水) 08:30:44
>>912
メッセージの処理をどうやってたのか疑問

917 :デフォルトの名無しさん:2006/12/13(水) 08:43:39
>>916
自前でループ回して
GetAsyncKeyStateとか使ってたんじゃないのw
WM_CLOSE拾えないから少なくともクローズボックスは反応しないな。

918 :890:2006/12/13(水) 08:52:35
>>891-917
なるほど。プログラミングWindowsやAdvancedWindowsみたいな入門書ではなく、
入門書の次に読むような本を期待していたんですがないんですね。
Windows、SDKとかの知識を深めようとおもったら、MSDN読み、人のソース読みしかなくなるっぽいので、
通勤にノートPCの導入を考えてみます。参考になりました。ありがとうございます。

919 :デフォルトの名無しさん:2006/12/13(水) 09:02:53
Advanced Windowsが入門書…?

>>918
もう知ってるとおもうけどMSDNは日本語でおkな文面が多いから読むには結構気合が居るぞ。
あとこれは個人的な意見でしかないから深く考えないで欲しいんだが
電車の中とかでノート開いてる人ってキモくないか…?

920 :デフォルトの名無しさん:2006/12/13(水) 09:13:58
>>919
ぁぁ、キモイとおもう。けど、知識はほしいから天秤にかけたら知識に成った。
すでにDELLに発注してしまった。自分のキモサが+1された。

921 :デフォルトの名無しさん:2006/12/13(水) 09:23:31
>919
あどばんすどういんどうずハにゅうもんしょデス
ほんとうニミタコトアリマスカ
かくしょうのタイトルをみてみましょう

922 :デフォルトの名無しさん:2006/12/13(水) 12:10:52
ttp://pc8.2ch.net/test/read.cgi/tech/1164376287/から誘導されてきました。

 SetWindowsHookExとWH_CALLWNDPROCを使ってよそのプロセスに送られるメッセージを
見ることができるようになったのですが、この方法だとメッセージを見るだけで変更することが出来ません。
 一部のメッセージ(WM_KILLFOCUS)が渡されることを阻止したいのですが、どうすればいいでしょうか?

923 :デフォルトの名無しさん:2006/12/13(水) 12:21:22
>>922
WH_CBTを使うとか

924 :デフォルトの名無しさん:2006/12/13(水) 12:55:46
WH_CBTはWM_KILLFOCUSを扱ってくれないんですよ。

925 :デフォルトの名無しさん:2006/12/13(水) 12:58:02
殺したいメッセージはWM_NULL二置換するとかいう方法もあるらしい
やったことないけど

926 :デフォルトの名無しさん:2006/12/13(水) 14:18:14
WH_CALLWNDPROCじゃメッセージ書き換えも破棄も無理だった気がする
WH_GETMESSAGEならできたと思うけど

927 :デフォルトの名無しさん:2006/12/13(水) 15:14:23
サービスからアプリケーションにメッセージを送るため、ウィンドウハンドルを
探したのですが見つかりません。どこにあるんでしょ・・・。(環境:Vista)


928 :デフォルトの名無しさん:2006/12/13(水) 16:18:03
どんなウィンドウをどうやって探してたのよ。

929 :デフォルトの名無しさん:2006/12/13(水) 16:20:38
ウィンドウハンドルがどこにあるのか、という疑問が出る時点で何かがおかしい気がする

930 :デフォルトの名無しさん:2006/12/13(水) 16:22:40
notepadのウィンドウをEnumWindowで列挙して探してました。

931 :デフォルトの名無しさん:2006/12/13(水) 16:44:12
FindWindowを知らないでEnumWindowでガリガリやるヤツなんて初めて見た

932 :デフォルトの名無しさん:2006/12/13(水) 17:00:16
ウィンドウタイトルとか可変なのでEnumWindowで列挙してexeのフルパスで検索してたのです。

933 :デフォルトの名無しさん:2006/12/13(水) 17:05:04
クラス名で検索できないの?

934 :デフォルトの名無しさん:2006/12/13(水) 17:09:25
テストでnotepadを対象にしてたのですがクラス名も不明というか可変なので・・・。

935 :デフォルトの名無しさん:2006/12/13(水) 17:26:17
Vista以外では動いてんの?
サービス(違うユーザー)からのEnumWindows等はできなくなったんじゃない?


936 :デフォルトの名無しさん:2006/12/13(水) 17:35:11
ちょwwww
クラス名も可変ってwwww
何言ってんだwwww

それとも、vistaから可変になったのか?

937 :デフォルトの名無しさん:2006/12/13(水) 17:42:08
.netアプリは可変だな

938 :デフォルトの名無しさん:2006/12/13(水) 17:46:36
xpでは動いてました。

939 :デフォルトの名無しさん:2006/12/13(水) 17:49:36
EnumWindowsProcにハンドルって返ってきてるんじゃマイカ?

940 :デフォルトの名無しさん:2006/12/13(水) 17:58:36
ウインドウのクライアント領域の左上の座標はとることはできないでしょうか?
GetWindowRectで取得したRect.Left及び、Rect.Topは、ウインドウの左上のようです。
クライアント内の座標がほしいです。

941 :デフォルトの名無しさん:2006/12/13(水) 18:01:00
>>940 Rect の意味を調べればわかるはず

942 :デフォルトの名無しさん:2006/12/13(水) 18:02:17
読み間違えた。ごめん。
GetWindowRectに対して、ゲットクライアントレクト(つづり忘れた)があるよ。

943 :デフォルトの名無しさん:2006/12/13(水) 18:05:47
まぁGetClientRectのLeft:Topは0だけどな

944 :デフォルトの名無しさん:2006/12/13(水) 18:06:03
わかった。
ClientToScreenに、0, 0 の座標を渡せばいいんですね。
なあんだ、こんなことか。

945 :デフォルトの名無しさん:2006/12/13(水) 18:09:51
まぁ、概それでいいんだが
GetClientRectの結果を渡した方が、何かあった時困らなくていいと思うけどな

946 :デフォルトの名無しさん:2006/12/13(水) 18:15:25
>>922-926
フックして潜り込んだ後、サブクラス化してしまえばどうにでもなるのでは?

947 :922:2006/12/13(水) 20:02:40
>>946
それだ。
何とかうまく行ったよ、サンクス。

948 :デフォルトの名無しさん:2006/12/13(水) 22:41:30
ShellExecuteExでhtmlを開きたいのですが、
どうも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が開いてくれない。。


949 :デフォルトの名無しさん:2006/12/13(水) 22:42:47
対策:Vistaを使わなければいい

950 :デフォルトの名無しさん:2006/12/14(木) 00:24:50
>>948
verbが"open"で登録されてないんじゃないか?

sei.lpVerb = NULL;

で、やってみ?

951 :デフォルトの名無しさん:2006/12/14(木) 01:02:22
ochinchin.h を omanko.cpp に #include したのに IsDoutei() で TRUE が返って来るんですが。

952 :デフォルトの名無しさん:2006/12/14(木) 01:26:52
>>948
sei.lpIDList

953 :デフォルトの名無しさん:2006/12/14(木) 01:28:38
>>917
WM_CLOSE、WM_COMMANDを拾えないのホント不便だよな。

954 :デフォルトの名無しさん:2006/12/14(木) 01:30:07
>>951
omanko.cppをよく見ろ

#if AGE <= SYOUGAKUSEI
#include "ochinchin.h"
#else
#error doutei ga yurusareru noha syougakusei made dayone
#endif

955 :デフォルトの名無しさん:2006/12/14(木) 09:05:51
SendMessage(GetDlgItem(hWnd,CTR_LIST),LB_ADDSTRING,0,(LPARAM)"TEST");
で、LISTBOXにアイテムを追加したいのですが、
Windowプロシージャの中に書かないとLISTBOXにアイテムが追加されません。
Windowプロシージャの外からはできないのでしょうか

956 :デフォルトの名無しさん:2006/12/14(木) 10:07:32
Windowプロシージャの外ってどこだ?
その場合ちゃんとウィンドウハンドルはとれてるのか?

957 :デフォルトの名無しさん:2006/12/14(木) 10:40:57
フロントエンドアプリを作りたいのですが、
コンソールアプリを実行して、コンソールに表示される文字列を拾ってくるには
どうやったらいいのでしょうか?

958 :デフォルトの名無しさん:2006/12/14(木) 11:01:53
>>957
パイプ

959 :デフォルトの名無しさん:2006/12/14(木) 13:48:22
ShellExecuteでホームページを

960 :デフォルトの名無しさん:2006/12/14(木) 13:51:34
その後>>959の姿を見た者は誰もいなk

961 :デフォルトの名無しさん:2006/12/14(木) 13:57:14
httpプロトコルに関連付けられたブラウザを調べるにはどうすればいいですか?

962 :デフォルトの名無しさん:2006/12/14(木) 13:59:43
>>961
>httpプロトコルに関連付けられたブラウザ
意味不明

963 :デフォルトの名無しさん:2006/12/14(木) 14:02:03
>>962
例えば
ShellExecute(NULL, "open", "http://www.google.co.jp/", NULL, NULL, SW_SHOWNORMAL)
ってやったら漏れの場合operaが開くんですが、
開く前にどのブラウザが関連付けられているか調べたいのです。

964 :デフォルトの名無しさん:2006/12/14(木) 14:10:32
>>963
HKEY_CLASSES_ROOT\http\shell\open\command
HKEY_CLASSES_ROOT\http\shell\open\ddeexec\Application

このへん

965 :デフォルトの名無しさん:2006/12/14(木) 14:21:38
>>964
ありがddd

966 :デフォルトの名無しさん:2006/12/14(木) 14:36:57
個人的にはFindExecutableの方が好み。

レジストリのHKEY_CLASSES_ROOT\http\shell\openとかいう部分は
95からvistaまで同じなんだろうか?

967 :デフォルトの名無しさん:2006/12/14(木) 14:46:36
>>966
それ、試してから言ってる?

ローカルの.htmlならそれでいけるだろうけどねー

968 :デフォルトの名無しさん:2006/12/14(木) 14:51:00
勘違いスマソ

969 :デフォルトの名無しさん:2006/12/14(木) 16:37:15
デフォルトのVerbがopenでない可能性もあるよね。
HKEY_CLASSES_ROOT\htmlfile\shellの既定の値も見ないと。


970 :デフォルトの名無しさん:2006/12/14(木) 16:39:21
間違えた。
HKEY_CLASSES_ROOT\HTTP\shellの既定の値。

971 :デフォルトの名無しさん:2006/12/14(木) 17:15:28
>>955
hWndが適切な値になってないだけとか。

972 :デフォルトの名無しさん:2006/12/14(木) 17:32:49
>>969-970
>>963は"open"と指定してるから既定値みる必要ないんでない?

973 :デフォルトの名無しさん:2006/12/14(木) 22:02:58
タブ付?リストボックスの作り方がいまいちよくわからないのですが
教えていただけませんか?

エクセルでいうなら一番上のA,B,Cとかいう選択できるタブみたいな奴なんですが
うまく言葉で表せれないorz

974 :973:2006/12/14(木) 22:19:08
こういうのです
http://chiffon.ty.land.to/src/Chiffontea0457.bmp

975 :デフォルトの名無しさん:2006/12/14(木) 22:23:03
>>973
ListViewでググれ

976 :デフォルトの名無しさん:2006/12/14(木) 22:26:52
>>927
ヒント: ウィンドウステーションとデスクトップ

977 :973:2006/12/14(木) 22:30:33
>>975,976
うおおおおう!!
ありがとうごぜぇますだ!!!リストビューって名前だったのね

978 :610:2006/12/15(金) 00:22:48
>>976
ヒント:対話的?

979 :デフォルトの名無しさん:2006/12/15(金) 08:48:46
閉じたウィンドウの、ウィンドウハンドルの値って、他のウィンドウが生成される際に再利用されるんでしょうか?
というか、されると思うのですが、それって、直ぐに再利用の対象になるのでしょうか?それともずっと後になるのでしょうか?

980 :デフォルトの名無しさん:2006/12/15(金) 09:42:30
デバッガ持ってないの?

981 :デフォルトの名無しさん:2006/12/15(金) 10:54:23
>>979
システムによるし、そういうのを前提としたものを作ってはいけない

982 :デフォルトの名無しさん:2006/12/15(金) 14:59:13
MSDN見てたら

Microsoft 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?

ってウインドウが突然上から降りてきて死ぬほどびびった〜

ええかげんにせえよ心臓止まるかと


983 :デフォルトの名無しさん:2006/12/15(金) 15:14:07
メインウィンドウに貼り付けてあるリストボックスで、
項目がダブルクリックされたときにだけイベントを発生させるにはどうすればいいのでしょうか

984 :デフォルトの名無しさん:2006/12/15(金) 15:31:53
WM_COMMAND
LBN_DBLCLK

985 :デフォルトの名無しさん:2006/12/15(金) 15:41:42
>>984
case WM_COMMAND:
  switch(LOWORD(wParam)) {
    case .....
となっているのですが、switch(LOWORD(wParam)){
のcaseに
case LBN_DBLCLKを書くんですか?
それとも、case リスト:内にif文を書くんですか?

986 :デフォルトの名無しさん:2006/12/15(金) 15:50:32
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/menus/menureference/menumessages/wm_command.asp

987 :デフォルトの名無しさん:2006/12/15(金) 16:54:28
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listboxes/listboxreference/listboxmessages/lbn_dblclk.asp

988 :デフォルトの名無しさん:2006/12/15(金) 17:19:58
ほんとにウィンドウ降ってきてワロタ

>>990
次スレよろしく

989 :デフォルトの名無しさん:2006/12/15(金) 17:20:37
駄目だ・・・・キレそう・・・プチッと。

990 :デフォルトの名無しさん:2006/12/15(金) 17:41:42
次スレ

Win32API質問箱 Build48
ttp://pc8.2ch.net/test/read.cgi/tech/1166172047/

991 :デフォルトの名無しさん:2006/12/15(金) 17:49:28


992 :979:2006/12/15(金) 17:51:29
>>980
デバッガなどで表示して、しばらく確認した感じだと、
うちの環境(XP SP2)では、再利用されているのは無かったんですが、
そのへんの仕様が知りたいなと思いまして・・・

>>981
ごもっともです。。
他プロセスのウィンドウを区別するのに、一番手軽なので、
ウィンドウハンドルをキーにしていたのですが、考え直そうと思います。
今後の参考に、「システムによる」の部分を教えていただけると嬉しいです。


993 :デフォルトの名無しさん:2006/12/15(金) 18:33:35
いつ128ビットモードで動くんだ?

994 :デフォルトの名無しさん:2006/12/15(金) 18:40:50
>>992
Win16とWin32でメモリ空間の扱いがかわったからね。

995 :デフォルトの名無しさん:2006/12/15(金) 20:16:18
>>992
GetWindowThreadProcessId()
ただしIDもプロセスが終了してすべてのハンドルが閉じられると再利用されるので
それが困る場合はプロセスハンドルを1つは開いておくように

996 :デフォルトの名無しさん:2006/12/15(金) 20:53:14
1000ならバグが3個減る。

997 :デフォルトの名無しさん:2006/12/15(金) 20:56:33
絶対無理。

998 :デフォルトの名無しさん:2006/12/15(金) 20:59:04
998ならバグがあと998,998個

999 :デフォルトの名無しさん:2006/12/15(金) 21:01:08
1000なら1ヶ月ぶりに休みが取れる…

1000 :デフォルトの名無しさん:2006/12/15(金) 21:07:22
if(line==1000)goto 次スレ

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

230 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)