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

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

Win32API質問箱 Build38

1 :デフォルトの名無しさん:2005/12/06(火) 00:59:05
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。

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

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

2 :デフォルトの名無しさん:2005/12/06(火) 00:59:26
-過去スレ
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 :デフォルトの名無しさん:2005/12/06(火) 01:00:18
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 :デフォルトの名無しさん:2005/12/06(火) 01:00:59
- MSDN Online
http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com/

- Windows® Server 2003 SP1 Platform SDK Full Download
http://www.microsoft.com/downloads/details.aspx?familyid=EBA0128F-A770-45F1-86F3-7AB010B398A3&displaylang=en
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/windows/win32/

- 書籍
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&H=&view=table&shw=&D=tech

5 :・∀・)っ-●○◎- ◆Pu/ODYSSEY :2005/12/06(火) 01:10:07
19ってこれでいいの?同じディレクトリにdatも上げとくね。
http://trip.jp.land.to/2ch-log/tech/1084697545.html

6 :デフォルトの名無しさん:2005/12/06(火) 01:20:20
FindFirstFile()などでフォルダ内のファイル名を取得したいのですが、
このAPIが返すファイル名リスト(実際はリスト構造にはなってませんが)
は日付が最新のものから順に入っているのでしょうか?
そうでない場合、日付順にファイル名を取得する良いAPIはありますか?

7 :デフォルトの名無しさん:2005/12/06(火) 01:23:22
>>6
順番は不定。
自分でソート。

8 :・∀・)っ-●○◎- ◆Pu/ODYSSEY :2005/12/06(火) 01:23:23
>>6
たしかASCII順(ただし大文字小文字区別なし)
構造体の配列に溜め込んで日付でソートするといいよ

9 :6:2005/12/06(火) 01:28:06
ありがとうございます。
ということはいったん全部吸い上げてから調べないといけないんですね。
フォルダは所属しているファイルのうちどれが最新か知ってるはずだと
思うのですが、そういうAPIが無いのは意外でした。

10 :・∀・)っ-●○◎- ◆Pu/ODYSSEY :2005/12/06(火) 01:35:05
ありません。

Windowsエクスプローラは、FindFirstFile/FindNextFileで取ってきた結果を
リストビューコントロールに一覧表示してるだけですよ。

11 :デフォルトの名無しさん:2005/12/06(火) 01:36:59
> フォルダは所属しているファイルのうちどれが最新か知ってるはずだと思う

これどっから来たんだろう

12 :6:2005/12/06(火) 01:37:12
そうでしたか。
勉強になりました。ありがとうございました。

13 :デフォルトの名無しさん:2005/12/06(火) 01:37:48
>>9
フォルダは知らないだろw

14 :デフォルトの名無しさん:2005/12/06(火) 01:38:33
>>8
FAT32だと物理的順序だったと思う

15 :14:2005/12/06(火) 01:39:56
ごめんFAT32でなくてWin9x系だったかも

16 :6:2005/12/06(火) 01:40:52
unixのディレクトリとWindowsのフォルダは同じ概念でしょうか?

17 :デフォルトの名無しさん:2005/12/06(火) 01:41:59
DOS時代はディレクトリって呼んでたよ

18 :デフォルトの名無しさん:2005/12/06(火) 01:42:21
>>8
NTFSだとそうかもしれんが、それ以外だとそうとは限らん。
確実なのはディスク上の順番で返すということだけ。

19 :デフォルトの名無しさん:2005/12/06(火) 03:46:46
>>17
フォルダは概念、ディレクトリは実体。
例えば「デスクトップ」はフォルダ、"c:/Doc.../user/デスクトップ/"はディレクトリ。


20 :デフォルトの名無しさん:2005/12/06(火) 04:11:09
>>1


21 :デフォルトの名無しさん:2005/12/06(火) 11:12:48
>> Build37-990
コントロールをサブクラス化して、メッセージを処理するなり親ウィンドウに渡すなりすれば?


22 :デフォルトの名無しさん:2005/12/06(火) 12:14:34
SendInput関数で スペースはVK_SPACEなどで表現できますが マウスの左クリックはどの様に表現すればよいのでしょうか。

23 :デフォルトの名無しさん:2005/12/06(火) 12:18:41
>>22
WM_LBUTTONDOWN
直接SendMessegeする手もあるけど。

24 :デフォルトの名無しさん:2005/12/06(火) 12:18:42
>>22
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputfunctions/sendinput.asp
よく嫁。特にINPUT構造体。

25 :22:2005/12/06(火) 12:29:43
>>23-24
ヽ(^o^)丿サンクス!

26 :デフォルトの名無しさん:2005/12/06(火) 16:59:44
前スレ990で、1000ゲッターに流されてしまったため(笑)、再度でつ。

WM_MOUSEMOVEメッセージについてなんですけど、 
マウスカーソルがスタティックテキスト(含むグループボックス)の子ウィンドウ上の時にはメッセージ来るようなんですが、 
他の子ウィンドウ(エディットコントロールやチェックボックスなど)上だとメッセージが来ないようなのです。 

うまくスタティック以外のウィンドウ上でのマウスカーソルの動きをキャッチする方法はないのでしょうか。 

27 :デフォルトの名無しさん:2005/12/06(火) 17:03:47
WM_NOTIFY

28 :デフォルトの名無しさん:2005/12/06(火) 18:09:17
>>27
それはコモンコントロールだけで、
エディットコントロールやチェックボックスなどでは来ませんし、
ステータスバーもクリックされないと親ウィンドウにWM_NOTIFYメッセージを発しませんが…

29 :デフォルトの名無しさん:2005/12/06(火) 22:04:15
リソースで定義したダイアログをDiagAとします。
このDiagAを作るあたってDialogBoxマクロを利用する訳ですが、
DialogBoxの引数にプロシージャを指定する部位がありますよね。

ダイアログが作られた時、プロシージャへWM_CREATEメッセージは発行されないのでしょうか?

30 :デフォルトの名無しさん:2005/12/06(火) 22:09:48
>>29
その通り

31 :デフォルトの名無しさん:2005/12/06(火) 22:11:58
ううん、とあるデータをダイアログが作られた時に、ダイアログのプロシージャから操作したいのですけど。
なんかいい方法ないでしょうか。

32 :デフォルトの名無しさん:2005/12/06(火) 22:17:02
>>31
WM_INITDIALOGメッセージだったかな。

聞いてることとずれてたらスマソ

33 :デフォルトの名無しさん:2005/12/06(火) 22:17:37
WM_INITDIALOG

34 :デフォルトの名無しさん:2005/12/06(火) 22:18:30
かぶった

35 :デフォルトの名無しさん:2005/12/06(火) 22:21:15
WM_INITDIALOGがダイアログ作成に発行されました。
ありがとうございます・・・

36 :デフォルトの名無しさん:2005/12/06(火) 22:57:29
>>26
>>21
親にPost

37 :デフォルトの名無しさん:2005/12/06(火) 23:00:04
>>36
ごめんあそばせ。
21さん見過ごしてました

どうもサンクスです。

38 :前スレ959:2005/12/07(水) 03:46:57
できました。デフォルトの戻り値を0にすればよかったようです。
UINT_PTR CALLBACK OFNHookProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
    if (msg == WM_INITDIALOG)
    {
        SetWindowLong(hdlg, GWL_STYLE, GetWindowLongPtr(hdlg, GWL_STYLE) | WS_CLIPSIBLINGS);
        MoveWindow(hdlg, 30, 17, 300, 22, FALSE);
        CreateWindow("ComboBox", "", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_GROUP | WS_TABSTOP, 130, 0, 164, 100, hdlg, (HMENU)0x1000, Instance, 0);
    }
    return 0;
}

39 :デフォルトの名無しさん:2005/12/07(水) 09:18:22
質問です
IStreamを実装してMyStreamってクラスを作りたいのですが

この場合、IStreamで定義されているメソッドを使うためには、
IMyStream* mystream = hoge();
mystream->QueryInterface(...);
でIStreamのインタフェイスを取得しないと使えないのでしょうか?

そして、もしIMyStream*から直接使うためには、
多少宣言がIStream*と重複しようが、
idlでReadやWrite等を再定義していくことになるのでしょうか?

40 :デフォルトの名無しさん:2005/12/07(水) 09:36:47
>>39
C++の入門書読んだ方がいいと思うお

41 :デフォルトの名無しさん:2005/12/07(水) 09:57:46
>>40
class MyStream :
 public CComObjectRootEx<CComSingleThreadModel>,
 public CComCoClass<MyStream, &CLSID_MyStream>,
 public IDispatchImpl<IMyStream, &IID_IMyStream, &LIBID_MyLib>,
 public IStream {};

C++的に考えれば、これはMyStreamのポインタでIStreamのメソッドを呼べることになりますよね

でもこれはあくまでCOMライブラリを作る際に派生させただけであって、
結局COMを扱う側から見たら
interface IMyStream : IDispatch {}
でしかないのだから、MyStreamでIStreamを幾ら実装しようと、
直接はIStreamのメンバを呼び出せない、ということでいいのかな?

ていうか微妙にWin32の話じゃなくてすみません
ATLスレに行った方がよかったのかな

42 :デフォルトの名無しさん:2005/12/07(水) 10:17:34
>>41
IStreamの各メンバはvirtual 〜 〜(〜) = 0;の抽象メソッド。
MyStreamはIStream派生クラスとして定義するからMyStreamをIStreamにキャストしてもMyStream上の実体を呼び出す。


43 :デフォルトの名無しさん:2005/12/07(水) 11:38:35
LRESULT CALLBACK WndProc()での
LRESUTLはtypedefされたC言語のデータ型と思っておいて良いですか?

44 :デフォルトの名無しさん:2005/12/07(水) 12:07:27
>>43
そうだよ。

>>41
ところでIMyStreamがIStreamから派生しているのであれば、
MyStreamはIStreamを継承する必要はないと思うが。

45 :デフォルトの名無しさん:2005/12/07(水) 12:31:05
>>44
すいません、また色々考え込んでしまって混乱してしまいました。。

IMyStreamはIStreamの派生ではありませんでした。
IMyStreamはプロジェクト構築時にデフォルトでIDLで
interface IMyStream : IDispatch {}
と定義されていました。

よく考えたらIDispatchの機能が必要がなければIDispatchから派生させる必要ないですね。
インタフェイスの継承をIDispatchからIStreamにすればよかったのかな、、
ちょっとこれから書き換えてきます。どうもありがとうございました

46 :デフォルトの名無しさん:2005/12/07(水) 12:42:55
ここで俺の妄想を発揮。

45は別にIMyStreamやIStreamを実装したいのではなく、
CreateStreamOnHGlobalとかSHCreateStreamOnFile(Ex)を活用するだけで十分ではないか?

47 :デフォルトの名無しさん:2005/12/07(水) 12:54:16
>>46
いあ、やろうとしてるのは、あるIStreamを食わせて加工出力するIStreamなんです。
COMは使うだけならあるにしても、作る側になったことは全然ないので
ATLとかの勉強ついでにやってる感じです。

で、とりあえずできたようです。本当にありがとうございました。
そしてなんか妄想まで働かしてもらってすみません。

48 :デフォルトの名無しさん:2005/12/07(水) 12:56:07
本人乙

49 :デフォルトの名無しさん:2005/12/07(水) 16:35:56
二つのテキストファイルが同じかどうかを
比較する関数を教えて下さい

50 :デフォルトの名無しさん:2005/12/07(水) 16:38:18
ねぇよ

51 :デフォルトの名無しさん:2005/12/07(水) 16:42:41
>>49
同じかどうかだけなら、ファイル開いてメモリにマッピングしてmemcmpするのが速い。

でもさ、作ろうとしてるものなら既にコマンドとしてあると思うよ。
http://itpro.nikkeibp.co.jp/free/NT/WinKeyWord/20040805/1/comp.shtml
http://itpro.nikkeibp.co.jp/free/NT/WinKeyWord/20040805/1/fc.shtml

テンポラリファイルにリダイレクトして比較結果取り出すほうが早いかもな
まあ別にパイプでもいいけど。

52 :デフォルトの名無しさん:2005/12/07(水) 16:45:21
CreateFile
GetFileSize
xxxxAlloc
ReadFile
lstrcmp



53 :49:2005/12/07(水) 17:22:21
SHELLでFC使って上手くいきました
あざーっす

54 :デフォルトの名無しさん:2005/12/07(水) 17:27:00
エディットコントロールの縁に陰みたいな奴つけるにはどうすればいいですか

55 :デフォルトの名無しさん:2005/12/07(水) 19:15:38
>>49-51
ファイルのHash値かmd5計算して比較するのが今風

56 :デフォルトの名無しさん:2005/12/07(水) 19:26:53
>>55
完全ハッシュでなければ衝突がありえるだろ。

57 :デフォルトの名無しさん:2005/12/07(水) 19:32:21
毎回ファイル読み込んでハッシュ値出せってか?


58 :デフォルトの名無しさん:2005/12/07(水) 19:33:33
コリジョンが発生してから調べなおせばいい。
同じファイルを何度と無く調べる、かつ各ファイルのそれなりの部分が同じとか言う場合にはまあ有効かな。
突発的にファイルを比較するだけなら無駄だけど。

59 :デフォルトの名無しさん:2005/12/07(水) 19:41:03
>>54
WS_EX_CLIENTEDGE

60 :デフォルトの名無しさん:2005/12/07(水) 21:55:20
Sleep()やWaitForSingleObject()
に出てくるマクロのINFINITEって何の略なんですか?

61 :デフォルトの名無しさん:2005/12/07(水) 21:57:08
>>60
略ではないです。
http://dic.yahoo.co.jp/bin/dsearch?dtype=1&p=INFINITE

62 :デフォルトの名無しさん:2005/12/07(水) 22:37:03
Infiniteも知らんのか・・

63 :デフォルトの名無しさん:2005/12/07(水) 23:40:59
中高で英語が1と2ばかりだった俺でも知ってるのに・・・

64 :デフォルトの名無しさん:2005/12/08(木) 02:47:51
マジレスすると知識量と学校の成績は関係ない
でもinfiniteくらいは、日常生活で1度は耳にしたことがあるはず

65 :デフォルトの名無しさん:2005/12/08(木) 07:23:53
日産の高級車のブランド名だな

66 :デフォルトの名無しさん:2005/12/08(木) 07:54:31
しかし finit が 有限 というのはあまり知られていない


67 :デフォルトの名無しさん:2005/12/08(木) 08:00:25
eが抜けてんぞ

68 :デフォルトの名無しさん:2005/12/08(木) 08:43:57
finit がフランス語だということはさらにほとんど知られていない

69 :デフォルトの名無しさん:2005/12/08(木) 08:56:03
Windowsのイベントログに関する事で質問です

通常2000とかXPには
システムイベントログ
アプリケーションログ
セキュリティログ
などがありますが、
それ以外のログを自前で生成し、
「コンピュータの管理(MMC)」に
追加することは可能でしょうか?

70 :デフォルトの名無しさん:2005/12/08(木) 09:03:56
finishやfinalと語源が一緒というのはあくまで俺の想像

71 :デフォルトの名無しさん:2005/12/08(木) 09:18:13
>>66がフランス語のfinitを出したとはとても思えない件

72 :デフォルトの名無しさん:2005/12/08(木) 09:21:38
finite state machine の検索結果のうち 日本語のページ 約 10,700 件

finit state machine の検索結果のうち 日本語のページ 約 250 件

250件もあるのかよ

73 :デフォルトの名無しさん:2005/12/08(木) 20:37:29
vcでデバッグ中にイベントハンドルがシグナルなのか非シグナルなのか
知りたいんだけど、何かいい方法はないでしょうか?

74 :デフォルトの名無しさん:2005/12/08(木) 22:17:31
>>73
ProcessWalkerで見れたと思う。

75 :デフォルトの名無しさん:2005/12/09(金) 03:31:22
質問させてください。

C言語とAPIでMS-Word やメモ帳で入力されたキーを取得するプログラムを
組んでいます。グローバルフックで MW_KEYDOWN を取得する方法でやって
いるのですが、MS-Word の場合だけ、1回のキー入力に対して5回の
WM_KEYDOWN が来ます。WM_KEYDOWN メッセージの lParam の31バイト目を
チェックしてみたのですが、キーを押し続けたことによる連続メッセージ
ではないようです。また、MW_KEYUP でも同じく5回メッセージがきます。

1キーに対して1回のメッセージを受け取りたいのですが、よい方法は
ないでしょうか。よろしくお願いします。

76 :デフォルトの名無しさん:2005/12/09(金) 03:36:04
>>75
俺のPCにWord入ってないから試せないんだが、Spy++でも5回表示される?
あとWordのバージョンは?

77 :デフォルトの名無しさん:2005/12/09(金) 05:40:25
>>76

>>76

 レス遅れてすみません。Spy++ っていうのがググッたけどちょっとわからないん
ですが、BCC のコマンドラインコンパイラなんでたぶん使ってないと思います。
Word のバージョンは 2003 です。
 一応、フックしたキーをウインドウに表示するようにしているんですが、
 メモ帳やInternetExplorer に入力した場合、そのとおり別ウインドウにも
表示されるんですが(1キー入力に対して1文字)、WORDの場合だけ1入力に
たいして5回分表示されるんです。"aiu"だったら"aaaaaiiiiiuuuuu"という
具合です。ちなみに、Enter や Shift なども同じです。
 とりあえず、Spy++についてもう少しググッて見ます。

78 :デフォルトの名無しさん:2005/12/09(金) 06:40:04
>>77
Spy++はMSの開発環境についてくる便利なツール。
特定ウィンドウに送られたメッセージのログを表示することができる。

BorlandにもWinSight32っていう同じようなソフトあるんだけど、
無料のBCCに付いてくるのかは知らない。

79 :デフォルトの名無しさん:2005/12/09(金) 07:22:39
Winspector Spyっていうフリーのがあるよ

80 :デフォルトの名無しさん:2005/12/09(金) 08:29:54
>>79
使ってみた結構いいかも新米 thx

81 :デフォルトの名無しさん:2005/12/09(金) 12:16:13
C勉強してきてこれから窓プログラム入る
必要なのは脳とやる気だけでおk?

82 :デフォルトの名無しさん:2005/12/09(金) 12:31:43
あとは開発環境があれば完璧

83 :デフォルトの名無しさん:2005/12/09(金) 12:43:12
spyもなー

84 :デフォルトの名無しさん:2005/12/09(金) 14:58:33
>>81
MFC使えば楽だお

85 :デフォルトの名無しさん:2005/12/09(金) 16:27:56
DialogBox上にlogを表示させたいと思っています。
edit boxでやったら改行ができませんでした。
static textでやったら、改行はできましたが、自動スクロールができません。
両方とも必要なのですが、簡単に実現する方法はありませんでしょうか?
ありましたらお教えください

86 :デフォルトの名無しさん:2005/12/09(金) 16:29:31
>>79
特警ウィンスペクターを思い出した漏れはおこちゃまですか?

87 :デフォルトの名無しさん:2005/12/09(金) 16:39:28
>>85
style に ES_MULTILINE (+ WS_VSCROLL|WS_HSCROLL) で エディットCTRL生成
nLen = GetWindowTextLength(エディットCTRL);
EM_SETSEL で START:nLen END:nLen で末尾を選択
EM_REPLACESEL でLogとして追記したい文字列を渡す (改行したいなら CRLF を入れること)

88 :デフォルトの名無しさん:2005/12/09(金) 16:44:40
>>81
VCL使うともっと便利だお

89 :デフォルトの名無しさん:2005/12/09(金) 17:22:01
>>84
CでMFCが使えるかよ

90 :デフォルトの名無しさん:2005/12/09(金) 17:29:32
ビュアチェインに関してです
例えば現在4個のクリッポボードビュアA,B,C,Dが起動してるとします。
そしてそれぞれのビュアの順位はAを最上として
A B C Dとします。

例えばBがChangeClipboard()を実行しますと、AにはWM_CHANGECBCHAINが送られてきますよね。
WPARAMにはBのhWndが、LPARAMにはCのhWndが格納されているはずですので、
Aは自分の次のビュアのウィンドウハンドルを確認し、もしWPARAMと等しければAの次のビュアのハンドルを、
LPARAMのハンドルに入れ替えればいいと思います。
しかしBではなくCがChangeClipboard()を実行した場合どうしますか?もし上の手順をしてしまったら、
Aの次のビュアはDとなってしまい、Bの存在がまずい事になります・・・
かといってこのメッセージを無視し、実行するとBの次のウィンドウはCだが・・・Cのハンドルは無効
という事態になると思います。
長くなりましたが、上のような場合はSendMessageでBにWM_CHANGECBCHAINを送れば回避されます。※1
しかし、例えばA B C D E Fとチェインがあった場合、DがChangeClipboard()を実行し、Aが※1を実行するとなると
Cのハンドルを知る必要があるのです。ですが、WM_CHANGECBCHAINのパラメータにはDとEしかありません。
どうすればよろしいでしょうか・・

91 :デフォルトの名無しさん:2005/12/09(金) 17:31:33
※1もCとDは自分(最上)からすれば、何番目なのか予測不能でしたね・・すみません

92 :デフォルトの名無しさん:2005/12/09(金) 17:41:14
>>90
ChangeClipboardChainだよな。
> しかしBではなくCがChangeClipboard()を実行した場合どうしますか?もし上の手順をしてしまったら、
そのときにWPARAMの中身はCとなり、Aにとっての次であるBとは違うから、
「Aは自分の次のビュアのウィンドウハンドルを確認し、WPARAMと等しければ」という条件が成り立たない。

93 :デフォルトの名無しさん:2005/12/09(金) 17:43:29
>>87
ありがとうございます
ちょっとやってみます

94 :デフォルトの名無しさん:2005/12/09(金) 17:53:48
>>92
else if (hNextWnd) SendMessage(hNextWnd,msg,wParam,lParam);
と流していけばちゃんと修正されますね・・自己完結してすみません

95 :73:2005/12/09(金) 19:14:32
>74さんありがとうございました。
無事に各ハンドルの状態を調べることが出来るようになりました。

96 :デフォルトの名無しさん:2005/12/09(金) 19:54:00
>>93です。
さっきのはうまくできましたが、また問題点が発生しました。。
入力が終了してenterを押すとボタンがおされたのと同じ処理をできるようにできませんか?
dialogでやる方法はわかったのですが,通常windowでやる方法がわかりません


97 :デフォルトの名無しさん:2005/12/09(金) 20:06:51
>>96
[Enter]にアクセラレーターを割り付けてしまう。


98 :デフォルトの名無しさん:2005/12/09(金) 21:16:43
VirtualAllocでRESERVEした量って、タスクマネージャの「仮想メモリ」
に出ると思ったら出ないのな・・・

99 :デフォルトの名無しさん:2005/12/09(金) 21:22:12
すんません。
CreateService()つかって、Windowsサービス作ってるのですが、
メールスロットでイベント起動される(サーバー側)ように
作りたいのだけど。イマイチよくわかりません。

もしかして、Windowsサービスには向かないの?


100 :デフォルトの名無しさん:2005/12/09(金) 21:24:37
ダメです

101 :デフォルトの名無しさん:2005/12/09(金) 22:10:55
>>76
>>78
>>79

Winspector を使ってしばらく調べてみようと思います。
ありがとうございました。

102 :デフォルトの名無しさん:2005/12/09(金) 22:12:37
MFCのどこが楽なんだ…

103 :デフォルトの名無しさん:2005/12/09(金) 22:18:49
ttp://pc8.2ch.net/test/read.cgi/tech/1059196520/l50
MFC叩きはこっちでやれ

104 :デフォルトの名無しさん:2005/12/10(土) 00:04:44
任意のウィンドウを半透明化する処理を書いているんですが、
透明度の設定はSetLayeredWindowAttributes
でできるものの、透明度を取得する方法がわかりません。
LayeredWindowであるかどうかは取得できるんですが・・・

105 :デフォルトの名無しさん:2005/12/10(土) 00:13:49
>>104
その逆でGetLayeredWindowAttributesを使えばAlphaが取得できますよ。

106 :デフォルトの名無しさん:2005/12/10(土) 00:45:58
>>105
ありがとうございます。調べてみます
でもググるとヒット数が少ないのはなんでだろう・・

107 :デフォルトの名無しさん:2005/12/10(土) 00:50:07
流行らないから

108 :デフォルトの名無しさん:2005/12/10(土) 00:52:48
2kじゃSet〜は使えてもGet〜は使えないし。

109 :デフォルトの名無しさん:2005/12/10(土) 00:59:19
スルーされたというより答えられる香具師がいなかったようなので再掲です


Windowsのイベントログに関する事で質問です

通常2000とかXPには
システムイベントログ
アプリケーションログ
セキュリティログ
などがありますが、
それ以外のログを自前で生成し、
「コンピュータの管理(MMC)」に
追加することは可能でしょうか?


110 :デフォルトの名無しさん:2005/12/10(土) 01:06:55
アレです。

111 :sage:2005/12/10(土) 01:17:36
>>109
かのう

112 :デフォルトの名無しさん:2005/12/10(土) 03:29:32
叶京子

113 :デフォルトの名無しさん:2005/12/10(土) 03:56:54
叶兄弟

114 :デフォルトの名無しさん:2005/12/10(土) 04:09:40
兄貴ぃっっ!! もうっ・・・ダメタだっ!!!

115 :デフォルトの名無しさん:2005/12/10(土) 04:31:01
>>111
管理コンソール MMC に新規 log を追加する Win32API を教えて下され候

116 :デフォルトの名無しさん:2005/12/10(土) 07:36:05
BCCを使っています。

デバッグ出力についてなのですが、Windowsにおける大量のシンボルの名前を表示するいい方法はないのでしょうか?

例えば、ウィンドウプロシージャに来たメッセージをデバッグ出力したいのですが、
printf("uMsg = %s", GetMessageSymbolName(uMsg)); -> "uMsg = WM_PAINT"
とかできないのでしょうか?

HRESULT hr = CoInitialize(...)
printf("hr = %s", GetHResultSymbolName(hr)) -> "hr = E_OUTOFMEMROY"
とかは?

なにかVCとVC用デバッガを使うとそれに近いような事も出来るみたいなのですが、BCCとTurboDebuggerでは出来るのかどうか分かりません。

BCCでWindowsのシンボルをうまく表示できる方法、あるいは表示してくれるライブラリなどはないでしょうか?

というか、Windowsに限らず、一般的にヘッダで大量のシンボルがある場合、みなさん、どうしているんですか?

117 :デフォルトの名無しさん:2005/12/10(土) 08:03:42
トークン連結演算子 (##)

118 :デフォルトの名無しさん:2005/12/10(土) 11:06:53
>>116
Windowsメッセージなら、spyでいいと思うよ。

119 :デフォルトの名無しさん:2005/12/10(土) 11:48:28
>>116
>>79 にあるキーワードでぐぐってみるとよきかも

120 :デフォルトの名無しさん:2005/12/10(土) 12:53:31
すいません
どこみてWin32APIの勉強すればいいですか?

121 :117:2005/12/10(土) 13:00:54
おいおい、ボケたつもりは一切なかったのに華麗にスルーかwwwwwww

122 :デフォルトの名無しさん:2005/12/10(土) 13:12:35
>>116
ソースコードに仕込むなら、↓こんな手もある。

#if defined(ENABLE_LOG)
#  define CASE_WITH_LOG(wm_msg) \
    case wm_msg: printf("uMsg = " #wm_msg);
#else
#  define CASE_WITH_LOG(wm_msg) \
    case wm_msg:
#end

ただ、あんまり見目麗しくないけどね。

123 :デフォルトの名無しさん:2005/12/10(土) 14:14:53
Win32API一覧、どこかに落ちて無いですか?
MSDNは機能別になってるので探し辛い。

124 :デフォルトの名無しさん:2005/12/10(土) 15:36:49
SetCurrentDirectoryでカレントディレクトリを動かした後、
GetOpenFileNameで初期ディレクトリをNULLにしても、
指定した初期ディレクトリになってくれないんですけど、
何が原因なんでしょうか。

125 :デフォルトの名無しさん:2005/12/10(土) 15:46:27
>>124
lpstrInitialDir=NULLの動作は、OSによって違う。2000/XPではカレントにならない。

http://msdn.microsoft.com/library/?url=/library/en-us/winui/winui/windowsuserinterface/userinput/commondialogboxlibrary/commondialogboxreference/commondialogboxstructures/openfilename.asp

sage進行でよろしく。


126 :デフォルトの名無しさん:2005/12/10(土) 15:50:20
>>123
キーワードでみれば五十音順じゃん。

127 :デフォルトの名無しさん:2005/12/10(土) 15:51:42
>>123
アルファベット順
http://msdn.microsoft.com/library/en-us/winprog/winprog/functions_in_alphabetical_order.asp
リリース時期順
http://msdn.microsoft.com/library/en-us/winprog/winprog/functions_by_release.asp

128 :デフォルトの名無しさん:2005/12/10(土) 16:06:14
このウィンドウを見ると背景が灰色っぽいのですが、どうすればこうなりますか?
http://www.geocities.jp/nyuusan_news/nyuusan.jpg
どうやらVisualStyleによってその色の具合が定義されているようです。

129 :デフォルトの名無しさん:2005/12/10(土) 16:09:33
釣りなのか天然なのか、そこが問題だ。

130 :デフォルトの名無しさん:2005/12/10(土) 16:12:08
本気なのでおねがいします

131 :124:2005/12/10(土) 16:27:03
>>125
上げてすみません。
ありがとうございました。

132 :デフォルトの名無しさん:2005/12/10(土) 16:27:38
単なるダイアログだろこれ。
MFCとかWTLベースだと作りやすい。

133 :デフォルトの名無しさん:2005/12/10(土) 16:32:13
釣りにきまってんだろカスwwwwwwwwwwwww

134 :デフォルトの名無しさん:2005/12/10(土) 16:51:49
GetSysColor(BTN何たら)でその色を得られたと思う。

135 :デフォルトの名無しさん:2005/12/10(土) 16:55:10
Lunaスタイル環境でクラシックスタイルのウィンドウを
強制的に使うにはどうしたらいいか尋ねているようにも見える。

な、わけねーだろ。言ってみただけだ。

136 :デフォルトの名無しさん:2005/12/10(土) 17:11:53
マニュフェストファイル無かったらLunaスタイル無効だと思うが

137 :デフォルトの名無しさん:2005/12/10(土) 17:44:27
CreateWindowのウィンドウクラスにEDITだとかLISTBOXを指定して、
スタイルにWS_VSCROLLを指定した場合、表示されるスクロールバーが
Lunaスタイルなっちゃうんだけど、これをクラシックスタイルにする方法ってある?

138 :デフォルトの名無しさん:2005/12/10(土) 17:44:45
>マニュフェスト
なんかえろくね?

139 :デフォルトの名無しさん:2005/12/10(土) 18:12:51
>>137
てめぇのXPの設定をクラシックにする

140 :デフォルトの名無しさん:2005/12/10(土) 18:33:18
>>138
えろいのはお前の脳タリンだ

141 :デフォルトの名無しさん:2005/12/10(土) 19:08:20
DWORD t = REG_SZ;
DWORD b = 32;
char c[50];

RegOpenKeyEx(HKEY_CURRENT_USER, "Environment", 0, KEY_ALL_ACCESS, ®);
RegQueryValueEx(reg, "Path", NULL, &t, (BYTE *)t, &b);

CURRENT_USER\EnvironmentにPathは存在しています
RegOpenKeyExは成功しますが、RegQueryValueExが失敗します。
何が駄目なのでしょうか。


142 :デフォルトの名無しさん:2005/12/10(土) 19:09:26
>>124
確実にカレントにしたかったらNULLの代わりに"."を指定すれ
>>137
互換モードで視覚テーマを無効にする。それをプログラムからやる方法は分からんが

143 :デフォルトの名無しさん:2005/12/10(土) 19:12:50
>>141
REG_SZ(1)をポインタと解釈したら確実に無効なポインタだから

144 :デフォルトの名無しさん:2005/12/10(土) 21:11:36
>>143
RegQueryValueEx(reg, "Path", NULL, &t, (BYTE *)c, &b);
でも0以外が返されます

145 :デフォルトの名無しさん:2005/12/10(土) 21:22:06
>>144
いくつが返ってきてるのさ?234じゃねーよな。

146 :144:2005/12/10(土) 21:26:24
どうみても234です。

147 :144:2005/12/10(土) 21:35:37
解決しまうま
なんちって

148 :デフォルトの名無しさん:2005/12/10(土) 21:43:29
エラーコードの意味ぐらい調べろよ・・・

149 :144:2005/12/10(土) 23:30:14
レジストリに追加したんだけど有効にならない
具体的にいうと、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Session Manager\Environment
のPathにデスクトップのパスを追加したのですが、有効になってないようです。
マイコンピュータのプロパティから環境変数を見てみると、ちゃんと追加されています。
それでそこのOKを押すと有効になります。


150 :デフォルトの名無しさん:2005/12/10(土) 23:33:21
>>127
ありがとうございます。
でも、そこに載ってるのは全部のAPIじゃ無いですね。

151 :デフォルトの名無しさん:2005/12/10(土) 23:36:51
レジストリでんでん以前に、環境変数というのはそういうものだ。

152 :デフォルトの名無しさん:2005/12/10(土) 23:38:08
>>150
何が抜けている?

153 :144:2005/12/10(土) 23:51:54
>>151
マイコンピュータのプロパティから環境変数Pathの設定をした場合はすぐに有効になりますが、
それはどうやってるのですか

154 :デフォルトの名無しさん:2005/12/10(土) 23:55:09
システム(エクスプローラか?)に環境変数の変更を強制する手段が
「どこかに」あるんだろう。

俺は知らん。

155 :デフォルトの名無しさん:2005/12/11(日) 00:13:38
>>152
winsockとかshell apiとかodbcとかその他多数。
狭義のwin32 apiだとそんなものまでは含まれないのか。。。

156 :デフォルトの名無しさん:2005/12/11(日) 00:15:11
隠しAPIのことかとオモタ

157 :デフォルトの名無しさん:2005/12/11(日) 00:31:34
隠しAPIならOS周りのDLLをdumpbin /exportsとかすれば出て競う。

158 :デフォルトの名無しさん:2005/12/11(日) 00:35:34
>>153
WM_SETTINGCHANGEをブロードキャスト

159 :デフォルトの名無しさん:2005/12/11(日) 00:36:41
Vistaには今まで隠しAPIだったものを名前だけ変えて出してきたようなものがチラホラ
GetFileInformationByHandleEx/SetFileInformationByHandleとかテラワロス

160 :デフォルトの名無しさん:2005/12/11(日) 00:47:20
Win32アプリってVC以外じゃできないんですかね?
Javaで使ってたeclipseの快適さが忘れられない。

161 :デフォルトの名無しさん:2005/12/11(日) 00:50:13
>>160
っ[ Delphi, BCB, VB ]

162 :デフォルトの名無しさん:2005/12/11(日) 01:41:18
VC++でIEコンポーネントを使ってるんですけど
右クリックしてコピーを選んでもクリップボードにコピーされません
他の”前へ戻る”とかは全部きちんと動くんですけどコピーだけ動かないです
どうしてなんでしょうか?

163 :デフォルトの名無しさん:2005/12/11(日) 01:44:34
隠しAPIって、勿体つけて隠してたんじゃなくて、
安定性・安全性に自信がもてなかったから非公開にしてただけでしょ。

164 :デフォルトの名無しさん:2005/12/11(日) 01:54:47
まぁ、そんなものが隠されているとは言え組み込まれていること
自体に問題があるんだけれどもね。

165 :デフォルトの名無しさん:2005/12/11(日) 02:33:57
とはいえ、隠しAPIには便利なのが多いんだよな。

166 :デフォルトの名無しさん:2005/12/11(日) 02:58:06
隠されたものにはロマンがある。


167 :デフォルトの名無しさん:2005/12/11(日) 07:20:19
公開されたものが安定性・安全性に自信があるとは思えんのだが

168 :デフォルトの名無しさん:2005/12/11(日) 09:00:18
画像を透過させて表示する方法を教えて頂けませんか?
今まではBitBltでSRCPAINTとSRCANDを組み合わせて透明化させていましたが、
この方法ではマスク用の画像も用意する必要が出て来てしまいます。
マスク無しで透明化させる方法の伝授をよろしくお願いします。

169 :デフォルトの名無しさん:2005/12/11(日) 09:06:37
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnwui/htm/layer.asp

170 :デフォルトの名無しさん:2005/12/11(日) 09:06:55
VC++でIEコンポーネントを使ってるんですけど
右クリックしてコピーを選んでもクリップボードにコピーされません
他の”前へ戻る”とかは全部きちんと動くんですけどコピーだけ動かないです
どうしてなんでしょうか?

171 :デフォルトの名無しさん:2005/12/11(日) 09:11:46
ヒント:
クリップボードは二種類ある


172 :デフォルトの名無しさん:2005/12/11(日) 09:35:26
Win32APIで取得したWin32のデータ型の変数をprintfなどで整形しようとすると、
型の互換性などで悩んでしまうけど、その辺他のプログラマーはどのようにやってる
んですか。

173 :デフォルトの名無しさん:2005/12/11(日) 09:48:07
お前の悩みが俺には理解できない

174 :デフォルトの名無しさん:2005/12/11(日) 10:01:53
悩んだこと無いな

175 :デフォルトの名無しさん:2005/12/11(日) 10:17:30
大悩みしないのが理解できない。
どうすればいいんだろうな。

176 :デフォルトの名無しさん:2005/12/11(日) 10:21:58
CStringとstringとstrXXX系の関数みたいな関係かな。

177 :デフォルトの名無しさん:2005/12/11(日) 10:22:23
基礎からやり直すのがいいだろうね。

178 :デフォルトの名無しさん:2005/12/11(日) 10:27:27
何の基礎からやり直せばいいんだ。

179 :デフォルトの名無しさん:2005/12/11(日) 10:29:02
Win32の基礎からか、それともCの基礎からなのか。

180 :デフォルトの名無しさん:2005/12/11(日) 10:31:32
コンピュータサイエンスの基礎

181 :デフォルトの名無しさん:2005/12/11(日) 10:35:34
>>180
俺はこのレスと>>176だけなんだが・・・

182 :デフォルトの名無しさん:2005/12/11(日) 10:42:38
何でそんなぼろくそに言われなければいけないんかね。
俺よりプログラムの理解が下の奴はいるぞ。

183 :デフォルトの名無しさん:2005/12/11(日) 10:47:06
>>182
> 俺よりプログラムの理解が下の奴はいるぞ。
そんなモン誰にでもいるだろ

184 :デフォルトの名無しさん:2005/12/11(日) 10:47:31
他人は当たり前に分かって馬鹿らしいことかも知れないけど、俺には分からないんだ。
教えてくれる人いないのかな。

185 :デフォルトの名無しさん:2005/12/11(日) 10:47:52
>>182
2chの半分はストレスでできています

186 :デフォルトの名無しさん:2005/12/11(日) 10:47:58
人間の基礎はAPIの基礎。
APIの基礎はCの基礎。
Cの基礎はコンピューターサイエンスの基礎。

結局は全部同じもの。

187 :デフォルトの名無しさん:2005/12/11(日) 10:48:46
ネタに混じれ酢カコワルイ

188 :デフォルトの名無しさん:2005/12/11(日) 10:59:21
コンピュータサイエンスが理解できたからと言って、Win32で定義したデータ型
が普通のデータ型のどれと互換性があるかが分かって、どの書式指定文字を使えば
いいかが分かるわけでは無いと思うんだが。

189 :デフォルトの名無しさん:2005/12/11(日) 11:05:50
>>182
下がいるとかいないとかもこの問題とふさわしくないだろ。

ただ、最近、知識も無いのにやたらめったら叩きレスを返す奴がいるから
注意したほうがいいと思う。
で、なにやら偉そうだから知識があるのかと思いきや、どうもプログラムも組めない気がする。
ってか、実力が無い。

こういう知りもしないのに、わかったつもりになってとりあえず叩く的な奴が出てきたのは
ここ最近のような気がする。
多分、ちょっと前の「ヘルプも見ずに質問してくるアホを叩きだす」流れで成長した奴が
自分もちょっと理解できるようになってレスを付けるようになって質問する奴を無差別に
叩きまくってるだけのような希ガス。

似たような分野のスレに似たようなレスがつくようになってるから注意したい。
レベルが低いからすぐわかるけど。

190 :デフォルトの名無しさん:2005/12/11(日) 11:06:45
>>172
つ[boost::format]

191 :デフォルトの名無しさん:2005/12/11(日) 11:19:20
>>172
「Win32のデータ型」などと言うものはない。
結局は、構造体やCの基本型のtypedefに過ぎない。


とりあえず、ヘッダでどう宣言されているか、調査してから質問して欲しいものだね。

後、「Win32のデータ型」なんて言う、オレ用語は使わないで貰いたい。

192 :デフォルトの名無しさん:2005/12/11(日) 11:23:13
>>188
コンピュータサイエンスの基礎が理解出来ていれば、Win32でデータ型を定義している訳ではない事位、普通に理解出来そうだが?

193 :デフォルトの名無しさん:2005/12/11(日) 11:25:08
>>191
俺は>>172ではないけど、そこはレスの全体の意味を組んでやればいいような気がするんだが・・・。
そんなとここだわんの?
なんかここって質問し難い掲示板になったなぁ・・・って思う。
ちょっと前なら、レスに意味不明な部分があったら、せめて

>>172
Win32のデータ型とはなんぞや?
定義されてる構造体のことなら〜だよ。

ってレスがついたけどもね。
最近はいきなり「カー」っとなって「ヒー」っとなって酷いねw

194 :デフォルトの名無しさん:2005/12/11(日) 11:25:45
スルーされたというより答えられる香具師がいなかったようなので再掲です


Windowsのイベントログに関する事で質問です

通常2000とかXPには
システムイベントログ
アプリケーションログ
セキュリティログ
などがありますが、
それ以外のログを自前で生成し、
「コンピュータの管理(MMC)」に
追加することは可能でしょうか?

195 :デフォルトの名無しさん:2005/12/11(日) 11:26:44
172から188まで呼んだけど何が悩ましいのかわかんない。
win32 と win64 で共有できる printf の書き方が悩ましいというならわかるけど
win32 限定なら MSDN のマニュアル見て型のバイト数と符号を確認するだけのこと。
むしろ型のバイト数と符号が処理系依存の「普通のデータ型」のほうが悩ましくて。


196 :デフォルトの名無しさん:2005/12/11(日) 11:28:58
>>194
不可能。

197 :デフォルトの名無しさん:2005/12/11(日) 11:31:32
>>196
ご回答ありがとうございます。

でも、サーバーコンポーネントにDNSを追加したり
ドメインコントローラに参加したりするといつの間にか
ログが増えているのですが、あれはどうやってるのかなと
思いまして。

やはり非公開APIがあるんでしょうね。


198 :デフォルトの名無しさん:2005/12/11(日) 11:34:27
>>160
つ[ Eclipse CDT ]

199 :デフォルトの名無しさん:2005/12/11(日) 11:34:56
>>193
元々、質問しやすい所でもなかったと思うが…。




それより、ヘッダの宣言を確認すれば解る様な事をいちいち質問する方が如何なものかと。
単発質問スレ立てるのと同じ位迷惑だと思う。

200 :デフォルトの名無しさん:2005/12/11(日) 11:38:09
>>197
UNIXでいうとsyslogのfacilityに相当するんで

facility eventlog win32api

とかでぐぐってみたんだが、出てこないな。
非公開だろね。

201 :デフォルトの名無しさん:2005/12/11(日) 11:54:33
>>194
イベントビューアの「アプリケーション」に独自のログを書き込むのは可能。
「コンピュータの管理(MMC)」に独自のスナップインを追加してそこにログ出力するのも可能。
イベントビューアを改変して独自の項目を追加するのは不可能っぽいけど俺が知らんだけかも。

202 :デフォルトの名無しさん:2005/12/11(日) 11:54:59
>>199
いや、そんな話でもないでしょ?
なんか便利なAPIかツールでもないですか?って話かもしれないことは容易に想像つくわけで。
こういうの気軽に聞けない雰囲気ではなかったよ。
ちょっと短気なのが多くなったせいもあって全体的にそういう空気ができちゃってるね。

203 :デフォルトの名無しさん:2005/12/11(日) 12:11:08
>>202
もしそうなら GetLastError とか FormatMessage くらいしかないだろうね。

204 :デフォルトの名無しさん:2005/12/11(日) 12:14:40
>>194
それは CustomLog というらしい。

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/eventlog_key.asp

CustomLog

Contains events logged by applications that create a custom log.
Using a custom log enables an application to control the size of the log
or attach SACLs for security purposes without affecting other applications.

Windows NT: Custom logs are not supported.


205 :デフォルトの名無しさん:2005/12/11(日) 12:22:12
>>194 >>201
漏れもやったことないけど、こんなのがあった。

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/adding_a_source_to_the_registry.asp

普通に出来るの鴨試練。


206 :デフォルトの名無しさん:2005/12/11(日) 12:22:59
>>194
> それ以外のログを自前で生成し、

MSDN見てると出来そうな気する。
http://msdn.microsoft.com/library/en-us/debug/base/eventlog_key.asp
自前で「custom log」に相当するキーを作ってみたら
どうだろう。

>>196は即答具合からイベントログに詳しいようなので、
見解を聞かせてほしいな。

207 :デフォルトの名無しさん:2005/12/11(日) 12:31:21
イヤです

208 :デフォルトの名無しさん:2005/12/11(日) 12:31:59
まさに>>196>>189で語られているような人間な件。

209 :201:2005/12/11(日) 12:54:34
>>204 >>205
情報ありがとう。ざっと読んだだけだけどその方法で普通に出来そうですね。
「アプリケーション」に独自のログを書き込むだけも糞面倒くさかったんで
とりあえず仕事を終わらせて、そっから先はポイしてた・・・

210 :201:2005/12/11(日) 13:01:12
>>206
ピンポイント爆撃乙。194の質問はこれで終了でFA。

211 :デフォルトの名無しさん:2005/12/11(日) 13:50:35
__int64やLONGLONGの型の変数をprintfで64ビットで表示しようと考えて、
例えばVisual C++ .net2003のコンパイラで、
printf("%llx\n", n); では32ビット分しか表示しません。
printf("%qx\n", n);
printf("%l64\n", n);
printf("%l32\n", n);
では%や%lが無視されます。

64ビットに対応した環境でのみ表示できるのですか。
またぼろくそに言われるのだろうかな。

212 :デフォルトの名無しさん:2005/12/11(日) 13:52:44
訂正
printf("%l64x\n", n);
printf("%l32x\n", n);


213 :デフォルトの名無しさん:2005/12/11(日) 13:55:06
16進表記なのであれば、上位DWORDと下位DWORDを続けて出力すればいいだけだろ。

214 :デフォルトの名無しさん:2005/12/11(日) 13:55:55
printf とWin32APIにどんな関係が?

215 :デフォルトの名無しさん:2005/12/11(日) 13:57:44
だからちゃんとC勉強してこいよ

216 :デフォルトの名無しさん:2005/12/11(日) 14:03:54
ttp://msdn.microsoft.com/library/en-us/vclib/html/_crt_Format_Specification_Fields_.2d_.printf_and_wprintf_Functions.asp

217 :デフォルトの名無しさん:2005/12/11(日) 14:06:15
初心者はなぜか_int64やLONGLONGが好きだよな
あと最適化とか

218 :デフォルトの名無しさん:2005/12/11(日) 14:19:09
何を馬鹿にしてるのかね。
64ビットで出力するのが本当の目的ではない。
GetDiskFreeSpaceEx()関数のPU_LARGE_INTEGER型の引数で取得した値を
をprintfで対応する書式指定子は何になるかを調べたかっただけだ。

219 :デフォルトの名無しさん:2005/12/11(日) 14:25:14
>>218
http://msdn.microsoft.com/library/ja/vclib/html/_crt_size_and_distance_specification.asp

220 :デフォルトの名無しさん:2005/12/11(日) 14:36:44
こういう人は128ビットとかでてきたらどうするのかね?
かわいそうなやつだな

221 :デフォルトの名無しさん:2005/12/11(日) 14:38:20
Win32と標準関数の違いも分からず、MSDNすら調べられない厨でしたか。

222 :デフォルトの名無しさん:2005/12/11(日) 14:40:58
>>191
MSDNには"Windows Data Types"って表現があるから、「Win32のデータ型」って表現は間違いって
言うほどのものでは無いが。正しくは「Windowsのデータ型」だけど。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_data_types.asp

>結局は、構造体やCの基本型のtypedefに過ぎない。

それはそうなんだけど、あのグルグル巻きのウインドウズのヘッダーファイルを見ると初心者は混乱するよ。
Windowsのデータ型ってそんなもんだと悟りを開くまでには少々時間が掛かる。誰もが通って来た道だとは思うが。


223 :デフォルトの名無しさん:2005/12/11(日) 14:41:17
MSDNぐらい自分で引けるようになろうね

224 :デフォルトの名無しさん:2005/12/11(日) 14:43:30
何言ってんだ。wsprintf()のトピックの書式指定子の解説にも載ってなかったら仕方ないじゃないか。

225 :デフォルトの名無しさん:2005/12/11(日) 14:45:58
ここでとんちんかんにC++のiostreamなら型指定を考えずに済むと言ってみる。

226 :デフォルトの名無しさん:2005/12/11(日) 14:53:05
>>224
wsprintfなんて一言も言ってなかったじゃないか。
ロボットじゃ無いんだから、printfの方も見てみるとか機転を利かせようね。

227 :デフォルトの名無しさん:2005/12/11(日) 14:56:22
>>218
もちろんprintfにはQuadPartメンバを渡してるんだよな?
LARGE_INTEGERは共用体として定義されてるお

228 :デフォルトの名無しさん:2005/12/11(日) 14:56:41
>>198
ただのC++しか作れませんでした。
Win32は無理っぽい。

229 :デフォルトの名無しさん:2005/12/11(日) 14:58:40
MSDNは日本語と英語の内容は合わせて欲しい。
重要な補足事項とかが日本語の方には無くて結局英語の方も見ないといけないじゃないか。

230 :デフォルトの名無しさん:2005/12/11(日) 15:23:26
中途半端な翻訳するくらいなら、いっそ日本語版は無くした方がいいと思う。

231 :デフォルトの名無しさん:2005/12/11(日) 15:50:24
>>230
MSの技術情報みたいにサイトでの自動翻訳が良いね。

232 :デフォルトの名無しさん:2005/12/11(日) 15:57:09
英語で十分。

233 :デフォルトの名無しさん:2005/12/11(日) 15:59:58
でも完璧な日本語があるならそっちの方がいいけどね。

234 :デフォルトの名無しさん:2005/12/11(日) 16:09:12
カスタムログってメッセージDLL作ってイベントログに自前の文字列出す方法だろ?
>>194の質問に対する回答にはなってないと思うけど

235 :デフォルトの名無しさん:2005/12/11(日) 16:29:01
>>229
はじめから英語読めばいいじゃない

236 :デフォルトの名無しさん:2005/12/11(日) 16:29:48
間違えた
PU_LARGE_INTEGER ではなくてPULARGE_INTEGER

237 :デフォルトの名無しさん:2005/12/11(日) 16:33:45
PUGELA_INTEGER

238 :デフォルトの名無しさん:2005/12/11(日) 16:37:07
コンパイルエラー

239 :デフォルトの名無しさん:2005/12/11(日) 16:52:07
どうでもいいけど
英語で書かれたマニュアルなら
英語で呼んだほうが、誤解が少ないんじゃまいか?
翻訳に完璧はないわけだし。
なので留学はマジでおすすめ。

240 :デフォルトの名無しさん:2005/12/11(日) 17:07:10
Win32のデータ型と言っておいて別にいいじゃないか。
その程度の知識くらい知った上で便宜上言ってるのにな。

241 :デフォルトの名無しさん:2005/12/11(日) 17:08:59
Win32の疑似データ型とでも言っておこうか?
否定する奴は、何て呼び方をしてるんだ?

242 :デフォルトの名無しさん:2005/12/11(日) 17:10:44
すごいスレが伸びていたので覗いてみたら自作自演の祭りでした
ありがとうございました。

243 :デフォルトの名無しさん:2005/12/11(日) 17:16:38
シャットダウンするときに再起動するか休止状態にするかスタンバイか
などを選ぶダイアログが出るけど、前回の選択肢を記憶していてそれを
表示しているみたいなんだが、選択して再起動などをせずに表示される
既定を変えるにはどうしたらよいですか。

毎回休止状態を使うけど、ごく稀にシャットダウンする。次は休止状態
にしたいけど、惰性でエンターを押すとシャットダウンになっちゃう。
これを防止したい。選択出さないで直接やりなってのは不可。
こどもが電源ボタンを押しちゃうので予期せぬシャットダウンなどを防
ぐためにも選択ダイアログを出すのは必要。

244 :デフォルトの名無しさん:2005/12/11(日) 17:37:04
>>243
>こどもが電源ボタンを押しちゃうので予期せぬシャットダウンなどを防
>ぐためにも選択ダイアログを出すのは必要。

http://www.atmarkit.co.jp/fwin2k/win2ktips/065slpbtn/slpbtn.html
PBT_APMQUERYSUSPEND属性のWM_POWERBROADCASTメッセージを受け取ったら、
BROADCAST_QUERY_DENYを返すようなWindowsアプリケーションを常に実行しておけば問題を回避できる

245 :デフォルトの名無しさん:2005/12/11(日) 17:38:32
Win32のデータ型はないなら、文字列を扱うWin32API関数などは、末尾にAやWの付かない名前の関数名を言うと、
そんな関数は存在しないと主張するのかね。
つまらないレスが伸びてしまう結果になったのは残念なことだ。

246 :デフォルトの名無しさん:2005/12/11(日) 17:41:10
バカはもう来なくていいよ

247 :246:2005/12/11(日) 18:00:34
誤爆スマソ

248 :246:2005/12/11(日) 18:19:19
>>247
誰だおめー

249 :デフォルトの名無しさん:2005/12/11(日) 18:23:05
誤爆っぽくねぇwww

250 :246:2005/12/11(日) 18:27:13
>>248
おまえこそ誰だよWWW

251 :デフォルトの名無しさん:2005/12/11(日) 18:51:27
>末尾にAやWの付かない名前の関数名

名前はどうでもいい
実体が問題なんだろ

252 :デフォルトの名無しさん:2005/12/11(日) 18:55:24
>>251
名は体を表わす

253 :デフォルトの名無しさん:2005/12/11(日) 19:00:29
馬鹿なリンカなら「無い」とエラーメッセージだすだろうな

254 :デフォルトの名無しさん:2005/12/11(日) 19:36:16
もう一つ気になるのは、例えばアプリケーションを終了するときはWindowsから何のメッセ
ージが通知されるのかな。
WM_DESTROYメッセージと言えば否定されるのかな、0x0002が通知されるのだと主張される
のかも知れんな。


255 :デフォルトの名無しさん:2005/12/11(日) 19:45:08
>>224
ありがとう。

こういうのを見つけました。
http://www.vector.co.jp/soft/win95/util/se238740.html

ただ、私の使いがってには合いませんでした。
教えてもらった情報でソフトを作っても同じ使い勝手になりそうです。
やはり、ダイアログのデフォルトを変える方法のほうがよさそうだけど困ったな。
該当のレジストリもなかなか見つけられないです。

256 :デフォルトの名無しさん:2005/12/11(日) 19:47:30
なんかどっちにしても>>172の質問は意味がわからなかったけどなぁ。
後問題はWin32固有の問題ではないわけよね?

257 :デフォルトの名無しさん:2005/12/11(日) 19:49:25

処理中にOSをシャットダウンされると困る部分があるのでOnQueryEndSession
にて終了処理を受け取っていますが、ここで再起動を選択されたのか、それとも
シャットダウンを選択されたのか判別する方法ってありますか?



ログオフかどうかなら lParam で分かりますが
求めているのはそれではないんですよね?

無理矢理ですが、DLL を他プロセスに注入して
ExitWindowsEx や InitiateSystemShutdownEx 等を
フックするというのはどうでしょうか?
実際に可能かどうかは分かりませんが。



調べれば調べるほど無理っぽい感じがしてきました・・・
>>114さんのレジストリをヒントに、OnQueryEndSession中でレジストリを
取得して保存しとけば差分で調査できるかもと思ったので
明日にでもOnQueryEndSession時にレジストリが変更されてないか
調査してみます。もし分かったら書き込みますね。
112さん、114さん、ありがとうございました。



258 :デフォルトの名無しさん:2005/12/11(日) 19:50:16
Windows 2000 ですが、実際にやって調べてみました。
HKCR\Software\Microsoft\Windows\CurrentVersion\Explorer
の Reason Setting と Shutdown Setting が変化するようです。
(どちらも DWORD 値)

シャットダウン
 Shutdown Setting=0x00000002
 Reason Setting=0x00000005
再起動
 Shutdown Setting=0x00000004
 Reason Setting=0x00000005
ログオフ
 Shutdown Setting=0x00000001
 Reason Setting=0x00000000

ちなみに、regmon という
レジストリ操作を監視するツールを使って調べました。

HKCR\Software\Microsoft\Windows\CurrentVersion\Explorer
Shutdown SettingとReason Settingのキーは無いようです。

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer
には存在していましたので、こちらで試しています。

OSのシャットダウン時の処理なので、ちゃんと動くまで再起動しまくって
いるので時間かかるー(笑)

キーさえ分かればきっと情報があるはずだ、ということで検索してみた。
ttp://www.microsoft.com/windows2000/techinfo/reskit/en-us/regentry/36031.asp
これによると Shutdown Setting はあくまでダイアログでの選択値のようっす。
Reason Setting の方は見つからず。


259 :デフォルトの名無しさん:2005/12/11(日) 19:54:07
>>255

>>257-258 は過去ログのコピペです

260 :デフォルトの名無しさん:2005/12/11(日) 20:31:11
>>255
どうでもいいが、そのリンク先に気になるものがあるんだが

261 :デフォルトの名無しさん:2005/12/11(日) 21:01:43
>>260
何?

262 :デフォルトの名無しさん:2005/12/11(日) 21:06:06
さっきはエロゲーの宣伝が出てた

263 :デフォルトの名無しさん:2005/12/11(日) 21:57:53
もう見てないかもしれんが

>>170
つ ExecWB
ttp://www.k-nextage.co.jp/ame/soft/wfc/#WB_CLIP

264 :デフォルトの名無しさん:2005/12/11(日) 23:10:21
>>257
シャットダウンされたら困るのに再起動されても困らないの?

265 :デフォルトの名無しさん:2005/12/12(月) 00:42:09
>>241
> 否定する奴は、何て呼び方をしてるんだ?

総称で呼ぶ機会もないし、
今後も総称で呼ぶ機会が出てくる気配もない。
あえて言うならデータ型で事足りる。
君らが言う「Win32のデータ型」をわざわざ区別する必要性も感じない。


個別にdefineやtypedefされているので、
そのdefine名やtypedef名で呼ぶ機会は多々あったし、
これからもその機会は多々あるだろう。

266 :デフォルトの名無しさん:2005/12/12(月) 00:48:24
>>265
すでに定義されてるものと被らないようにしてね。
って会話の流れならWin32のデータ型って使うけどね。
特別win32に限定するものじゃないと呼ばないかもな。

でも、あんまこだわるところじゃないよ。
もうレスの概要は伝わったんだし、粘着にもほどがあるよ。
ホント、この掲示板なんでこんな奴増えたんだろ。

267 :デフォルトの名無しさん:2005/12/12(月) 01:00:57
>>266
なんかの病気なんじゃないの?>265

268 :デフォルトの名無しさん:2005/12/12(月) 09:31:24
ツールバーのボタンに描くビットマップが
透過されたりされなかったりしますが、
その条件、法則はなんなんでしょうか。

実験した範囲では、VC、BCCで、外部に置くと、
16色の場合、黒(パレット0かも)が透過され、
リソースに含むと透過されませんでした。

269 :デフォルトの名無しさん:2005/12/12(月) 10:57:24
対象となるウィンドウ領域に
マウスポインタが外から入ってきたときの
イベントに対する処理をしたいのですが
いくら調べてもそれらしきメッセージがありません

似たものとしては WM_SETFOCUS というのがあり,
これはウィンドウ領域がクリックされたときに来るメッセージですが
やりたいのはクリックしなくてもポインタが入っただけで
来るメッセージです

270 :デフォルトの名無しさん:2005/12/12(月) 10:59:44
>>269
つ WM_MOUSEHOVER

271 :デフォルトの名無しさん:2005/12/12(月) 13:04:14
GetMessageではなくPeekMessageを使ったメッセージループで、
常にメインウィンドウにInvalidateRectを送り続け、
画面を更新し続けるプログラムを作っているのですが、
ウィンドウのタイトルバーをマウスでドラッグ&ドロップしている最中に
クライアント領域が更新されません。

デバッグ出力等を見る限り、ドラッグ&ドロップ中も
InvalidateRectの発行も、WM_PAINT受信によるクライアント領域の更新も行われているはずなのですが、
ドラッグ中はドラッグ開始直前の絵のままで、
ドロップ後に突如絵が変わるという状態になってしまっています。

ウィンドウのドラッグ&ドロップ中にクライアント領域を実際に書き換える方法はないのでしょうか?

272 :デフォルトの名無しさん:2005/12/12(月) 13:18:18
PeekMessageで?

273 :デフォルトの名無しさん:2005/12/12(月) 13:47:35
そもそもInvalidateRectし続けるくらいなら、メッセージループから
直接描画した方がいいと思うけどな。
ただ、それだとドラッグ中に描画されないのは解消されないが。

一番いいのはマルチスレッド化して、画面の更新とメッセージループを
別のスレッドにする方法。

もう1つはあまり薦めないが、SetTimerを使って画面を更新する方法。
ただしこれはドラッグ中は更新されるが、タイトルバーをクリックしたまま
全くマウスを動かさないでいると更新されない。

274 :デフォルトの名無しさん:2005/12/12(月) 13:57:02
>>271
ドラッグ中はシステム側のメッセージループが回ってるはずで
>InvalidateRectの発行も
はありえないはずなんだが。

275 :デフォルトの名無しさん:2005/12/12(月) 14:57:54
>>271
Windowsの画面のプロパティで、

 「ドラッグ中にウィンドウの内容を表示する」

にチェック付ければいいんジャマイカ?

276 :デフォルトの名無しさん:2005/12/12(月) 18:50:25
ドライブの情報を取得するときにUSBの外付けHDDとかを認識する方法はありますか?

277 :デフォルトの名無しさん:2005/12/12(月) 18:58:07
GetDriveType()ではダメですか?

278 :デフォルトの名無しさん:2005/12/12(月) 19:38:49
デバイスコンテキストの質問です
2枚のbitmap画像をそれぞれ読み込んで2枚の画像同士を重ね合わせてする出力が上手くいきません
最初のBitBlt()関数の画像だけしか表示されない状態で困っています
すみませんが知恵を貸して下さい

BitBlt(hdc, 130, 28, w, h, hdc_mem, 0, 0, SRCCOPY);
BitBlt(hdc2, 0, 0, w, h, hdc_mem2, 0, 0, SRCCOPY);


279 :デフォルトの名無しさん:2005/12/12(月) 19:43:48
コピー先のメモリデバイスコンテキストへ、扱える画像は一枚だけなのかな・・・

280 :デフォルトの名無しさん:2005/12/12(月) 19:47:03
そりゃコピー先が違えば表示されないだろうな

281 :278:2005/12/12(月) 20:02:10
>>280
コピー先を同じに変えて、上手く重ね合わせることができました

有難う御座いました

282 :デフォルトの名無しさん:2005/12/12(月) 20:05:52
釣りじゃなかったのか。平和だな。

283 :デフォルトの名無しさん:2005/12/12(月) 20:41:18
質問です
SHELLで同期とる方法教えて下さい

284 :デフォルトの名無しさん:2005/12/12(月) 22:07:48
>>283
しぇるでどうきとる

しぇるでどうきとる

だじゃれができそうです。
ちょっと待ってて。

285 :デフォルトの名無しさん:2005/12/12(月) 22:16:10
>>283
昭和シェル石油のガソリンスタンドで待ちあわせすればOK。
くれぐれも他の客の邪魔にならない場所に陣取ること。

286 :デフォルトの名無しさん:2005/12/12(月) 22:29:43
変な嵐がいるから他スレで聞いたほうがいい

287 :276:2005/12/12(月) 22:31:05
>>277
GetDriveTypeをつかうと固定でもUSBでもHDDなら同じ値が帰ってくるのです・・

288 :デフォルトの名無しさん:2005/12/12(月) 23:11:37
猫でもわかるwindowsプログラミング買ったけど
著者のホームページ見に行ったら少し欝になった
本より詳しく書いてるじゃん

289 :デフォルトの名無しさん:2005/12/12(月) 23:19:13
>>288
で、質問は何?

290 :デフォルトの名無しさん:2005/12/13(火) 01:53:24
>>288
http://pc8.2ch.net/test/read.cgi/tech/1118944895/

291 :271:2005/12/13(火) 10:17:41
家のIPが規制されてて2chに書けない...

>>272 そうです。PeekMessageで
>>273 やはりGetDCして描画すべきでしょうか
>>274
どうやら私の勘違いで仰るとおりだった模様です。
今、WM_NCLBUTTONDOWNでDefWindowProcに処理を渡さずに
SetCaptureでカーソルのキャプチャを開始し、WM_MOUSEMOVEで
ウィンドウを移動、WM_LBUTTONUPでReleaseCaptureするようにしたら、
望んでいた動作をさせることができました。
ありがとうございます。

>>275 付いている状態で、ですね。

というわけで、ウィンドウ移動時の問題は解決しました。
ありがとうございました。

292 :271:2005/12/13(火) 10:28:15
>>291で以前の問題は解決したのですが、
また別の問題が発生しました。

タイトルバー等で右クリックした時にも動作が止まってしまいます。
どうやら何らかのメッセージをDefWindowProcに渡すと
TrackPopupMenuか何かを内部で呼び出すようです。
試しにWM_NCRBUTTONDOWNでDefWindowProcを呼び出さないようにすると、
システムメニューそのものが表示されなくなったのですが、
タスクバーで右クリックするとタスクバー上にシステムメニューが表示され、
やはり動作が止まってしまうので、WM_NCRBUTTONDOWNでDefWindowProcを呼び出すことが
直接の原因ではないかもしれません。

一応試しにWM_NCRBUTTONDOWNで
UINT uItem = TrackPopupMenu(GetSystemMenu(hWnd, FALSE), TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, hWnd, NULL)
こんな風にしてみると、標準の動作に近くなったのですが、
TrackPopupMenu内部でメッセージループが回るようで、
自分が作ったメッセージループには処理が戻ってきません。

標準動作に近い形で、常に自分のメッセージループに処理を戻したいのですが、
いい方法はありますか?

TrackPopupMenu以外の方法でHMENUをポップアップ表示できれば、
後は自分で似た動作を作りこむことができそうなのですが、
その方法も解りません。

293 :デフォルトの名無しさん:2005/12/13(火) 14:46:08
>>292
メニュループなんかは、システムが内部で持ってるので、それ使わせず、
自前のループに戻す方法はないと思う。
ただ、システム内部のメッセージループはAPCの処理はしてくれた記憶があるので、
別スレッドで適当にSleepしながらループまわして、画面更新をAPC経由で呼び出せば
いいと思う。
APCじゃなくて、直接呼ぶのはアウト。

294 :デフォルトの名無しさん:2005/12/13(火) 16:04:40
友達に今時Win32API勉強しても何のメリットもないと言われた
実際どうなの?

295 :デフォルトの名無しさん:2005/12/13(火) 16:08:36
とても役に立つがビジネスで考えるなら意味はない。
ソフト開発しても大変だから。

296 :デフォルトの名無しさん:2005/12/13(火) 16:28:05
>>293
なるほどメニューはどうやっても自前のループ内では使えないのですね
ところでAPCって何ですか?

297 :デフォルトの名無しさん:2005/12/13(火) 16:57:20
検索できない奴は猿以下だと思う

298 :デフォルトの名無しさん:2005/12/13(火) 17:07:03
>>297
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&oe=Shift_JIS&q=apc&lr=
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&oe=Shift_JIS&q=apc+windows&lr=

299 :デフォルトの名無しさん:2005/12/13(火) 17:08:10
「APC Win32」とか思いつかん?

300 :デフォルトの名無しさん:2005/12/13(火) 17:14:07
>>299
ごめんなさいWin16でした

301 :デフォルトの名無しさん:2005/12/13(火) 17:17:37
スレタイ読めない奴はミジンコ以下だと思う

302 :アメーバ:2005/12/13(火) 17:25:08
じゃあスレタイを読める私は何者?

303 :デフォルトの名無しさん:2005/12/13(火) 17:42:13
>>302
http://b.hatena.ne.jp/youpy/

304 :デフォルトの名無しさん:2005/12/13(火) 18:48:03
流れを読めない奴はどうみても精子です
本当にありがとうございました

305 :デフォルトの名無しさん:2005/12/14(水) 00:07:51
>>288
猫サイトは参考にする分には良いが、あれで勉強しようと言うのは無謀。

306 :デフォルトの名無しさん:2005/12/14(水) 05:53:06
CreateFont系以外にフォントを作成(もしくは指定)できるAPIとかありませんかね?

307 :デフォルトの名無しさん:2005/12/14(水) 09:46:23
何がしたいからCreateFontじゃだめなの?

308 :デフォルトの名無しさん:2005/12/14(水) 09:58:14
>>306
何がしたい?

309 :271:2005/12/14(水) 10:09:34
こんな感じで希望していた動作に近くなりました。

HMENU hMenu = GetSystemMenu(hWnd, FALSE);
MENUINFO mi;
memset(&mi, 0x00, sizeof(mi));
mi.cbSize = sizeof(mi);
mi.fMask = MIM_STYLE;
GetMenuInfo(hMenu, &mi);
mi.dwStyle |= MNS_MODELESS;
SetMenuInfo(hMenu, &mi);

ただこれだけだと
タスクバーで右クリックされた時などに変な動作になります
PeekMessageで受信しているのにこちらが把握している
ウィンドウのWndProcに来ていないメッセージがあるので
それらはメニューのWndProcで処理されているようですね
このあたりを詳しく調べるともう少しちゃんとした動作にできるかもしれません

310 :デフォルトの名無しさん:2005/12/14(水) 12:40:04
>>309
どんどん悪い方向に向かっている悪寒

311 :デフォルトの名無しさん:2005/12/14(水) 13:09:56
タイマやスレッドを使わない理由を知りたい

312 :デフォルトの名無しさん:2005/12/14(水) 13:30:52
ヒント:使えない

313 :デフォルトの名無しさん:2005/12/14(水) 15:20:11
>>306
ChooseFont, SystemParametersInfo + CreateFontIndirect
ってこと?

314 :デフォルトの名無しさん:2005/12/14(水) 16:38:06
HSPみたいに、プログラム上で実行ファイルを作成させるにはどうすればいい?

315 :デフォルトの名無しさん:2005/12/14(水) 16:44:52
exeを複製して、終端にデータを追記する。

316 :デフォルトの名無しさん:2005/12/14(水) 18:42:44
WinINETについて質問です。
IEがオフラインモードの時には、なぜかInternetReadFileすると
キャッシュを取得してしまうのですが、オフラインモードを
オンラインモードに変更するAPIはありませんか?

InternetGoOnlineのようにダイアログが出てユーザーに選択させる
形式でなく、こちらで強制的に変更する方法または、ダイアログ
自体をこちらで設定できるようなものを出来ればお願いします。


317 :デフォルトの名無しさん:2005/12/14(水) 20:01:56
>>316
そんなものがあったらセキュリティ上問題があるとは思わないかい?

318 :デフォルトの名無しさん:2005/12/14(水) 20:07:18
>>316はアンチMSを叫ぶ自称・玄人になる素質がある。
生暖かく見守ってやれ、お前ら。

319 :デフォルトの名無しさん:2005/12/14(水) 20:43:04
>>317 ( ゚д゚)ポカーン

IWebBrowser2::put_Offline()

320 :デフォルトの名無しさん:2005/12/14(水) 21:00:53
>>319
質問の意味が違うんじゃないか?

321 :デフォルトの名無しさん:2005/12/14(水) 21:05:04
InternetOpenの引数で設定できなかったっけ?

322 :デフォルトの名無しさん:2005/12/14(水) 21:16:01
>>319
オマエに返すよ(゚д゚)っ「( ゚д゚)ポカーン」

323 :デフォルトの名無しさん:2005/12/14(水) 21:50:07
322
逆切れはよくないね

324 :デフォルトの名無しさん:2005/12/15(木) 00:09:43
プロセスハンドルから、そのプログラムのファイル名を得るにはどうすればいいのでしょうか?
GetModuleFileName()かと思いましたが、常に失敗してしまいます。

325 :デフォルトの名無しさん:2005/12/15(木) 00:26:23
GetModuleFileNameであってるが、GetModuleFileNameの引数はプロセスハンドルではない

326 :デフォルトの名無しさん:2005/12/15(木) 00:32:44
http://techtips.belution.com/contribute.cgi?lang=ja&cat=vc&id=0022

327 :デフォルトの名無しさん:2005/12/15(木) 00:36:15
>>259

ありがとう。それを元にやっていみます。
ありがとう。ありがとう。ありがとう。

328 :デフォルトの名無しさん:2005/12/15(木) 01:44:52
>>324
HDDの肥やし発掘してみた
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID);
pEnumProcessModules(hProcess, &hModule, sizeof(hModule), NULL);
pGetModuleFileNameEx(hProcess, hModule, _exePath, sizeof(_exePath));
exePath = _exePath;
CloseHandle(hProcess);


329 :デフォルトの名無しさん:2005/12/15(木) 09:11:44
>>328
ありがとうございます
psapi.hやlibやdllが見つからず苦労しましたがなんとかなりました
あと、自分が作ったプロセスIDのものしか見れないんでしょうか?

330 :デフォルトの名無しさん:2005/12/15(木) 10:05:30
IEコンポーネントでスクリプトエラーが出た時にエラーダイアログを表示しないようにするにはどうしたらいいでしょうか?

331 :デフォルトの名無しさん:2005/12/15(木) 10:39:19
質問です。
VisualStudio6.0でダイアログを作ってDialog()で表示しています。

このメインダイアログに、他に作ったサブダイアログを貼り付けたいのですが
Dialog()は呼んだ瞬間にそこで処理が一旦止められてしまうので思っているものと違いますし、x,y座標が指定できないあたり私の用途では使わないものかと思われます。

どんなことがやりたいかというと、例えばメインダイアログでボタンを押すたびに、
対応したサブダイアログボックス(様々なエディットコントロールや、ボタンが張り付いているもの)をメインダイアログに貼り付けたいのです。

サブダイアログは境界線を「しない」にしているため、ユーザーからは「メインダイアログ上のボタンなど、再配置された」ように見えると思います。


332 :デフォルトの名無しさん:2005/12/15(木) 10:45:53
すいません。自己解決しました。
CreateDialogを使うんですね。猫プロのダイアログ関係を読んでて見落としたようです。
もう一回確認したら発見できました。

333 :デフォルトの名無しさん:2005/12/15(木) 12:06:20
333

334 :デフォルトの名無しさん:2005/12/15(木) 12:08:02
>>331
んで、メインダイアログを移動したらどうなる?

335 :デフォルトの名無しさん:2005/12/15(木) 12:45:08
>>334
(つД`)サブだけ動かないぃぃ
メインのWM_MOVEを捕まえて、サブの位置も移動させるようにしました。

普通のウインドウをメインダイアログにはっつけたのは、きちんとメインと一緒に移動してくれるのになぁ…。

336 :デフォルトの名無しさん:2005/12/15(木) 13:00:40
>>335
直接貼り付けろよ

337 :デフォルトの名無しさん:2005/12/15(木) 13:06:20
>>336
すいません。直接貼り付けるというのは
・CreateDialog ではないAPIを使う
・VSのリソースエディタで、ダイアログにダイアログを貼り付ける方法がある
のどちらでしょうか。

338 :デフォルトの名無しさん:2005/12/15(木) 13:14:25
Parent/Clientにするってことじゃないの?

339 :デフォルトの名無しさん:2005/12/15(木) 13:15:15
素直にタブ使った方が良くね?

340 :デフォルトの名無しさん:2005/12/15(木) 13:27:34
フレームを変えるだけ

341 :デフォルトの名無しさん:2005/12/15(木) 13:45:45
ReBarを作ったのですが、ウィンドウをリサイズすると結構ちらつきます。
IEとかのReBarはあまりちらつきませんが、それはどうやるのですか?

342 :デフォルトの名無しさん:2005/12/15(木) 13:48:26
Regionを駆使して必要な部分だけ書き換える

343 :デフォルトの名無しさん:2005/12/15(木) 14:05:45
>>338
子供のダイアログのスタイルは「チャイルド」になってますし、
CreateDialogでも親ウインドウのHWND指定してるんですけどダメなんですよ。

座標系は、ちゃんと子供のそれになってるんですけど。

>>339
ゲームなのでタブはちょっと。

344 :デフォルトの名無しさん:2005/12/15(木) 14:09:51
>>338
スタイルの「コントロール」を指定したら、うまく行きました。

VSでダイアログ編集はきつい(;´Д`)

345 :デフォルトの名無しさん:2005/12/15(木) 14:11:37
ダイアログのことやってるんで便乗質問。
VCのダイアログ編集に普通のウインドウを貼り付けたいんだけど、どのコントロールですか?
C#だとウインドウってのがあったような気がするけど、VCだと見つからない。
ピクチャーボックスはなんだか違いそうだし…

346 :デフォルトの名無しさん:2005/12/15(木) 14:16:41
ゲームなら頑張って自前で描画するとか(ぉぃ

347 :デフォルトの名無しさん:2005/12/15(木) 14:18:06
>>345
MFCなら自前でやるしか。

348 :デフォルトの名無しさん:2005/12/15(木) 14:52:14
>>347
自前かぁ…。C#で作ろうかな(苦笑い

349 :デフォルトの名無しさん:2005/12/15(木) 14:56:55
>>348
あんま知らないけど
C#って.netないと動かないんだろ?

350 :デフォルトの名無しさん:2005/12/15(木) 16:23:14
CreateProcess,CreatePipeでコンソールアプリBを呼ぶWindowアプリAを作っています。

Bをコマンドプロンプトから呼ぶとき、
B options < data.dat
こういう記述になります。
そのときにパスワードが必要な場合はコンソールから入力できます。

これをAから呼び出してパイプでデータを流した場合は、
入力に対して空でEnterを押したような挙動になってしまいます。

Bが入力不要になるオプションの場合は問題なく動いていますが、
入力が必要な場合にもうまく呼ぶ方法は無いものでしょうか?



351 :デフォルトの名無しさん:2005/12/15(木) 16:29:06
>>350
素朴な疑問だが、 cat data.dat | B options とするとどうなるの?
#あ、catがないならtypeで。

352 :デフォルトの名無しさん:2005/12/15(木) 16:57:41
以前ソースが公開されたDVDProjectをVC6Proでコンパイルしようとしてますが、
LINK : fatal error LNK1104: ファイル "libmmt.lib" を開けません。
というエラーが出ます。

プロジェクトの設定を見ても、ソースを全部検索しても、libmmt.libなる
ものは見つけられません。

このような場合どうすればいいのでしょうか?
お願いします。

353 :デフォルトの名無しさん:2005/12/15(木) 17:03:43
>>352
スレ違い。
そのlibmmt.libはもしかしたらこれから生成しようとしているライブラリジャマイカ?
まさか、CDなどの書き込めないメディア上でコンパイルしようとはしてないだろうな。

354 :デフォルトの名無しさん:2005/12/15(木) 17:03:57
>>343
WS_OVERLAPPED

355 :デフォルトの名無しさん:2005/12/15(木) 17:07:27
コンソールウィンドウの表示
デバッグ時に引数の値などをチェックする時にMFCならTRACE、
Win32ならOutputDebugStringなどを使うでしょうが
printfのような入出力関数を使いたい場合は
コンソールウィンドウを表示すれば出来ます。


#include <io.h>
#include <fcntl.h>

void OpenConsole()
{
int hCrt, i;
FILE *hf;

AllocConsole();
hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
hf = _fdopen(hCrt, "w");
*stdout = *hf;
i = setvbuf(stdout, NULL, _IONBF, 0);
}

終了時に解放してください。


FreeConsole();

結構重宝すると思います。


356 :352:2005/12/15(木) 17:11:38
すれ違いすいません。

>>353
プロジェクトは1つしかないので、これから生成するということはないと思います。

357 :デフォルトの名無しさん:2005/12/15(木) 17:14:37
#include<windows.h>
#include<stdio.h>
intmain(int ac, char **av)
{
HANDLEhSTDIN;
DWORDwfso;
setvbuf(stdin, NULL, _IONBF, 0);
hSTDIN = GetStdHandle(STD_INPUT_HANDLE);
FlushConsoleInputBuffer(hSTDIN);
wfso = WaitForSingleObject(hSTDIN, 3000);
if(wfso == WAIT_OBJECT_0){
intkey = 0;
DWORDbr;
while(ReadFile(hSTDIN, &key, 1, &br, NULL)){
if(br){
printf("signal [%c][%08X]\n", key, key);
}
}
}else{
printf("no signal\n");
}
return0;
}

358 :デフォルトの名無しさん:2005/12/15(木) 17:35:38
>>356
libmmt.libでぐぐればでてくるけど、ICCが必要なんじゃないの?

359 :デフォルトの名無しさん:2005/12/15(木) 17:42:11
>>351
それは同じ結果になります。
< でリダイレクトするのってわかりにくいですか?


360 :デフォルトの名無しさん:2005/12/15(木) 17:43:36
あるイベントがシグナル状態になるのを待つには
WaitForSingleObject() すればいいですが,
非シグナル状態になるのを待つ方法はありませんか?

361 :351:2005/12/15(木) 17:51:34
いや、標準入力以外からパスワードを入力しているんだろうなぁと思って確認したかっただけ。

362 :デフォルトの名無しさん:2005/12/15(木) 17:55:06
#include<windows.h>
#include<stdio.h>

intmain(int ac, char **av)
{
HANDLEhSTDIN;
DWORDwfso;

setvbuf(stdin, NULL, _IONBF, 0);

hSTDIN = GetStdHandle(STD_INPUT_HANDLE);
FlushConsoleInputBuffer(hSTDIN);

wfso = WaitForSingleObject(hSTDIN, 3000);
if(wfso == WAIT_OBJECT_0){
while(!feof(stdin)){
intkey = fgetc(stdin);
printf("signal [%c][%08X]\n", key, key);
}
}else{
printf("no signal\n");
}

return0;
}


363 :デフォルトの名無しさん:2005/12/15(木) 17:55:48
#include<windows.h>
#include<stdio.h>

intmain(int ac, char **av)
{
HANDLEhSTDIN;
DWORDwfso;

setvbuf(stdin, NULL, _IONBF, 0);

hSTDIN = GetStdHandle(STD_INPUT_HANDLE);
FlushConsoleInputBuffer(hSTDIN);

wfso = WaitForSingleObject(hSTDIN, 3000);
if(wfso == WAIT_OBJECT_0){
INPUT_RECORDir;
DWORDer;
while(ReadConsoleInput(hSTDIN, &ir, 1, &er)){
if(er && (ir.EventType == KEY_EVENT)){
KEY_EVENT_RECORDker = ir.Event.KeyEvent;
printf("signal [%08X][%08X]\n",
ker.wVirtualKeyCode, ker.wVirtualScanCode);
}
}
}else{
printf("no signal\n");
}

return0;
}


364 :デフォルトの名無しさん:2005/12/15(木) 20:22:35
>360
while(signal){
Sleep(100);
}

365 :デフォルトの名無しさん:2005/12/15(木) 21:11:02
教えて頂きたいことがあります
GetAsyncKeyState('Y') や GetAsyncKeyState(VK_LSHIFT) などはうまくいくのですが
GetAsyncKeyState(VK_SEMICOLON) や GetAsyncKeyState(VK_COMMA) では
「定義されていない識別子」とエラーが出ます。 「;」 「,」を表現する方法は他にありますか。

366 :デフォルトの名無しさん:2005/12/15(木) 21:15:24
とりあえずWINUSER.hくらいはみてもバチ当たらんぞ。

VK_OEM_1 0xBA // ';:' for US
VK_OEM_PLUS 0xBB // '+' any country
VK_OEM_COMMA 0xBC // ',' any country
VK_OEM_MINUS 0xBD // '-' any country
VK_OEM_PERIOD 0xBE // '.' any country
VK_OEM_2 0xBF // '/?' for US
VK_OEM_3 0xC0 // '`~' for US
VK_OEM_4 0xDB // '[{' for US
VK_OEM_5 0xDC // '\|' for US
VK_OEM_6 0xDD // ']}' for US
VK_OEM_7 0xDE // ''"' for US

367 :デフォルトの名無しさん:2005/12/15(木) 21:29:41
!! >>366 神様ありがとぉ

368 :デフォルトの名無しさん:2005/12/15(木) 21:45:46
あれ・・・ 「,」のばあい 0xBC で行けるのですが 「;」のばあい 0xBAでだめです・・・
どうすればいいのでしょうか・・・ 教えてくんになってしまい申し訳ないです。

369 :デフォルトの名無しさん:2005/12/15(木) 21:57:32
かいけつしました。
 「;」の場合は 0xBB のようですね。 どうもありがとうございました。

370 :デフォルトの名無しさん:2005/12/15(木) 22:05:04
それらのキーは、他の言語のキーボードではシフトコードだったりするので注意

371 :350:2005/12/15(木) 22:10:50
>>361
そこがよくわからないところで、
type data.dat | B options
だろうと、
B options < data.dat
だろうと、
パスワード入力で止まったらコンソールから入力できました。

せめて、Bが入力待ちになったらAからそこに入力できれば良いんですけどね。
あらかじめ流すデータじゃなくて。


372 :デフォルトの名無しさん:2005/12/15(木) 22:10:52
だからこそfor USなどと書かれているわけだが。

373 :デフォルトの名無しさん:2005/12/15(木) 22:26:31
初心者的質問で申し訳ないのですが、ご教授下さると助かります。
複数行対応エディットボックスに文字をセットした時の問題です。

HWND hEdit;
char str[64]="123\n456";
hEdit = CreateWindow("EDIT",NULL,〜中略〜, NULL);
SendMessage(hEdit,WM_SETTEXT,0, (LPARAM) str);
MessageBox(NULL,str,"test",MB_OK);

このようにするとメッセージボックスでは
123
456
と改行されて表示されますが、エディットボックスには改行\n(0D0A)が(0A)となってしまい改行されません。
何が悪いのでしょうか?

374 :デフォルトの名無しさん:2005/12/15(木) 22:28:07
>>373
\r\n

375 :デフォルトの名無しさん:2005/12/15(木) 22:30:40
>>373
'\n'はlfのみです。きちんと"\r\n"としましょう。
#メッセージボックスが改行する理由? 知るかい。

376 :デフォルトの名無しさん:2005/12/15(木) 22:37:41
IEコンポーネントでスクリプトエラーが出た時にエラーダイアログを表示しないようにするにはどうしたらいいでしょうか?

377 :デフォルトの名無しさん:2005/12/15(木) 23:03:04
Donutのソースを読む

378 :デフォルトの名無しさん:2005/12/15(木) 23:26:42
ReadMe や Help に

 このソフトウェアが表示するエラーダイアログは馬鹿な人にしか見えません。

と記しておく。

379 :デフォルトの名無しさん:2005/12/15(木) 23:27:21
Bread and Butter みたいなもん?

380 :373:2005/12/16(金) 00:04:17
>>374-375
ありがとうございます。おかげさまで解決いたしました。
メッセージボックスでは改行されている理由は・・・・調べてみましたがよくわかりません。

ファイルをテキストモードで開く、バイナリモードで開くといった時、LFが自動的にCR+LFに変換されるのような仕様でしょうか?
きっと私がprintfでCarriage Returnなしでも大丈夫なコンパイラに毒されているんですね。

381 :デフォルトの名無しさん:2005/12/16(金) 00:14:20
>>380
いや、「printfは\nで改行する」は正しい。
> ファイルを…
これは正しい。

382 :デフォルトの名無しさん:2005/12/16(金) 01:47:03
>>371
パスワードはUIから入れないとアカン場合があるみたいですよね。
方法はあるのかもしれないけど。
runas で気づいたんだったかな。

関係あるかどうかわからないけど、
CredUICmdLinePromptForCredentials とかいう長い名前の
関数もあるみたいで。

383 :デフォルトの名無しさん:2005/12/16(金) 05:04:47
>>372
MapVirtualKeyを使えでFA?

384 :デフォルトの名無しさん:2005/12/16(金) 06:56:57
過去ログでこんなのあった
参考リンク
http://www.geocities.jp/monalipse/c/api/Console.html
のやり方で自分でコンソールとやり取りするのは大変・・・なのでよかったらこれドゾー
// MapVirtualKey用
#include <windows.h>
// getch or getche用
#include <conio.h>
int my_getch(void)
{
unsigned char c = _getch();
if(c != 0 && c != 0xe0) return -1;
c = _getch();
return (int)::MapVirtualKey((UINT)c, 1);
}
getchがスキャンコードを返してきたときだけ仮想キーコードにして返す関数でつ。
普通の'a'とか'1'なんかだと-1が返ってきまつ。
ちなみに矢印キーとかの仮想キーコードはこれ。
VK_PRIOR(PageUp) -> 0x21
VK_NEXT(PageDown) -> 0x22
VK_END -> 0x23
VK_HOME -> 0x24
VK_LEFT -> 0x25
VK_UP -> 0x26
VK_RIGHT -> 0x27
VK_DOWN -> 0x28
あと、MapVirtualKeyはuser32.dllに入ってるのでuser32.libのリンクをお忘れなく。
VC使ってるならこんな感じ。他はシラネ。
cl test.cpp -link user32.lib
これならWinAPIのMapVirtualKey一つ使うだけなんでAllocConsole系よりかはまだ使いやすいかと。


385 :376:2005/12/16(金) 07:37:54
>>377-378
ウィンドウフックをすることで解決しました
本当にどうもありがとうございました

386 :デフォルトの名無しさん:2005/12/16(金) 08:07:10
誰かたすけてください。
プログラミングしていて気づいたのですが、
メディアプレイヤーをつけているときと、つけていないときでFPSが違います。
WindowsMediaPlayerを起動していると、動作が「速く」なり、起動していない場合重くなります。
いったい何が原因なのか分かりません。

387 :デフォルトの名無しさん:2005/12/16(金) 08:22:43
測定方法に問題あり

388 :デフォルトの名無しさん:2005/12/16(金) 09:50:51
すみません、分からないことがあるので教えてください。

自作でDLLを作っているのですが、DLLにはDLLMainというエントリポイントが
必要ですよね?複数のDLLを作ってリンクする場合、DLLMainという関数が複数
同時に使われることになると思うのですが大丈夫なのでしょうか?
よろしくお願いします。

389 :デフォルトの名無しさん:2005/12/16(金) 10:00:09
久しぶりのAdvancedWindows嫁。

390 :デフォルトの名無しさん:2005/12/16(金) 10:53:51
>>386
timeBeginPeriod

391 :デフォルトの名無しさん:2005/12/16(金) 11:03:01
>>384
すごい参考になりました。 m(_ _)mぺこ

392 :デフォルトの名無しさん:2005/12/16(金) 12:00:35
MSDNみてて、ふと思ったのだが・・・

BOOL値を返すAPIの戻り値の説明・・・

BOOLといいつつ、
「関数が成功すると、0 以外の値が返ります。」
ってよくかいてあるじゃん、
それって booleanじゃなくねぇか?

if (戻り値 == TRUE)

は、まずい可能性ってことだよね


393 :デフォルトの名無しさん:2005/12/16(金) 12:09:18
>>392
今さら何言ってんだ?
いちいちhoge()==TRUEやhoge()==FALSEで評価する人はおらんでしょ。
普通は、hoge() もしくは、!hoge()で評価する。

394 :デフォルトの名無しさん:2005/12/16(金) 12:09:27
あ、それ、同じ個と思った。

395 :394:2005/12/16(金) 12:10:36
>>393
なるほど。

396 :デフォルトの名無しさん:2005/12/16(金) 12:48:42
エラーコードをレジスタ渡しにする旧人類にとっと
成功≠0 失敗=0 っつのはいかにも使いにくいね

397 :デフォルトの名無しさん:2005/12/16(金) 13:09:29
>>392
GetMessageの説明呼んでみな
びっくりするぞ。

俺はtypedef BOOL MSBoolってして
こいつはbool値として扱わないことにしてる。

398 :デフォルトの名無しさん:2005/12/16(金) 13:20:04
おまいらアフォかw
Cのboolは0と0以外だろ

399 :デフォルトの名無しさん:2005/12/16(金) 13:21:28
実は
#define TRUE 1
#define FALSE 0
じゃなくて
#define FALSE 0
#define TRUE (!FALSE)
と定義されている

400 :デフォルトの名無しさん:2005/12/16(金) 13:30:08
>>399
マジで?

漏れのwindef.hには、
#define TRUE 1
と定義されてるんだが・・・

401 :デフォルトの名無しさん:2005/12/16(金) 13:38:39
私も400さんと同じ

(゚Д゚)ハッ 釣りだったのか

402 :デフォルトの名無しさん:2005/12/16(金) 13:39:46
afx.hには、ビシッと

// Standard constants
#undef FALSE
#undef TRUE
#undef NULL

#define FALSE 0
#define TRUE 1
#define NULL 0

ってなってた。



403 :デフォルトの名無しさん:2005/12/16(金) 13:50:23
てか、intでええやんと思うのだが
どうせやるなら、

typedef enum {
TRUE = 0,
FALSE = 1
} BOOL;

BOOL hogehoge()
{
return FALSE;
}

じゃない?ま、どーでもいいけど

まぁ、昔からそーやってるからとか、なんとなくって理由で今の仕様なんだろうけど


404 :デフォルトの名無しさん:2005/12/16(金) 14:04:21
>>403
サイズが変わる可能性があるから、保守的になるんだよ。
sizeof(int) == 4と決め付けている奴とかな。

あと、そのCのenum、実際に何バイトなのかは、コンパイラの実装依存じゃないか。


405 :デフォルトの名無しさん:2005/12/16(金) 14:25:29
>>404
あー、確かに。

406 :デフォルトの名無しさん:2005/12/16(金) 15:06:16
>>404
昔のILP16かなんかのときの名残かな?
XP64bitってLLP64だったっけ?忘れた・・・

ところで、教えて君なんですが、

PostThreadMessageって、自分とは別のプロセスのおスレッドに
メッセージを遅れますか?
可能なら、その、送りたい別のプロセスのスレッド識別子って
どうやって取得するの?


407 :デフォルトの名無しさん:2005/12/16(金) 15:44:04
>>406
送れる。
例えばCreateProcess()したときのPROCESS_INFORMATIONに入っている
dwThreadIdを使ってもいいし、その「おスレッド」にメッセージか何かで教えてもらってもいい。

408 :デフォルトの名無しさん:2005/12/16(金) 16:00:23
2つのスレッドを走らせていて
片方であるイベントを WaitForSingleObject() でまたせておいて
他方でそのイベントを SetEvent() して
同期させるような処理を書いたのですが,
そのプログラムを起動して
常にではないですが半々くらいの割合で
SetEvent() しても Wait 関数が値を返さずに
処理がつまってしまうケースがあります

なぜこのようなことが起こるのでしょうか?
こうならないようにするにはどうしたらいいのでしょうか?


409 :デフォルトの名無しさん:2005/12/16(金) 16:01:22
ツールバーの小さいボタンのビットマップの
縦サイズのデフォルトは15だったのか。
ずっと16だと思っていた。

410 :デフォルトの名無しさん:2005/12/16(金) 16:02:25
Win32APIのシステムを学ぼうとしているのですが、どの参考書を選べば良いか悩んでいます。
一応今は、赤坂玲音著の「Windowsゲームプログラミング」という本は持っています。
なにか良い書籍がありましたら紹介よろしくお願いします。

411 :デフォルトの名無しさん:2005/12/16(金) 16:10:49
プログラミングWindows
Advanced Windows

412 :デフォルトの名無しさん:2005/12/16(金) 16:14:10
>>388
DLL1つにつきDllMain1つ。

413 :デフォルトの名無しさん:2005/12/16(金) 16:26:30
>>408
勘で書くと、
各々のスレッドの処理の進み具合によって、
WaitForSingleObjectの前にSetEventが呼ばれる状況になってる。



414 :386:2005/12/16(金) 16:35:38
測定方法は関係ないと思います。
目に見えて差があるので。(メディアプレイヤーを消すと倍ぐらい重くなる)

415 :デフォルトの名無しさん:2005/12/16(金) 17:25:52
>>414
>>390は試した?

416 :デフォルトの名無しさん:2005/12/16(金) 18:21:19
>>408
イベントは手動イベントにすると良いよ

417 :デフォルトの名無しさん:2005/12/16(金) 18:26:16
>>412

ありがとうございます。そのとおり試してみました。DLLにそれぞれ1つずつ
DLLMainを置いて、2つ同時にリンクしましたがちゃんと動作しています。
DllMainは特別なんですかね。

>>389
 AdvancedWindowsも読んでみたいんですが、以前、プログラミングWindows
という本をよんで挫折してしまったので、同じ系列のこの本も挫折しそうなので
他の本を探してみます。どうもありがとうございました。

418 :デフォルトの名無しさん:2005/12/16(金) 18:28:30
猫でも分かる

419 :デフォルトの名無しさん:2005/12/16(金) 18:48:14
>>417
DllMainだけが特別ではない。
どんな関数でもなんでもそうだよ。
DLL自身の中で唯一の名前であれば問題ない。

420 :デフォルトの名無しさん:2005/12/16(金) 20:09:02
>>419

Book.dll と、Note.dll があってその両方に drawCircle()という同じ名前で
処理内容の違う関数があって、この2つのDLLを本体(EXE)にリンク
した場合、呼び出すときに区別できなくないでしょうか?

何かDLLについて(私が)根本的に分かってないみたい。
もっと本を読まないといけないですね。



421 :デフォルトの名無しさん:2005/12/16(金) 20:28:50
別に関数名が関数のアイデンティティの全てじゃないからな

422 :デフォルトの名無しさん:2005/12/16(金) 21:52:15
引数とかな

423 :デフォルトの名無しさん:2005/12/16(金) 22:11:59
>>420
たしかにその2つを普通に同一のプログラムから同時に使用しようとしたらエラーになるが、
DEFファイルなんかを使ってそれぞれ別の名前を与えられるし、
動的リンクならDLLのファイル名と関数名(あるいは序数)から
直に関数へのポインタが得る方法もある。

424 :デフォルトの名無しさん:2005/12/16(金) 22:16:07
>>420
おいおい('ー`;)

425 :デフォルトの名無しさん:2005/12/16(金) 23:21:05
410へのレスありがとうございましたm( _ _ )mペコリ

426 :デフォルトの名無しさん:2005/12/16(金) 23:31:09
プログラミングWindows第5版(上) を買おうと決めたのですが、最初に読む著書として選んでも大丈夫でしょうか?皆さんよろしくお願いします。

427 :デフォルトの名無しさん:2005/12/16(金) 23:53:25
>>423
おいおい

428 :デフォルトの名無しさん:2005/12/17(土) 00:04:04
>>428
おいおい

429 :デフォルトの名無しさん:2005/12/17(土) 01:00:08
あいおい

430 :デフォルトの名無しさん:2005/12/17(土) 01:06:27
そんぽ

431 :デフォルトの名無しさん:2005/12/17(土) 04:54:25
>>426
C,C++をある程度理解していればOKかと。
この手の本はとにかく何か1冊買って、次に買う本がどういうモノが良いのか分かってくる。
でも、買った本は無駄になることはない。

432 :デフォルトの名無しさん:2005/12/17(土) 11:08:21
>>355
今さらだが、そんな面倒なことしなくても、

AllocConsole();
freopen("CONOUT$", "r", stdout);

で使えたような

433 :デフォルトの名無しさん:2005/12/17(土) 12:10:28
ボタンの消し方を教えてください。
文字の変え方は、SetWindowText、
絵の変え方は、SendMessage(BM_SETIMAGE)
と分かったのですが、消し方が分かりません。

434 :デフォルトの名無しさん:2005/12/17(土) 12:28:38
ボタンもウインドウ

435 :デフォルトの名無しさん:2005/12/17(土) 12:37:16
PostMessage(WM_Quit)

436 :デフォルトの名無しさん:2005/12/17(土) 13:39:16
>>434>>435
ああ、そうですよね。
DeleteWindowとか探していました。
ありがとうございました。

437 :デフォルトの名無しさん:2005/12/17(土) 13:53:59
一時的に消すだけなら
ShowWindow(SW_HIDE);

がいいよ。

ShowWindow(SW_SHOW);

で復活できるし。
QUITしちゃったらまた作り直さないといけないお

438 :デフォルトの名無しさん:2005/12/17(土) 14:02:50
>>407
レスありがと。
でも、そのgetMessageで待ってる「おスレッド(w」様に
メッセージを送りたいわけで・・・

にわとりが先かたまごが先かの状態になっちゃう
スレッドIDって自分で明示的に指定できる?

べつにpostThreadMessageでなくてもいいんで
なんかいい方法ないかなぁ?


439 :デフォルトの名無しさん:2005/12/17(土) 14:07:38
>>438
1. プロセスを列挙して、目的のプロセスを見つける
2. そのプロセスのスレッドを列挙して、目的のスレッドを見つける。
3. 送る。

というか、そのメッセージを受け取る側のプロセスも自分で書くのなら、
もっと別の方法で通信したほうがいいと思うんだが。

440 :デフォルトの名無しさん:2005/12/17(土) 14:09:50
質問させてもらいます
最近Windowsプログラミングの勉強を始めたものです
今までコンソールアプリで動かしていたものをWin32アプリに移植したのですが
今までと比べてかなり処理時間が長くなってしまいました
移植に当たっては、ほとんどソースは弄らずにスレッドを一個作ってそこに放り込んでいます
手を加えた部分は、動的メモリ確保にしたことと
一定処理ごとにウィンドウプロシージャにメッセージを送りウィンドウに計算推移を描画させているのみです

同じ計算をさせてみると
コンソールアプリ 12分
Win32アプリ    2時間
とこれぐらい差が出てしまいますorz
普通こんなにも差が出てしまうものなのでしょうか?

441 :・∀・)っ-●○◎- ◆Pu/ODYSSEY :2005/12/17(土) 14:18:37
一定処理ごとってどのくらいよ?
タイマ使ってn秒単位でメッセージ送るようにして見たら?

フォアグラウンドスレッドが他の操作が何も出来なくなるくらいのタイミングで描画やってるんなら
問題だしね。


というかソースどっかにアップロードするのが確実かもね。
コンソールで12分もかかる演算ってなんなんだろうとも思ったり。

442 :デフォルトの名無しさん:2005/12/17(土) 14:31:13
>>440
> 動的メモリ確保
サイズに依るがこれがネックになりうるぞ

443 :352:2005/12/17(土) 14:36:20
自分の固定IPアドレスを変更する方法がありましたら、
教えてください。

お願いします。

444 :・∀・)っ-●○◎- ◆Pu/ODYSSEY :2005/12/17(土) 14:39:57
libmmtはIntelコンパイラ謹製の数値計算用ライブラリだ。持ってないならあきらめろ。

445 :デフォルトの名無しさん:2005/12/17(土) 14:48:08
レスありがとうございます

一応操作は可能です
演算内容はECGAという進化計算アルゴリズムの一種です
一定処理ごと、というのはこのECGA演算過程でいくつかの段階に分かれているのですが
その区切りごとに送っています
また、演算の遅延はその段階のうちの一つで起きていてそこから先に進まないので
かなりの間(数分〜十数分)メッセージによる描画は発生しません
演算規模をできるだけ小さくして各段階での処理速度が数瞬終わる場合でも大丈夫なのでそこは問題ないと思います

やはり、ソースを上げたほうが確実ですか
かなり拙いので上げるのはすごいはずかしいですね・・・

446 :デフォルトの名無しさん:2005/12/17(土) 14:53:49
>>442
そうなのですか・・・
ネックになる部分は領域を確保するときの作業のときでしょうか?

447 :443:2005/12/17(土) 14:58:21
>>444
ありがとうございます。libmmtの件は、リンカの指定で「無視するライブラリ」に指定したら、
リンクできました。
もっとも、libmmtはデフォルトライブラリのようで、それにもかかわらずそれが存在しない
というのはなんでなのかわかんないんですが。。。

あと>>443もお願いします。TCPIPのプロパティからIPアドレス変えられますが、
プログラムでできる方法について、です。

448 :デフォルトの名無しさん:2005/12/17(土) 15:03:19
>>437
なるほど。ありがとうございます。

449 :デフォルトの名無しさん:2005/12/17(土) 16:39:53
>>447
ICCでコンパイルされた.objでデフォルトライブラリに指定されてるから。

450 :443:2005/12/17(土) 17:33:45
>>449
やっと意味がわかりました。
ありがとう。

451 :デフォルトの名無しさん:2005/12/18(日) 05:33:45
どういたしまして。

452 :デフォルトの名無しさん:2005/12/18(日) 06:29:38
プロセス隠匿方法に関してです。

例えばタスクマネージャでプロセス一覧を表示しますと、
とあるアプリケーションのスレッドが動いてるにも関わらず該当プロセスが表示されていません。
これはどの様な仕組みで隠匿してるのでしょうか?

仕組みだけでも教えていただけたら幸いです..

453 :デフォルトの名無しさん:2005/12/18(日) 06:59:27
通報しますた

454 :デフォルトの名無しさん:2005/12/18(日) 08:49:15
>>443
WSH/WMIで出来る

455 :デフォルトの名無しさん:2005/12/18(日) 11:00:46
>>452
プロセスじゃなくてスレッドだから。

456 :デフォルトの名無しさん:2005/12/18(日) 11:29:54
>>452
つ ダイログ

457 :デフォルトの名無しさん:2005/12/18(日) 12:40:59
ダイログ、dilogでぐぐると結構ヒットする。orz

458 :デフォルトの名無しさん:2005/12/18(日) 14:51:40
>>455-457
ううん、危なげな質問でしたが答えてくれて有難うございます。
いろいろキーワードから調べて見ます

459 :デフォルトの名無しさん:2005/12/18(日) 15:57:25
うぎゃ。あが抜けてたorz

460 :デフォルトの名無しさん:2005/12/18(日) 16:16:23
海外アプリケーションのローカライズをしているのですが
日本語入力ができなくて困っています。
入力言語を変更するAPI等ありましたら、教えていただけないでしょうか?

461 :デフォルトの名無しさん:2005/12/18(日) 18:17:36
>>460
ないです

462 :デフォルトの名無しさん:2005/12/18(日) 18:58:20
キーボードレイアウトの変更でできなくね?

463 :デフォルトの名無しさん:2005/12/18(日) 22:51:25
質問です。Windows XP上でプログラミングをしていて、ファイルオープンダイアログ、
すなわちGetOpenFileName()を呼ぼうとしているのですが、OPENFILENAME構造体に渡す
パラメータは全く同じなのに、次の点で普段と動作が異なることがあります。
 ・「ファイル名(N):」に表示されるキャレットが点滅しないことがある。
 ・マウスカーソルをファイルの上に移動させてもツールチップが表示されないことがある。
どうやらこれらの現象は同時に発生するようです。どのような原因が考えられるでしょうか?

464 :463:2005/12/18(日) 23:33:03
すみません、自己解決しました。
メインのウィンドウプロシージャの中でWM_PAINTを正しく
処理していなかったのが原因でした。_| ̄|○

465 :デフォルトの名無しさん:2005/12/18(日) 23:35:57
あるあるwwww
こういう時こそ、MFCやWTLの雛形の存在意義を感じたりする。

466 :デフォルトの名無しさん:2005/12/19(月) 09:23:05
>>439
なるほど、自分で探すしかないのか・・
スレッドの探し方で、ちょっと悩んでみまつ


ぜひ、別の方法とやらのヒントでもご教示を
(getMessageで待ってるのは、ServiceMainで、
ウィンドウオブジェクトとかは持って無い奴です。)



467 :デフォルトの名無しさん:2005/12/19(月) 09:53:21
>>466
・待つプロセスが自分のThreadIDを固定ファイルか何かに書いておく。
・待つプロセスが特定の名前の空ウィンドウを作りFindWindow()で探してもらう。
・待つプロセスが特定の名前の共有メモリ化何かを確保し、そこにアクセスしてもらう。

468 :デフォルトの名無しさん:2005/12/19(月) 10:06:45
>>467

>・待つプロセスが自分のThreadIDを固定ファイルか何かに書いておく。

この案がいいかな
Unix系だと、 /var/run/httpd.pid
とか置いといて、pid指定してsignalでホイホイするイメージに近いかねぇ〜

置き場所は、レジストリがいい?
HKEY_LOCAL_MACHINE\SOFTWARE\ほげほげ\ThreadID

ちょい、やってみますです。


469 :デフォルトの名無しさん:2005/12/19(月) 10:25:38
NTFSのMFTのサイズを取得するためにNtFsControlFile APIで
NTFS_VOLUME_DATA_BUFFER構造体を取得しています。
ただこの処理は管理者権限のあるアカウントでしか成功しない
ということに最近気づいてしまい困っています。
ドライブへのアクセス権限のある一般ユーザ権限レベルでも
MFTのサイズを取得する方法はないでしょうか?


470 :469:2005/12/19(月) 11:34:23
管理権限なしでMFTサイズを取得するにはセクターに直接アクセスして読むしか
なさそうな気がしてきました。
NTFSでセクターアクセスする方法ってどこかに解説ページとかないでしょうか?
DOS版は作ったことあるんですけど。



471 :デフォルトの名無しさん:2005/12/19(月) 11:43:11
>>470
CreateFile()で\\.\cだかをオープンするんじゃなかったかな。
MSDN参照で。
#MFTサイズがどこから読めるのか私は知らんが。

472 :469:2005/12/19(月) 11:49:11
>>471
今はこの方法で実装していますが、この部分で管理者権限が必要になるんです。


473 :デフォルトの名無しさん:2005/12/19(月) 17:23:10
デフォルトのフォント(HFONTかフォント名)を取得する関数あります?

474 :473:2005/12/19(月) 17:26:12
デフォルトっていうのは、
システムの標準フォントでおねがいします

475 :デフォルトの名無しさん:2005/12/19(月) 17:31:34
>>474
メニュー描画等で使われているフォント
HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);

いわえるシステムフォント
HFONT hFont = (HFONT)GetStockObject(SYSTEM_FONT);

名前とか大きさとかほしけりゃ その後に
LOGFONT lf;
GetObject(hFont, sizeof(lf), &lf);
とでもやってくれ

476 :デフォルトの名無しさん:2005/12/19(月) 17:36:11
ありがとう><

477 :デフォルトの名無しさん:2005/12/19(月) 17:47:21
>>475
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる

478 :デフォルトの名無しさん:2005/12/19(月) 17:57:55
いわ・える(いはへる)【岩得る】
〔他ア下一(ハ下一)〕卆いは・ふ〔他ハ下二〕(しばくために)岩を入手する。
*書言字考節用集‐九「紲絆イハヘル束縛之義。〔毛詩〕」

479 :468:2005/12/19(月) 19:02:17
とあるプロセスで、

DWORD tid = GetCurrentThreadId();
(tidを表示すると2156)

MSG msg;
BOOL bRet;
while ((bRet = GetMessage(&msg, NULL, 0, 0))) {
  :


ってコーディングして待ってるんだけど、
これを、別のプロセスで、↓なぐあいで起動したんだけど、

DWORD tid = 2156;
UINT msg = 10;
WPARAM prm1 = 9;
LPARAM prm2 = 8;
rtn = ::PostThreadMessage(tid, msg, prm1, prm2);

rtnがFALSEでGetLastErrorの内容は「スレッド識別子が無効です」でした。なんで?



480 :デフォルトの名無しさん:2005/12/19(月) 19:28:13
IDとHANDLEを間違ってない?

481 :デフォルトの名無しさん:2005/12/19(月) 19:30:32
PostThreadMessage

idThread
スレッドの識別子を指定します。
この関数は、このスレッドのメッセージキューへメッセージをポストします。
指定されたスレッドがメッセージキューを備えていない場合、この関数は失敗します。
スレッドが Win32 のユーザー関数または GDI 関数のいずれかを最初に呼び出した時点で、
システムはそのスレッドのメッセージキューを作成します。
詳細については、この関数の「解説」を参照してください。

Windows 2000:このスレッドは、呼び出し側と同じデスクトップ、
または共通の LUID(Locally Unique Identifiier;ローカル一意識別子)
を持つプロセスに所属していなければなりません。それ以外の場合、
この関数は失敗し、ERROR_INVALID_THREAD_ID を返します。



482 :デフォルトの名無しさん:2005/12/19(月) 19:42:24
>>481
GetMessageしてるほうは、ServiceMainだから、デスクトップ持って無いし、
共通のLUIDたぶん持ってないです。

ダメダメだった。どうすりゃええんだ〜



483 :デフォルトの名無しさん:2005/12/19(月) 19:47:44
パイプとかソケット使った方がよくね?

484 :デフォルトの名無しさん:2005/12/19(月) 19:53:38
メールスロットとかな。
なんでPostThreadMessageにこだわるかね。

485 :デフォルトの名無しさん:2005/12/19(月) 20:16:47
自己解決しました。
ControlService が128以降、ユーザに開放されてたのに気がついた。
これで起動して、イベントハンドラで、自分自身のプロセス?にPostThreadMessageしたら、
ちゃんと、キューにイベントが溜まって、1個ずつ取り出してできたよ。


>>483-484
コメントありがとう〜

メールスロットやパイプ、ソケットの件は、いろいろあって
それ以外の方法でさがしてたもので・・


486 :デフォルトの名無しさん:2005/12/19(月) 21:00:37
え?Inner-Process-Comminucationだったの?

487 :デフォルトの名無しさん:2005/12/19(月) 21:07:04
ウィンドウの縁の枠の太さ、ツールバーの幅とか、
windows.hとかにマクロされていましたら、教えてください。

GetClientRectでも出来そうな気もしますが、
始めにウィンドウを作る時にサイズが分かりたいので、
定数で予めあってくれるとやりやすいと思いました。

488 :デフォルトの名無しさん:2005/12/19(月) 21:10:13
その価は動的なので、「マクロされ」てはいない。

489 :デフォルトの名無しさん:2005/12/19(月) 21:11:01
定数じゃなくてユーザが設定するもんだろ
GetSystemMetrics

490 :デフォルトの名無しさん:2005/12/19(月) 21:17:07
>>486
ControlServiceをcallするのは、別のプロセスです。
プロセス間通信です。


491 :デフォルトの名無しさん:2005/12/19(月) 21:33:24
>>487
逆方向?のAPIあるよ。
AdjustWindowRect(Ex) クライアントサイズを指定してWindowサイズを求める
(とはいえ メニューが複数行にまたぐときの結果はおかしい?)

492 :487:2005/12/19(月) 21:52:58
みなさま、ありがとうございます。
教えていただいたキーワードを試してみたいと思います。

493 :デフォルトの名無しさん:2005/12/19(月) 22:39:49
恐ろしく初心者な質問だと思うんだけど、
調べてても分からなくなったので質問させて下さい。

あるプロセスから、イベントを1つ名前付きでCreateEventしておいた。
そのプロセスから CreateProcess で別の子プロセスを起動。
子プロセスは親プロセスから終了させるんだけど、
子プロセスの終了前にクリーンアップ処理を入れたいんで、
親プロセスで、最初に作っておいたイベントをセットする。
子プロセスでそれを拾ってクリーンアップしてからイベントをセットし返す。
親プロセスは子プロセスのクリーンアップが終わってから、
子プロセスを終わらせる。

みたいに書いてたんだけど、親プロセスで SetEvent しても
子プロセスで WaitForSingleObject が拾ってくれない orz
なんかうまくないところありますか?
(やり方そのものがうまくないんだけどいろいろ制約があって・・・)
セキュリティと継承?かなと思ってるんだけど、
リファレンスを見ても意味が良く分かんなくて。

長文スマソ

494 :デフォルトの名無しさん:2005/12/19(月) 22:51:33
>>493
親は子にWM_CLOSEを投げて、子の終了を待つ。
子はWM_CLOSEを受信したら終了すればいいだけじゃないの?

495 :493:2005/12/19(月) 23:12:34
>>494
レスありがとさんです。

子はウィンドウハンドルを持ってない単純なプロセスなので
そっち経由だとやり取りできないんです(ノ∀`)

496 :デフォルトの名無しさん:2005/12/19(月) 23:27:41
>>493
基本的には問題なさそうだから、
> 子プロセスで WaitForSingleObject が拾ってくれない
の動作の詳細(どうなってほしいが、実際にはどう動く)が知りたいところ。

ちなみに子プロセスの終了検出は、子プロセスを普通に終了させて、
親プロセスでは子プロセスHANDLEをWaitForSingleObject()するほうが素直。

497 :デフォルトの名無しさん:2005/12/19(月) 23:29:30
あるディレクトリが共有ディスクかどうか判別したいのですが、
専用のAPIとかってありますでしょうか?
それともパスが\\か//で始まっていかどうかで判別するのが普通でしょうか。

どなたかよきアドバイスを。


498 :デフォルトの名無しさん:2005/12/19(月) 23:39:56
>>497
GetDriveType()

499 :493:2005/12/19(月) 23:45:27
>>496
ありがとうございます。
今、主要なところを抜き出してプロジェクト作ってます。
詳細が分かりにくいのでもうちょっと書きます。

>> 子プロセスで WaitForSingleObject が拾ってくれない
>の動作の詳細(どうなってほしいが、実際にはどう動く)が知りたいところ。

親から子を CreateProcess してます。
親でイベントを2つ CreateEvent して、1つは子を終了させるときに SetEvent します。
そのあと親ではもう1つのイベントを WaitFor してます。
子の方では、起動時に、親で CreateEvent したのと同じ名前で OpenEvent してます。
その後、メインスレッドのループで WaitFor(タイムアウト0) していて、
親からプロセス終了のイベントがセットされるのを調べてます。(★ここでイベントがシグナルだと分かってくれない)
もしイベントが検知できたら、ゴミ掃除をしてからもう1つのイベントを SetEvent します。
親ではもう1つのイベントの方の WaitFor が検知できるはずなので、
その後、子をTerminateProcess してます。

>ちなみに子プロセスの終了検出は、子プロセスを普通に終了させて、
>親プロセスでは子プロセスHANDLEをWaitForSingleObject()するほうが素直。

はい、そうなんですよね。。。
ただスレッドとかその他グローバルに確保してるリソースを解放しないといけないので
『プロセスが終わる直前』を通知したいんです。

500 :デフォルトの名無しさん:2005/12/20(火) 00:03:30
>>499
んー・・・。
・実は親子で同じイベントをWaitし合ってる
・イベントが自動Eventで、複数の子プロセスをCreateしている
くらいしか思いつかないな。

自動Eventの場合、Setした時に起きるスレッドは1つだけなので、
他にもWaitしてるスレッドがあっても、それらは寝たまま。
手動Eventなら待ってる全スレッドが一気に起きるんだけど。

501 :デフォルトの名無しさん:2005/12/20(火) 00:04:15
>>498
さんきゅ

502 :デフォルトの名無しさん:2005/12/20(火) 00:11:12
>>499
戻り値の判定を間違っているとか…

503 :デフォルトの名無しさん:2005/12/20(火) 00:13:59
>その後、子をTerminateProcess してます。
え?なんで、WaitForで子供が死ぬのを待たなずに強制終了しちゃうの?

>ただスレッドとかその他グローバルに確保してるリソースを解放しないといけない
その「確保しているリソース」ってのは子が「死にそう」〜「死んだ」までに
始末しないとイケナイような際どいものなの?Win32にそんなリソースあったけ?

504 :デフォルトの名無しさん:2005/12/20(火) 00:14:14
>>499
>子をTerminateProcess してます

工工エエエ(´д`)エエエ工工

505 :デフォルトの名無しさん:2005/12/20(火) 00:18:00
>>504
スレッドを終了させるわけではないので、OSによるリソース解放を期待できるよ。

COM参照数?
知らんよ。デスクトップPCでそんなもん気にすんな。
数十日間連続稼動させるサーバーじゃねーんだ。

506 :デフォルトの名無しさん:2005/12/20(火) 00:18:48
>>505
そういう問題じゃないだろ。

507 :デフォルトの名無しさん:2005/12/20(火) 00:45:18
普通に、終わるのまてんのか!

508 :デフォルトの名無しさん:2005/12/20(火) 00:54:11
TerminateProcessなんか普通使ったら駄目だろ
エラーが起きてるときとかにだけ使うべき

509 :493:2005/12/20(火) 00:54:50
>>500
やっぱりそれくらいですよね・・・
Waitしているのは1つの子プロセスのメインスレッドだけなので
たぶん抜けてはいないと思う。

>>502
大丈夫だと思うんだけどなぁ・・・
念のためもうちょい見直します。

>>503-507
子供が死ぬのを「待ちすぎるとよろしくない」使用上の制限があって・・・
特殊な制御系で動かそうって話なんです。
子が大量にmallocしてたりゴミがいろいろあって、
強制終了するにもとりあえずそっちは片付けてからにしろ、ってなことで。

>普通に、終わるまでまてんのか!
待てないんす〜俺も待ちたいんだけど

※愚痴ってしまうと、引継ぎの保守なんで大きく直すにも直せない(ノ∀`)

510 :デフォルトの名無しさん:2005/12/20(火) 00:59:11
>>509
そんな不毛な処理するな。
そもそも、待ちすぎると言う考えが既に間違い。

もっと素直な方法が存在する。

511 :デフォルトの名無しさん:2005/12/20(火) 01:04:11
>>509
強制終了するからゴミが残る。
普通に終了すればゴミも残らない。


それより、子プロセスの結果を別のプロセス間通信で行い、
結果を受け取った後は、親はノータッチでいいだろ。


512 :デフォルトの名無しさん:2005/12/20(火) 01:04:16
よく論理がわからないなぁ。
・子を強制終了させたい->問答無用。TerminateProcessで殺す。
・子を終了させたい->イベントをsetして、子が終了するまで待つ。
の二択だとおもうのだが。
・子を強制終了させたいけど、終了処理もさせたい->え?終了処理に反応するなら
なんで強制終了させる必要があるの?

>子が大量にmallocしてたり
に至ってはmalloc&freeを再燃させようとする陰謀だし

513 :デフォルトの名無しさん:2005/12/20(火) 01:05:00
CEプログラミングスレではTerminateThread
このスレではTerminateProcess

今日はTerminate系で無理やり殺すのがはやってるのか?

514 :デフォルトの名無しさん:2005/12/20(火) 01:08:58
>>513
メイワクなハヤリだな…

515 :デフォルトの名無しさん:2005/12/20(火) 01:11:59
SetEventが終わったあと子は何してんだよ。

516 :デフォルトの名無しさん:2005/12/20(火) 01:13:26
子供の別スレッドでも待ってるんじゃね?

517 :デフォルトの名無しさん:2005/12/20(火) 01:16:21
>>515
>>493の事だから、何かおかしな事をやって居るに違いない。

518 :デフォルトの名無しさん:2005/12/20(火) 06:06:00
>>511は、小さなゴミを出すことよりも、デッドロックで2つのプロセス全体がゴミになることを選ぶ馬鹿。
典型的な荒らし。

519 :デフォルトの名無しさん:2005/12/20(火) 11:27:08
FormatMessageのMSDNのサンプルって、無条件に
バッファの開放をしてるけど、いいの?

LocalFreeが、アドレスチェックしてるみたいだから、
エラーになろうが、つっぱしるのが流儀?



520 :デフォルトの名無しさん:2005/12/20(火) 11:42:27
iniファイルの書き込みについて。

int x = 1;
TCHAR data[256];
wsprintf(data, "x = %d", x);
WritePrivateProfileSection("section", data, path);

としているんだけど、

[section]
x = 1
フフフフフフフフ…(注:本当は半角のフ)

となっちゃう。フフフフフ…が書き込まれない方法を教えて。

521 :デフォルトの名無しさん:2005/12/20(火) 11:44:12
>>520
Releaseビルドする

522 :520:2005/12/20(火) 11:47:06
リリースビルドしたら消えた。不思議ですねえ。
とにかくどうも。

523 :デフォルトの名無しさん:2005/12/20(火) 11:47:49
>>520
試してないけど、↓でいいんじゃね?
wsprintf(data, "x = %d\0", x);

524 :520:2005/12/20(火) 11:53:01
>>523

駄目みたいよ。

525 :デフォルトの名無しさん:2005/12/20(火) 11:57:34
>>520
>TCHAR data[256];

TCHAR data[256] = {0};

526 :デフォルトの名無しさん:2005/12/20(火) 11:58:43
'\0'をも一つ付けなきゃいかんのだろ。

int len = wsprintf(data, "x = %d", x);
data[len+1] = '\0';


527 :デフォルトの名無しさん:2005/12/20(火) 12:11:10
>>526
+1いらなくない?

528 :デフォルトの名無しさん:2005/12/20(火) 12:14:30
MSDN読む限り、
>>523>>526の方法でヨサゲなんだが、
たしかに上手く行かんなー

529 :デフォルトの名無しさん:2005/12/20(火) 12:14:51
MSDN読めばわかるけど。
x = 1\0y = 2\0\0
みたいなデータを渡すんだよ。だから、最後に\0を付加する必要がある。

wsprintf(data, "x = %d%c", x, 0);


530 :520:2005/12/20(火) 12:19:27
色々とありがとうです。
dataの最後は\0が2つ並んでないといけないということだけど、
526のやり方が正しいみたい。525でもいいけど。
523のやり方だとdata[5] = -52となってました。

531 :528:2005/12/20(火) 12:19:32
あ、嘘付いた。>>526ならいける

532 :デフォルトの名無しさん:2005/12/20(火) 12:20:09
""内に\0書いても、\0入れたいのか終端なのか区別できないだろ。

533 :デフォルトの名無しさん:2005/12/20(火) 12:24:07
bmpファイルの読み込みで、
普通RGBTRIPLE構造体で動的にメモリ確保して色情報をReadFile関数で読むのですが、
32ビットビットマップ用(?)のRGBQUAD構造体とははなんなんでしょうか・・・
こいつのメンバーは
RGBTRIPLE構造体のメンバ(BYTE rgbBlue, BYTE rgbGreen, BYTE rgbRed)に加え
新しいメンバBYTE rgbReservedというのが宣言されているようです。
現在このメンバの部分には0を格納しなければいけないようですが、いわゆる予約って奴でしょうか

534 :デフォルトの名無しさん:2005/12/20(火) 12:28:34
>>533
皆、書籍やMSDNをお前の代わりに読んでやるほど暇じゃないんだ。出直せ。

535 :デフォルトの名無しさん:2005/12/20(火) 12:28:48
>>533
英和辞典は持っていませんか?

536 :デフォルトの名無しさん:2005/12/20(火) 12:29:12
Reserved 読めますか?

537 :デフォルトの名無しさん:2005/12/20(火) 12:35:34
すみませんでしたorz

538 :デフォルトの名無しさん:2005/12/20(火) 12:53:55
書きかけで飯食っていたらレスがいっぱい付いていたが
せっかくなので書いておく。

>>520
そのAPIは複数のキーを1回の呼び出しで出力するためのもの。
各キーはNULLで区切られていて、最後は終わりを表すために
もう1つNULLを付ける必要がある。

A=1\0B=2\0C=3\0\0
というデータを渡すと
A=1
B=2
C=3
と出力される。

フフフフと出力されるのは、VC++のデバッグビルドでは
未初期化のローカル変数が0xCCで初期化されているため。
これを覚えておくとデバッグが楽になる。

キーを1つだけ出力したい場合は、WritePrivateProfileSectionではなくて
WritePrivateProfileStringを使うのが普通。

539 :デフォルトの名無しさん:2005/12/20(火) 13:27:04
フフフフ

540 :デフォルトの名無しさん:2005/12/20(火) 13:58:20
デバッグビルド、リリースビルドの話じゃなくて、素直にZeroMemoryすれ。
って話は?


541 :デフォルトの名無しさん:2005/12/20(火) 14:00:59
>>540
いいえ、そんな安直なプログラミングはすべきではありません。
末尾にナル文字を一つ余計に附加するのが常道です。
#つーか、>538なんだがな。

542 :デフォルトの名無しさん:2005/12/20(火) 14:02:59
>>540
それはたまたまうまく動くだけ。
規格通りのコーディングならきちんと2コ付けるべき。

543 :デフォルトの名無しさん:2005/12/20(火) 14:55:41
MSDNライブラリのLPSTRやらHWNDの定義みたいなのが載ってるページが見つからないんですが
どの項目でしたっけ?;



544 :デフォルトの名無しさん:2005/12/20(火) 15:06:26
msdn.microsoft.com/library/en-us/winprog/winprog/windows_data_types.asp

のことか?

545 :デフォルトの名無しさん:2005/12/20(火) 15:22:34
>544
それですthx

546 :デフォルトの名無しさん:2005/12/20(火) 15:30:42
>>519
FORMAT_MESSAGE_ALLOCATE_BUFFER

547 :デフォルトの名無しさん:2005/12/20(火) 18:11:13
>>538
横ですが勉強になりました
#今日までヌルと呼んでいた私は釣ってきます

548 :デフォルトの名無しさん:2005/12/20(火) 18:31:30
>>547
別にヌルでもいいよ。>541が教条主義なだけだから。

549 :デフォルトの名無しさん:2005/12/20(火) 18:33:42
もうフフフフも怖くないぞ

550 :デフォルトの名無しさん:2005/12/20(火) 18:48:42
ラミパスラミパスフフフフフ

551 :デフォルトの名無しさん:2005/12/20(火) 18:57:51
int a = フフフフ;

552 :デフォルトの名無しさん:2005/12/20(火) 21:30:45
自分以外が作ったチャットソフトの、ログ部分のテキストを取得しようとしています。しかし取得できません。
どなたか助言をお願いいたします。

親(チャットソフト)
 -子1(クラス名=Edit)  (ウインドウキャプション=””) チャットメッセージ入力用Editコントロール
 -子2(クラス名=Static) (ウインドウキャプション=”InputDisableWindow”) チャットのログ表示

***1 Editのテキストはウインドウキャプションがないため、SendMessage-WM_GETTEXTだけではなく
GetWindowTextでも取得できました。
MSDNには「他のプロセス内のコントロールのテキストを取得するには、GetWindowText 関数を呼び出す
のではなく、直接 WM_GETTEXT メッセージを送ります。」と書いてあります。

***2 チャットログが表示されるStaticのほうはSendMessage(HWND ,WM_GETTEXT,〜 で送ると
ウインドウキャプションであるInputDis〜を取得してしまいます。


ステータスバーのようにSB_GETTEXTのような専用メッセージがあるのでしょうか?
それとも根本的に間違った考えなのでしょうか?

553 :デフォルトの名無しさん:2005/12/20(火) 21:58:29
>>552
Static をベースにサブクラス化してるんじゃないの?
WindowText とは無関係なデータを保持してて、それを表示してる気配がプンプンするのだが…
その 子2 をターゲットに spy++ で WM_USER + マジックナンバー を探ってみるとか?

554 :552:2005/12/20(火) 23:28:50
アドバイスありがとうございます
サブクラス化について調べて、テストしてみます


555 :デフォルトの名無しさん:2005/12/20(火) 23:58:53
スレ違いなところに書き込んたため、ここで質問させていただきます。

UnicodeのウィンドウにIMEを使って文字を入力する時、
入力された文字をWM_IME_COMPOSITIONやWM_IME_CHARを使わずにWM_CHARで正確に
文字が取得できますでしょうか??
ちなみにOSはWindows2000です。XPだと取れるっぽいのですが、Windows2000だと
私の環境だと、とれないっぽいのですが、みなさんいかがでしょうか??
つまり、WM_CHARメッセージのWParamがおかしいんです。


556 :デフォルトの名無しさん:2005/12/21(水) 00:06:59
>>554
もう1点。
Static コントロールのスタイルに オーナードロー(SS_OWNERDRAW) が含まれる場合
コントロールの描画は 親window に委ねられる (WM_DRAWITEM が親へ send される)。

こうなると、当初のログ部分のデータは親内にしか無いことになるので、抜き出しはかなり困難になるかと思われ

557 :デフォルトの名無しさん:2005/12/21(水) 00:32:51
いろいろ試してみたのですが、どうもうまくいかないので
質問させてください。
ShowWindow(hWnd, SW_HIDE)を使って、自分以外のアプリのウインドウを
外から完全に見えないようにしたいのですが、うまく動作しない
アプリがあります。通常はメインのウインドウも、タスクバー上も
完全に消えるのですが、どうもdelphiなどで作られたものは、
タスクバー上の表示が残ってしまうようでした。
TOOLWINDOWならタスクバーに表示されないという話もあったので、
SetWindowLongで、WS_EX_TOOLWINDOWをセットしなおして、SetWindowPosで
変更を有効にする、またSetWindowLong自体でSWP_HIDEWINDOWをする、
(関係ないと思うけど)EnableWindowを試してみる、などを試しても
うまくいきませんでした。
環境は、Win2000SP4上でVC++6.0proとVC++toolkit2003を両方
試してみました。もしアドバイスなどありましたら、よろしく
お願いします。

558 :デフォルトの名無しさん:2005/12/21(水) 00:37:02
単にタスクバーに表示されてるウィンドウとデスクトップに表示されてるウィンドウが別物ってだけじゃね?

559 :デフォルトの名無しさん:2005/12/21(水) 02:24:26
>>557
Winspecterか何かで>>558になってないか確認してみれ

560 :デフォルトの名無しさん:2005/12/21(水) 05:18:03
役に立たないかもしれませんが、
Delphiで作られたアプリは基本的に画面の中央に大きさが0*0でVisibleのウィンドウを
持っていて、画面に表示されているウィンドウはこのウィンドウに所有されています。



561 :デフォルトの名無しさん:2005/12/21(水) 08:43:15
>>560
BCBも同じだしな。

562 :デフォルトの名無しさん:2005/12/21(水) 10:06:39
>>561
そりゃライブラリ同じだし。

563 :デフォルトの名無しさん:2005/12/21(水) 10:24:55
余計なことしやがるなぁ。

564 :デフォルトの名無しさん:2005/12/21(水) 13:16:02
質問です。
ものすごーい初心者的な質問だと思うのですが、WINAPIはここ見たいなので…。

Windowsを作る際に登録したProcで、WM_LBUTTONDOWNを受け取り
そこでメッセージボックスを表示してみたのですが、
何故メッセージボックスのせいで処理の流れは停止してしまっているのに
ウインドウの再描画などは行われるのでしょうか。

565 :デフォルトの名無しさん:2005/12/21(水) 13:38:52
>>564
メッセージボックスの方で、MSGを受け付けてよきにはからってくれているから。

566 :デフォルトの名無しさん:2005/12/21(水) 13:40:39
なるほど。かしこいですねMSGBOX
ありがとうございました。

567 :デフォルトの名無しさん:2005/12/21(水) 13:56:47
質問。

VC6.0でメニューつきダイアログを作り、メニューの「開く」を選択したら
コモンダイアログを表示しようとしています。
ですが
GetOpenFileName
を呼ぶと必ず0(エラー)になってしまいます。


OPENFILENAME ofn;
memset(&ofn,0,sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd; // ダイアログのHWND
ofn.lpstrFilter = "テキスト(*.txt)\0*.txt\0すべて(*.*)\0*.*\0";
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFileName;
ofn.nMaxFile = _MAX_PATH;
ofn.lpstrTitle = "ファイル名の取得";
ofn.lpstrDefExt = "txt";
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
GetOpenFileName(&ofn);

と、ネットのサンプルをほぼそのまま使っているのですが、何が問題かわかりますでしょうか。
ダイアログのスタイルで「コモンダイアログを出しても良い ○×」という設定があるのでしょうか?

568 :デフォルトの名無しさん:2005/12/21(水) 13:58:45
試しにダイアログPROCの外で呼んでみた場合、正しく動作しました。
やはりダイアログのスタイル設定あたりでしょうか。
それともダイアログPROCの中からは、コモンダイアログは呼べないのでしょうか。

569 :デフォルトの名無しさん:2005/12/21(水) 14:08:22
CommDlgExtendedError()は何を返す?

570 :デフォルトの名無しさん:2005/12/21(水) 14:14:19
えーと、2ですね。
今2は何を表すのか探してます。とりあえず結果だけとりいそぎ。

571 :デフォルトの名無しさん:2005/12/21(水) 14:19:52
エラーの内容は
CDERR_INITIALIZATION(0x0002)

そこからぐぐって、原因がわかりました。
ofn.lpstrFile = szFileName
の場合
szFileName[0] = '\0';
しておかないといけないようです。

猫プロにもそんなこと書いてなかった(´・ω・`)

推測するに、ダイアログPROCの中で確保したローカル配列変数は、0で初期化されていない。
たまたま猫プロはグローバル変数であり0が入ってた。
たまたまダイアログ作る前にWinMainで作ったローカル配列変数は0が入ってた。

ということでしょうか。なんてこったい。

572 :デフォルトの名無しさん:2005/12/21(水) 14:23:36
>>571
OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST がついてるからね。

実在するファイル名を szFileName にセットしていた場合は成功すると思うよ

573 :デフォルトの名無しさん:2005/12/21(水) 16:01:07





                      ま た 猫 か




574 :デフォルトの名無しさん:2005/12/21(水) 18:00:52
マウスをクリックさせる関数のようなものはありますか?
マクロで位置を記録して、ある位置にきたらクリックさせたいのです。

575 :デフォルトの名無しさん:2005/12/21(水) 18:14:56
>>574
SendInput

576 :デフォルトの名無しさん:2005/12/21(水) 19:32:07
>>571
猫は概要を把握する程度で、詳細はMSDN(それも英語の方)を参照したほうがいい。

577 :574:2005/12/21(水) 19:46:36
>>575
ありがとうございました

578 :デフォルトの名無しさん:2005/12/21(水) 20:11:53
あるウィンドウ上のStaticおよびButtonコントロールのウィンドウハンドルを取得するにはどうすればいいですか。
当該ウィンドウのウィンドウハンドルはわかっています。


579 :デフォルトの名無しさん:2005/12/21(水) 20:18:01
>>578
EnumChildWindows()でWindowクラスを調べてGetClassName()で
"BUTTON"("STATIC")かどうか。

580 :578:2005/12/21(水) 20:34:15
>>579
ありがとうございました。
同一Windowクラスのコントロールが複数個ある場合、
それらがEnumChildWindows()で列挙される順序は、常に固定ですか?


581 :デフォルトの名無しさん:2005/12/21(水) 20:39:15
どうやればいいのかわからなくて質問するならわかるのだが、何でAPIの仕様を質問するんだろうな。
MSDN見ればいいし、それに勝る解決法はないだろうに。

582 :デフォルトの名無しさん:2005/12/21(水) 20:44:24
>>580
site:microsoft.com EnumChildWindows
これでググってごらん。

583 :デフォルトの名無しさん:2005/12/21(水) 21:20:38
タスクマネージャのネットワークタブで、送信バイト数、受信バイト数ってあるけど、これはどうやって取得するの?

584 :580:2005/12/21(水) 21:38:03
>>581-582
順序は不定として処理します。ありがとうございました。

585 :557:2005/12/21(水) 22:23:21
>>558-560
早速のアドバイス、どうもありがとうございます。
ご指摘の通り、大きさ0のウインドウがオーナーになっているため
消えなかったようです。オーナーウインドウを消したら、無事タスクバーの
表示も消えました。まさか、そういう仕様になっていたとは・・・
きっと自力ではなかなか気が付かなかったと思います。
本当に助かりました。どうもありがとうございました。

586 :デフォルトの名無しさん:2005/12/22(木) 03:09:35
スレ違いな質問でしたらすみません。Windowsを使った
画像処理で簡単な色抜きを行いたいと思い、TransparentBlt()を
用いて処理しようと試みたのですが、msimg32.dllのインポートの
やり方がわからずに色々試してみたのですがエラーが出ます。
またそれを使う場合初めに#include<wingdi.h>と宣言しなければいけない
のでしょうか?
マスクを使った画像処理を出来ればいいのですが、簡易な画像処理方法を
学びたいためTransparentBlt()関数について知りたいです。
どうかご助力お願いします m(_ _)m


587 :デフォルトの名無しさん:2005/12/22(木) 03:22:41
>>586
まずはMSDN
次はTransparentBltをぐぐってサンプルを探すと良いと思います
それが一番早いかと

588 :574:2005/12/22(木) 03:51:38
度々すいません。
IEの入力フォームにプログラムを使って文字を表示させたいです。
例えばヤフー(http://www.yahoo.co.jp/)のトップの検索文字を入力する欄に
文字を送信して表示させるにはどうしたらよいのでしょうか?
自分で作った他のプログラムのテキストコントロールにはSendMessage()を使って
文字表示ができたのですが、IEになるとどのURLでもGetClassName()で
返ってくる名前が一緒なのです・・・

IEでGetClassName()を使って取得した名前の一覧は
WorkerW
ReBarWindow32
ToolbarWindow32
ComboBoxEx32
ToolbarWindow32
ComboBox
Edit
ToolbarWindow32
ToolbarWindow32
WorkerW
ToolbarWindow32
ATL:1000D0F8
WorkerW
msctls_statusbar32
msctls_progress32
Shell DocObject View
Internet Explorer_Server
Internet Explorer_TridentCmboBx

ちなみにEditにSendMessage()で文字を送ると、アドレスバーの所に表示されます。

589 :586:2005/12/22(木) 06:14:14
TransparentBltで検索したところ余り参考になるものもなく、
MSDNも見つけにくかったのですが、色々&検索をかけた結果
参考になるものを見つけることができ、その指示どおりにしたところ
ビルドに成功しました。
>>587
色々考えすぎて熱くなってました。これからはもう少し落ち着いて
検索するようにします。再度検索するように指示してくださったことに
感謝します。ありがとうございます。

590 :デフォルトの名無しさん:2005/12/22(木) 11:59:33
得てしてそんなもんだな。

591 :デフォルトの名無しさん:2005/12/22(木) 13:12:10
>>588
IEのドキュメントエリアのボタンとかフォームはウィンドウじゃないよ。
だから、外部からSendMessageとかはできない。
キーボード入力をエミュレートして、TAB数発と、文字列を流し込むとかで、できるかも。

592 :デフォルトの名無しさん:2005/12/22(木) 13:30:49
IEを外部から操作したいならCOM経由が基本だが。
そもそもYahooやGoogleの検索結果を表示させたいだけなら自分で検索結果のURL生成してそれ表示させたほうが楽。

593 :デフォルトの名無しさん:2005/12/22(木) 14:42:55
モードレスダイアログの親を作成・破棄時に有効・無効化して、
モーダルダイアログとして機能させる事は有りなんでしょうか?

594 :デフォルトの名無しさん:2005/12/22(木) 15:37:40
>>593
有り無しの判断基準がわからんのでなんとも。
MFCではそういうことやってるようだが。

595 :デフォルトの名無しさん:2005/12/22(木) 15:39:29
ありです

596 :デフォルトの名無しさん:2005/12/22(木) 17:35:26
>>593
例えばモーダルダイアログを同時に複数必要とするときなどには常套手段です。

597 :デフォルトの名無しさん:2005/12/22(木) 18:20:16
case WM_COMMAND:
static int a;
a=rand();
printf("%d",a);
return 0;

なんていうのやめた方がいいですか?
WM_COMMANDが同時に送られた時、a=rand();が同時に実行されたらaのデータが壊れると思うのですが。

598 :デフォルトの名無しさん:2005/12/22(木) 18:31:51
>>597
それを見ただけでは一概に言えないが、マルチスレッドにしていないなら
メッセージを同時に処理することはできないから大丈夫。

599 :デフォルトの名無しさん:2005/12/22(木) 18:36:51
case WM_COMMAND:
{
static int a;
a=rand();
printf("%d",a);
return 0;
}

600 :デフォルトの名無しさん:2005/12/22(木) 18:52:14
>>599
そうやっても同じだと思うのですが

601 :デフォルトの名無しさん:2005/12/22(木) 19:24:28
>>598
メッセージはシリアライズされるので、マルチスレッドでも大丈夫。

602 :601:2005/12/22(木) 19:25:08
↑は忘れてくれ。ボケてた

603 :デフォルトの名無しさん:2005/12/22(木) 20:17:43
EnterCriticalSection ?

604 :574:2005/12/22(木) 20:49:15
>>591-592
ありがとうございます。COMの方も調べてみます。

605 :デフォルトの名無しさん:2005/12/22(木) 20:57:14
>>600
case の中で変数宣言すんなってことじゃない?

606 :593:2005/12/22(木) 21:21:16
>>594 >>595 >>596
どうも、返答ありがとうございます。

607 :デフォルトの名無しさん:2005/12/22(木) 23:57:28
ここにレスしてくださる神々の皆様は、職業がPGとかSEなんでしょうか?
みんなが使わない様なAPIに詳しかったり、知識が凄かったりするんですが

608 :デフォルトの名無しさん:2005/12/23(金) 00:01:07
いんやニート

609 :デフォルトの名無しさん:2005/12/23(金) 00:04:00
メッセージキューはスレッド毎に用意されます。
ちなみに、OSはシステムメッセージキューと呼ばれるキューを一つもっていて、
まず、ここに、すべてのメッセージが蓄えられます。それで、OSによってこのキュー内の
メッセージが動作中のプロセスのスレッド毎に割り当てられたスレッドメッセージキューに
割り振ります。



610 :デフォルトの名無しさん:2005/12/23(金) 00:55:00
ふつうに社会人なら
こんなとこで便利屋やってないってw

611 :デフォルトの名無しさん:2005/12/23(金) 02:57:32
例えニートでもみんな結構高学歴な気がします・・・

612 :デフォルトの名無しさん:2005/12/23(金) 03:06:36
例え高学歴でもみんなニートです・・・

613 :デフォルトの名無しさん:2005/12/23(金) 03:28:36
高学歴なことは社会では
そんなに重要じゃないです

614 :デフォルトの名無しさん:2005/12/23(金) 03:51:07
プログラマはかけて何ぼ。ってこれマ板のネタだろ。

615 :デフォルトの名無しさん:2005/12/23(金) 04:08:18
社会人になって、あまり学歴って関係ないなと思いました。が、
いろな人と接してある程度重要だなってことに気づきました。
高学歴ってことはすなわち、それだけ、努力をしたわけで、
努力をした証になってるわけです。だから、そういう人には
やはり、こつこと努力してどんどん成長してくれる人が多いのも事実です。
だから、私が人事ならやはり学歴はみます。別に頭の良しあしをみるより、
努力できるかという視点で。あくまで、仕事に関してで、人間性はまた別問題だが




616 :デフォルトの名無しさん:2005/12/23(金) 04:09:56
>>615
マ板でやれ。
まぁ、大学でで頭がよくても使い物にならないプログラマは掃いて捨てるほどいる訳だが。

617 :デフォルトの名無しさん:2005/12/23(金) 04:32:45
そんな事を言ってる君は既に低学歴って事を証明しているわけで、
まぁ、すぐに人にあたるところからみても、あんまいい人生を送ってないところが
まで見えてしまい、その環境のせいで、性格も悪そうだし、やっぱ、採用したくない。
だから、君をせめたりしないよ。環境が悪いんだ

618 :デフォルトの名無しさん:2005/12/23(金) 04:42:23
ヒント:スレ違い

619 :デフォルトの名無しさん:2005/12/23(金) 06:11:01
>>616が一番の癌なわけだな。
自分より高学歴な人間を上手く使えないだけ。

PGの世界は単純だ。
ペーパーテストの能力が高ければ、PGとしても能力も高い。
コーディングというのは創造性のかけらもない仕事だからだ。
実力差として存在するのは、唯一最善の回答にたどり着けるまでの所要時間の差だけだ。
コーディングは、存在しない機能・仕様を考え出す能力とは別のもの。

620 :デフォルトの名無しさん:2005/12/23(金) 06:14:59
>>598
見落としていました
ありがとうございます

621 :デフォルトの名無しさん:2005/12/23(金) 06:53:27
>>619
「PG = コーダー」 と定義した上での話に限れば、
少なくとも定型業務系の仕事なら君の言っていることは正しい。
しかし、現実には「PG = コーダー」とは限らないし、
仕事も定型業務系だけとは限らない。
極度に限定した状況での話しか出来ない >>619 は多分高学歴なだけの馬鹿。

622 :デフォルトの名無しさん:2005/12/23(金) 07:01:20
このスレと全く関係の話をしている連中は学歴職業を問わず単なる屑。

623 :デフォルトの名無しさん:2005/12/23(金) 07:08:49
>>619
どうみても底辺PGです。
ありがとうございました。

624 :デフォルトの名無しさん:2005/12/23(金) 08:03:44
義務教育を終えた後、レベルの近い学友と切磋琢磨する機会がなかった>>616が気の毒だな。
高校入試を手抜きして、高校でレベルの低い周囲を見下して幸せ回路を発動させてただけなのに。

PGとしての能力というものを残酷な数字で比較されることがないので、
自分が凄いレベルなのだと思い込んでしまう高卒PGもいるかもしれない。

625 :619:2005/12/23(金) 08:26:52
>>624 は私です

626 :デフォルトの名無しさん:2005/12/23(金) 08:50:50
うるせえハゲ。テメエの意見なんかどうでもいい。

627 :デフォルトの名無しさん:2005/12/23(金) 08:53:03
ちなみに漏れは高卒〜就職〜酷使PG〜退職〜ニート

628 :デフォルトの名無しさん:2005/12/23(金) 08:58:10
大学出の人にとっては大学卒は普通のことなので、
わざわざ人を評価するときに大学出かどうかについて触れたりしない。
また、文系・理系の出身学部で得意分野に顕著な違いがあることも知っているので
「大学」とひとくくりにすることもしない。

言いたいことはわかるな?

629 :デフォルトの名無しさん:2005/12/23(金) 09:43:50
高学歴でも低学歴でもいいからマ板逝け

630 :デフォルトの名無しさん:2005/12/23(金) 13:16:48
>>628
>文系・理系の出身学部で得意分野に顕著な違いがあること
詳しく

631 :デフォルトの名無しさん:2005/12/23(金) 13:24:24

  VIPでやれ


632 :デフォルトの名無しさん:2005/12/23(金) 13:27:34
こんなプログラマはVIPに逝け!

  ・UHFアニメはヤシガニってナンボ
  ・2chでアク禁喰らうと、妙にうれしくなる
  ・キンタマウィルスに正義を感じた
  ・一昨日の晩、久々に神が光臨した
  ・というか、何でもいいから今すぐ光臨して欲しい
  ・と思っていたら細木数子が光臨して、まいった
  ・しかも帰ってくれない
  ・酔ってやがる
  ・歌いだした

633 :デフォルトの名無しさん:2005/12/23(金) 13:28:22
東大卒文系PGの話
社員教育1ヶ月でその辺のへぼ理系情報系院卒PG並に知識を集積
3ヶ月後には物凄い使える人間に

やっぱり理解度と記憶力が半端じゃないらしい
一度失敗すると、二度と同じミスをしないらしい

634 :デフォルトの名無しさん:2005/12/23(金) 13:31:11
何でここでやるのか、マ板でやらないのか理由を言え。

635 :デフォルトの名無しさん:2005/12/23(金) 13:50:26
そんなにまともな社員教育できる所なら東大卒じゃなくても使いこなせるだろう

636 :616:2005/12/23(金) 15:22:17
で、>619=>624はなんで漏れに粘着しているんだ?
そんなに自分より低学歴な上司に絡まれた恨みを晴らしたいのか?
残念ながら漏れは低学歴でもなければ大卒の部下をそれなりに仕切ってもいるわけだが。

それはさておき、ちょっと質問。
MSDNでWinExec()の説明を読むとCreateProcess()を使えとある。
また、CreateProcess()の説明にもWinExec()はCreateProcess()で実装されているとある。
すると、WinExec()の第二パラメータのSW_*のフラグはSTARTUPINFOに突っ込めばいいということかな?
#確かにdwFlagsの説明にSTARTF_USESHOWWINDOWがあり、wShowWindowにもそう書かれているようだが。


637 :デフォルトの名無しさん:2005/12/23(金) 15:23:32
すみません、InternetExplorerのアドレスバーに表示されてる
URLを取得する方法はないでしょうか?グローバルフックはすでに
しています。よろしくお願いします。

638 :デフォルトの名無しさん:2005/12/23(金) 15:47:56
>>636
騙るなw
部下を仕切るような人間が、APIの質問なんかするわけないだろがw
しかも質問内容が、「今さらこんな質問すんな、初心者」的な内容だし。

639 :デフォルトの名無しさん:2005/12/23(金) 15:48:50
【ゴールデンレス】
  ∩ ・∀・)∩∩ ´∀`)∩  このレスを見た人はコピペでもいいので
   〉     _ノ 〉     _ノ10分以内に3つのスレへ貼り付けてください。
  ノ ノ  ノ  ノ ノ  ノそうすれば14日後好きな人から告白されるわ宝くじは当たるわ
  し´(_)   し´(_) 出世しまくるわ体の悪い所全部治るわでえらい事です


640 :616:2005/12/23(金) 15:58:59
>>638
うちは本来Unix屋なのでWinAPIの仕事は基本的に半端仕事しかやらない。
部下を仕切るといってもあくまでも現場の人間なので半端仕事は自分で片付けてしまう(そうせざるを得ない)。
半端仕事なんで、自宅でやっているから本その他はない。
参考にしたソースはWinExec()を使っていたので、どうせならCreateProcess()に書き換えておこうと思って質問した。

まぁ、想像力が足りないのはあんたの勝手だが。

641 :デフォルトの名無しさん:2005/12/23(金) 16:09:04
Unix屋が自分責任で自作コードを試さずに、2ちゃんに質問を書き込むとは恐れ入った。
WinExec()にはUnicode版がない。Unix屋がUnicode対応を気にする必要があるかも考えてみろ。

642 :616:2005/12/23(金) 16:18:42
>>641
いやだからさ、自分の想像力のなさで思い込むのは勝手だけど、それを前提にどんどん捏造しないでよ。
丁度いいネタだから質問したんであって2chの結果をそのままノーチェックで採用するなんて有り得ないし、
Unicode版を意識してないからこそ頓着しないで質問しているわけだし。
#そうか、WinExec()にはUnicode版がないから、Win32では使うなとMSDNに書かれているのか。参考になった。THXw

643 :デフォルトの名無しさん:2005/12/23(金) 16:55:06
やはりただのアフォだったか


644 :デフォルトの名無しさん:2005/12/23(金) 17:08:02
MSDNが意味ありげなのに意味不明な記述するから、
独自実装しなきゃいけないと思い込む人が出てしまう。罪なことだ。

645 :デフォルトの名無しさん:2005/12/23(金) 17:13:30
Internet ExplorerでF11を押したときのキオスクモードみたいなのを
実装するにはHWNDをどうしたらいいですか?

646 :637:2005/12/23(金) 20:13:25

解決しました。ありがとうございました。

647 :デフォルトの名無しさん:2005/12/23(金) 21:19:11
>>642
どの辺が「ちょうどいいネタ」なのか教えてはくれまいか?

648 :デフォルトの名無しさん:2005/12/23(金) 21:22:32
2chのすべてがおれにとってはちょうどいいネタ。

だが、事実

649 :616:2005/12/23(金) 21:42:37
>>647
・丁度MSDNを読んでて疑問に思った。
・スレ違いの粘着受けていて突っ込み入れたかったが自分もスレ違いになるのは避けたかった。
・結果更に面白くもない結果になったし、今はちょっと反省している。

650 :デフォルトの名無しさん:2005/12/23(金) 21:43:10
>>645 はスルーですか?

651 :デフォルトの名無しさん:2005/12/23(金) 22:06:38
スルーで

652 :デフォルトの名無しさん:2005/12/23(金) 22:10:57
Internet ExplorerでF11を押したときのキオスクモードみたいなのを
実装するにはHWNDをどうしたらいいですか?


653 :652:2005/12/23(金) 22:13:08
解決しました。

654 :デフォルトの名無しさん:2005/12/23(金) 22:14:06
Internet ExplorerでF11を押したときのキオスクモードみたいなのを
実装するにはHWNDをどうしたらいいですか?


655 :デフォルトの名無しさん:2005/12/23(金) 22:47:43
数学で階乗を求めたときのn!みたいなのを
実装するにはintをどうしたらいいですか?

656 :デフォルトの名無しさん:2005/12/23(金) 22:52:46
>>655
その質問はこのスレに相応しいと思いますか?

657 :デフォルトの名無しさん:2005/12/23(金) 23:51:47
おい!高卒のUnix屋に敬意を払えよ。

658 :デフォルトの名無しさん:2005/12/24(土) 00:31:42
鯖管は板違い

659 :わたこ:2005/12/24(土) 00:43:23
こんばんは、わたこと申します。
只今、あるアプリケーションが通信を行おうとすると、
端末ユーザにこのアプリが通信を行うことを許可するかどうかの確認をとるという、
PersonalFireWallのような機能のプログラムを作成したいと考えております。
パケットの監視自体はSOCKETやWinPCAP等を用いればできると思うのですが、
どのアプリケーションが行う通信であるか、という情報はパケットからは得られないと
思います。
そこで、通信が発生した際に、それがどのアプリのものであるかを返すような
APIは存在しないでしょうか。APIを用いる以外の方法でできる、という
情報をお持ちの方も、ご教授していただければ幸いです。
よろしくお願いいたします。


660 :デフォルトの名無しさん:2005/12/24(土) 00:47:41
WinXPでのアプリケーションで、
指定されたフォルダを一気に作るAPIを教えてください。
あと、そういったフォルダを作成する場合、そのアプリケーションが
アドミンで実行されていない場合、場所によっては作成できないんですよね?
よろしくおねがいします

661 :デフォルトの名無しさん:2005/12/24(土) 05:17:14
>>660
>指定されたフォルダを一気に作るAPIを教えてください。
MakeSureDirectoryPathExists

662 :デフォルトの名無しさん:2005/12/24(土) 09:50:13
>>661
660ではないが、これは知らなんだ。(1個づつCreateDirectoryしてた)
サンキュー!


663 :デフォルトの名無しさん:2005/12/24(土) 12:34:23
WindowsXPでタスクマネージャのようなプロセスのイメージ名が取れるAPIがあれば教えて頂けないでしょうか。
できればプロセスの実行元ファイルのパスなどでも良いのですが・・・

よろしくお願いします。

664 :デフォルトの名無しさん:2005/12/24(土) 12:42:56
ttp://dream.my-sv.net/upload/src/up0056.zip
>>663
これのソースでも読んでみろニダ

665 :デフォルトの名無しさん:2005/12/24(土) 12:44:48
Tool HelpかPSAPI
前者なら、CreateToolhelp32Snapshot()辺りから調べること。
後者ならEnumProcesses()あたりから。


666 :デフォルトの名無しさん:2005/12/24(土) 13:01:54
>>664-665
ありがとうございました!

667 :デフォルトの名無しさん:2005/12/24(土) 18:58:02
800KBのXMLファイルを読み込む自作ソフトは駄目ですかね??
使う側からの意見をまじめにお願いします。将来的には800KB*4個くらい使いますが、
読み込むのはそのうちの一つです。
初めはCSVでサイズも200KBだったのですが、データが本来ツリー構造だったので、XMLにしてみました。
ちなみに、MS-Cabinetで圧縮しようかと思ったのですが、実行時に毎回解凍するのもあれかな・・なんて


668 :デフォルトの名無しさん:2005/12/24(土) 19:17:11
いいよ

669 :デフォルトの名無しさん:2005/12/24(土) 19:22:46
>>667
別に気にしないよ

670 :デフォルトの名無しさん:2005/12/24(土) 19:33:50
>>667
ぶっちゃけどうでもいいよ

671 :デフォルトの名無しさん:2005/12/24(土) 20:01:08
とある外部の実行ファイルhoge.exeがポートXを開いて通信していることが分かっているときに,そのソケットIDを取得するAPIってありますか?

672 :デフォルトの名無しさん:2005/12/24(土) 20:03:14
ファイルサイズ自体は気にしないなあ
読み書きには気を使うけどね

特に長ったらしい文字列と格闘するのがだるい

673 :デフォルトの名無しさん:2005/12/24(土) 20:05:16
ありがとうございます。
ちなみに、エディタを搭載していて、強調表示する予約語とコード補完とパラメータ
補完に使用するメソッドの宣言のデータです。で、メソッドにオーバーロードされている関数が含まれていたので。
ちなみに、まだ、途中ですが、
http://homepage2.nifty.com/whale-whale/
こんな感じです。データベースに接続し、SQL文を実行して、その結果をグリッドに
表示します。
グリッドは固定列表示や列でのグループ化や列の位置を自由に調整できます。
まぁ、このソフトは社会人にしか需要がありませんが。



674 :デフォルトの名無しさん:2005/12/24(土) 20:09:46
>>673
下世話な事かもしれないが、この形で200k↑のファイルってオーバーフローしそうな気がするんだが大丈夫なのかね

675 :デフォルトの名無しさん:2005/12/24(土) 20:14:15
673です。
すみません、どこでオーバーフローするのでしょうか??
XMLは起動時に読み込んで、それを内部で検索しやすい形のデータ構造に変換しています。
で、コード補完時に、キャレット位置の直前のトークンから必要なメソッドだけを取り出して、
補完リストに表示させています。XMLも800KBとありますが半分以上はタグとか属性でサイズを
食っています。

676 :デフォルトの名無しさん:2005/12/24(土) 20:24:54
>>674
いやね、業務用っぽいが、こういうRDBって一点集中あんまりすると仕様変更時のリスクが上がるわけで
俗っぽい言い方すると柔軟性に欠けるんじゃないのかねと
普通はもうちょいデータばらして管理分散するもんじゃ?

677 :デフォルトの名無しさん:2005/12/24(土) 20:26:00
675だった、自分にレスしてどうするorz

678 :デフォルトの名無しさん:2005/12/24(土) 20:37:10
ははは。
675です。
おもいっきり、業務用です。XMLのデータはエディタで使う予約語とメソッドの宣言の
データだけです。それ以外のアプリケーションの設定データはiniファイルを使用しています。
エディタのそれ以外のデータも。
で、接続するデータベースのバージョンによって、予約語とかメソッドの数や種類が違うので、
その分XMLファイルを用意しようと思っています。

679 :デフォルトの名無しさん:2005/12/24(土) 20:56:26
DB版グループウェアみたいな感じにでもするのかね?

まあAPIの話から脱線してるしスレ違いだからROMに戻るよ

680 :デフォルトの名無しさん:2005/12/24(土) 22:23:05
WndProc に関してです……

WndProc 内に処理を書くのでは、どうしても諸情報がグローバル変数になっちゃうのが嫌で嫌で、
メッセージループ内で GetMessage した後 DispatchMessage する前にメッセージ処理させようとしたんですが……
WM_ACTIVATEAPP とかのメッセージが捕まりません。なんで〜。・゚・(ノД`)・゚・。

681 :デフォルトの名無しさん:2005/12/24(土) 22:50:56
>>680
そんなあなたにWTL♪

682 :デフォルトの名無しさん:2005/12/24(土) 23:04:55
CopyRectってあるけど、構造体のコピーって
ANSIで認められてないんだっけ?

683 :682:2005/12/24(土) 23:06:50
あ、いかん撤回。
書いたぞばから気が付いた、
CだけがCallerとは限らないんだ

684 :デフォルトの名無しさん:2005/12/24(土) 23:19:09
>>680
全てのメッセージがGetMessageで捕まるわけではない。
各ウィンドウプロシージャへ直接送られるメッセージもある。

ちなみに自分からメッセージを送るときには
前者ならPostMessageで、後者ではSendMessageを使う。

685 :デフォルトの名無しさん:2005/12/24(土) 23:19:41
>>680
確か、一部がコールバックのみにしか行かなかったからだと思う。
WM_PAINTやWM_COMMANDもうまく行かないはず。

コールバックで来たメッセージを記憶し、
それだけはグローバル変数(関数のstatic)を我慢して使い、
GetMessageした後の部分で調べて処理するのがいいかな。

686 :デフォルトの名無しさん:2005/12/24(土) 23:28:13
SendMessageですら送受信のスレッドが同一なら直接ウィンドウプロシージャが呼び出される

687 :デフォルトの名無しさん:2005/12/24(土) 23:32:19
あれだろ、メッセージキューを使うのと使わないメッセージの差

688 :デフォルトの名無しさん:2005/12/25(日) 00:38:52
マイクロソフトが定義してあるマクロの一覧が欲しいのですが
WEBでないでしょうか?

たとえば、
RECTとかLPRECT、LPCTSTRみたいなもの

689 :デフォルトの名無しさん:2005/12/25(日) 00:46:30
>>688
それ全部マクロではないよ。typedefが使われている。
それはともかくとして全部ではないけれど大部分はここに載っている。
http://msdn.microsoft.com/library/en-us/winprog/winprog/windows_data_types.asp?frame=true

690 :デフォルトの名無しさん:2005/12/25(日) 00:46:57
>>688
grep

691 :689:2005/12/25(日) 00:47:14
と思ったけどごめん、構造体の類は載っていないね。

692 :688:2005/12/25(日) 00:53:33
>>689
さんくす!これです。
マクロじゃなくて、型定義でしたね。

ありがとうございました。

693 :デフォルトの名無しさん:2005/12/25(日) 00:59:42
なぜこれを定義する必要があったんでしょうかね?
#define VOID void

voidでいいじゃん

694 :デフォルトの名無しさん:2005/12/25(日) 01:03:42
INT
UINT
BYTE
LONG
void    <---ショボスwwwwm9(^A^
WORD
DWORD

ってなるから

695 :デフォルトの名無しさん:2005/12/25(日) 01:09:31
>>693
たまたまC/C++ではtypedefされているだけでWin32APIを使うのはC/C++だけとは限らないから。

696 :デフォルトの名無しさん:2005/12/25(日) 01:16:51
1.ウインドウを作成
2.ツールバーコントロール(ToolbarWindow32)を付ける
3.ボタン以外の部分をダブルクリック

ダイアログウインドウらしき物が一瞬出て消えるけど、
これは何?

697 :デフォルトの名無しさん:2005/12/25(日) 01:31:58
API関数を自作することって出来るのですか?

698 :デフォルトの名無しさん:2005/12/25(日) 01:36:27
はい

699 :デフォルトの名無しさん:2005/12/25(日) 01:37:51
>>660
SHCreateDirectoryEx

700 :デフォルトの名無しさん:2005/12/25(日) 02:43:30
>>696
CCS_ADJUSTABLE

701 :デフォルトの名無しさん:2005/12/25(日) 09:14:50
>>694
でもWinAPIではINTよりintが多用されているという事実。

>>697
でもそれは何かのAPIであってもWinAPIではないよ、一応言っておくけど。

702 :デフォルトの名無しさん:2005/12/25(日) 13:16:06
WindowsXPスタイルで表示する場合にマニフェストファイルを使ったりしますよね?
それを使った場合で、トラックバーの範囲をハイライト表示する機能がMSのバグ?で表示されない問題があったと思いますが
何か対処ご存知の方いますか?
トラックバーだけWindowsXPスタイルを適用しない、という方法以外で。
よろしくおねがいします。



703 :デフォルトの名無しさん:2005/12/25(日) 14:10:42
>>702
スクロールバーに仕様変更する。
トラックバーはつまみが小さく感じることが多く使い勝手悪し。

704 :デフォルトの名無しさん:2005/12/25(日) 16:13:55
ウィンドウ右上の×ボタンを押した時の履歴をとりその情報を蓄積。
あっ…やべ、消しちまった。
って思ってメニューを選ぶと閉じたアプリケーションを再び開いてくれる
常駐ソフトを作るとしたら、核となる全てのウィンドウの×ボタンが押される
タイミングを監視する部分はどう実装すればいいと思われますか?


705 :デフォルトの名無しさん:2005/12/25(日) 17:10:23
それが核かよ

706 :デフォルトの名無しさん:2005/12/25(日) 18:00:15
>>705
頑張って作ってみてくれませんか

707 :デフォルトの名無しさん:2005/12/25(日) 18:07:15
間違って消して舞うことあるあるw。

708 :デフォルトの名無しさん:2005/12/25(日) 18:52:07
コントールボックスをダブルクリックで閉じたり、タスクバーから閉じたり
誰もが×ボタンで閉じるとは限らないからお前専用のアプリだな

709 :デフォルトの名無しさん:2005/12/25(日) 19:05:59
>>703
ありがとうございます。
スクロールバーって範囲をハイライトで表示できましたっけ?


710 :デフォルトの名無しさん:2005/12/25(日) 19:06:25
ウィンドウを復元するのは難しくないか?

閉じるふりして非表示にしておき、
一定時間経ったら undo する意思がないとみなして
本当に閉じる、っていうのなら可能かも。

711 :デフォルトの名無しさん:2005/12/25(日) 19:55:21
Alt + F4が好きだな

712 :デフォルトの名無しさん:2005/12/25(日) 20:15:17
> 閉じるふりして非表示にしておき、
> 一定時間経ったら undo する意思がないとみなして
> 本当に閉じる、っていうのなら可能かも。

その機能少しだけ試してみたいかも


>>708
SC_CLOSEをフックすることとかできないんだっけ。

713 :agesage:2005/12/25(日) 21:04:16
エクセルみたいな20×20の表を作り、その中にデータを入れていきたいんですけど
APIで作るのは、厳しいですか?また、どんな、APIを使えばいいですか?お願いします。

714 :デフォルトの名無しさん:2005/12/25(日) 21:07:33
>>713
EDITコントロール

715 :デフォルトの名無しさん:2005/12/25(日) 22:02:28
WinAPIではないけれどFlexGridコントロールはどう?

716 :agesage:2005/12/25(日) 22:51:38
>>714
>>715
ありがとうございました。
そして、すみませんでした。環境を書くのを忘れていました。
XP(HOME),VC2003 です。

エディットコントロールで、がんばってみます。


717 :デフォルトの名無しさん:2005/12/26(月) 01:25:35
VisualC++6.0を使っています。
リストボックスの項目をダブルクリックすると、その項目の文字列を取得するプログラムは
どうやって作ればいいのですか?
リストボックスをダブルクリックしたときのメッセージがLBN_DBLCLKというのはわかったのですが
そのときにどういうプログラムを組めばいいのかわかりません。
よろしくお願いします

718 :デフォルトの名無しさん:2005/12/26(月) 01:45:37
>>717
LB_GETTEXT
ttp://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/listboxes/listboxreference/listboxmessages/lb_gettext.asp

719 :デフォルトの名無しさん:2005/12/26(月) 01:54:21
>>718
英語読めません!!!

720 :デフォルトの名無しさん:2005/12/26(月) 02:01:23
>>719
んじゃ、語学からどうぞ。

721 :デフォルトの名無しさん:2005/12/26(月) 02:11:03
SendMessage(HWND,LB_GETTEXT,SendMessage(HWND,LB_GETCURSEL,0,0),(LPARAM)pText);
こんな感じですか?HWNDは、リストボックスのハンドルらしいですが、ウインドウプロシージャの
第一引数でいいんですか?あと、最後のpTextはchar *pText;と定義したものを使うのですか?

722 :デフォルトの名無しさん:2005/12/26(月) 07:56:45
>>713
DHTMLでtable使うのはどう?

723 :デフォルトの名無しさん:2005/12/26(月) 12:08:44
マルチモニタの環境で、1つのディスプレイだけを消灯させたいのですが、
省電力の設定が個別に出来ません。
両方消えてしまう・・・・
これは片方ずつ設定は可能なのでしょうか?


724 :デフォルトの名無しさん:2005/12/26(月) 12:37:50
>>723
スレ違い

725 :デフォルトの名無しさん:2005/12/26(月) 12:48:47
例えばTCHAR ptStr[32]=TEXT("642");として
これを数字に変換する場合、atoiで変換するのはまずいですよね..
その場合MSはどの様なAPIを提供してますか?

726 :デフォルトの名無しさん:2005/12/26(月) 12:51:09
>>725
VC/BCCは独自に<tchar.h>で_ttoiを用意している。
どうしてもWinAPIでやりたければ<shlwapi.h>にStrToIntがある。
C++ならstd::basic_istringstream<TCHAR>やboost::lexical_castも使える。

727 :デフォルトの名無しさん:2005/12/26(月) 12:52:31
>>726
ありがとうございます、勉強してきます

728 :デフォルトの名無しさん:2005/12/26(月) 14:30:54
Petzold の Unicode 入門の話で出てきた最後のサンプルプログラムで
VC2003 のプロジェクトのプロパティで プリプロセッサの定義の項目で UNICODE 識別子を入れたら
警告が表示されて、表示も変になりました。
しかし、 _UNICODE 識別子も追加するとメッセージボックスの表示は元に戻りました。
これは UNICODE 識別子によって WCHAR などの型が有効になるだけであって、
_UNICODE を定義しなければ関数のワイド文字版と解釈されないということでしょうか。

729 :デフォルトの名無しさん:2005/12/26(月) 17:02:53
新しいプロセスを作って、
そのプロセスが終了した時の戻り値を参照したいのですが、
どうすればいいですか?

環境は、Windows2000で、VC++.netです。

730 :デフォルトの名無しさん:2005/12/26(月) 17:17:47
>>729
つ [CreateProcess(), GetExitCodeProcess()]

731 :デフォルトの名無しさん:2005/12/26(月) 17:26:08
>>721
pTextに十分な(LB_GETTEXTLENで得られる以上の)領域を確保していればいい。

732 :デフォルトの名無しさん:2005/12/26(月) 17:37:54
>>725
strtol
wstrtol
というものもある

733 :729:2005/12/26(月) 17:55:14
>>730
どうもです。検索語すら思いつかなかったので助かりました。

734 :デフォルトの名無しさん:2005/12/26(月) 18:08:25
CreateWindowExをつかってタブを貼り付けたんですがXPスタイルにするには、
どうすればいいんですか?
環境はVC++6.0です。
暇があったらでいいです。

735 :デフォルトの名無しさん:2005/12/26(月) 18:59:41
>>734
manifestとか

736 :デフォルトの名無しさん:2005/12/26(月) 20:11:36
>>728
UNICODE が Win32用で
_UNICODE が CRT用

737 :デフォルトの名無しさん:2005/12/26(月) 20:15:00
すんません。
MFCのCSocketクラスを使って、TCP/IPのサーバを作ってしまいました。
たまたま、下記URLの記事を見てしまって、ブルーになってます。
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/csocket.html

普通は、どうやって作るのが普通なんですか?


738 :728:2005/12/26(月) 20:17:37
>>736
どうもありがとうございます。
納得できました。

739 :デフォルトの名無しさん:2005/12/26(月) 20:34:18
>>737
API直

740 :デフォルトの名無しさん:2005/12/26(月) 20:40:39
>>739
もしかして、
LoadLibrary("winsock.dll");
ってやって、直叩きですか?

当りなら、どこかお勧めのサンプルコードのURLとか・・お願いします。


741 :デフォルトの名無しさん:2005/12/26(月) 20:47:10
おまいさんはGDIを直接使うのに
LoadLibrary("gdi32.dll");
からはじめる人かね?

742 :デフォルトの名無しさん:2005/12/26(月) 21:15:34
>>741
なんとなくわかった。サンクス
↓をヒントにしようと思う
http://wisdom.sakura.ne.jp/system/winapi/winsock/winSock1.html

これで、UNIX系で普通にやってるみたいにlistenしてacceptして、
forkする代わりにスレッドでも起こせばよいのかな


743 :デフォルトの名無しさん:2005/12/26(月) 21:22:28
すまん、一点疑問が・・・

GetMessageでイベント待つのと、acceptでコネクション待つのを同時に待ちたいのだけど・・
どうするんだ?
unix系なら、FDがあれば、selectで自分で同期とれるけど・・CSocketでblackboxだった部分を
実装せにゃあかんのかな?

・・・一晩悩んで見ます。


744 :デフォルトの名無しさん:2005/12/26(月) 21:29:24
>>737
よく分からんが、これなんかどうよ?
ttp://x68000.q-e-d.net/~68user/net/

745 :デフォルトの名無しさん:2005/12/26(月) 21:34:02
>743
WSAEventSelectしてMsgWaitForMultipleObjectするか、
WSAAsyncSelectしてウインドウメッセージで飛ばすか。

746 :デフォルトの名無しさん:2005/12/26(月) 22:04:19
Visual Basicのようにダイアログボックスがメインなプログラムを
C++でするにはどうすればいいんですか?
どのサイトでも最初に空のウィンドウを作ってて
ダイアログボックスを主にする方法が解らないんです。

747 :デフォルトの名無しさん:2005/12/26(月) 22:09:09
WinMainからDialogBox

748 :デフォルトの名無しさん:2005/12/26(月) 22:19:52
空のウィンドウは作らなくてもいいって事ですね。
しかし、DialogBoxParam()で引数の親ウィンドウハンドルをNULLにすると表示されません…。

749 :デフォルトの名無しさん:2005/12/26(月) 22:27:36
・ShowWindow
・WS_VISIBLE

750 :デフォルトの名無しさん:2005/12/27(火) 11:49:38
WriteProfileStringでのINIファイルへの書込みって
スレッド間の排他、プロセス間の排他等の面倒は見てくれてますよね?



751 :デフォルトの名無しさん:2005/12/27(火) 12:13:36
質問聞いてください。オーナードローリストビューを勉強してるのですが、
どうしてもちらつきが気になります。WM_ERASEGNDもやってみたのですが効果があまりありません。
WM_DRAWITEM内で消去の意味で一度、白で塗って書き込みしてるのは分かるのですが・・。
どなたかオーナードロリストビューでちらつきをなくす解決方法分かりませんか??よろしくお願いします。

752 :デフォルトの名無しさん:2005/12/27(火) 12:57:21
聞くだけ

753 :デフォルトの名無しさん:2005/12/27(火) 13:12:07
背景を塗る行為がちらつきの原因

754 :デフォルトの名無しさん:2005/12/27(火) 13:15:30
>>753
白で塗って書き込みしてるのが原因はわかるのですが。。
現在、ダブルバッファで作成してみてます。

755 :デフォルトの名無しさん:2005/12/27(火) 13:17:54
オーナードローリストビューでダブルバッファでちらつき抑えられるんじゃないかと考えて
るんですが、作られた猛者いますかね?

756 :デフォルトの名無しさん:2005/12/27(火) 13:22:05
つ[WS_CLIPCHILDREN]

757 :デフォルトの名無しさん:2005/12/27(火) 13:28:57
>>756
変化ないです。。
やっぱダブルバッファしかないのか。。
ダブルバッファの場合、やっぱリストビューのサイズのビットマップ作成して
WM_PAINTで転送という形でしょうか??

758 :デフォルトの名無しさん:2005/12/27(火) 16:15:29
メッセージの整数値がわかっていて
それがなんのメッセージ(WM_なんたらかんたら,とか)かを
調べる方法はありますか?

759 :デフォルトの名無しさん:2005/12/27(火) 16:27:43
Win32API使うプログラムなら大部分がやってる

760 :デフォルトの名無しさん:2005/12/27(火) 16:37:13
>>758
windows.hの中身を見る
ファイルを開くのも面倒だというなら、vc統合環境からgrepで探す

メッセージの数値がわかっているというのは、ひょっとして
何が届いたのかをブレークポイントで止めて調べてるんじゃないだろうな
そういうことがしたいならspyを使いなさい

それともspyのようなツールを作っているなら、vcのサンプル内に
{ 0x0400, "WM_USER" } のようなデータが列挙されたソースがあるはず(うろ覚え)
もしあればコピーして流用

761 :デフォルトの名無しさん:2005/12/27(火) 16:52:49
>>760
spy++ を起動しながら開発環境の debug モードで
でプログラムを走らすと,
かなりの確率で開発環境がかたまるんですよ

それと,windows.h そのものには
メッセージは定義されていないですね

762 :デフォルトの名無しさん:2005/12/27(火) 17:06:17
winuser.h

763 :デフォルトの名無しさん:2005/12/27(火) 17:09:35
windows.h になかったらないと思うのが変

764 :デフォルトの名無しさん:2005/12/27(火) 17:23:06
>>744-745
レスありがとう。
↓の過去ログ読むだけで十分解決できそうなんで、読み直して出直しまつ・・
http://pc8.2ch.net/test/read.cgi/tech/1128088448/


765 :デフォルトの名無しさん:2005/12/27(火) 17:23:45
>>744-745
レスありがとう。
↓の過去ログ読むだけで十分解決できそうなんで、読み直して出直しまつ・・
http://pc8.2ch.net/test/read.cgi/tech/1128088448/


766 :デフォルトの名無しさん:2005/12/27(火) 19:47:58
ウォッチでuMsg,wmとかやればVCがウマいこと表示してくれた気がする

767 :デフォルトの名無しさん:2005/12/27(火) 20:50:25
>761
それはマルチスレッドのデバッグではないかい?

768 :デフォルトの名無しさん:2005/12/27(火) 23:40:58
今日は久々に発狂したかと思った。

C:\Meadow\1.15\bin>cat > test.cmd
meadow foo.txt
type foo.txt

C:\Meadow\1.15\bin>test.cmd

C:\Meadow\1.15\bin>meadow foo.txt

C:\Meadow\1.15\bin>type foo.txt
指定されたファイルが見つかりません

C:\Meadow\1.15\bin>type foo.txt
なぜじゃぁぁぁ


#
つまり Win32用emacsの一つである Meadow は
終了時に flush してなくて一秒くらい立ってから
ファイルの実態に反映してるのです。
脳が溶けたので寝ます。


769 :デフォルトの名無しさん:2005/12/27(火) 23:48:56
>>768
WritePrivateProfileString でつくった .ini ファイルを
その直後に ReadFile してもまだフラッシュされてないから読めない、
というのは意味がわかるけど、768はどういう理由なんだろう。
OS がうまくやってくれそうに思うんだけど。

770 :デフォルトの名無しさん:2005/12/27(火) 23:49:48
男は脳が溶けるぐらいでないとな。

771 :デフォルトの名無しさん:2005/12/28(水) 06:38:28
>>768
ここはお前の日記帳じゃないんだ(ry

772 :デフォルトの名無しさん:2005/12/28(水) 07:39:54
maedowのサブシステムがWindowsだからというオチではなくて?

773 :デフォルトの名無しさん:2005/12/28(水) 10:11:30
文字コードから、半角か全角を調べる方法を教えて下さい
IsDBCSLeadByteを試しましたが、これだと半角カタカナが2バイト文字
と判断され、使えませんでした

774 :デフォルトの名無しさん:2005/12/28(水) 10:16:38
文字コードで違う

775 :773:2005/12/28(水) 10:24:04
失礼しました。
Unicodeにて判定したいのです。
「ア」ですと、0xFF71なんですが、これを半角と判定させたいのです。
(マルチバイトでコンパイルすると、0xB1でIsDBCSLeadByte()使っても半角判定は可能なのですが・・・)

776 :デフォルトの名無しさん:2005/12/28(水) 10:32:21
1番それらしいのはGetStringTypeExだが、これではそのような全角半角の判定はできなさそうだ。

777 :デフォルトの名無しさん:2005/12/28(水) 10:37:09
>>775
Unicodeで0xff??なら半角なんじゃないの?

778 :デフォルトの名無しさん:2005/12/28(水) 10:44:06
>>776
その関数の戻り値C3_HALFWIDTHをチェックする事で出来ました
ありがとうございました

>>775
0xFF21が「A」で全角なんです・・・

779 :デフォルトの名無しさん:2005/12/28(水) 11:54:40
んじゃ、0xff80-0xffffで。

780 :776:2005/12/28(水) 13:17:42
うお、C3_HALFWIDTHは気付かなかった、すまん。

781 :デフォルトの名無しさん:2005/12/28(水) 13:18:52
しかし、UNICODEで全角だ半角だってのもなあ。

782 :デフォルトの名無しさん:2005/12/28(水) 13:53:20
まぁ、文句は全角英数なんていらんものを作った人に言ってくれ。

783 :デフォルトの名無しさん:2005/12/28(水) 13:55:35
半角カナはまだしもなんで全角英数だったんだろうね

784 :デフォルトの名無しさん:2005/12/28(水) 14:02:02
それはX0201だけで文章書くためだけど、
キリル文字が入ってる意味がわからん。

785 :デフォルトの名無しさん:2005/12/28(水) 14:22:39
SetMapModeでマップモードをDCに適応するのですが、
確かにMM_LOENGLISH,MM_HIMETRICなどの定数をセットした場合にはyの値は上方向を指します。
しかしMM_TEXTを指定しますと、MSDNによるとやはりMM_LOENGLISHなどと同様に

各論理単位を、1 デバイスピクセルへ変換します。x の正の値は右方向、y の正の値は上方向を指します。

とあるのですが、私の環境ですとyの正の値は下方向のままで設定されます。
環境はBCC5.5.1なのですが・・・

786 :デフォルトの名無しさん:2005/12/28(水) 14:33:48
翻訳の間違い。
よくあることだ。

787 :デフォルトの名無しさん:2005/12/28(水) 14:59:17
MM_TEXTってデフォルトのやつだから左上原点だろ

788 :デフォルトの名無しさん:2005/12/28(水) 15:34:41
質問です。
GDIPLUSを使ってプログラムを組んでいるのですが、
Graphics* pGrp;
にnewで作って、まぁ画像やら矩形やらは自由に扱えるようになりました。

次に文字列に挑戦してみたところ、Fontの引数にhFnotが使えることからそれを採用することに。
その時HDCも必要なので pGrp->GetHDC() してみました。

ところがそうすると、次からpGrpが使えなくなってしまうのです。
エラーが出るのではなく、画像も矩形も、そのGraphicsを通して描画命令をしてもまったく反映されなくなります。

原因をしぼりこんだところ
pGrp->GetHDC();
とこれを呼び出すだけでpGrpが死んでしまうようです。
名前からしてみればとてもそんな命令だとは思えないのですが、これは正しい動作なのでしょうか。
単純にHDCを取得したいだけなのですが…。





789 :デフォルトの名無しさん:2005/12/28(水) 15:39:27
ReleaseHDCしてる?

790 :デフォルトの名無しさん:2005/12/28(水) 15:57:50
あ、それですorz

ありがとうございました。

Get系つくるとき
GetHDC(){return m_hDC;}
って実装するという固定観念のせいで、解放が必要という考えに及びませんでした。

たしかにWindowsAPIもともとのやつは、GetDCに対して必ずReleaseが必要ですね。

791 :デフォルトの名無しさん:2005/12/28(水) 16:32:54
CreateFontについて質問。
どのフォントを選んでも
「高さ12と指定しているのに、測ると13ドット以上ある」ものばかりなんですが、微調整の方法はあるでしょうか。
高さを12ドットと指定したからには、0〜11ドット目までにしか描画してほしくないのです。

792 :デフォルトの名無しさん:2005/12/28(水) 16:40:39
ピクセル数指定できたっけ?

793 :デフォルトの名無しさん:2005/12/28(水) 16:48:58
heightの単位を間違ってるんだろ。


794 :デフォルトの名無しさん:2005/12/28(水) 16:49:44
SetMode(hDC, MM_TEXT);

795 :デフォルトの名無しさん:2005/12/28(水) 17:16:47
nHeight
フォントの文字セルまたは文字の高さを論理単位で指定します。
文字の高さ(em height としても知られている)とは、
文字セルの高さから内部レディング(アクセント記号などのためのスペース)の高さを引いたものです。
フォントマッパーは、nHeight パラメータに指定された値を次のように処理します。 値 処理
>0 指定された値をデバイス単位に変換し、それを利用可能な各フォントのセルの高さと比較します。
0 フォントを探す際に、既定の高さを使います。
<0 指定された値をデバイス単位に変換し、その絶対値を利用可能な各フォントの文字の高さと比較します。


どちらの高さの比較を行う場合にも、フォントマッパーは、要求されたサイズを超えない最大のフォントを探します。

このマッピングは、フォントが初めて使用されたときに行われます。

MM_TEXT マッピングモードでは、次の式を利用して、ポイント数からフォントの高さへの変換ができます。

nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);



796 :デフォルトの名無しさん:2005/12/28(水) 17:38:12
皆様、細かくありがとうございます。
nHeightを -nHeightにすることで期待通りの動作となりました。

797 :デフォルトの名無しさん:2005/12/28(水) 21:25:43
こんにちは。
CreatFileMappingで、プロセス間のデータ共有をしたいのですが、
Windows2000,XPなどでは、同じオブジェクトにアクセスする場合でも、
それぞれのプロセスごとにCreateFileMaaping 及び、 MapViewOfFileを
しなければならず、返される領域のアドレスも異なるとききました。
 もし、同じプロセスで、CloseHandleで閉じる前に、同じ領域(オブジェクト)
に対してCreateFileMapping 及び、MapViewOfFile 2度行ったばあい、得られる
ハンドルや、領域のアドレスは同じになるのでしょうか?

798 :デフォルトの名無しさん:2005/12/28(水) 21:33:23
試してみればわかるやろ

799 :デフォルトの名無しさん:2005/12/28(水) 21:55:57
98しか持っていないに300ペリカ

800 :デフォルトの名無しさん:2005/12/28(水) 22:43:00
Advanced Windowsに書いてありそうな気がする。なかったらすまん。

801 :デフォルトの名無しさん:2005/12/28(水) 23:04:12
別プロセスの仮想アドレスが同じになろうが別になろうが、どうだっていいんではないかな

802 :797:2005/12/28(水) 23:06:27
>>798 XPなので試そうと思えば試せました。すみません。

>>800
ネットで調べながらやってたんですが、断片的な情報でわからない部分が
多かったので質問しました。
とりあえず、その本を読んでみようと思います。
ありがとうございました。

803 :797:2005/12/28(水) 23:17:39
>>801

はい、別プロセスについてはそう理解しているのですが、
同じプロセスないで、複数回宣言したら同じアドレスが帰ってくるの
だろうかと思ったもので。798 さんの言うとおり、試してみようと思います。
ありがとうございます。



804 :デフォルトの名無しさん:2005/12/29(木) 03:16:38
>>791
8の倍数とかからずれると、サイズが上下した気がする。
それか、背景部分を透過して表示すれば、すこし領域を削れるかも。

805 :デフォルトの名無しさん:2005/12/29(木) 09:35:56
質問です。
ダイアログボックスに対し、自前のウインドウをWS_CHILDではりつけています。
このウインドウでWM_KEYDOWNを処理したいのですが、メッセージ自体が飛んできてくれないようです。
何かWSを指定しなければならないのでしょうか?

806 :デフォルトの名無しさん:2005/12/29(木) 09:51:12
>>805
WM_GETDLGCODE ?

807 :デフォルトの名無しさん:2005/12/29(木) 10:04:29

メッセージを受け取りたいProcに
case WM_GETDLGCODE:
 return DLGC_WANTARROWS;
という2行を足しただけで、魔法のようにうまく行きました。
ありがとうございました!

808 :デフォルトの名無しさん:2005/12/29(木) 12:39:04
夢を壊すようで申し訳ないが、それは魔法でもなんでもない。
たんなる仕様どおりの動きだ。

809 :デフォルトの名無しさん:2005/12/29(木) 12:40:53
(´・ω・`)

810 :デフォルトの名無しさん:2005/12/29(木) 13:04:32
試しにMFCでダイアログクラスにOnGetDlgCode()を追加してみたけど落ちてこない。
Spy++で見てもさっぱり。
そのメッセージは一体いつ来るんだろ。

811 :デフォルトの名無しさん:2005/12/29(木) 13:30:07
>>810
Dialog本体 ではなく Dialog上に張られたコントロールへMSG


812 :810:2005/12/29(木) 13:56:28
>>811
なーるほど、来た来た。THX。
うーむ、Dialogにはっつけた、TabCtrlで切り替えるDialogのフォーカス制御に使えるかと思ったのは甘かったか。

813 :デフォルトの名無しさん:2005/12/30(金) 19:55:15
すみません。質問です。
::EndPaint(in_hWnd,&ps);の :: の意味は何でしょうか?

814 :デフォルトの名無しさん:2005/12/30(金) 19:58:52
>>813
C++のもので通称はスコープ解決演算子。
その使い方はEndPaintが特にどこの名前空間・クラスにも属していない名前だということを示すためのもの。

815 :デフォルトの名無しさん:2005/12/30(金) 20:17:01
MFC使わなければそういうことで悩まなくて済む

816 :デフォルトの名無しさん:2005/12/30(金) 21:26:09
普通にMFC使ってたらEndPaintの前にそんな邪魔なものつけないけどな

817 :デフォルトの名無しさん:2005/12/30(金) 22:00:53
>>815はクラスやネームスペースを知らぬのか


818 :デフォルトの名無しさん:2005/12/30(金) 22:02:03
VC++使ってると、コード入力支援機能をいかすためだけに::を入れる。

819 :デフォルトの名無しさん:2005/12/30(金) 22:39:56
BCB使ってると::入れてコード補完やるとエラー吐くからSetParentとか名前が衝突する物以外入れない

820 :デフォルトの名無しさん:2005/12/30(金) 22:45:20
マイクロソフトの移植性排除の作戦

821 :デフォルトの名無しさん:2005/12/31(土) 14:39:13
ファイル名(パスつき)の検証をしたいのですが、
パスがあるか、とか、権限があるか、とか禁止文字を使っていないか
をトータルで判断するためのAPIありませんか?
いったんfopenで開けたらOKみたいなのでもよいのですが、専用のAPIがあればそれを使いたいので
お願いします。


822 :デフォルトの名無しさん:2005/12/31(土) 15:12:34
ありますよ

823 :デフォルトの名無しさん:2005/12/31(土) 15:13:58
>>822
定番レス乙 w

824 :デフォルトの名無しさん:2005/12/31(土) 16:32:45
>>814
C++の文法でしたか、難しいです(><)
レス有難うございます

825 :デフォルトの名無しさん:2005/12/31(土) 16:36:15
C++は簡単だよ
クラスの高度な機能以外

826 :デフォルトの名無しさん:2005/12/31(土) 17:37:37
親が最小化したときに、子(ツールバーとか、メニューとか)に
メッセージは飛びますか?


827 :デフォルトの名無しさん:2005/12/31(土) 18:13:52
クラスの高度な機能って?くわしく

828 :デフォルトの名無しさん:2005/12/31(土) 19:51:52
Internet ExplorerでF11を押したときのキオスクモードみたいなのを
実装するにはHWNDをどうしたらいいですか?

829 :デフォルトの名無しさん:2005/12/31(土) 20:57:31
828はスルーで

830 :デフォルトの名無しさん:2005/12/31(土) 22:43:23
>>821
shell API(path* で始まるapi群)とかは?

831 :デフォルトの名無しさん:2006/01/01(日) 11:33:53
C言語とSDK or C++とMFC っていうのをよく効くけどさ。
C++とSDKな俺は馬鹿?

MFCはなんか使いにくいから、自分で勝手にクラス作成してやってる。
ステータスバークラスとか、スクロールバークラスとか、ウィンドウ作成クラスとか。

832 :デフォルトの名無しさん:2006/01/01(日) 12:09:06
>>831
API仕様変更の度に自分の手を動かす暇人ならOK

833 :デフォルトの名無しさん:2006/01/01(日) 12:10:08
>>831
つ ATL/WTL

834 :デフォルトの名無しさん:2006/01/01(日) 13:14:50
API仕様変更についてはあまり考えなくてもいいと思うよ。
それは「C++とSDK」に限ったことじゃない。
「C言語とSDK」でも起こるし。
MFC使えば別だろうけど。

835 :デフォルトの名無しさん:2006/01/01(日) 13:48:47
>>832
組んだのが動かなくなるような大幅変更入ったのっていつの話?

836 :デフォルトの名無しさん:2006/01/01(日) 15:19:01
win95時代に作ったのがそのまんま動くしコンパイルもできるなあ
もう10年前か・・・

837 :デフォルトの名無しさん:2006/01/01(日) 15:34:42
大して進化してないですね

838 :デフォルトの名無しさん:2006/01/01(日) 15:37:05
だいぶAPIは増えたけどね

839 :デフォルトの名無しさん:2006/01/01(日) 15:47:29
恐るべき互換性と

840 :デフォルトの名無しさん:2006/01/01(日) 16:24:52
だがその互換性を保つために複雑化しているのも事実。

841 :デフォルトの名無しさん:2006/01/01(日) 16:31:00
>マイクロソフト セキュリティ アドバイザリ (912840)
>Graphics Rendering Engine の脆弱性によりコードが実行される可能性がある
>公開日: 2005年12月29日 | 最終更新日: 2005年12月31日

この脆弱性はプログラミングで GDI+ を使わなければ生じないのでしょうか?


842 :デフォルトの名無しさん:2006/01/01(日) 16:34:11
>>837
進化と互換性は別物だ

843 :デフォルトの名無しさん:2006/01/01(日) 17:06:02
>>830
ありがとうございます。
そうします。これからさっそくぐぐってみます。


844 :デフォルトの名無しさん:2006/01/01(日) 17:15:51
>>831
ここにも一人いますよ?

845 :デフォルトの名無しさん:2006/01/01(日) 21:50:32
>>831
もう一人。

846 :デフォルトの名無しさん:2006/01/01(日) 21:57:55
開くダイヤログ
教えてちょ

サンプルも

847 :デフォルトの名無しさん:2006/01/01(日) 22:02:46
>>846
これやるから帰れ
つGetOpenFileName

848 :デフォルトの名無しさん:2006/01/02(月) 02:03:28
CreateProcessとかも

849 :デフォルトの名無しさん:2006/01/02(月) 02:36:34
それのなにがわからんのだw?

850 :デフォルトの名無しさん:2006/01/02(月) 02:45:08
_splitpathも

851 :デフォルトの名無しさん:2006/01/02(月) 05:23:20
それのなにがわからんのだw?

852 :デフォルトの名無しさん:2006/01/02(月) 07:28:58
>>831
漏れもそう
あとときどき D + SDK とか Ruby + SDK とかで使っている

853 :デフォルトの名無しさん:2006/01/02(月) 07:34:03
去れ、変態オナニーコーダ共


854 :・∀・)っ-●○◎- ◆Pu/ODYSSEY :2006/01/02(月) 08:11:25
STL+WTLのヘタレ参上

855 :デフォルトの名無しさん:2006/01/02(月) 12:33:32
どこにでも沸くなぁ……

856 :デフォルトの名無しさん:2006/01/03(火) 11:29:53
OSが何なのか調べるAPI、又はマクロがありましたら教えてください。

857 :デフォルトの名無しさん:2006/01/03(火) 11:57:29
OSがなんなのかって、Windowsしかねぇじゃねぇか
どのWindowsかってんならバージョン調べな

858 :857:2006/01/03(火) 11:58:34
あと、マクロってのはバイナリを生成したら関係なくなるもんだからな

859 :856:2006/01/03(火) 12:04:58
ありがとうございます。
APIとしては、GetVersionEx辺りでいけそうみたいです。
マクロは、もしかしたらwindows.h辺りに、OS_ME、OS_XPとかと
宣言されているのかなとも思っていました。


860 :デフォルトの名無しさん:2006/01/03(火) 12:14:13
それはあったとしても、APIで取得した値と比較するためのものだろう
windows.hだけでOSバージョンを識別させようと思ったら、
現存するサポートOSのそれぞれに対応したデータを用意しないといけなくなるんだぞ?
そんな非合理的な事をキミはするのか?

861 :856:2006/01/03(火) 12:55:12
なるほど。深くは考えていませんでした。

アイコンへのドロップの所で、XPだと"が入ってしまうようで、
その対策でOSの違いを調べる必要が出てきました。
これを機会に、バージョンへの対応を強化したいと思います。

862 :デフォルトの名無しさん:2006/01/03(火) 13:11:53
>>861
XPなら〜とかそんな対症療法的な対応すんなよ…

863 :デフォルトの名無しさん:2006/01/03(火) 13:38:04
>>861
Shell APIに"があるか判定するやつや、"を取り除くのがあるから
それを使え。

864 :デフォルトの名無しさん:2006/01/03(火) 14:12:45
>>862
何理想論言ってるの?
OSによって挙動が異なることはあるから仕方ないだろ。

865 :デフォルトの名無しさん:2006/01/03(火) 14:18:50
>>864
┐(´ー`)┌

866 :デフォルトの名無しさん:2006/01/03(火) 14:44:40
OSが何だろうが、"が有るか無いかは判定すべきものですが何か?


867 :デフォルトの名無しさん:2006/01/03(火) 14:56:41
なんで " が?パス名にスペースがあるの?

868 :デフォルトの名無しさん:2006/01/03(火) 15:03:29
マイドキュメントの中にあったりするんじゃねぇの

869 :デフォルトの名無しさん:2006/01/03(火) 15:07:13
>>866
勝手に決めんな、禿げ

870 :デフォルトの名無しさん:2006/01/03(火) 15:08:31
失敬な。
我が頭髪に不足はない。

871 :デフォルトの名無しさん:2006/01/03(火) 15:23:34
OSが何だろうが、"が有るか無いかは判定すべきものですが何か?

872 :デフォルトの名無しさん:2006/01/03(火) 15:29:28
はいはい、ワロスワロス。次っ

873 :・∀・)っ-●○◎- ◆Pu/ODYSSEY :2006/01/03(火) 17:03:41
エクスプローラのアドレス欄に
"C:\Documents and Setting\名前\My Documents\"
とタイプしてIEが立ち上がったときのもの悲しさ

874 :デフォルトの名無しさん:2006/01/03(火) 17:46:31
>>831

Windows 3.1 の頃から C+SDK(最近は C++ + SDK) だが;
大幅に直したことはない。

もともとメッセージクラッカーを使っていたので。。。

プリンタ出力だけは Escape に直しましたけど。。

875 :・∀・)っ-●○◎- ◆Pu/ODYSSEY :2006/01/03(火) 18:00:41
メッセージクラッカー使わずにテーブルに展開してループ回す香具師もいるよね。

ATL/WTLのUpdateUIマップが丁度テーブルだが

876 :856:2006/01/03(火) 18:13:00
XPか非XPかで判断するか、
""が出来るか出来ないかで判断するかという事ですか。

始めは、出来る理由が前者でだと思っていたんですけど、
>>867さんのスペースがあるのが原因の様な気もします。

98系もXPも、同じようにデスクトップ経由のファイルをドロップしたんですけど、
XPの方は、その前のパスにスペース付きのがありました。

後者の方でやってみたいと思います。

877 :862:2006/01/03(火) 18:26:33
>>864
ハァ?

>>876
だからXPに限った話じゃないって

878 :デフォルトの名無しさん:2006/01/03(火) 19:02:43
>>877
もういいよ。引っ込め。

879 :デフォルトの名無しさん:2006/01/03(火) 19:19:29
>>878
おまえもな

880 :デフォルトの名無しさん:2006/01/03(火) 19:21:22
>>864
>>863

881 :856:2006/01/03(火) 21:40:19
>>877
98/Meの方でも、フォルダかファイルに
スペースを付けたら""が付きました。

cdでカレデレを変える時も、
スペースがある時に""が必要なのと同じですよね。

882 :デフォルトの名無しさん:2006/01/04(水) 01:16:33
ウィンドウクラスを登録するとき、
WNDCLASS構造体のhbrBackgroundには
GetSysColorBrush()のブラシを指定してはいけない。

とMSDNには書いてあるんですが、実際やってみても何の問題も起きません。
なぜシステムのブラシを指定してはいけないのでしょうか。
本当にマズイんでしょうか。

http://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_getsyscolorbrush.asp

もしマズイ場合、自前でダイアログみたいな背景色のウィンドウは
作成できないってことになると思うんですが…。

どうかよろしくお願いします。

883 :・∀・)っ-●○◎- ◆Pu/ODYSSEY :2006/01/04(水) 01:21:19
XPで検証したら何の問題もなかったけど旧OSなら問題出たってケースは俺は何度も遭遇してるから
素直に従っておくのが吉


884 :デフォルトの名無しさん:2006/01/04(水) 01:34:31
>>882
MSDNにかいてあるけど、ウィンドウクラスが解放されるときにブラシをシステムが自動的に
削除するんで(削除してはいけない)システムブラシを使うなということ。


885 :デフォルトの名無しさん:2006/01/04(水) 01:35:56
GDI+についてなんですが、
アルファブレンドされないようにする事はできますか?
既に色のある部分へアルファ0で上書きして、一部を透明にしたいのです…

886 :デフォルトの名無しさん:2006/01/04(水) 01:38:53
>>882
ていうか、COLOR_3DFACE使いたかったら
(HBRUSH)(COLOR_3DFACE + 1);でいいと思うんだが。

887 :デフォルトの名無しさん:2006/01/04(水) 02:05:15
>>883-884
ありがとうございます。
ブラシのリソース開放はOS任せなんですね。
じゃ、CreateSolidBrush(GetSysColor(COLOR_3DCOLOR))にしてみます。

>>886
アドバイスありがとうございます。
でも、+1している理由がわからない…

888 :デフォルトの名無しさん:2006/01/04(水) 02:17:50
色の定義が0からだから、0だとNULLと区別付かなくなるからかと。

889 :デフォルトの名無しさん:2006/01/04(水) 08:50:58
>>882
お前の目は節穴か?
そのURLにきちんとGetSysColorBrushをWNDCLASSのhbrBackgroundに使ってはいけない理由が書いてある。

890 :デフォルトの名無しさん:2006/01/04(水) 09:24:19
むしろCreateSolidBrushの代わりにGetSysColorBrushを使えって書いてあるけど
これは何?

891 :デフォルトの名無しさん:2006/01/04(水) 09:33:07
>>888
定義が0からってのは合ってるが、NULLと区別がつかなくなるからじゃないし、75点ってとこだな
定数は0から使えるが、ハンドルは0は使えない、決して区別がつくつかないではない

892 :デフォルトの名無しさん:2006/01/04(水) 09:53:12
>>890
GetSysColorBrush使えって書いてある次の行にもろ理由が書いてあるんだが?

893 :デフォルトの名無しさん:2006/01/04(水) 09:58:00
>>892
ああ、上の行の文とは関係ないのねスマン

894 :デフォルトの名無しさん:2006/01/04(水) 10:08:56
>>882の出してるMSDNのページの解説のとこは、それぞれ相互に関係の無い4つの事柄について説明してるからな
キミが気にしたところは、システムカラーのブラシを使う時は新しく作るんじゃなくて、
リソースの節約のために、キャッシュのブラシを返すGetSysColorBlushを使えってこと

895 :890:2006/01/04(水) 10:17:18
>>894
重ねてサンクス。で、hbrBackgroundには使っちゃあならねぇと。

896 :デフォルトの名無しさん:2006/01/04(水) 11:39:05
しかしGetSysColorBrushを使わなくても、
システムカラーの定数に1を加えたものをHBRUSH型にキャストしたものは、
ウィンドウクラスだけでなく結構どこでも使えたような気がする。

897 :デフォルトの名無しさん:2006/01/04(水) 13:02:15
リソース節約というか、アプリ起動中に色が変更された場合、
CreateSolidBrushだと自分で色の変更しなおす必要があるな。

898 :デフォルトの名無しさん:2006/01/04(水) 18:42:46
Java のアプレットに対して、外部ツール(VC++で作成)からコンボボックスの操作および
ボタンの押下を制御したいと思っていますが、うまくいきません。
ボタンが押されたときにアプレットのウィンドウに送られるメッセージをSPYで監視して
それらしいメッセージを送ってみたのですが、期待する動作をしません。
コンボボックスの操作は出来たのですが。。。
何か考え方が間違っているのでしょうか?

899 :デフォルトの名無しさん:2006/01/04(水) 18:49:21
Yes

900 :デフォルトの名無しさん:2006/01/04(水) 19:43:21
手段と目的が入れ替わってそうな予感

901 :898:2006/01/04(水) 19:54:44
>>899-900
むむむ 間違っておりますか。

アプレットのボタンを外部から押すには
どのような方法を取ればよいのでしょうか?
ボタンにメッセージを送る??

902 :デフォルトの名無しさん:2006/01/04(水) 22:12:45
おそろしいことするな。。。

903 :デフォルトの名無しさん:2006/01/04(水) 23:01:41
Post か Send でLBUTTONDOWNじゃ阿寒のか?

904 :・∀・)っ-●○◎- ◆Pu/ODYSSEY :2006/01/04(水) 23:07:07
IEで動いてるんならIEコントロール叩かないといけない希ガス。ごめんテキトーなこと言って。

905 :デフォルトの名無しさん:2006/01/05(木) 01:13:01 ?
アプリケーションの終了を、それがいかなる方法であってもハンドルしたいのですが・・・。

atexitとSetConsoleCtrlHandler、
これらでもハンドル出来ない終了はあり得ますか?(停電とかは無しで)
そして、それらをハンドルできるAPIはありませんか?

906 :・∀・)っ-●○◎- ◆Pu/ODYSSEY :2006/01/05(木) 01:23:32
WriteProcessMemory使ってハンドラを書き込んでやるとか

この技、OutlookExpressのメールのパスワード忘れちゃって復活させるためにお世話になった

907 :デフォルトの名無しさん:2006/01/05(木) 01:37:20
>>905
abortとか?
その他構造化例外との絡みは何かあるかもしれない。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdndeepc/htm/deep051099.asp

908 :905:2006/01/05(木) 03:22:20
>>906-907
ありがとうございました。

909 :905:2006/01/05(木) 04:38:27
すみません。また質問させていただきます。

グローバル変数に、あるデータと、そのデータを操作する関数があるとします。
その関数の実行中(つまりデータの操作中)に、シグナルが発生して
シグナルハンドラもその関数を呼び出したとしたら、
データが壊れてしまうと思われるのですが、これを防ぐにはどうすればいいのでしょうか?

UNIXとかだとsigprocmaskとかそれっぽいのが在る様ですが・・・。

910 :デフォルトの名無しさん:2006/01/05(木) 05:17:12
>>909
クリティカルセクション

911 :905:2006/01/05(木) 05:47:57
うは、シグナルハンドラってスレッドで実行されるんですね・・・。知らなかった。
ご返答ありがとうございました!

912 :898:2006/01/06(金) 04:29:04
>>902-904
いろいろと試してみた結果、ボタンに対して SetFocus() して
WM_KEYDOWN, WM_KEYUP(VK_SPACE) をPost したら
期待する動作になりました。
試してはおりませんが、LBUTTONDOWN, LBUTTONUP でも
うまくいくのではないかと思われます。
有難う御座いました。

913 :デフォルトの名無しさん:2006/01/06(金) 10:58:50
マウスカーソルの位置を取得したいのですが、WM_MOUSEMOVEでは自分のウィンドウ内でしか位置を取得出来ません。
自分のウィンドウの外でもマウスカーソルの位置を取得するにはどうしたらいいですか?

914 :デフォルトの名無しさん:2006/01/06(金) 11:10:31
>>913
貴様は「マウス 位置 取得 API」でググることも出来ないほどバカなのか?

915 :デフォルトの名無しさん:2006/01/06(金) 12:35:07
setcapture


916 :デフォルトの名無しさん:2006/01/06(金) 15:10:10
VBのPrinter.ScaleWidth、Printer.ScaleHeightと同じ値を
プリンタのデバイスコンテキストから所得したいのですが
どうすればいいのでしょうか?

917 :デフォルトの名無しさん:2006/01/06(金) 15:38:05
>>913
GetCursorPos() と言うそのままズバリのAPIが、
何故見つけられないのか、小一時間問いつめたい気分だ。

918 :デフォルトの名無しさん:2006/01/06(金) 16:18:06
>>917
そういう問題じゃないし、すでに答えが出てるわけだが

919 :デフォルトの名無しさん:2006/01/06(金) 17:51:46
まさか、915が答えなのか?

920 :デフォルトの名無しさん:2006/01/06(金) 18:08:18
作為的に知りたいのか
システムからの通知で受動的に知りたいのか?
WM_MOUSEMOVEって書いてるところをみると後者なんだろね。
なら(ry


921 :デフォルトの名無しさん:2006/01/06(金) 20:09:36
>>915はなにをいっているのだ?

922 :デフォルトの名無しさん:2006/01/06(金) 20:32:20
914=917=921なのか?
まっとうな用途ならSetCapture以外ありえないだろ

>>913
その時のウィンドウ外カーソル位置を知りたいだけならGetCursorPos。
まともなカーソル監視目的なら、SetCaptureしてからWM_MOUSEMOVE。
単にクライアント領域以外なら、WM_NCMOUSEMOVE。
特定他アプリのカーソル位置ならフック。
力技で、別スレッドにて常にGetCursorPos。

923 :デフォルトの名無しさん:2006/01/06(金) 22:07:11
>まっとうな用途ならSetCapture以外ありえないだろ

これはギャグで言っているのか?

924 :922:2006/01/06(金) 22:31:57
>>923
まだ暴れ足りないのか。質問スレなのに、この程度で優越感に浸る>>914だけあるな。

SetCaptureで賄える範囲外で、自ウィンドウ外のカーソル位置が必要なアプリなんて、
ほぼ特殊用途だろうが。それとも「まっとう」の言葉尻捕まえてグダグダ言い出すのかw

925 :デフォルトの名無しさん:2006/01/06(金) 22:42:44
Win32でSetCaptureが役に立つと思っているやつがいることが驚きだ。

926 :デフォルトの名無しさん:2006/01/06(金) 23:09:20
どんどん論点ずらしていくのが笑えるな

927 :デフォルトの名無しさん:2006/01/06(金) 23:10:17
SetCapture が駄目といっている奴は、その根拠と何が最適なのかも書け。

928 :デフォルトの名無しさん:2006/01/06(金) 23:12:19
その根拠:
  ぬるぽ
何が最適なのか:
  ぬるぽ

929 :デフォルトの名無しさん:2006/01/06(金) 23:20:11
>>928
ワロタ

930 :928:2006/01/06(金) 23:36:41
今どきぬるぽで笑われるとは思わなんだ・・・orz

931 :デフォルトの名無しさん :2006/01/06(金) 23:54:33
>>914
ウェブ マウス 位置 取得 API の検索結果 約 52,600 件中 1 - 10 件目 (0.21 秒)

GetCursorPos(現在のマウスの位置座標を取得する)
マウスの位置座標を取得する 今回のサンプルソースをダウンロードする方は下記の「
ダウンロード」を! ... API関数のGetCursorPos を使用します。 サンプルではコマンド
ボタンを押したときに位置座標を取得する処理です。 ...
homepage1.nifty.com/MADIA/vb/API/GetCursorPos.htm - 3k - キャッシュ - 関連ページ


932 :デフォルトの名無しさん:2006/01/07(土) 00:38:45
> コマンドボタンを押したとき
ボタンを押した位置知ってどうするん?
マウス以外でボタン押すんかw
それに自分のウィンドウにしか適用できないし
ウェブって何よ、ウェブって?

933 :デフォルトの名無しさん:2006/01/07(土) 00:41:41
スペースキーでボタン押しちゃいかんのか、ってのだけはつっこまさせてくれ

934 :932:2006/01/07(土) 00:49:27
別にスペースでなくてもボタンに割り当てた文字でもいいけど
一体どうゆうアプリなんだよw

935 :デフォルトの名無しさん:2006/01/07(土) 00:53:01
Enter キーでボタン押しちゃいかんのか

936 :デフォルトの名無しさん:2006/01/07(土) 01:33:54
>>934
単に取得のタイミングをボタン押下にしただけだろ。
タイマーで定期的に取得してもいいだろうが、
サンプルとして取得のタイミングをユーザ任意にして、
取得したことがわかるようにと言うだけ。

そもそも、サンプルに深い意味を求めてどうする?

937 :!914:2006/01/07(土) 01:40:43
>>924
> SetCaptureで賄える範囲外で、自ウィンドウ外のカーソル位置が必要なアプリなんて、
> ほぼ特殊用途だろうが。

自ウィンドウ外のカーソル位置は、クライアント座標系より、
スクリーン座標系で必要になるケースの方が多そうな気もするが、どうよ?


そもそも、用途の特殊性はともかく、
SetCapture()がまっとうなケースか、
GetCursorPos()がまっとうなケースかは、
アプリケーションの内容次第では?


# もっとも、>>913は座標系すら理解してなさそうだがな(w

938 :like 913:2006/01/07(土) 01:49:43
デカルト座標系ですか?

939 :デフォルトの名無しさん:2006/01/07(土) 02:19:09
キーボードからWM_CONTEXTMENUが上がってきた時
マウスがどこにいるかを調べるのにGetCursorPos使う。
TrackPopupMenuはスクリーン座標だ。
SetCaptureは、ドラッグ系だな

940 :デフォルトの名無しさん:2006/01/07(土) 04:43:53
とりあえず経験の少ない素人がレスしていることは良く分かった


941 :デフォルトの名無しさん:2006/01/07(土) 07:24:22
ドラッグ&ドロップしたとき、ウィンドウのZの位置が
トップでないときにトップにしたいんですけど、やり方を教えてください。

SetWindowPosで、第2引数に
HWND_TOPとHWND_TOPMOSTでやったんですけど、
前者は、解説どおりトップにきませんし、
後者は、トップに来ますが、常にトップのモードになってしまいます。

942 :・∀・)っ-●○◎- ◆Pu/ODYSSEY :2006/01/07(土) 07:36:32
http://home.att.ne.jp/yellow/hide_n/programming/tips06.html

943 :941:2006/01/07(土) 07:40:29
なるほど、分かりました。
ありがとうございます。

944 :デフォルトの名無しさん:2006/01/07(土) 11:29:14
>>939
前提が「自ウィンドウ外のカーソル位置」だからねぇ

945 :デフォルトの名無しさん:2006/01/07(土) 12:57:42
ボタンが旧スタイルになってしまいます
XPのボタンを作るにはどうしたらいいのか教えてください

946 :・∀・)っ-●○◎- ◆Pu/ODYSSEY :2006/01/07(土) 12:59:56
manifestファイルをEXEに組み込むかフォルダ直下に置く

947 :デフォルトの名無しさん:2006/01/07(土) 13:05:24
マウス操作をエミュレートしたいってのと、>>945はFAQだな。
テンプレに入れてもいいぐらい。

948 :デフォルトの名無しさん:2006/01/07(土) 13:29:47
ありがとうございます

949 :デフォルトの名無しさん:2006/01/07(土) 15:05:05
>>925
で、何が言いたかったわけ?
SetCapture使ってる俺にとっては気になる話なんだが・・・

950 :デフォルトの名無しさん:2006/01/07(土) 16:31:35
質問です。

ThumbSense
ttp://www.csl.sony.co.jp/person/rekimoto/tsense/indexj.html
と同様に、タッチパッドの情報を取得して小細工するソフトを作りたいと思ってます。
Synaptics用のSDKは見つかったのですが
ttp://www.synaptics.com/support/dev_support.cfm
ALPS社のglidepoint用のSDKが見つかりません(自分のノートPCはこちらなもので…)。
どこかで入手できますでしょうか?


951 :デフォルトの名無しさん:2006/01/07(土) 16:47:30
http://science4.2ch.net/test/read.cgi/denki/1127248203/

952 :デフォルトの名無しさん:2006/01/07(土) 17:14:45
>>950
ALPSに聞けよ

953 :デフォルトの名無しさん:2006/01/07(土) 17:51:20
ちょっと質問させて下さい。
Advanced Windows を買ったのですが、類似本(?)としてプログラミングWindows第5版というのがありました。
猫でもの本で情報が足りなかったので2冊目として前者を購入したのですが、
プログラミングWindows第5版と内容は被ってくるんでしょうか?

954 :デフォルトの名無しさん:2006/01/07(土) 18:05:48
>>953
それはこのスレで聞くべき内容か?

推薦図書/必読書のためのスレッド PART28
http://pc8.2ch.net/test/read.cgi/tech/1133629787/
【くそ!】 買ってはいけない技術本 【金かえせ】
http://pc8.2ch.net/test/read.cgi/tech/1118944895/
悪書/詐欺まがい/間違いだらけな書籍・参考書
http://pc8.2ch.net/test/read.cgi/tech/1090723093/

955 :デフォルトの名無しさん:2006/01/07(土) 18:15:07
>>954
WinAPIはここが一番詳しそうじゃん

956 :デフォルトの名無しさん:2006/01/07(土) 18:16:38
忙しいならスルーしてくれて良いですけど

957 :デフォルトの名無しさん:2006/01/07(土) 18:32:57
>>955
Win32APIの事を聞きたいわけじゃなく、書籍の内容の重複について聞きたいんだろ?

958 :デフォルトの名無しさん:2006/01/07(土) 18:35:44
>>941-943
SetForegroundWindowを実行するアプリケーションのウィンドウが
アクティブな状態ならば、その小細工は必要ないよ。

>>953
そもそも、君はAdvanced Windowsを買ったのが間違い。
猫でもで学習しているレベルなら、プログラミングWindowsを買うべきだった。
Advanced Windowsは、ビルゲイツよりもWindowsに詳しくなりたい人が買う本。

959 :デフォルトの名無しさん:2006/01/07(土) 18:46:40
>>957
その書籍の中身は両方WinAPIについて書いてあるようだが?w
>>958
無駄な買い物したかもしれません。2冊目に選んだのは迂闊でした。

960 :デフォルトの名無しさん:2006/01/07(土) 18:59:38
>>959
負け惜しみはみっともないよ

961 :デフォルトの名無しさん:2006/01/07(土) 19:08:03
>>960
厨房乙

962 :デフォルトの名無しさん:2006/01/07(土) 19:13:02
>>961
>>960

963 :デフォルトの名無しさん:2006/01/07(土) 19:34:02
スレ違い房が粋がるなよ
ADvanced Windowsを抱きしめたままトイレに流されて氏ね

964 :デフォルトの名無しさん:2006/01/07(土) 19:44:55
>スレ違い房
房!w
房!!ww
房!!!www

>ADvanced Windows
A「D」vanced Windows!w
A「D」vanced Windows!!ww
A「D」vanced Windows!!!www

965 :デフォルトの名無しさん:2006/01/07(土) 19:49:27
冬休みってもうすぐ終わりだよな?

966 :デフォルトの名無しさん:2006/01/07(土) 19:50:23
自然数 N が与えられたとき、
1 から N までの数字を N 個並べる組み合わせをすべて
列挙するプログラムは C で書くとどうなりますか?

例えば N = 3 のとき
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
となるようにです。
よろしくおながいします。


967 :デフォルトの名無しさん:2006/01/07(土) 19:52:28
printf(
"1 2 3 \n"
"1 3 2 \n"
"2 1 3 \n"
"2 3 1 \n"
"3 1 2 \n"
"3 2 1 \n"
);


968 :デフォルトの名無しさん:2006/01/07(土) 19:52:44
>>966
マルチやめよう。

969 :デフォルトの名無しさん:2006/01/07(土) 19:53:28
>>966
Pascalの宿題スレの回答では不満かね

970 :デフォルトの名無しさん:2006/01/07(土) 19:54:47
しかもここAPIスレだし

971 :デフォルトの名無しさん:2006/01/07(土) 19:59:16
>>966
http://pc8.2ch.net/test/read.cgi/tech/1135077848/874-875
まるちやめれ

972 :デフォルトの名無しさん:2006/01/07(土) 20:09:45
for(int x1 = 0; x1 < N; x1++){
  for(int x2 = 0; x2 < N; x2++){
    if(x1 == x2)continue;
    for(int x3 = 0; x3 < N; x3++){
      if((x1 == x3) || (x2 == x3))continue;
      for(int x4 = 0; x4 < N; x4++){
        if((x1 == x4) || (x2 == x4) || (x3 == x4))continue;
          ・・中略・・
              for(int xn = 0; xn < N; xn++){
                if((x1 == xn) || (x2 == xn) || (x3 == xn) || ・・中略・・ || (xn-1 == xn))continue;
                // 組み合わせ確定
              }
      }
    }
  }
}

973 :デフォルトの名無しさん:2006/01/07(土) 20:19:10
>>952
それもそうだ、聞いてみます。

974 :デフォルトの名無しさん:2006/01/07(土) 20:24:10
>>966
スレ違いかつマルチかつ脳味噌空っぽ?

975 :デフォルトの名無しさん:2006/01/07(土) 20:30:00
>>966

#include<stdio.h>

int main()
{
int N;

while(scanf("%d",&N)){
if(N==3){
printf("1 2 3\n1 3 2\n2 1 3\n2 3 1\n3 1 2\n3 2 1\n");
break;
}else{
puts("お願いだから「3」を入力して下さい。");
}
}

return 0;
}

976 :デフォルトの名無しさん:2006/01/07(土) 20:43:22
#include<stdio.h>

int main()
{
int N;

while(scanf("%d",&N)){
if(N==3){
printf("1\n");
break;
}else{
puts("お願いだから「1」を入力して下さい。");
}
}

return 0;
}

の方が楽でいいな

977 :デフォルトの名無しさん:2006/01/07(土) 20:58:16
apiでやらなきゃだめなんだからTextOut使うかLineToで数字書けよ

978 :デフォルトの名無しさん:2006/01/07(土) 21:06:28
じゃあよろ

979 :デフォルトの名無しさん:2006/01/07(土) 21:19:37
AllocConsoleつかえばいいんじゃね?

980 :デフォルトの名無しさん:2006/01/07(土) 21:44:40
>LineToで数字

くわしく

981 :デフォルトの名無しさん:2006/01/07(土) 21:48:40
>980
電卓とかの数字を知らんのか?

982 :デフォルトの名無しさん:2006/01/07(土) 22:05:36
C系言語でゲーム作りたいんだけどどのあたりを重点的に勉強すればいいんだろ

983 :デフォルトの名無しさん:2006/01/07(土) 22:09:27
だからここはAPIスレだってば

984 :デフォルトの名無しさん:2006/01/07(土) 22:35:46
>>982
どのあたりとか言ってる時点でダメ
ゲームこそ機械の全ての能力を使い尽くす最もプログラミングが難しい分野だと思うぞ。
パズルゲームだと比較的簡単だけど。

985 :デフォルトの名無しさん:2006/01/07(土) 22:56:32
>>981
くわしく・・・

986 :デフォルトの名無しさん:2006/01/07(土) 23:04:31
MoveTo(..., 0, 10);
LineTo(..., 10, 0);
LineTo(..., 10, 100);

これで「1」が描けるね

987 :デフォルトの名無しさん:2006/01/07(土) 23:15:42
電卓云々は?

988 :デフォルトの名無しさん:2006/01/07(土) 23:16:55
電卓のボタンに1とか2とか書いて有るじゃん。

989 :デフォルトの名無しさん:2006/01/07(土) 23:29:50
ウィンドウズ付属の?へーそうなんや
確かに色ついてるね

990 :デフォルトの名無しさん:2006/01/08(日) 00:06:51
Windowsの電卓のボタン?
どう見てもフォントです
ふぉんとにありがとうございました

991 :デフォルトの名無しさん:2006/01/08(日) 00:49:00
ボリューム操作ってどうやればいいんですか?

992 :デフォルトの名無しさん:2006/01/08(日) 03:03:18
>>990
ワロタ

993 :デフォルトの名無しさん:2006/01/08(日) 06:32:40


994 :デフォルトの名無しさん:2006/01/08(日) 06:33:40
うめ

995 :デフォルトの名無しさん:2006/01/08(日) 06:34:47
産め

996 :デフォルトの名無しさん:2006/01/08(日) 07:40:18
Win32API質問箱 Build39
http://pc8.2ch.net/test/read.cgi/tech/1136673250/

997 :デフォルトの名無しさん:2006/01/08(日) 08:40:26


998 :デフォルトの名無しさん:2006/01/08(日) 10:46:04
>>981 >>990
で、どっちなの?

999 :デフォルトの名無しさん:2006/01/08(日) 11:07:19
999だったら新しい世界が待ってる

1000 :デフォルトの名無しさん:2006/01/08(日) 11:10:45
1000マンコ

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

235 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)