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

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

Win32API質問箱 Build19

1 :デフォルトの名無しさん:04/05/16 17:52
スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
ただし、最新スレくらいは質問する前に検索してくれ。というかしろ。

過去スレなどのリンクはたぶん>>2-5くらい。


2 :デフォルトの名無しさん:04/05/16 17:53
- 過去スレ
Build18:http://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:http://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:http://pc2.2ch.net/test/read.cgi/tech/1073830065/
Build15:http://pc2.2ch.net/test/read.cgi/tech/1069339866/
Build14:http://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:http://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:http://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html
(★は「いやー ごめんなさい。」に巻き込まれた模様)

- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com

3 :デフォルトの名無しさん:04/05/16 18:15


4 :デフォルトの名無しさん:04/05/16 18:44
Win32 API入門
http://black.sakura.ne.jp/~third/system/winapi/win.html
WIN32 Programming
http://www7.plala.or.jp/keny01/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/index.html
WindowsSDK入門
http://kerochan.no-ip.com/vcsdk/letsprog/letsprog-index.htm

5 :デフォルトの名無しさん:04/05/16 21:58
すんません、質問。
今下記のようにしてMCIでwavを開いてるんですが、これだと実行時にwavを読みます。

//hoge.c
static MCI_OPEN_PARMSgst_mop;
gst_mop.dwCallback = (DWORD)g_hWnd;
gst_mop.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
gst_mop.lpstrElementName = "wav/sentaku.wav";
iErr = mciSendCommand(0 , MCI_OPEN , MCI_OPEN_TYPE |
  MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT , (DWORD)&gst_mop);

実行時読みじゃなくてリソースにしたいんですけど、どうやったらいいんでしょう?
試しに下記のようなことをしてみましたがだめでした。

//hoge.rc
WAV_SENTAKU WAVE "wav/sentaku.wav"

//hoge.c
gst_mop.lpstrElementName = "WAV_SENTAKU";

6 :デフォルトの名無しさん:04/05/17 02:23
MCIはファイルから読み込む仕様です

7 :デフォルトの名無しさん:04/05/17 02:39
>>6
なるほど、どうりでぐぐっても見つからないわけだ。
ありがとうございました。

8 :デフォルトの名無しさん:04/05/17 12:50
Win9xでexeのアイコンにファイルを吸わせた場合はちゃんと動作するのに
Win2kだと同じやり方では誤動作してしまうプログラムがあるので、GetCommandLineで
調べたときに9x系と同じ渡し方をする、橋渡し的なプログラムを作ってみたのですが
どうも失敗します。

実際に調べた結果、Windows98ではexeアイコンにファイルを落とすと、

    二重引用符で囲ったexe名+半角スペース+8.3形式表記のファイル名

のようになると判断していますが、この認識ではまずいのでしょうか?

9 :デフォルトの名無しさん:04/05/17 13:02
>>8
まずいです。
というか、DnDでの起動しか考慮に入れていない?
他のアプリケーションから起動されることもあるかも知れないし。

で、解決策としては、長いファイル名も短いファイル名も受け取れるようにしておく。


10 :デフォルトの名無しさん:04/05/17 13:03
INIファイル内で正式なコメントの書き方ってありますか?
今は
; Ident=Value
とかやるとたまたまIdentで取得できなくなることを利用しているんですが。

11 :デフォルトの名無しさん:04/05/17 13:43
>>9
多分有名だと思うので書きますが、そのプログラムはRarUtyです。
win98を使っていたときは「送る」にショートカットを置いていて、ファイルの
右クリックメニューから送るとそのファイルが選択されるのですが、
windows2000、xpだと必ずそのフォルダの最初のファイルが選択されてしまうので、
どうにかして回避しようと思いました。
そこで、SendToに置くショートカットをRarUty本体のものではなく、
今回自作したプログラムのものにして、自作プログラムで整形したコマンドライン
引数を与え、間接的に実行することでこの不具合を避けられると考えたのです。

すいません、説明が長くなりました。
あと、書きながら思いついたのですが、RarUtyの元であるVBに
NT系だとコマンドラインまわりがうまく動作しない、などという仕様があるような
気もしました。

12 :デフォルトの名無しさん:04/05/17 14:24
>>10
たまたまじゃなくて、それが正しいコメント記述方法かと

GetPrivateProfileSection()の解説部分にも
「セミコロン(;)で始まるコメント行は〜」なんて書かれてるし

13 :デフォルトの名無しさん:04/05/18 00:28
.NET FrameworkクラスライブラリのControlPaint.DrawButtonに相当する
Win32APIってありますか?

14 :デフォルトの名無しさん:04/05/18 00:44
DrawFrameControl

15 :デフォルトの名無しさん:04/05/18 00:56
質問の仕方になんかジェネレーションギャップを感じたよ・・・

16 :デフォルトの名無しさん:04/05/18 00:57
.NETの足音が聞こえてくるよ

17 :デフォルトの名無しさん:04/05/18 01:04
longhornが出たらな。

18 :デフォルトの名無しさん:04/05/18 01:07
したばったするぅなよぉ
どとねっとが、くぅるぜ

19 :デフォルトの名無しさん:04/05/18 08:10
nainai16.NET

20 :デフォルトの名無しさん:04/05/18 09:31
OSは、WIN2000で、現在起動している他のプロセスの
読み込んでいるDLLを知る方法はないでしょうか?。


21 :デフォルトの名無しさん:04/05/18 09:38
Dependency Walker

22 :デフォルトの名無しさん:04/05/18 09:46
>21
ありがとうございます。このプログラムのようなことを実現しようとすると
どんなAPIを使用すればいいのでしょうか?

23 :デフォルトの名無しさん:04/05/18 09:53
>>20
ms-help://MS.PSDK.1033/perfmon/base/enumerating_all_modules_for_a_process.htm

24 :デフォルトの名無しさん:04/05/18 11:10
メニューのオーナードローに挑戦しています。
通常の項目のオーナードローには成功したのですが、
MF_OWNERDRAWとMF_POPUPを同時に指定した項目だけは、
WM_DRAWITEMが来ないようで描画に失敗します。
MF_POPUPのオーナードローは出来ないのでしょうか?


25 :デフォルトの名無しさん:04/05/18 14:45
カレットかスクロールバーを移動させないようにするには
どうしたらいいんでしょうか。



26 :デフォルトの名無しさん:04/05/18 15:04
>>24
少なくとも俺のところではできてます。
>>25

何をやりたいのやら?

27 :デフォルトの名無しさん:04/05/18 15:05
"Default"フォントというフォントがありますが、
WinXPだと、これはどこで設定されるんでしょうか?
APIから読んだり書いたりも出来ますか?

28 :デフォルトの名無しさん:04/05/18 15:38
>>27
「"Default"フォント」なんてあるか?
Exploereなどに使われてるフォントと言う意味でなら、何かしら
指定されてるのがあると思うが、そんな名前のフォントは無いと思う。

少なくとも俺のマシンのfontsフォルダには無いな。

29 :デフォルトの名無しさん:04/05/18 16:40
>>26
リッチテキストの処理を行ってるんですが、
Rtfコードを適応すると、スクロールもカレット位置も先頭に戻ってしまうので
入力するたびにテキスト内ががくがくになってしまうんです。
それを防ぎたいんですが、何か方法はないかなと。



30 :デフォルトの名無しさん:04/05/18 17:54
MSゴシックとかはまず入ってる。
配布可能なフォント使うか元から入ってるの使うしかない。


31 :デフォルトの名無しさん:04/05/18 19:43
hwndの参照先であるウィンドウオブジェクトとは何ですか?
ウィンドウの実体とのことですけど、構造体のようなインスタンスでしょうか
WNDCLASS構造体のウィンドウクラスとは全然違うものですよね?

32 :デフォルトの名無しさん:04/05/18 19:48
>>31
ウィンドウはWindowsが内部で管理しているが、その管理コードとでも思っておけ。

33 :デフォルトの名無しさん:04/05/18 20:11
>>32
レスありがとうございます。
ちなみにウィンドウクラスとは、そのWindowsが内部で管理しているウィンドウに
初期設定の値を与えるための情報を詰め込んだ構造体と考えて間違いはありませんか?

34 :デフォルトの名無しさん:04/05/18 21:07
漏れのレベルはコンソール用のちゃっちいプログラムを書ける程度なんだけど、
試しにいろいろなとこに載ってるWin32APIを使ったソースをコンパイルしようとすると
必ずエラーが出る。コンパイラはBCCなんだけど、どうしてだろう?
みんな普通にコンパイルできてるん?

35 :デフォルトの名無しさん:04/05/18 21:09
できてるよ!

36 :デフォルトの名無しさん:04/05/18 21:18
おおかたコンパイルオプションの -W を忘れているんだろ。

37 :デフォルトの名無しさん:04/05/18 22:44
誘導されてきました。

vc++でwindowsプログラミングをちょっとかじってみております。
質問なのですが、EditBoxを貼り付けたDialogBoxを作って、
EditBoxにフォーカスがあるときに打ち込まれたキーを取得したいのですがよくわかりません
DialogBoxのコールバック関数内でWM_COMMANDを拾うと、
LOWORD(wParam)にIDC_EDITBOXとかが入っていて
HIWORD(wParam)にWM_KEYDOWNが入ってるみたいなのですが、
どのキーが押下されたかっていう情報は取得できませんか?
EditBoxのコールバック関数を作ってWM取る、とかでしょうか

38 :デフォルトの名無しさん:04/05/18 22:51
>>33
「ちなみに」という言葉の使い方はその場合、間違い。

39 :デフォルトの名無しさん:04/05/18 23:32
ん?-Wってウィンドウズアプリのとき(WinMainあるとき)だろ?
>>34はウィンドウズアプリを作りたいのか、
それともwindowsAPIをちょこっと利用してるだけのコンソールアプリを作りたいのか。

つか、そういう使い方ってできるもんなん?やったことないからわからん。


40 :デフォルトの名無しさん:04/05/18 23:44
ちゃんとインポートライブラリリンクするなりしてればコンソールアプリでも普通にAPI使える。
つぅか、使えなかったらなにも出来んぞ。

41 :デフォルトの名無しさん:04/05/19 00:03
>>40
stdio.h
があればコンソールでも何とかなる。


42 :デフォルトの名無しさん:04/05/19 04:15
>>37
>HIWORD(wParam)にWM_KEYDOWNが入ってるみたいなのですが、
HIWORD(wParam)に入ってるのはEN_じゃないか?

>EditBoxのコールバック関数を作ってWM取る、とかでしょうか
これでいいと思うよ。

43 :デフォルトの名無しさん:04/05/19 11:07
CreateしたMutexって別にReleaseしなくても良いんでしたっけ。

というのは、何かこまめにReleaseしているおかげか、
WaitForSingleObjectが効いてないみたい。

44 :デフォルトの名無しさん:04/05/19 11:38
Mutexってなんか動作分かり難いというかデバッグし難いな。

CRITICAL_SECTION に書き換えた方が読みやすいし誤動作し難い?

45 :デフォルトの名無しさん:04/05/19 11:39
Release するかしないかは君のプログラムが決めることだけども、
Release しないと他のスレッドがその mutex を所有することが
できないんだから、Release しなくてもいい状況というのは
普通はない。


46 :デフォルトの名無しさん:04/05/19 11:47
consoleアプリでWin32APIを使うには、GetModuleHandleで
WinMain引数のhInstanceに相当するハンドルが得られる。


47 :37:04/05/19 12:41
>>42
レスサンクスです。調べたらEN_〜みたいですね。

あとリソースエディタで貼り付けたEditBoxのコールバック関数
(ウインドウプロシージャと言うべきか)はどう登録するのでしょう?
そのEditBoxだけCreateWindow/RegisterClassExで貼り付けるんでしょうか?

48 :デフォルトの名無しさん:04/05/19 12:53
サンクスでつ>>45

ついでに、MutexとCryticalSectionとどちらか教えて下さい。

49 :デフォルトの名無しさん:04/05/19 12:59
Mutexはグローバルなカーネルオブジェクトだからプロセス間での排他に
使えるが遅い
CriticalSectionはそうではないから同一プロセス内のスレッド間排他が
主な役目になるが軽量で高速


50 :デフォルトの名無しさん:04/05/19 13:00
CriticalSectionはWin9xを視野に入れてしまうとタイムアウトができないのがつらいな。
プロセス間同期は必要ないことも多いが。

51 :デフォルトの名無しさん:04/05/19 13:03
>>47
サブクラス化で検索。

52 :デフォルトの名無しさん:04/05/19 13:14
実はMutexの一番良く見る例の一つが多重起動防止だったり
Cランタイム他のスレッド間同期処理に実際に使われてるのは
CriticalSectionのほうですな。

53 :デフォルトの名無しさん:04/05/19 16:04
そこで、メータードセクション

セマフォのように使え、プロセス間同期も出来、それでいて高速。
ただしMSDNそのままの実装だと同一スレッドから複数回 Enter できない罠

54 :37:04/05/19 16:12
>>51
なんとかできそうッス
キーワードもらえて助かりました

55 :デフォルトの名無しさん:04/05/19 20:37
>>49 ミューテックスって遅かったんデスカ!

スレッド間の排他制御にずっと名無しのミューテックス
使ってたんだけどやめたほうがいいかなぁ。

56 :デフォルトの名無しさん:04/05/19 22:18
俺はWaitFor〜Objectが使いやすくて好きだな。
それと、Set/GetDlgItemFloatって使えないの?
グローバルネームスペースには存在するんだけど、
実態が存在しないらしくエラー出るし、
なんかリンクする必要あるのかと思ってMSDN探してみたけど無いし
ぐぐっても0件だし・・・

57 :デフォルトの名無しさん:04/05/19 23:45
Web上に転がっているMutexのサンプルはしばしば間違っていて抜け穴が存在する。

58 :デフォルトの名無しさん:04/05/20 08:56
まぁ、ここでも読んで同期オブジェクトに関する知識を深めろ

短時間でできる汎用の同期オブジェクト
http://www.microsoft.com/japan/msdn/library/ja/jpdndllpro/htm/metrsect.asp?frame=true

↑のソースコード(元記事)
http://msdn.microsoft.com/library/en-us/dndllpro/html/msdn_metrsect.asp?frame=true

59 :デフォルトの名無しさん:04/05/20 11:34
>>56
確かにInteliSenceで並んでるけど、どこにもないな。

VC6.0のInteliSenceには無い事から考えると…
 実はその内追加される予定があった関数で、
 InteliSenceの部隊が先行して入れてしまった
とかだったりして。

他のサーチエンジンで検索してみると、GetDlgItemTextを
使って自前で実装した例もあったんで、現状では使いたいなら
それしかなさそうだな。

60 :デフォルトの名無しさん:04/05/20 13:05
DirectXがインストールされているかどうかを、
コードレベルで調べる方法があれば教えてください。
そういうAPIがあるといいのですが、なければ
どこかのレジストリを調べることになるのでしょうか…。

61 :デフォルトの名無しさん:04/05/20 13:17
>>57
2重起動防止のサンプルですな

62 :デフォルトの名無しさん:04/05/20 13:27
DirectXSetupGetVersion

63 :デフォルトの名無しさん:04/05/20 13:45
>>58
これって自分でアプリに組み込めってこと?
APIで提供されるんじゃないのか。

64 :デフォルトの名無しさん:04/05/20 13:47
>>63
は?

65 :60:04/05/20 14:04
>>62
どうもありがとうございます。試してみます。

66 :デフォルトの名無しさん:04/05/20 14:13
>>64
>>58 をぱっとみて、メータード セクションってのがWin32で提供されているのかと思っただけっす。

67 :デフォルトの名無しさん:04/05/20 14:27
提供されてるけど?


68 :デフォルトの名無しさん:04/05/20 17:07
>>67
マジで?
MSDNをCreateMeteredSectionで検索しても見つからないんだけど。

69 :デフォルトの名無しさん:04/05/20 17:07
>>57
どんな抜け穴ですか?

70 :デフォルトの名無しさん:04/05/20 17:13
高橋名人なら突破できるということだ

71 :デフォルトの名無しさん:04/05/20 17:15
ワロタ

72 :デフォルトの名無しさん:04/05/20 18:33
>>67
PlatformSDK探したけど見当たらなかった。
もしあるならどこにあるか教えてくれ


73 :デフォルトの名無しさん:04/05/20 18:41
誰も英語版の記事を読んでないの?
そのくらいのことができないのはちょっとな。

74 :デフォルトの名無しさん:04/05/20 18:58
>>73
そうじゃなくて、
英語版の MSDN の記事をコピペしてメータードセクションを作るのではなくて、
最初から PSDK に入ってるんじゃないの?
ってことだと思う。

>>67 の「提供されてるけど」は多分「ソースは提供されているけど?」ということじゃないのかな?
それを、>>68>>72 は、「Win32APIとして最初から提供されているの」って勘違いしたんじゃないかなあ。

75 :デフォルトの名無しさん:04/05/20 19:09
>>69
OpenMutex使ってるヤツはペケ

76 :デフォルトの名無しさん:04/05/20 19:11
ぐぐったらたったの二件。片方は↑で引用されてるMSDNの記事だった。
比較を見るといいことずくめなんだが、結局
FileMappingを利用して実装してるんだね、フーン
で終わってしまったYo。

77 :デフォルトの名無しさん:04/05/20 19:15
>>75
あれか。OpenされてなければCreateってやつね。

78 :デフォルトの名無しさん:04/05/20 19:23
InitializeCriticalSectionしといて、DeleteCriticalSectionしない、
ってのは弊害ありますか?

79 :78:04/05/20 19:37
実は、クラスの
コンストラクタでInitializeCriticalSection、
デストラクタでDeleteCriticalSectionするようにしたんですが、
これだと、クラスの生成破棄をマルチスレッドでやっちゃうと、
CriticalSectionが途中で無効になっちゃうかな、と思いまして。

で、クラスの中で初期化するのはやめて、
プログラムのはじめでInitializeCriticalSectionして、
あとはほっとこうかなー、と。

どうでしょう?

80 :デフォルトの名無しさん:04/05/20 19:39
それはプログラムの作り方の問題じゃねーのか?

81 :78:04/05/20 19:56
プログラムの作り方を質問させて頂いてまつ。

79に書いたやり方だと、やっぱりCriticalSectionが途中で無効になりますか?
教えてえ○い人。

82 :デフォルトの名無しさん:04/05/20 20:34
がいしゅつだったわるいけど、
Win95上でIME を Disableにする方法無い?
クローズじゃなくってDisable.
BOOL WINAPI WINNLSEnableIME(HWND hWnd, BOOL bEnable)
があったんだけけど、これって、NT用だったり。

83 :デフォルトの名無しさん:04/05/20 20:37
>>81
クリティカルセクションはそれぞれが独立してるから
何個作ろうが構わない。

そもそも、各スレッドから同時にアクセスされたくないときに
使う物だからプログラムの内容による。

ってことを>>80は言いたかったんだと思う。

84 :デフォルトの名無しさん:04/05/20 21:16
>>82
ImmなんとかってAPI群が有るが。

85 :デフォルトの名無しさん:04/05/20 21:18
>84
ImmSetOpenStatus
とかでしょ。でも、クローズするのはあるが、
IMEを、ディセーブルにするのなんてあった?

86 :デフォルトの名無しさん:04/05/20 21:53
>>85
ImmDisableIMEは98以降か。
スマソ。

87 :デフォルトの名無しさん:04/05/20 22:23
アクティブなウインドウが変更された時の
そのウインドウハンドルの取得って出来ますか?

88 :デフォルトの名無しさん:04/05/20 22:31
GetActiveWindow()

89 :デフォルトの名無しさん:04/05/20 22:42
書き方ちょっと間違えました。
Windows全体での
アクティブウインドウが変更になった瞬間を取得です。

90 :デフォルトの名無しさん:04/05/20 22:43
フックでもしこんどけ

91 :89:04/05/21 00:10
>>90
仕込んでみたんですけど、
0==GetParent(アクティブウインドウ)
なやつを引っ張ったとしても。
画面に出てないウインドウも取ってくるですよ。
spyとかで、調べても見つからないような

フック以外ないですかねー

92 :デフォルトの名無しさん:04/05/21 00:39
OpenSoundとかはとっくに廃止されたというかWin32にはそもそも
存在しなかったような気がしますか、これと同じビープ音で演奏する
方法ってないんでしょうか?
ユーザー補助とかでピヨッとか鳴るから何か手段はあるはずなんだが。

93 :デフォルトの名無しさん:04/05/21 00:41
MessageBeep()で鳴らない?

94 :デフォルトの名無しさん:04/05/21 00:46
あ、演奏したいのだったらBeep()の方だな。MessageBeep()だと一種類しかないけど、
Beep()の方なら周波数と鳴らす時間を指定できるっぽい。

95 :デフォルトの名無しさん:04/05/21 01:06
Beep使ったことあるけど、うるさいしへぼいし、なってる間プログラムはとまるし。
別スレッドで…とかやればいいのだろうけど、まだスレッド意識したことないな。

96 :デフォルトの名無しさん:04/05/21 01:18
WndProcを呼び出す為にメッセージがあった事にできる
関数があるなら教えてください。

Timerとかあると思うのですが、そんなたいそうなものではなく、
WndProc内でHappenMessage(NULL);みたいにやって
WndProcを抜けた後もう一度WndProcに入るみたいな事がしたいのです。

97 :デフォルトの名無しさん:04/05/21 01:24
>>92
宍戸さんの所にあります。だが、めちゃめんどいです。
http://www.sm.rim.or.jp/~shishido/waved.html

後、Beep()は楽だけど、たしか95系だと動かないです。

98 :デフォルトの名無しさん:04/05/21 01:26
>>96
適当なメッセージを自身のプロシージャに送れば?
WM_APP+96とか。

99 :デフォルトの名無しさん:04/05/21 01:30
>>96
PostMessageでは期待にそえんか?

100 :96:04/05/21 01:47
>>98>>99
ありがとうございます。やってみます。

101 :96:04/05/21 02:17
できました。ありがとうございました。

102 :デフォルトの名無しさん:04/05/21 08:59
テストプログラムを作って、
EnterCriticalSectionを実行しましたが、
Leaveを待たずにEnter出来てしまいます。
クリティカルセクションって同一スレッドでは排他しないんでしたっけ?

103 :デフォルトの名無しさん:04/05/21 09:13
いったんクリティカル セクションの所有権を獲得したスレッドは、 その実行をブロック
することなく、 繰り返しEnterCriticalSectionを呼び出すことができます。これにより、
スレッド自身が、 すでに所有しているクリティカル セクションを待つ間、 デッドロック
状態に陥らないようになります。スレッドの所有権を解除するには、 各EnterCriticalSection
呼び出しに対してLeaveCriticalSection関数を1回ずつ呼び出さなければなりません。

ってことでしょ多分

104 :デフォルトの名無しさん:04/05/21 09:17
そういうことですか、納得。>>103

105 :デフォルトの名無しさん:04/05/21 09:18
>>102
同一スレッドで排他したらデッドロックするじゃん。

106 :デフォルトの名無しさん:04/05/21 09:58
2^32 + 1回連続Enterしても大丈夫なんだろうかね?

107 :デフォルトの名無しさん:04/05/21 10:03
>>92
音を鳴らすだけなら、sndPlaySoundで良いんじゃない?
もうちょっと、色々して鳴らすならMCI系で。
それ以上なら、waveOut系を使うしかないかな…。

108 :デフォルトの名無しさん:04/05/21 10:19
>>106
たぶんダメポ

109 :デフォルトの名無しさん:04/05/21 10:47
>>106
とりあえず、やってみた。
結果は、デッドロックや例外で止まるとかはないが、
CrticalSectionの機能を果たさなくなってる。

まぁ、普通はそんな回数やる前に設計見直せって
話になるだろうから、心配するなw

110 :デフォルトの名無しさん:04/05/21 10:54
>>106
そんな事態を招くプログラマの頭のほうが深刻な問題だけどな。

111 :デフォルトの名無しさん:04/05/21 18:01
ファイルの関連づけ取得を楽にするAPIってないですかね?
がんばってレジストリ読むしかない?


112 :デフォルトの名無しさん:04/05/21 18:27
質問。

Win32APIのExtTextOutW ( ExtTextOutのUnicode版 ) 使ったんだけど、
SetTextAlign( hDC, TA_UPDATECP ) とやっても X と Y が有効になっちゃうんだけど、
これって自分の環境だけなのか、他でもなっているのか教えてください。

他でもなってるなら(APIのバグなら)自分でカレントポジション持ってきて移動させますので。

#ちなみにANSI版はまだ試してないっス

自分の環境は
WinXP
VC++.NET 7.1
.NET FrameWork1.1 (APIだから関係なし?)
です。


113 :デフォルトの名無しさん:04/05/21 18:48
>>111
FindExecutable

114 :デフォルトの名無しさん:04/05/21 18:48
とりあえず、Wizardで作られたソースに
 MoveToEx(hdc , 100 , 100 , NULL);
 SetTextAlign(hdc, TA_UPDATECP);
 ExtTextOut(hdc, 200, 200, 0, NULL, _T("0000"), 4, NULL);
 ExtTextOut(hdc, 200, 200, 0, NULL, _T("1111"), 4, NULL);
ってな感じで追加して試してみたが、ドキュメントどおりの挙動だったぞ…

ちなみに、AでもWでも一緒。

115 :111:04/05/21 18:50
>>113
サンクス

116 :112:04/05/21 19:27
>>114
ありがとう。
じゃぁなんか自分のコードにバグあるっぽいね。
早速探してみるよ。


117 :デフォルトの名無しさん:04/05/21 22:13
関連づけられていないファイルをダブルクリックした場合、
開く方法を選択するダイアログが出てくるけど、
これを開くAPIってある?
ShellExecuteでは出てこないんだけど・・・


118 :デフォルトの名無しさん:04/05/21 22:49
KBにあったけど番号忘れた。

119 :デフォルトの名無しさん:04/05/21 23:18
>>117
rundll32 shell32,OpenAs_RunDLL %1

120 :デフォルトの名無しさん:04/05/21 23:33
「ファイルを保存するダイアログ」を外部からパスを与えて操作したいんだけど
どうしたらいい?
メモ帳とかでCtrl+Sで出てくるようなやつで表示されているパスを変更したいっ
てことなんだけどどうでしょう.

121 :デフォルトの名無しさん:04/05/21 23:37
>>120
すでに開いているのを操作するのか?
そのパスで開きたいのか?
さあ、DOTCH?

122 :デフォルトの名無しさん:04/05/21 23:38
SetCurrentDirectory

123 :デフォルトの名無しさん:04/05/21 23:55
>>121
前者です.
>>122
これだと「そのパスで開く」ということになるんですよね?

124 :デフォルトの名無しさん:04/05/21 23:59
フックするしかないかな。

125 :デフォルトの名無しさん:04/05/22 00:03
あれってダイアログの種類二、三ない?
全部同じ操作でいけるのかな?
てか>>123は何がしたいんだ?

126 :123:04/05/22 00:17
>>125
親が仕事でPCを使っていて, いくつかの保存先を行ったり来たりするんだけどそ
れを省力化あるいは自動化できたらいいなと.

127 :デフォルトの名無しさん:04/05/22 00:18
>>126
Placebarをカスタマイズ汁。}

128 :デフォルトの名無しさん:04/05/22 00:22
>>126
えらいな、自分で作るっていう考えが。

129 :123:04/05/22 00:28
>>127
それだとあらかじめ登録しておいたフォルダに保存するて感じで, 希望としては
もちっと柔軟性が欲しいところなんです.
というか, ある既存のアプリが作ったフォルダの名前を取得して, 別の既存のア
プリで何かのデータをそのフォルダに保存するということがやりたいというわけ
です.

130 :デフォルトの名無しさん:04/05/22 03:30
.bmpファイルを開いてBMPINFOを得る方法を教えてください。

131 :デフォルトの名無しさん:04/05/22 03:31
>>130
ヘッダを読む

132 :デフォルトの名無しさん:04/05/22 03:37
>>131
いろいろ調べておっしゃるバイナリを調べる方法や、
キャストしたりオフセットを使ったりする方法はあったのですが、
GetBitmapInfo(bmpFileName, &bmpInfo);
こういう感じで簡単に得られるのはないでしょうか。

133 :デフォルトの名無しさん:04/05/22 03:42
無い

134 :デフォルトの名無しさん:04/05/22 03:47
>>132
キャストしないでも、
#pragma pack(1)とかされてるはずだから、
 1 ビットマップをオープン
 2 BITMAPFILEHEADERを読む
 3 bfOffBitsをみてBITMAPINFOのサイズを決定
 4 BITMAPINFOを読む
とすれば問題なく読める。
別に要素ごとに一つ一つ読む必要は無い。

135 :130:04/05/22 03:48
>>133
なら、LoadImage→SelectObject→SetDIBitsで得られますか。

136 :130:04/05/22 03:52
>>134
調べてみます。

>>135
分かりにくいですね。
以下のはDDBですよね?このような感じでDIBを得たいのです。

PAINTSTRUCT ps;
HDC hDC = NULL, hDCBitmap = NULL;
HBITMAP hBitmap = NULL;
hDC = BeginPaint(hWnd, &ps);
hDCBitmap = CreateCompatibleDC(hDC);
hBitmap = (HBITMAP)LoadImage(NULL, BMP_FILE, IMAGE_BITMAP,
16, 16, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
SelectObject(hDCBitmap, hBitmap);
BitBlt(hDC, 0, 0, 16, 16, hDCBitmap, 0, 0, SRCCOPY);
DeleteDC(hDCBitmap);
DeleteObject(hBitmap);
EndPaint(hWnd, &ps);

137 :デフォルトの名無しさん:04/05/22 03:53
>>136
GetObject

138 :130:04/05/22 03:57
>>137
GetObject(hBitmap, sizeof(BITMAPINFO), &bmpInfo);
ですか?

139 :デフォルトの名無しさん:04/05/22 03:58
>>136
LR_CREATEDIBSECTIONつけてんだからDIBだろうが。

140 :130:04/05/22 04:00
>>139
そうだと思うのですが、どこにパレットとピクセル配列があるのか
分からないのです。bitmap.bmBitsだと思うのですが。
SetPixelVで表示したいのでそこにアクセスする方法を探していました。

141 :130:04/05/22 04:29
まだ自分のLVでは無理なようなのでもう少し勉強してからにします。
お答えいただきありがとうございました。

142 :デフォルトの名無しさん:04/05/22 04:35
システムクラス(BUTTONとか)のWM_NCCREATEをうけとりたいのですが
SetWindowsHookEx以外の方法ってありますか

143 :デフォルトの名無しさん:04/05/22 04:37
>>142
スーパークラス化

144 :142:04/05/22 06:56
ありがとうございます

145 :117:04/05/22 09:02
>>118-119
できました。
ありがとうございました。


146 :デフォルトの名無しさん:04/05/22 13:31
モードレスダイアログのエディットコントロールに最初に表示されるように。
SetDlgItemTextで文字を表示さしてるんですけれど、
ダイアログが呼び出されたときに何故か最初に表示されてる文字の一つが反転
(マウスでクリックして選択された状態)になってるんです。
これってどうゆう原因なんでしょうか。.netで開発してるんですけど、プロパティにはそれらしい
項目はないみたいだったんですけど。お願いします。

147 :デフォルトの名無しさん:04/05/22 17:15
ドラッグドロップでマイコンピュータなどの特殊フォルダはどうやって受け取れば良いんでしょうか?
IDataObject::GetDataに渡すFORMATETC::cfFormatに設定する値を変えればいいと思うのですが、
どの定数を設定すればいいのかわかりません。
よろしくお願いいたします。


148 :デフォルトの名無しさん:04/05/22 17:27
>>147
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_programming/transferring/clipboard.asp

149 :147:04/05/22 19:08
>>148
ありがとうございました。


150 :デフォルトの名無しさん:04/05/22 20:18
CreateWindowEx で、作ったツールバーの背景色を変えるにはどうしたらいいですか?
もしくは、ツールバーのビットマップのうち、透過色を指定する方法でもかまいません。

Win9x と XP で、デフォルトの背景色が違うので、なんとかしたいのです。


151 :146:04/05/22 20:54
モードレスダイアログのエディットコントールのプロパティの
TabstopがTrueになってたのが原因だったみたいです。
Falseにしたら治りました。

152 :デフォルトの名無しさん:04/05/22 21:32
質問があります
Win32Apiだけではないですが教えてください

インターネットをIEで複数開いて、それぞれのWindowに最新F5信号絶え間なくを送りたい
のですが可能でしょうか?

一つ一つのWindowを順番にアクティブにして最新信号を送る方法と
アクティブ、非アクティブのWindowに信号を送るのとが考えられますが
非アクティブのWindowに最新信号(F5)は遅れるのでしょうか?

あと、今のサーバーは最新信号だけでは落ちないようになっていると聞きますが
このプログラムで大量の数のWindowを起動し最新信号(F5)を送っても
効果はあまりなのでしょうか?

どうか教えてください、お願いします m(_;)m

153 :デフォルトの名無しさん:04/05/22 21:34
>>152
韓国人かよ

154 :デフォルトの名無しさん:04/05/22 21:45
一台からやってもDOS攻撃は意味がない。

155 :152:04/05/22 22:09
>>154
ありがとうございます
そういえばそのようなこと聞いたことがあったような気がします
では、作っても意味がないのでしょうか?
OS上の限界なのでしょうかね?

window一つでもwindow複数でもサーバーの負担は変わらないのかな

分かりました、別の方法を考えてみます

156 :デフォルトの名無しさん:04/05/22 22:09
DDoS推奨。てかなんのスレだここは

157 :152:04/05/22 22:18
>>156
DDosと言う方法があるんですね
さっそく調べてみます

158 :デフォルトの名無しさん:04/05/22 22:18
最近の朝鮮人は2ch派生の顔文字使うらしいよ。NAVERでフレームやってた奴らが広めたらしい。

159 :デフォルトの名無しさん:04/05/22 22:26
スレが違う方向に逝ってしまう予感・・・

160 :デフォルトの名無しさん:04/05/22 23:03
REM ---DDOS.BAT---
:A
CURL http://www.2ch.net/ > NUL
GOTO A
REM ---EOF---

161 :デフォルトの名無しさん:04/05/23 02:00
msdn に、

Requirements
Routine Required header Compatibility
malloc <stdlib.h> and <malloc.h> ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP

と書いてあるのですが、malloc は win95 で使えないんですか?

162 :デフォルトの名無しさん:04/05/23 02:03
んなーこたぁない。

163 :デフォルトの名無しさん:04/05/23 02:05
VC++7.1とかだとそもそもWin95が対象外。

164 :デフォルトの名無しさん:04/05/23 04:30
HWND button = CreateWindow("BUTTON","Hello",WS_VISIBLE | BS_PUSHBUTTON, ... )
として第8引数にもNULLを指定し、あとでSetParentとSetWindowLongPtr
で親のHWNDとWS_CHILDを追加しているのですがうまくいきません

DWORD button_style = GetWindowLongPtr(button,GWL_STYLE);
button_style |= WS_CHILD;
button_style ^= WS_POPUP;
SetWindowLongPtr(button,GWL_STYLE,button_style);
SetParent(button,window);

ボタンに指定したのと同じ位置,サイズ,キャプションでウィンドウが表示され、その中に
ボタンが表示されてしまいます
ボタンの親をあとから指定することは不可能なのでしょうか?

165 :デフォルトの名無しさん:04/05/23 08:56
俺もSetParentしてえ

166 :デフォルトの名無しさん:04/05/23 10:10
>>165
イ`

167 :デフォルトの名無しさん:04/05/23 10:29
SetParent(俺, 隣のおねいさん);

168 :デフォルトの名無しさん:04/05/23 10:48
>>167
まずハンドルを取得汁

169 :デフォルトの名無しさん:04/05/23 11:02
>>167
養子縁組を申し込めばOK

170 :デフォルトの名無しさん:04/05/23 11:48
養子縁組に必要な書類==ハンドル

171 :デフォルトの名無しさん:04/05/23 12:09
養子縁組に必要な条件
(>>167).年齢() < (>>167).隣のおねいさん.年齢()

172 :デフォルトの名無しさん:04/05/23 14:35
メッセージ等を使わずに
SHIFTキーが押されているかどうかをチェックするにはどうすればいいですか?

173 :デフォルトの名無しさん:04/05/23 14:39
GetKeyboardStateとか

174 :デフォルトの名無しさん:04/05/23 14:41
GetKeyState

175 :デフォルトの名無しさん:04/05/23 15:09
GetShiftKeyState

176 :デフォルトの名無しさん:04/05/23 15:47
GetAsyncKeyState

177 :デフォルトの名無しさん:04/05/23 17:23
LoadBitmap で読み込んだビットマップのピクセルに直接アクセスするには、
どうしたらいいですか?
背景色を GetSysColor(COLOR_BTNFACE) に置き換えたいのです。

178 :デフォルトの名無しさん:04/05/23 18:51
GetPixelVとかSetPixelVとかで出来るのでない?


179 :デフォルトの名無しさん:04/05/23 18:55
Get/SetBitmapBits()
つーかここで〜するAPIはなんですか?とか言ってるヤツでVC使いなら
インテリセンスでそれらしいの探せ

180 :デフォルトの名無しさん:04/05/23 19:10
FolderのContext Menu Handlersに自作アプリを追加したのですが、
エクスプローラの左フォルダーツリーから呼び出された場合と
右のファイルリストから呼び出された場合で追加可能アイテム数がかなり違います。
(左約3万、右約140)
この差はどこから来るのでしょうか?
また右の場合の項目数を増やす事は出来ませんでしょうか?


181 :デフォルトの名無しさん:04/05/23 19:11
>>179
msdnの目次のほうがいいとおもいます

182 :デフォルトの名無しさん:04/05/24 09:48
>>179
今は、SetDIBits()では?

183 :デフォルトの名無しさん:04/05/24 12:10
MultibyteToWideCharのコードページ、
CP_ACPとCP_OEMCPを使っている例が多いのですが、
どっちを使うべきなんでしょうか?差がわかりません。

184 :デフォルトの名無しさん:04/05/24 12:19
日本語環境ならCP_ACPでおげ

185 :デフォルトの名無しさん:04/05/24 12:35
thx!

186 :デフォルトの名無しさん:04/05/24 12:38
明示的にSJISから変換したいなら932が正解な気がするが。

187 :デフォルトの名無しさん:04/05/24 13:06
Find*Fileのファイル名から変換するのに使用してるんです
932決め打ちだと日本語環境以外で(使うかはともかく)不具合出ませんか?

188 :デフォルトの名無しさん:04/05/24 13:32
>>187
システムのコードページを得て変換するのが正解のような。

189 :デフォルトの名無しさん:04/05/24 13:46
それなら、CP_ACP で正解。


190 :デフォルトの名無しさん:04/05/24 16:48
OEM変換する必要がある環境って触ったこと無い人多そう。

191 :デフォルトの名無しさん:04/05/24 21:01
GetDlgItemIntってint型しか使えないんだけど、int型の範囲超えちゃうような
数値とかの場合はどうしてるの?

192 :デフォルトの名無しさん:04/05/24 21:08
>>191
文字列で取って、自分で扱ってる多倍長整数とかその他の形式に、自分で変換すればいいだけでは?

193 :デフォルトの名無しさん:04/05/24 21:08
WM_MOUSEWHEELはwin98でも使えるのにWHEEL_DELTAとかは
_WIN32_WINNT>=0x400でないと定義されないのはなぜじゃ!

194 :デフォルトの名無しさん:04/05/24 21:09
もじれつ

195 :デフォルトの名無しさん:04/05/24 21:19
もりぜつ

196 :デフォルトの名無しさん:04/05/24 21:23
>>192
文字列をdouble型に変換するのってどうするんでしたっけ?

197 :196:04/05/24 21:25
atof関数だったかも

198 :デフォルトの名無しさん:04/05/24 22:46
atofはfloatだべ
strtodだ
どっちにしろAPIではないがな

199 :デフォルトの名無しさん:04/05/24 22:52
VCではdoubleだが > atof

200 :デフォルトの名無しさん:04/05/24 22:56
atoi64 は、VC独自仕様?

201 :デフォルトの名無しさん:04/05/24 22:59
コマンドの標準入出力をゲットしてなにかしらこねくり回そうかなーと思っているんですが、
CreatePipeとか使って標準入出力を他のHANDLEにパイプすることには成功したんですが、
どうもリダイレクトとかパイプとか使用してると、挙動がかわるコマンドってあるじゃないですか?(lsとか)

この挙動がパイプつなげる前と変わらないようにしたいんですが、なんか方法ってありますかね?
正確にはわかりませんが、自分の憶測だと、そういうコマンドって、
内部で、出力先を調べて、結果を変えてると思うんですが、
その調べるときの出力先をダマして教えてしまうような方法がないかなーと思うんですが…

202 :デフォルトの名無しさん:04/05/24 23:00
atof()はひょーじゅんでdoubleだろ

ていうかANSI以前では引数だの戻り値だのにfloatだのcharだのといった
型は使えなかったんじゃないか確か
なんでもint, long, double, ポインタ


203 :デフォルトの名無しさん:04/05/24 23:01
>>201
むり。

204 :デフォルトの名無しさん:04/05/24 23:03
>>201
Unixなら、psuedo ttyを使ってそういう類の仕事をやることがある
はず
tclでかかれたexpectとかはそーゆー目的のツール
のはず


205 :デフォルトの名無しさん:04/05/24 23:04
>>202
引数は、
float → double
char,short → int
というルールだけど、
戻り値はなんでもアリだった気が。

206 :デフォルトの名無しさん:04/05/24 23:07
>>205
原理的にはできるとおもう
プロトタイプなんてモンも無かったし引数はとりあえずスタックに
プッシュするだけだから、ああなってただけだと思うから

でも、実際にfloatやchar戻してる例なんてみたことないよ


207 :デフォルトの名無しさん:04/05/24 23:46
>>201
リダイレクトさせるんじゃなくて、
フッカ潜り込ませて、そのプロセスのコンソール入出力をぶん取る方が確実と思うが。


208 :201:04/05/25 00:07
>>207
フッカというとHookerのことですか?
フックというとSetWindowsHookExぐらいしかしらないんですが
どんな感じでやるんでしょう?

209 :デフォルトの名無しさん:04/05/25 05:41
部分的なITEMIDLIST(IEnumIDList::Next()で列挙した奴)と
そのITEMIDLISTの親のIShellFolderから完全なITEMIDLISTを得る方法はないでしょうか?

210 :デフォルトの名無しさん:04/05/25 06:09
子ウィンドウにDestroyWindowすると親ウィンドウも破棄されてしまうのですが
子ウィンドウだけを破棄する方法はありますか?
子ウィンドウはWS_EX_NOPARENTNOTIFYを指定してます.子ウィンドウを破棄する前に
SetParent(hChild,HWND_DESKTOP)として親を変えてもだめでした

211 :デフォルトの名無しさん:04/05/25 06:24
破棄されないよ

212 :210:04/05/25 07:01
すいませんあほでした
子ウィンドウのWndProcのWM_DESTROYの中でも
PostQuitMessage(0)していました。。。。。。

213 :デフォルトの名無しさん:04/05/25 08:05
>>209
自力で結合させる以外の方法はなかったはず
これの下の方
ttp://www.kab-studio.biz/Programing/Codian/ShellExtension/06.html


214 :デフォルトの名無しさん:04/05/25 13:05
とある拡張子に関連付けられたアイコンがあるファイル名と
インデックスを取得するだけのAPIってないでしょうか?

シェル拡張でIExtractIconを利用してるんですが、そこで上書きする
アイコンのロードに失敗した時に、元の奴を表示したいのです。
ExtractAssociatedIconだと、その中でさらにIExtractIconのメンバ関数を
呼び出してStackOverFlowになってしまうみたいで、Explorerが落ちちゃいます。

やっぱり、レジストリを検索するしかないのでしょうか?

215 :デフォルトの名無しさん:04/05/25 13:17
>>214
そうですね。
シェルエクステンションを使うということは、しごく当然ですが、シェルからの取得も
そのエクステンションを使用するわけなので、、、

もっとも、アイコンのロードに失敗するという状況自体がおかしいという考えもありますが。

216 :デフォルトの名無しさん:04/05/25 13:58
>>214
漏れと同じ事をしようとしている希ガス・・・


217 :デフォルトの名無しさん:04/05/25 18:32
>>215
レスありがとうございます。

> アイコンのロードに失敗するという(略
上書きするアイコンは、外部ファイルを利用してアイコンをロードするって
ことをやってるので、一応失敗する可能性もあるかな〜と思いまして。

前の書き込み後、色々調べてSHGetFileInfo()でSHGFI_ICONLOCATIONを
指定する方法も試してみたんですが、バグなのか呼び出し方に問題が
あるのか、どうやっても取得できませんでした。

他に方法もなさそうなので、レジストリ検索にしときます…(´・ω・`)

218 :デフォルトの名無しさん:04/05/25 22:35
ファイルがショートカットかどうか判別するAPIはありますか?
拡張子がLnkやUrlで判別するしかない?


219 :デフォルトの名無しさん:04/05/25 23:29
>>218
IShellLink Interfaceを使う

220 :デフォルトの名無しさん:04/05/25 23:37
C言語なら俺に聞けのスレでおなじ質問をしたんですがスレ違いとのことでこのスレを紹介されてきました

C言語でWindowsを再起動させるプログラムを作りたいんですけどどうすればいいですか?


221 :デフォルトの名無しさん:04/05/25 23:45
とあるウィンドウのハンドルを取得できたとして、
そのプロセスのコールバック関数から
ウィンドウの一番下にメモかリストボックスを追加して
その上にリサイズ用のバー(スプリッター)を追加したいのですが、
そのようなことは可能でしょうか。
また、それを行う場合どういった方法でやればいいのでしょうか。

222 :デフォルトの名無しさん:04/05/25 23:47
>>220
ExitWindowsEx

223 :デフォルトの名無しさん:04/05/26 00:21
>>221
よくわからんのだが、既存のウィンドウの下部に外部のプログラムからそういうウィンドウをつけたい、ということかな。


224 :デフォルトの名無しさん:04/05/26 00:25
>>223
>既存のウィンドウの下部にそういうウィンドウをつけたい
これはその通りです。

>外部のプログラムから
プラグインのようなものから、ということです。
プロセス・スレッド的にはウィンドウのメッセージループと(たぶん)同一です。

225 :デフォルトの名無しさん:04/05/26 00:58
不特定多数のエディット
(数が状況によって変化するようなコントロール)
を作成するプロシージャがある場合に
また別のウィンドウのプロシージャで
任意のエディットに入力された文字列を受け取るには
どうしたらいいでしょうか?
外部のHWND型配列にそのエディットのハンドルを格納しておいて
そのハンドルを使ってGetWindowTextで呼び出すという
安っぽい方法なら思いつくのですが・・外部変数使ってるし・・
外部変数に頼らないまたは一般的な方法ありましたら教えてください
おねがいします。


226 :デフォルトの名無しさん:04/05/26 01:06
>>225
俺なら共用データクラスを作るが。MFCならCDocumentにつっこむ。
HWNDではなく、文字列そのものを。
てか、スレ違い。

227 :デフォルトの名無しさん:04/05/26 01:22
即レスどもです

共有データクラスってなんですか?
ググッってみたのですがヒットしませんでした
ちなみにMFCもまだ
使えませんT T
Win32APIもCも猫やら本やらで勉強中の身で。

てかスレ違いですか!
このような問題に対処する方法は
Win32APIに限られたものじゃないから ってことですか?

228 :デフォルトの名無しさん:04/05/26 01:40
>>225
文字列を受け取りたいエディットコントロールのIDがわかるなら
GetDlgItemText()を使えばHWNDの配列なんて必要ないよ。

229 :225:04/05/26 12:25
>>228さん ありがとうございます
なんだか前よりずっと綺麗にまとまりそうです

そこでまたまた初心者質問で申し訳ないのですが
親ウィンドウのWM_COMMAND以外にmenuIDが参照されるタイミングを
知らないので思ったのですが
兄弟ウィンドウの中でかぶらなければ
menuIDはどんな値にしてしまってもいいんでしょうか
多くのコントロールを必要とするプログラムの場合
その値を普通はどうやって決めるのでしょうか

230 :デフォルトの名無しさん:04/05/26 12:38
兄弟ウィンドウでかぶらなければ適当に決めてよい

231 :225:04/05/26 12:53
そうですか!
ありがとうございました

232 :デフォルトの名無しさん:04/05/26 13:04
Win32API 直でPG組んでる人って、まだ多いん?


233 :デフォルトの名無しさん:04/05/26 13:16
もうとかまだとかいう話じゃねーと思うんだが。

234 :デフォルトの名無しさん:04/05/26 13:44
あながち多いん?

235 :デフォルトの名無しさん:04/05/26 13:58
ぞんがい多いよ

236 :デフォルトの名無しさん:04/05/26 14:01
オブジェクト思考とか、イベント駆動型についていけない人達と思っていいか?

237 :デフォルトの名無しさん:04/05/26 14:03
Win32APIの窓プログラミングを非イベント駆動で組む方法を教えてください。

238 :デフォルトの名無しさん:04/05/26 14:04
そうやって優越感に浸っているのがいいよ。

239 :デフォルトの名無しさん:04/05/26 14:05
オブジェクト指向と何の関係が...
自分は進んでいると思っているキチガイの中の人か?

240 :デフォルトの名無しさん:04/05/26 14:12
イベント駆動ってメッセージ処理そのものなんじゃ…

241 :デフォルトの名無しさん:04/05/26 14:14
236は無知でド低脳な人だと思っていいか?

242 :デフォルトの名無しさん:04/05/26 14:14
直の方がプログラムの流れが一目瞭然で良いが、
MFCを覚えてからは、こっちの方が楽で良いな。
でも旧来のやり方が好きな人もいるでしょうし、人それぞれで。
Win32API直PGを経験してる方が、MFCなどに移ってもなにかと有利だと思う。

243 :236:04/05/26 14:15
大量(プゲラ

244 :デフォルトの名無しさん:04/05/26 14:17
大漁ね

245 :236:04/05/26 14:18
また釣れた(プゲラッチョ

246 :デフォルトの名無しさん:04/05/26 14:21
釣りって事にしないとやってられないよな

247 :デフォルトの名無しさん:04/05/26 14:46
無能な奴にかぎって変なプライド持ってたりするからな。
ウチの会社にも居るんだけど何とかして欲しい…

248 :デフォルトの名無しさん:04/05/26 14:55
こういう馬鹿話はマ板でやってくれんか

249 :デフォルトの名無しさん:04/05/26 14:56
>>247
どうにもなりません。
無能なヤツは自分が無能であることに気づく能力も
自分の無能さを認める能力もありませんので。

250 :デフォルトの名無しさん:04/05/26 16:13
質問させてください。

任意のタイミングで、フォーカスされているコントロールの HWND を
取得したいのですが、これは可能でしょうか?

既存のプログラム(ソース無し)を外部から操作したいと考えているため、
フォーカスイベント発生時にそのコントロールの HWND をグローバル変数に
保存しておくという方法が使えません。

素人ながら調べているのですが解決策へたどりつけていません。
可能か/不可能か、可能ならば参考情報へのポインタを教えていただけ
ませんでしょうか。宜しくお願いいたします。

251 :デフォルトの名無しさん:04/05/26 16:28
GetFocus・・・。

252 :デフォルトの名無しさん:04/05/26 16:29
まちがい・・・。

253 :デフォルトの名無しさん:04/05/26 16:39
>>250
GetForegroundWindow()って違うかな?
今MSDNで調べて知ったばっかりだから自信ない。

254 :デフォルトの名無しさん:04/05/26 16:44
>>251-252
いろいろ試したのですが、GetFocus だと「トップウィンドウ」レベルの
HWND しか取得することができませんでした。
なにか妙案がありますでしょうか?

もう少し書くと ListView/TreeView コントロールが複数あり、その中のどの
ListView/TreeView コントロールがフォーカスされているか、もしくは
いずれもフォーカスされていないかを調べたいと試行錯誤しています。

255 :デフォルトの名無しさん:04/05/26 16:53
>>254
EnumChildWindowsで列挙してGetFocusと比較する。
ただし君の言っている仕様が曖昧なので、これだけでは満たしていない可能性もあるが...。



256 :デフォルトの名無しさん:04/05/26 16:54
>>254
GetWindowThreadProccessIDでスレッドID取得して、
AttachThreadInput すれば、子WNDまで調べられる。


257 :デフォルトの名無しさん:04/05/26 17:01
>>251-253 >>255
GetFocus と解をいただいたので、再度試行錯誤したところ、
GetFocus で目的の HWND を取得することができました。

今まで失敗していたのは、フォーカスのある HWND を調べようと
している手続きの中で、自分でフォーカスのある HWND を変更して
しまっていたためでした。。

こんな単純なことにお手を煩わせてしまい申し訳ございませんでした。

258 :251=252:04/05/26 17:06
なんだ、あってたのか

259 :デフォルトの名無しさん:04/05/26 19:35
SetWindowsHookExで他プロセスにフックかけたいんですけど、
特定のアプリひとつ(電卓一個限定とか)に対するフックでもdll要りますか?

260 :デフォルトの名無しさん:04/05/26 19:36
要る

261 :デフォルトの名無しさん:04/05/26 20:17
WM_GETTEXTを SendMessage してやるとテキストが取れるのに、
GetWindowText だと取れないことがあるのは仕様ですか?

262 :デフォルトの名無しさん:04/05/26 20:26
どんな時に取れないんだ?具体例を出してくれ。

263 :デフォルトの名無しさん:04/05/26 20:28
msdnを参照しないのも仕様ですか?

264 :デフォルトの名無しさん:04/05/26 20:34
仕様です、あきらめてください。

265 :デフォルトの名無しさん:04/05/26 23:02
>>261
同じプロセスで?

266 :デフォルトの名無しさん:04/05/26 23:07
>>261
もし違うプロセスなら、>>256調べてみ。

267 :261:04/05/26 23:28
違うプロセスが開いたダイアログのEditControlの文字列を取ろうとしたんですが、
EnumChildWindows、WindowFromPoint、spy++のプロパティのどれで取得したhWndでも
WM_GETTEXTだと取得できて、GetWindowTextだと取れませんでした。
ダイアログのEditコントロールで再現性が高いです。

268 :デフォルトの名無しさん:04/05/26 23:56
Platform SDK - GetWindowText Fucntion

>The GetWindowText function copies the text of the specified window's title bar (if it has one) into a buffer.
>If the specified window is a control, the text of the control is copied.

>However, GetWindowText cannot retrieve the text of a control in another application.



269 :デフォルトの名無しさん:04/05/26 23:57
ついでに、
Remarks

>To retrieve the text of a control in another process,
>send a WM_GETTEXT message directly instead of calling GetWindowText.



270 :デフォルトの名無しさん:04/05/26 23:58
というか、なぜリファレンスを当たらないのか理解に苦しむ。

271 :216:04/05/27 00:08
あ、あれ…?

Remarks
This function causes a WM_GETTEXT message to be sent to the specified window or control.

漏れのはここまでしか書いてない…
素直にmsdn最新版入れてきます…スマソ

272 :デフォルトの名無しさん:04/05/27 00:12
>>270
> というか、なぜリファレンスを当たらないのか理解に苦しむ。
∵仕様だから

273 :デフォルトの名無しさん:04/05/27 02:09
C++相談室から移動してきました。

VC++をコンパイラに使って、簡単な実験プログラムをMFC使用せずに
ネットのソースや猫でもわかるを見て試行錯誤してるのですが。
現在作ろうとしてるのが初めてDialogをメインでCreateWindowなどを使わない方法なのですが、
どうもDialogリソースにクラス名を入れると起動後すぐに終了したり、
WM_KEYUPなどのウィンドウメッセージが反応しないなどの壁にぶつかってます。
特に後者はどのようにしたら解決出来るでしょうか?WM_COMMANDなどは正常に反応します。

Window生成したソースだとちゃんとWM_KEYUPなど動いてくれます。
いまいち生成されたWindowとリソースエディタで作ったDialogの違いが分かってないようです。
Dialogを、この生成されたWindowのようには扱えないのでしょうか。
どうかご教授よろしくお願いします。

274 :デフォルトの名無しさん:04/05/27 07:56
WM_INITDIALOG

275 :デフォルトの名無しさん:04/05/27 09:44
ダイアログ自体がWM_KEYxxを処理してどうしようと。
フォーカス持たないのに。

276 :デフォルトの名無しさん:04/05/27 10:09
「Windowsゲームプログラミング」
http://www.amazon.co.jp/exec/obidos/ASIN/4797325453/

“ゲームプログラミング”と銘打っているが、実はれっきとした
Win32 API入門書。著者は↓の作者。
http://black.sakura.ne.jp/~third/system/winapi/win.html


277 :デフォルトの名無しさん:04/05/27 11:26
ウィンドウの最大化ボタンや×ボタンを動的に付けたり消したりする事はできますか?

278 :デフォルトの名無しさん:04/05/27 13:05
>>277
できる。

279 :277:04/05/27 13:32
よかったらそのAPIを教えてくれませんか?

280 :デフォルトの名無しさん:04/05/27 13:47
>>279
SetWindowLong

281 :273:04/05/27 15:34
試行錯誤してて遅れました。。
確かに一旦Dialogから他のコントロールにフォーカスの移動(?)したらWM_KEYxxは働きませんでした。
>>276 にある「ダイアログウィンドウ」という項目の通りにウィンドウのようなクラス登録をしたら、
WM_KEYxxは初期状態では働きましたが、どれかのコントロールをクリックしてフォーカス移動(?)したら働きませんでした。

具体的には、ショートカットキーやEscで終了、、などをしたいんですが・・・。


282 :デフォルトの名無しさん:04/05/27 16:00
1.普通にコントロールをサブクラス化する。
2.メッセージループでコントロールのメッセージを横取り

283 :273:04/05/27 18:29
サブクラス化を調べて、実際にやってみたところ、
WM_CREATEのところで、OLEの登録の後にサブクラス化をやったのですが、
どうも GetDlgItem 関数でのハンドルの取得が上手く行かないようです。(NULLが返って来る)

どのコントロールを指摘してもダメだったのですが、ダイアログウィンドウにすると、
別の関数でやるか、あるいは最初から一つずつCreateWindowでコントロールの生成しなければならないんでしょうか?
ダイアログウィンドウではなく、そのままにして WM_INITDIALOGのところでサブクラス化したら上手く行きました。
これで、コントロール一つずつサブクラス化すれば WM_KEYxx は拾えそうですが、結構長くなってしまいそうです。

284 :273:04/05/27 19:20
追記。
resource.h を見て、for文で一つずつサブクラス化してみたりしたのですが、
どうもリストボックス以外をサブクラス化したり、その順序によっては、
それぞれのコントロールが消えたり無効状態になってしまいます。。。
例えばリストボックス→その他のコントロールにすると、リストボックスが灰色になります。
ただし、クリックしてWM_KEYxxメッセージはちゃんと受け取るようです。

285 :デフォルトの名無しさん:04/05/27 19:30
お客様の中に、無駄に親切な超能力者の方はいらっしゃいませんか?

286 :デフォルトの名無しさん:04/05/27 19:51
>>285
はいっ! 曲げたスプーンを元に戻すことが出来ます。

287 :デフォルトの名無しさん:04/05/27 19:56
>>273
何か根本的なコーディングミスを犯している気がする。

288 :デフォルトの名無しさん:04/05/27 23:12
2重投稿がここだけ無い…
すげー さすがWin32APIスレ…

289 :デフォルトの名無しさん:04/05/28 09:49
VC++アプリからVBアプリが起動しているかどうかをFindWindowで探す方法はありますか?
VBアプリだとみんな同じクラス名になってしまうようですが。
ちなみにVBはV6です。

290 :デフォルトの名無しさん:04/05/28 10:29
VBアプリが起動している事を検出するだけなんだから、
みんなおなじクラスでも問題ないと思いますが?

291 :デフォルトの名無しさん:04/05/28 10:46
与えられたパスがフォルダかファイルかを知るには
どうしたらいいんですか?
おすぃえてー


292 :デフォルトの名無しさん:04/05/28 10:51
>>291
オープンできたらファイル

293 :デフォルトの名無しさん:04/05/28 10:56
>>291
APIでやるなら、GetFileInformationByHandleだろうな
Cランタイムも入れると_statあたりが楽かと

294 :デフォルトの名無しさん:04/05/28 11:01
>>292
それダウト。
使う関数にもよるけど、CreateFileはディレクトリでもオープン可能。

295 :デフォルトの名無しさん:04/05/28 11:04
GetFileAttributesでいいじょん

296 :デフォルトの名無しさん:04/05/28 11:05
GetFileAttributesは?

297 :293:04/05/28 11:15
>>295-296
む、すっかり忘れてた。
なんで、面倒な>>293のしか出て来なかったんだろう…(´д`;)
同等のCランタイム関数まで出てるのに orz

298 :デフォルトの名無しさん:04/05/28 11:23
>>292-297
みんなみんなサンキュー

299 :デフォルトの名無しさん:04/05/28 11:43
デスクトップやスタートメニューのパスを取得するにはどうすればいいですか?

300 :デフォルトの名無しさん:04/05/28 11:45
SHGetSpecialFolderLocation
CSIDL_DESKTOPDIRECTORY
CSIDL_STARTMENU


301 :デフォルトの名無しさん:04/05/28 12:30
>>293
賢い俺ならPathIsDirectory()けどな

302 :デフォルトの名無しさん:04/05/28 12:32
>>299
SHGetSpecialFolderPath()

303 :デフォルトの名無しさん:04/05/28 14:18
Path系のファンクションって
あまり知られていないのな


304 :デフォルトの名無しさん:04/05/28 14:23
shlwapi。。。普及面からいえば、ほぼ間違いなく使えるはずだけど、
使えないかもしれないとかいろいろ考える。

305 :デフォルトの名無しさん:04/05/28 14:25
>>303
IE4とかが必要だから、敬遠しててそれっきりだな。

306 :デフォルトの名無しさん:04/05/28 14:37
95とかNT4以下を切り捨てればいい

307 :デフォルトの名無しさん:04/05/28 14:43
もうとっくに切り捨ててはいるけど、なんか使いたいと思わないんだよな。


308 :デフォルトの名無しさん:04/05/28 14:47
IE依存というのが、気分的にイヤ

309 :デフォルトの名無しさん:04/05/28 14:47
気分でオナニー出来る奴はいいなぁ

310 :デフォルトの名無しさん:04/05/28 14:49
Path系ファンクションっつーと、どしてもBegiPathとかそっちの方面を思い出す漏れ。

311 :デフォルトの名無しさん:04/05/28 14:55
MAX_PATH 縛りがあるから却下<path系

312 :デフォルトの名無しさん:04/05/28 14:57
Path系APIってlocale考慮してくれるの?

313 :デフォルトの名無しさん:04/05/28 15:02
>>312
システムロケール固定だけど。

314 :デフォルトの名無しさん:04/05/28 19:11
fopenしてNULLが帰ってきたらディレクトリ。

315 :314:04/05/28 19:12
スマソ。リロードしてなかったよ・・・

316 :デフォルトの名無しさん:04/05/28 20:47
ちゅうか一応 API スレだし…

317 :デフォルトの名無しさん:04/05/28 23:16
こんばんは、質問よろしいでしょうか。
画像を何十個と表示したい場合、初期化関数などを別に作って、WndProcの中
のWM_CREATEなどでは、初期化関数を呼び出すだけにしたいのですが、
初期化関数で作ったビットマップハンドルを、自作描画関数で使おうと思うと
するとうまくいきません。
みなさんはどうしてるのでしょうか?
やはりグローバル変数を使用するしかないのでしょうか。
いろいろなハンドルがごちゃごちゃになって、手に負えません。。。
C言語で質問に上がろうと思いましたが、一応ウインドウの話題だと思い
こちらに質問させていただきました。

318 :デフォルトの名無しさん:04/05/28 23:41
>うまくいきません。
うまくいかないとは、いったいどのような結果になり、
それがどのように問題なのかという、、
一番重要な部分を書かずに質問するのは何故ですか?

319 :デフォルトの名無しさん:04/05/29 01:18
>>318
初心者だから。

知らない人間は何が悪いかさえわからないので
質問するときは、自分で判断せずにあらゆる情報を書き込むべきだと思う。

320 :デフォルトの名無しさん:04/05/29 01:19
まずは住所氏名年齢電話番号好きな歌手好きな言語嫌いな言語好きな板嫌いな板ぐらいは書くべきだよな。

321 :デフォルトの名無しさん:04/05/29 05:22
いま好きな人がいるかどうか、が抜けてるぞ、おい。

322 :デフォルトの名無しさん:04/05/29 07:31
>>317
WndProcの中で同じ種類のハンドルだけを集めて配列または構造体として定義して、
各関数へはその配列または構造体へのポインタを渡すようにすればいいのでは?
この場合、ビットマップハンドルってことだから…
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 static HBITMAP hBitmap[N_BITMAPS];
 …
 switch (uMsg) {
 case WM_CREATE:
  InitMyBitmaps(hBitmap);
  …
 }
 …
}
ってな具合。
質問の意図とは的外れの答えだったらスマソ。

323 :デフォルトの名無しさん:04/05/29 12:41
オーナードローとかで描画する際、
ウィンドウ内の全部のコントロールの描画が終わったことって
どうやったらわかりますか?
wm_createの時点だとまだ形が無くて、
wm_drawitemだと一つ一つかいてる状態で・・・
終わったときにおくられるメッセージとかあったら
教えてください

324 :デフォルトの名無しさん:04/05/29 12:48
>>321
いや名前も要る

325 :デフォルトの名無しさん:04/05/29 13:09
バカジャネーノ( ´,_ゝ`)

326 :デフォルトの名無しさん:04/05/29 14:12
>>323
描画の終わりって何よ?

327 :デフォルトの名無しさん:04/05/29 14:18
今あるコントロールを全部一度描画したよ、みたいなことを
言ってるつもりなんですが
そういうのはメッセージで来ませんか?


328 :デフォルトの名無しさん:04/05/29 14:20
来ません

329 :デフォルトの名無しさん:04/05/29 14:24
んじゃ、ウィンドウ全体の画像を自動で保存したいときには
どのタイミングで取り込めばいいんですか?


330 :デフォルトの名無しさん:04/05/29 14:35
cpu君の手が空いたとき

331 :デフォルトの名無しさん:04/05/29 14:36
起動して1時間経過後のタイミングでお願いします。
たぶん描画が終わってます。

332 :デフォルトの名無しさん:04/05/29 15:20
一時間だと暇だったので、別のウインドウを開いていたら、それが取り込まれました。
残念な結果です。

333 :デフォルトの名無しさん:04/05/29 15:21
1時間経過後、スクリーンセーバーが立ちあがっていた罠


334 :デフォルトの名無しさん:04/05/29 15:30
掃除のおばさんがコンセントを抜いてた。

335 :デフォルトの名無しさん:04/05/29 15:37
>>329
自前でビットマップに描画してやればいいんじゃね?

自動でないのなら、キーボードの入力などをトリガーにすればいいと思うけど。

336 :デフォルトの名無しさん:04/05/29 15:51
自前でビットマップにボタンとか描画ってのは
オーナードローで描画するってことですか?
それとも、createwindowでつくったやつらを
自前でビットマップに描画することとかできるんですか?

337 :デフォルトの名無しさん:04/05/29 20:28
ツリービューでトップレベルのアイテムが表示される際に、
テキスト(またはアイコン)の左側にちょこっとスペースを空けることって
簡単にできないでしょうか?
何にもしないと、ツリービューの左端にくっついた感じになるんですが。

338 :デフォルトの名無しさん:04/05/29 20:32
WM_NCCALCSIZEだっけな。
こいつで左端をずらしてやればいい。

339 :デフォルトの名無しさん:04/05/29 20:34
OnIdle

340 :デフォルトの名無しさん:04/05/30 02:07
ListViewでLVS_EX_CHECKBOXESのスタイルを設定すればチェックボックス
付きの行ができますが、このチェックボックスをオン・オフしたときに
なんらかの反応をさせたい(コールバックなど)場合はどうすれば
よろしいでしょうか?

ご教授お願いします



341 :デフォルトの名無しさん:04/05/30 03:19
LVN_ITEMCHANGED

342 :デフォルトの名無しさん:04/05/30 13:04
適当にどんな順番でコントロールに対して
WM_DRAWITEMが発行されてるのか見てみたら
createwindowしたのとは逆順だったんですが、
(最初にcreatewindowしたやつが最後にwm_drawitemメッセージ出されてた)
これって絶対そうなんですか?
それともたまたま?


343 :デフォルトの名無しさん:04/05/30 13:24
>>342
たまたま

344 :デフォルトの名無しさん:04/05/30 13:26
>>342
きんたま

345 :デフォルトの名無しさん:04/05/30 14:13
ω

346 :デフォルトの名無しさん:04/05/30 14:17
(´・ω・`)

347 :デフォルトの名無しさん:04/05/30 17:07
WININETでWebページの読み込みを行っています。
ユーザが「読み込み中止」ボタンを押したら、読み込み処理を中断する方法はあるでしょうか?

348 :347:04/05/30 17:10
あ、InternetOpenUrlやInternetReadFileがいつまでたっても戻ってこないような状況を
想定しています。

349 :340:04/05/30 17:13
>>341
ヒントありがとうございます
そのまわりを調べてテスト実装してみたのですが、
そもそもチェックボックスのオン、オフ操作でNotifyメッセージにも飛んでいないようです。
何か最初に設定しておくべきフラグとかあるのでしょうか?



350 :デフォルトの名無しさん:04/05/30 17:46
GetDeviceCapsをつかって、Bitbltが使えるかどうかを調べたんですが
XPでは返値が0で98seだと260になりました。
これってどういうことですか?

351 :デフォルトの名無しさん:04/05/30 18:00
すみません、使い方間違ってました。。。
orz

352 :デフォルトの名無しさん:04/05/30 19:45
矢印やファンクションキー等、2バイト文字のWM_...を教えてください。
1バイトはWM_CHARで、wParamに文字が入っているのでできるのですが。

353 :デフォルトの名無しさん:04/05/30 20:04
wParamはいつから1バイトになったんだ?

354 :352:04/05/30 20:16
>>353
そう意味ではないです。wParamはたぶん4バイトだと思います。
1バイト文字を押した時、WM_CHARメッセージが発行され、
wParamに文字が入りますが、
2バイト文字を押してもWM_CHARは発行されず、
当然wParamを調べる意味はありません。
WM_WIDECHARみたいなメッセージを探しても無いですし。

355 :デフォルトの名無しさん:04/05/30 20:21
imechar

356 :353:04/05/30 20:27
WM_KEYDOWN

357 :352:04/05/30 20:42
>>355
WM_IME_CHARは文字列?のですかね。
調べたのですが、難しくて分かりませんでした。
ただ、調べているとき、WM_KEYDOWN + VK_... で出来ることが分かりました。

お二方どうもありがとうございました。

358 :352:04/05/30 20:56
>>356
すいません。リロードされていなくて。
まさしくそれでできました。ありがとうございました。

359 :347:04/05/30 21:02
>>347ですが、非同期アクセス時のINTERNET_STATUS_CALLBACKの解説で、

INTERNET_STATUS_HANDLE_CREATED
Used by InternetConnect to indicate it has created the new handle.
This lets the application call InternetCloseHandle from another thread,
if the connect is taking too long. The lpvStatusInformation parameter
contains the address of an INTERNET_ASYNC_RESULT structure.

という記述があり、ハンドルを別スレッドからクローズしてしまえばいけるんじゃないかと予想。
ので、そこらへんを試してみます。でわ。

360 :デフォルトの名無しさん:04/05/30 21:20
ふと思ったのですが、
メッセージキューってスレッドセーフなのでしょうか?
複数のスレッドから特定のウィンドウにPostMessageするプログラムを書いてて思いました。

361 :デフォルトの名無しさん:04/05/30 22:48
スレッドセーフだよ。
だからキューが一杯だと PostMessage は失敗する。
送る方はね。

受ける方はスレッド単位にキュー持ってるので、
そもそも他のスレッドのキューは見れない。

362 :デフォルトの名無しさん:04/05/30 23:44
>>361
レスありがとうございます。
PostMessageの戻り値だけ意識すればよいので、楽でよかったです。

363 :デフォルトの名無しさん:04/05/31 08:02
windows.hで定義されているTCHARは
UNICODEが定義されていればWCHARで、
そうでなければcharでtypedefされていますが

ソースファイル上、windows.hより上には大抵何も記述していないし
何もインクルードしていないはずですが
コンパイル時にプリプロセス処理される時
このUNICODEというマクロはどこで定義されているんでしょうか?

364 :デフォルトの名無しさん:04/05/31 08:12
コンパイラオプションじゃねーかー

365 :362:04/05/31 08:17
レスさんくす。

ぐぐったら自己解決しました
コンパイラの事前定義マクロだったんすね

366 :デフォルトの名無しさん:04/05/31 08:20
事前定義マクロっていうと、__FILE__とか__LINE__とかみたいで紛らわしいからヤメレ。

367 :デフォルトの名無しさん:04/05/31 13:26
>>341
ヒントありがとうございます
そのまわりを調べてテスト実装してみたのですが、
そもそもチェックボックスのオン、オフ操作でNotifyメッセージにも飛んでいないようです。
何か最初に設定しておくべきフラグとかあるのでしょうか?

368 :デフォルトの名無しさん:04/05/31 15:01

あるスレッド( たとえば、GetCurrentThread で取得したスレッドハンドル が指しているスレッド)が、プライマリスレッドかどうかを知るにはどの API を利用すればいいでしょう?


369 :デフォルトの名無しさん:04/05/31 15:15
Windows2000で、ユーザー補助のシリアルキーデバイスの設定情報を取得したり、
設定したりするにはどうすればいいのでしょうか?

SystemParametersInfo関数の、SPI_GETSERIALKEYSや、SPI_SETSERIALKEYSは、
WindowsNT/2000では未サポートとMSDNに書いてあったのですが、コントロールパネル
からシリアルキーデバイスの設定を行う事は可能なので、、何か別の手段があると思うん
ですが…

370 :デフォルトの名無しさん:04/05/31 15:30
>>368
そのスレッドに結び付けられたWindowハンドルを取得してみれば判断できると思うが。


371 :370:04/05/31 15:35
GUIアプリに限るか。
プロセスのスレッド一覧を調べて、1番最初のだったら、でも判断できるかな。

372 :368:04/05/31 17:57
>>370 に言われたとおり、
CreateToolhelp32Snapshot で、スレッドの一覧を取得し、
現在のプロセスで検索してみました。
確かに、先頭にプライマリスレッドがきます。
ありがとうございます。

ところで、実験していて気がついたのですが、
::GetCurrentThread() でスレッドのハンドルを取得すると、常に -2 が
帰ってきているようなのですが、これはなぜなのでしょう?

373 :デフォルトの名無しさん:04/05/31 18:08
>>372
MSDN嫁ばわかるが、定数が返るそうだ。

374 :デフォルトの名無しさん:04/05/31 18:30
>>369
あの文面を見ると、おそらくAPIとしては無くなってるんじゃない?
直接レジストリ操作しか無い気がする。

375 :デフォルトの名無しさん:04/05/31 19:08
LoadImageとかCreateDIBSectionとかした後に
GetLastErrorをすると、8が返ってきて
で、8の意味が記憶領域が足りないってことみたいなのに
ちゃんと画像はうつるのは何で?
このエラーはどういうことなの?

376 :デフォルトの名無しさん:04/05/31 19:16
>>374
なにー

コントロールパネルの[ユーザー補助]-[全般]-[シリアルキーデバイス]の
設定をちまちま弄って[適用]ボタンを押しても再起動を要求されないから
レジストリじゃないと思ったんだけどな(´・ω・`)

レジストリを比較してみるよ…(´・ω・`)

377 :368:04/05/31 19:25
>>373
確かに書いてありますね。見落としていました。
擬似ハンドルを API に渡すと、ハンドルとして理解されるという部分は面白いですね。

ということは、プライマリスレッドで取得した擬似ハンドルをグローバル変数に保存しておいて、
ワーカースレッドからそれを参照すれば、その擬似ハンドルはワーカースレッドとして解釈されるわけか。
知らないとエライ目にあいそうだ。


378 :デフォルトの名無しさん:04/05/31 19:28
>>375
MSDN引けば分かるが、"全てのAPIが成功時にSetLastError(0)を呼ぶわけではない"から。
基本的にAPIが失敗したときに情報を伝えるためなのがSetLastError/GetLastError。

379 :デフォルトの名無しさん:04/05/31 19:36
>>378
じゃあ、あまり神経質に気にすることでもないってことですね


380 :デフォルトの名無しさん:04/05/31 19:41
エラーが出てないのにGetLastErrorをするなということだ

381 :デフォルトの名無しさん:04/05/31 19:50
なんだったか、返り値でエラーになってるんでGetLastErrorしたら分けわからんコードが出て、
不審に思ってAPI呼び出し直前にSetLastError(0)を入れたら案の定エラーコードが0になって
結局そのAPIがエラーコードセットしてないだけじゃねぇか、ってのはあった気がするな。

あとまぁ、Win9xで16bit側に実体があるAPIはそもそもエラーコードをセットしないとか。

382 :デフォルトの名無しさん:04/05/31 20:36
こんにちは、C++初心者です。
私はC言語を少しかじった程度で、Win32APIでダイヤログベースのアプリを勉強中です。

ダイヤログのテキストBOX(?)に、例えば、LANカードのデバイスマネージャーのリソースの
一つであるI/Oポートアドレスを表示させたいと思っています。
しかし、レジストリエディタで探してもI/Oポートアドレスが何処にあるのか分かりません。

RegOpenKeyEx等で取得出来るものでしょうか?
何かの本に、Win95・98系はiniファイルに格納され、NT・2000・XPはレジストリに
格納されるとか書いてあったような気がしますが自信がありません。

どなたか初心者の私でも分かるように、アドバイスをお願いします。

383 :デフォルトの名無しさん:04/05/31 22:45
VBで、APIを使ってFTPからダウンロードするソフトを作ってるんだけど、
FTPに何個ファイルがあって、フォルダ構造もどうなっているか分からない
状態で、1ファイルずつすべてのファイルをダウンロードしていくことって
できますか?


384 :デフォルトの名無しさん:04/05/31 22:45
>>383
そのようにプログラミングすればできます。

385 : :04/05/31 22:46
>>384
383じゃないが糞レスするくらいなら書き込むな。

386 :デフォルトの名無しさん:04/05/31 22:52
>>385
384じゃないが可能か不可能かを聞いてるんだろ?

387 :デフォルトの名無しさん:04/05/31 22:56
384じゃないが、脳味噌の代わりに糞が詰まってる385は氏ね

388 :デフォルトの名無しさん:04/05/31 23:01
ローカルのディスク上のファイルをFindFirstFile()から列挙する方法を知っていれば、
FtpFindFirstFile()とかまんまな名前のAPIがあるんでそれでいける。

389 :デフォルトの名無しさん:04/05/31 23:39
>>383
とりあえずFTPについて勉強し直せ。


390 :デフォルトの名無しさん:04/05/31 23:42
これって WIN32API の話か?

391 :デフォルトの名無しさん:04/05/31 23:55
APIを使って出来るか、という質問だからオケだろ。
ちなみに388の方法でも必ず出来るとは限らないわけだが、
出来ない場合にはどうやっても出来ないのでしょうがない。

392 :デフォルトの名無しさん:04/06/01 04:09
http://www.kumei.ne.jp/c_lang/index.html
ここいろんなところで紹介されてるけど、なんかすごく読みにくいな。
プログラムソースを全部示して、そこにコメント文を挿入すればいいのに
余計な親切で、プログラムをぶちぎっていろいろ書き込んでるからプログラムの
全体構成とかつながりがわかりづらい。

393 :デフォルトの名無しさん:04/06/01 04:37
そんな感想文を書くスレじゃないんだよここは。

394 :デフォルトの名無しさん:04/06/01 07:05
ここは私の日記帳。


395 :デフォルトの名無しさん:04/06/01 07:46
>>392
こっちにすれば?
http://black.sakura.ne.jp/~third/system/winapi/win.html

396 :デフォルトの名無しさん:04/06/01 09:15
タスクトレイに常駐するアプリで、何か知らせたいことがあるときに
黄色いポップアップヘルプ?(htmlでいうimg alt="hogehoge"のような)
を出すものがあるんですが、こういうの出すにはどうすればいいんでしょうか?
WinHelp()を使うよーなそうでもないようなことをちらほら見るのですがいまいちわからず…。

397 :デフォルトの名無しさん:04/06/01 09:18
NIN_BALLOONSHOW

398 :デフォルトの名無しさん:04/06/01 09:49
GetMessage()は、メッセージキューにメッセージが無い場合
・メッセージを取得するまで内部でループ(待機)しつづけるのか
・メッセージが無ければ、終了してリターンするのか
どちらで実装されているんでしょうか?

399 :デフォルトの名無しさん:04/06/01 09:54
スレッドサスペンドしてメッセージがくるまで寝てる

400 :デフォルトの名無しさん:04/06/01 10:16
レスさんくす。
要するに上のレスなら前者が近いということですね

401 :デフォルトの名無しさん:04/06/01 11:21
>要するに上のレスなら前者が近いということですね

寝てるのとループでアイドルしてるのとは大違い

402 :デフォルトの名無しさん:04/06/01 13:10
誰か367の問いにも答えてやれyo
困り果てているじゃないか


403 :デフォルトの名無しさん:04/06/01 13:20
367=402

404 :デフォルトの名無しさん:04/06/01 13:51
システムフックでキー入力の特定の"文字列"だけを奪い取る事ってできますか?

たとえば"ABCDE"という文字列の場合は奪ってしまい、それ以外の文字列は
本来のソフトに素直に渡すという動作です。
#1文字だけでの判断は問題ありませんが、前後数文字の組み合わせで
#比較しなければならない状況のことです

USBに付けた装置が、不定期に数種類のパターンをキー入力扱いで送ってくるので、
これを調べて上記動作をさせたかったのです。キーフックだと1文字ずつの処理に
なるため、'E'を受け取るまで"ABCD"の処理を遅延したいと考えましたが、
次に'E'が来ない場合は速やかに"ABCD"を本来のアプリに送らなければなりません。

WH_KEYBOARD意外に適切な方法がありますか?
かなりはまってます。どなたか指針だけでも示してもらえると大変助かります。



405 :デフォルトの名無しさん:04/06/01 13:52
>>367
もれだったらさー,いろいろ文献漁るの面倒臭いんで
メッセージループの部分で
 while (GetMessage(&msg) > 0) {
  catch_message(&msg); // これな
  DispatchMessage(&msg);
 }
みてーな関数挟むんだよ。
この catch_message() の中では WM_MOUSEMOVE とか WM_NCHITTEST とか
眠てーメッセージは全部無視して,あんま見かけないメッセージだけを
リストアップするわけよ。
結構いいヒントが出てきたり,そうでなくてもマジ勉強になったりするからよー。

つーかもれもListViewの事あんまよく分かってねーです。スマソ。

406 :デフォルトの名無しさん:04/06/01 14:27
何故Spy++使わないのだ…。

407 :デフォルトの名無しさん:04/06/01 14:40
>>404
その「USBに付けた装置が送ってくるキー」の間隔の最大時間を計って、
キーが入力されなかった時間が、その最大時間を超えた場合、タイムアウトとして
今まで横取りした文字を本来のアプリに送れば良いんじゃないの?


408 :404:04/06/01 14:48
>>407
その方法だとアプリ起動中は、他のアプリへのキー入力も
微妙なタイムラグが生じるようになりますよね?

でも、装置からの受信はせいぜい1秒程度だと思う(未計測)ので
一応その方針で実装してみます。

# キー入力時にどのキーボードから入力されたかを知る方法って
# ないんですかね。。。もしあれば一発なんですが。

レスありがとうございました。

409 :デフォルトの名無しさん:04/06/01 16:05
spyでWM_NOTIFYの情報展開してくれるとうれしいんだけどなー。
ただでさえコモンコントロールって多機能なんだし。

410 :デフォルトの名無しさん:04/06/01 16:21
>>407の手順だと、途中の文字のHook時点では、基本的に
CallNextHookExしないでreturn TRUEすることになるよな

ということは、他にKeyboardHookしているソフトが存在した場合
そのソフトへのHookを殺すことにならないか?

411 :デフォルトの名無しさん:04/06/01 21:42
>>409
もまいSPY++の作者知ってて言ってるのか?

412 :デフォルトの名無しさん:04/06/01 21:43
Spy++ copyleft Microsoft Corp. 1995

413 :デフォルトの名無しさん:04/06/01 21:55
Control Spyというのが昔あった気がするが。

414 :デフォルトの名無しさん:04/06/01 22:00
DirectDrawを使用せず
オフスクリーンサーフェイスのアドレスを取得し直接描画をしたいのですが
どのようにすればいいのでしょうか

415 :デフォルトの名無しさん:04/06/01 22:02
>>408
特定の USB デバイスからのキー入力の処理だったら、
「Raw Input」の関数群を使えば出来そうな気がするが…

使ったこと無いけど、なんとなくそれっぽい関数があるよ。

GetRawInputDeviceInfo
GetRawInputDeviceList
GetRegisteredRawInputDevices
RegisterRawInputDevices

ただ…面倒くさそうだw


416 :デフォルトの名無しさん:04/06/01 22:06
>>413
MSJにあったやつだな。あれはかなり参考になった。

417 :デフォルトの名無しさん:04/06/01 22:12
ダイアログボックス(hWnd)のコンボボックス(COMBO)に"+","−","×","÷"と入れたくて
SendDlgItemMessage(hWnd,IDC_COMBO,CB_ADDSTRING,0,(LPARAM)"+");
SendDlgItemMessage(hWnd,IDC_COMBO,CB_ADDSTRING,0,(LPARAM)"−");
SendDlgItemMessage(hWnd,IDC_COMBO,CB_ADDSTRING,0,(LPARAM)"×");
SendDlgItemMessage(hWnd,IDC_COMBO,CB_ADDSTRING,0,(LPARAM)"÷");
SendDlgItemMessage(hWnd,IDC_COMBO,CB_SETCURSEL,0,0);
という風に書いたんですが、うまく入りませんでした。

どうすればいいんでしょうか?

418 :デフォルトの名無しさん:04/06/01 22:26
文字列とは何かを考える

419 :デフォルトの名無しさん:04/06/01 22:54
自称エスパーの父が「WM_INITDIALOGに書け」と申しております。

420 :デフォルトの名無しさん:04/06/01 23:11
>>414
CreateDIBSection() のことかい?


421 :デフォルトの名無しさん:04/06/01 23:48
>>417
>>418, >>419とは別の視点でいくと…
コンボボックスの高さのサイズを、小さく設定しすぎてる。
昔、これではまったことがある。

422 :デフォルトの名無しさん:04/06/01 23:52
つーか、よくそんな長ったらしい行を4回も書く気になるなぁ。

423 :デフォルトの名無しさん:04/06/01 23:52
>>420
ありがとうございます
調べて使ってみます

424 :デフォルトの名無しさん:04/06/02 00:29
>>414
WinG を使ってみるとか。


425 :デフォルトの名無しさん:04/06/02 00:56
>>424
ググってもよく分かりませんでした
DIBSectionと同じものと考えてよいのでしょうか

426 :デフォルトの名無しさん:04/06/02 00:58
GetUserName()で取得できるユーザー名ですが、
WindowsXPでコントロールパネルから「ユーザー名の変更」を行っても、
変更前の名前が出てきます。
ログオン時に入力する名前や、スタートメニューに表示される名前は
変更後のものになっています。
しかし、環境変数 USERNAME も変更前の名前でした。

「ユーザー名の変更」に対応した名前を取得するにはどうすればいいんでしょうか?

427 :デフォルトの名無しさん:04/06/02 01:03
>>426
アカウント名、フルネームって知ってるか?
GetUserName()で取得できるのは、アカウント名だろ。
ログオン時に入力する名前や、スタートメニューはフルネームを表示しているだけ。

428 :デフォルトの名無しさん:04/06/02 01:04
>>426
GetUserNameExの方を使え

429 :405:04/06/02 01:06
>>406 spy++でもいいけどさーって書き込もうとしたら
なんか書き込めないままバイトの時間になちゃてよー。

つーわけで >>367 へ。spy++でもいいけどさー。。。

430 :405:04/06/02 01:15
いやちょと待てよ。SendMessage()されたメッセージは
メッセージキューには溜まんねーんだよな?
じゃあ,405の方法はまったく中途半端じゃねーか。
spy++の方が*断然*いいなー。。。

431 :デフォルトの名無しさん:04/06/02 01:21
Spy++知ってたら>>405見たいなレスしないだろ…

432 :405:04/06/02 01:28
orz...

433 :デフォルトの名無しさん:04/06/02 01:30
そう、気を落とすな。



434 :405:04/06/02 01:34
>>431
言い訳させて言い訳。
もれの spy++ がなぜか起動しなくなちゃたわけよ。
再インスコしても,アタシ全然だめーみたいな。
だからもれいつも405みたいにやってたり
WndProcの中であんなことやこんなことしたりしてる。うへへ。
spy++の事はぜんぜん頭に無くなったね。

435 :デフォルトの名無しさん:04/06/02 01:46
>>434
いっぺんレジストリ覗いてspi++関係の設定削除してみろ

436 :426:04/06/02 01:59
>>427,428
ありがとうございます。早速試してみました。
とりあえず、自分のマシン(Windows2000)で、
EXTENDED_NAME_FORMAT に列挙されている値全てに対して
GetUserNameEx()を呼び出し、結果を画面に出してみました。
すると、
 SamCompatible - 'マシン名\ユーザー名'
 DnsDomain - Error 87
 あと全部 - Error 1332
となりました。
Error 1332 は ERROR_NONE_MAPPED らしいです。

問題のマシンでもテストするつもりですが、
ほとんどエラーになってしまったのが心配です。
テストしたソースを貼らせてもらいますんで、突っ込みあればお願いします。

437 :426:04/06/02 02:01
#include <stdio.h>
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <Security.h>
struct named_format { EXTENDED_NAME_FORMAT id; char const* name; };
#define NAMED_FORMAT( Symbol ) { Name##Symbol , #Symbol }
struct named_format const formats[] = {
  NAMED_FORMAT( Unknown ),NAMED_FORMAT( FullyQualifiedDN ),
  NAMED_FORMAT( SamCompatible ),NAMED_FORMAT( Display ),
  NAMED_FORMAT( UniqueId ),NAMED_FORMAT( Canonical ),
  NAMED_FORMAT( UserPrincipal ),NAMED_FORMAT( CanonicalEx ),
  NAMED_FORMAT( ServicePrincipal ),NAMED_FORMAT( DnsDomain ),
};
#define NUM_FORMATS ( sizeof( formats ) / sizeof( formats[0] ) )
#define NAME_BUFFER_SIZE 1024
int main()
{
  int i;
  for( i = 0 ; i < NUM_FORMATS ; ++i )
  {
    struct named_format const* const format = &formats[ i ];
    TCHAR username[ NAME_BUFFER_SIZE ];
    ULONG buffer_size = NAME_BUFFER_SIZE;
    if( GetUserNameEx( format->id , username , &buffer_size ) )
      printf( "%s - '%s'\n" , format->name , username );
    else
      printf( "%s - Error %d\n" , format->name , GetLastError() );
  }
  return 0;
}

438 :デフォルトの名無しさん:04/06/02 04:16
インターネットの接続時間(継続時間)を取得したいんですが
どうやれば出来ますでしょうか?
レジストリとかから取得するんですかね?

439 :デフォルトの名無しさん:04/06/02 04:37
まず、「インターネットの接続時間」とやらを定義してみろ。

440 :438:04/06/02 05:21
>>439
え〜と、ネットに繋いでいる時にタスクトレイのアイコンから
状態確認した時に「継続時間」と表示されているものが自分で取得したいんです。
取得できるAPI関数とかありますか?

441 :デフォルトの名無しさん:04/06/02 09:10
>>438
てか、>>439の質問の答えがわかれば、どうすりゃいいか分かるんじゃねーか?

442 :438:04/06/02 10:42
>>441
さっぱりです。。。
一体どういう事なんでしょう?

443 :デフォルトの名無しさん:04/06/02 11:14
>>438
Win32_NetworkAdapterで検索してみな

444 :デフォルトの名無しさん:04/06/02 15:17
2つのレジストリハンドルが同じキーを参照しているかどうかを
チェック判断する方法を探しています。

とりあえず、ハンドルからキーのフルパスを取得して文字列を比較すれば
いいかなと思い RegXXX 系の API を調べてみたのですが、完全キー名を
取得できる API は見つかりませんでした。

何か良い方法は無いでしょうか?

445 :デフォルトの名無しさん:04/06/02 15:36
RegQueryInfoKeyで得られるすべての情報を比較するとか、
ハンドルを比較するという設計を見直すとか。

446 :デフォルトの名無しさん:04/06/02 16:31
int WINAPI WinMain(ry
{
  //LoadLibrary("user32.dll");
  ATOM atom = GlobalAddAtom("null po");
  if (atom != 0) GlobalDeleteAtom(atom);
  return nAtom;
}

user32.dllをロードしないとGlobalAddAtomが成功しないのは仕様なのでしょうか?

447 :446:04/06/02 16:56
×return nAtom;
○return atom;

448 :デフォルトの名無しさん:04/06/02 21:02
え?


449 :デフォルトの名無しさん:04/06/02 21:22
>>446の環境では、user32.dllをロードすると、
そのコードでも行けるん??


450 :デフォルトの名無しさん:04/06/03 00:52
>>436
亀レス、スマソ。
NetUserGetInfo()を使えばおけ。USER_INFO_10のusri10_full_nameあたり。
GetUserNameEx()だとドメイン認証していないとだめだったね。

451 :デフォルトの名無しさん:04/06/03 03:33
今、半透明ウィンドウのコードを書いているんですが
一旦、半透明スタイルを設定していまうと
スタイルをもとに戻しても、重いままになってしまいます。
実際タスクマネージャーで見ると、設定前のCPU使用率より上がってしまったままになってます…
何か解決策はないでしょうか?

以下がコードです。

//半透明設定
SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(hWnd, 0, 128, 2);

//半透明解除
SetLayeredWindowAttributes(hWnd, 0, 255, 2);
SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) & ~WS_EX_LAYERED);

452 :デフォルトの名無しさん:04/06/03 10:00
>>451
MSDNの例示では、解除の時にRedrawWindowを呼んでるけど、
それでもダメ?

453 :デフォルトの名無しさん:04/06/03 10:21
スタイルを変更した後はSetWindowLong等を遣うべき

454 :デフォルトの名無しさん:04/06/03 10:40
っていうかAPIでそれ以外に何か方法あるの?
CWnd::ModifyStyleとかでなくて?

455 :デフォルトの名無しさん:04/06/03 11:55
XPて標準でZIP圧縮できますが、これを自分のソフトでDLL無しでやる方法を教えてください

456 :デフォルトの名無しさん:04/06/03 11:57
>>455
zip圧縮のロジックを実装するだけ。
どこかからパチってきてもいいけど。

457 :デフォルトの名無しさん:04/06/03 12:05
>>455
http://www.icsharpcode.net/OpenSource/SharpZipLib/

458 :デフォルトの名無しさん:04/06/03 12:29
>>455
zlibにzip圧縮・伸張のサンプルが付いてる

459 :デフォルトの名無しさん:04/06/03 12:31
というか、そのままzlibを使えばいいんじゃ・・・

460 :デフォルトの名無しさん:04/06/03 12:39
あの辺のライブラリって日本語ファイル名とか大丈夫だったか?

461 :デフォルトの名無しさん:04/06/03 12:46
>>460
ライブラリ側でパスの分割とかするわけじゃないから問題ないんでないの?
とりあえず、トラブッたことないなあ。

心配なら「表」とかの\を含むファイル名でテストしてみればいい。


462 :458:04/06/03 13:24
>>459
だからzlibの使い方のサンプルがあると言ってるんだが

463 :デフォルトの名無しさん:04/06/03 13:30
>>455がzip圧縮をしたいのか、単に圧縮をしたいのかは微妙。

464 :451:04/06/03 14:08
>>452
原因が分かりました。
裏DCバックバッファを使ってウィンドウにビットマップを描画してたのが原因らしいです。
どうやら、一旦裏DCに描画した後、表DCに転送する処理をして尚且つ、
半透明ウィンドウ設定をすると、いっきにCPU使用率が上がってしまうみたいです…
半透明設定をした場合でも、いきなり表DCに描画した場合は殆どCPU使用率は上がりませんでした。

裏画面使用時 :13〜16%
裏画面不使用時:0〜2%

みたいな感じになってました。
でも、処理の関係上どうしても裏DCを使って描画しないと
ちらついてしまうので、いきなり表には描画出来ないんですよね…

465 :デフォルトの名無しさん:04/06/03 14:37
ものにもよるが子ウィンドウとか張ってないならUpdateLayerdWindowで
裏DC(DibSection)から転送かければいいと思うが。
まぁ、メインメモリの転送速度とかでいろいろ負荷はあるが。

466 :デフォルトの名無しさん:04/06/03 15:30
スレッドの切り替えについて聞きたいんですが
現在のスレッドから、別のプロセスのスレッドに切り替わるのは
内部的にはプロセスの切り替えが行われているんですよね?

467 :デフォルトの名無しさん:04/06/03 15:37
>>466
なんでそんなこと聞くんだろうと思ったけど、
もしかして「プロセスは切り替わるけどスレッドは切り替わらない」可
能性を考えてる?


468 :デフォルトの名無しさん:04/06/03 15:43
>>467
いや、単純に
同一プロセス内のスレッドの切り替え⇒スレッドの切り替え(オーバーヘッド低い)
別プロセス間のスレッドの切り替え⇒プロセスの切り替え(オーバヘッド高い)

これで当ってますでしょうか?

469 :デフォルトの名無しさん:04/06/03 15:48
>>468
同一プロセスかどうかにかかわりなく、オーバーヘッドは同じ。

470 :デフォルトの名無しさん:04/06/03 15:52
>>469
マジっすか?
論理メモリ空間が変われば
いろいろとコンテキストに関わるデータを
レジスタに退避させたりして、忙しそうですが?

471 :デフォルトの名無しさん:04/06/03 16:03
>>470
スレッドが切り替わる場合、スケジューラ(スレッド管理する人)というプロセスに
切り替わるわけだから、

スレッドA→スレッドB ではなく、
スレッドA→スケジューラ→スレッドB だから、
スレッドが切り替わる時にはプロセスの切り替えが常に2回発生している。
スレッドAとBのプロセスが同じかどうかなんて関係なしに、手間は一緒。

472 :デフォルトの名無しさん:04/06/03 16:07
>>471
参考になりました。ありがとう

473 :デフォルトの名無しさん:04/06/03 16:11
うむ、Windows みたいな 1:1 スレッドだとスレッド切り替えもプロセ
ス切り替えも差はないかもね。

NetBSD や Solaris の N:M スレッドだと、同一プロセス間のスレッド
切り替えのほうが異プロセス間の切り替えより一般的に速くなります。



474 :デフォルトの名無しさん:04/06/03 17:04
ダイアログボックスのエディトボックスとコンボボックスから値を取得したいんですけどうまくいかないんです。
ソースは以下のような感じです。

long no1,no2;
int com;
省略
GetDlgItemText(hWnd,IDC_EDIT1,(char*)no1,sizeof((char*)no1));
GetDlgItemText(hWnd,IDC_EDIT2,(char*)no2,sizeof((char*)no2));
com = SendDlgItemMessage(hWnd,IDC_COMBO,CB_GETCURSEL,0,0);

一応グーグルトかで調べてみたんですけど、大体のところはこれと同じような書き方でした。
どこがおかしいんでしょうか?

475 :デフォルトの名無しさん:04/06/03 17:11
>>474
ようソースとMSDN見ろ。

476 :デフォルトの名無しさん:04/06/03 17:12
long を char* にキャストした時点で変だと思わんか?

477 :デフォルトの名無しさん:04/06/03 17:15
>>474
値を取得したいなら、GetDlgItemIntを使え

まぁ、それ以前の問題という説もありそうだが・・・

478 :デフォルトの名無しさん:04/06/03 17:33
CreateProcessやShellExecuteで作成したプロセスを終了させるにはどうすればいいのでしょうか?

479 :デフォルトの名無しさん:04/06/03 17:33
プライマリスレッドを殺そう

480 :デフォルトの名無しさん:04/06/03 17:37
CPUは逐次スレッドを読み込むだけだから
異なるアプリの論理空間のコードを読み込むには
OSがいろいろ動いて、実行環境をスイッチするわけなんですよね?

このOSが実行環境を整えるのに掛かるオーバーヘッドは、
同プロセスのスレッド切り替えと比較しても無視できるほどそんなに小さいものなんでしょうか?
>>469>>471のレスを読んでると、そう読み取れたんですが

481 :デフォルトの名無しさん:04/06/03 17:38
グーグルト

482 :デフォルトの名無しさん:04/06/03 17:41
>>478
まずプロセスにどうにかして終了してもらうようにお願いする。
(例えばGUIアプリならWM_ENDSESSIONとか)
それでもだめならTerminateProcess(素人にはオススメできない)

483 :デフォルトの名無しさん:04/06/03 17:42
>>478
TerminateProcess()で思いっきり終了させて下さい

484 :デフォルトの名無しさん:04/06/03 17:51
>>478
起動したプロセスのウィンドウハンドルを
つかまえてWM_CLOSE投げるとか。


485 :446:04/06/03 17:59
>>449 遅くなってすみません。
動的、静的を問わず user32.dllがロードされていれば成功します。
2K SP4 と XP SP1 で試してみました。

それはさて置き

dll内で、グローバルオブジェクトのコンストラクタ中に
自身のリソースにアクセスしたいんですけど
そのdll名が変化する場合、GetModuleHandleでは無理ですよね。
VirtualQueryで取得したアドレスとかは保証されてないだろうし…
他に何か方法は無いでしょうか。

486 :デフォルトの名無しさん:04/06/03 18:01
>>480
何を知りたいのか、何を心配してるのかようわからんが、
そもそもスレッドの切り替えに要する時間そのものが無視できるほど微々たるもの。
スレッドの切り替えを大げさに考えすぎじゃないか?
基本的には数十個のCPUレジスタのロード,ストアだけで実行環境は切り替わる。

487 :デフォルトの名無しさん:04/06/03 18:04
それでも単純にスレッド切り替えをしているとGDIパフォーマンスが足りなかったので
NTではカーネルモードの高速スレッドスイッチングを実装してたような

488 :デフォルトの名無しさん:04/06/03 18:06
GDIがユーザモードからカーネルモードに移動した時には、
いろいろ問題あったなぁ。

489 :デフォルトの名無しさん:04/06/03 18:08
>>485
MFC環境か?なら↓だと思ふ。

http://www.microsoft.com/japan/msdn/library/ja/vccore/html/_core_exported_dll_function_entry_points.asp?frame=true

490 :478:04/06/03 18:08
TerminateProcessはうまくいきました。
# ShellExecuteのハンドルでは駄目でしたが…

もうひとつの方はこんな流れでいいのでしょうか。
1. CreateProcessでプロセスを生成(hProcessを取得)
2. hProcessの持つウィンドウを検索(hWndを取得)
3. hWndに対してSendMessage(WM_ENDSESSION or WM_CLOSE)する
4. WaitForSingleObject(hProcess)で終了待ち。

それで2.はどうすればいいのでしょうか。
ウィンドウのキャプションで検索するのは不確実ですよね。

491 :デフォルトの名無しさん:04/06/03 18:12
タイムスライスの10msに比べれば、微々たるものだが、
頻繁にスレッド切り替えが発生するような設計なら無視できなくなるかも。
というか、その設計自体に問題がありそうだが。

492 :デフォルトの名無しさん:04/06/03 18:12
>>490
ShellExecuteではなくShellExecuteExを使う

493 :デフォルトの名無しさん:04/06/03 18:15
>>490
EnumWindows()とGetWindowThreadProcessId()の組み合わせでどうじゃろ

494 :デフォルトの名無しさん:04/06/03 18:19
スレッドやプロセスの切り替えオーバヘッドが気になるようなら、
Fiber を使いませう。



495 :446:04/06/03 18:25
>>489
すいません、レス頂いて恐縮ですけど

MFC嫌いなんで使ってません。

496 :480:04/06/03 18:31
みなさんレスありがとうございます。オーバーヘッド云々は
どうも、マルチプロセス環境のプロセス切り替えと
マルチスレッド環境のプロセス切り替えとを混同してたっぽい

497 :デフォルトの名無しさん:04/06/03 18:38
>>446
お前がどうやって成功しないと判断したのかかけ

498 :デフォルトの名無しさん:04/06/03 18:52
>>485
とりあえずGetLastErrorしてみたら?

499 :デフォルトの名無しさん:04/06/03 18:59
>>495
DLLのリソース取得するのに自分自身のHMODULEが必要だってんなら
DllMainの引数にあるやつどっかにとっとけば?

500 :446 & 485:04/06/03 19:22
>>497
GlobalAddAtomとGetLastErrorの戻り値を MessageBoxで表示したときと
OutputDebugStringで表示したときと違ったから。
確かに user32.dllと決めつるのはマズイですね。

>>499
グローバルなオブジェクトのコンストラクタは
DllMainより前に呼ばれるんですよ。

501 :デフォルトの名無しさん:04/06/03 19:27
>>500
んじゃ素直に初期化をDllMainでやれ。

502 :478:04/06/03 19:31
無事成功しました。皆さんありがとうございます。
せっかくなのでソースを貼っておきます。

CreateProcessやShellExecuteで作成したプロセスを終了させるサンプル
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1086258254&res=2


503 :デフォルトの名無しさん:04/06/03 19:40
動画ファイルからBMP形式で特定のフレームを取り出したいのですが、
AVI以外の形式の場合の取り出し方がわかりません。
OSにインストールされているコーデックを利用出来れば
取り出せるようになると思うのですが、
自作アプリからそれらのコーデックはどうやったら呼び出せるのでしょうか?


504 :デフォルトの名無しさん:04/06/03 19:40
>>502
ざっと見て気になったところ
・WM_CLOSEでメインウィンドウが閉じられたからといってプロセスが終了するとは限らない。
 WM_QUERYENDSESSION/WM_ENDSESSION(Windows終了/ログオフ時のメッセージ)
 のほうがより確実だと思う。
・対象プロセスが死んでると道連れになるからWaitForでINFINITE待機はやめれ

505 :デフォルトの名無しさん:04/06/03 19:59
>>503
DirectShowでできるんでない?

506 :デフォルトの名無しさん:04/06/03 20:58
>>500
>グローバルなオブジェクトのコンストラクタは
>DllMainより前に呼ばれるんですよ。

その DllMain は偽者ですよ。
リンカの設定で本物が指定してあるはずなんで、
それを書き換えるなりしてください。


507 :デフォルトの名無しさん:04/06/03 21:34
>>446が言ってるのって、これかな
ttp://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.kernel/2004-03/0851.html


508 :デフォルトの名無しさん:04/06/03 22:33
>>502
ThreadのHANDLEもCloseしておけよ。

509 :503:04/06/03 22:38
>>505
レスありがとうございます。
DirectShowで検索してDXSDKのGrabBitmapsにたどり着きました。
これがやりたい事そのものみたいです。

しかしこのサンプルを実行してみると、
hr = pGraph->Connect( pSourcePin, pGrabPin );
の行で必ずVFW_S_PARTIAL_RENDERが戻ってきており、
またcallbackも呼ばれません。
どなたかこのエラーの回避法をご存じ有りませんでしょうか?


510 :Earthquake:04/06/03 22:52
はじめまして。Earthquakeと申します。
Windows2000サーバのActiveDirectoryを使用している環境でのフォルダリダイレクトの設定を出力したいのですが、Win32APIでそんな関数ないですか?

511 :デフォルトの名無しさん:04/06/04 02:42
#include <windows.h>
#include <wincrypt.h>
#include <stdio.h>

/*----------------------------------------------------------------------------*/
namespace hoge
{
AnsiString LonToStr(unsigned long x)
{
int r;
AnsiString tmp;

r = x % 16;
x = x / 16;
if (x > 0) {
tmp = tmp + uLongToStr(x);
}
switch (r){
case 0: tmp = tmp + "0"; break;
case 1: tmp = tmp + "1"; break;
case 2: tmp = tmp + "2"; break;
case 3: tmp = tmp + "3"; break;
case 4: tmp = tmp + "4"; break;
case 5: tmp = tmp + "5"; break;
case 6: tmp = tmp + "6"; break;
case 7: tmp = tmp + "7"; break;
case 8: tmp = tmp + "8"; break;
case 9: tmp = tmp + "9"; break;
case 10: tmp = tmp + "a"; break;
case 11: tmp = tmp + "b"; break;

512 :デフォルトの名無しさん:04/06/04 02:42
case 12: tmp = tmp + "c"; break;
case 13: tmp = tmp + "d"; break;
case 14: tmp = tmp + "e"; break;
case 15: tmp = tmp + "f"; break;
}
return tmp;
}
}


int main()
{
HCRYPTPROV hProv;
HCRYPTHASH hHash;
HCRYPTKEY hKey;
BOOL bResult;
BYTE Buf[] = "今日は良い天気です";
BYTE Signature[100];
DWORD SignLen;

/* デフォルト鍵コンテナの取得 */
CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0);

/* ハッシュ値の生成 */
CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
CryptHashData(hHash, Buf, lstrlen(Buf)+1, 0);

printf("%s\n", hoge::LonToStr(hHash));


513 :デフォルトの名無しさん:04/06/04 02:44
/* 後処理 */
CryptDestroyKey(hKey);
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
}

これをコンパイルすると
C:\cpp>bcc32 hash.cpp
Borland C++ 5.6 for Win32 Copyright (c) 1993, 2002 Borland
hash.cpp:
エラー E2141 hash.cpp 8: 宣言の構文エラー
エラー E2190 hash.cpp 38: 不要な }
エラー E2316 hash.cpp 58: 'LonToStr' は 'TET_YAS' のメンバーではない(関数 main()
)
*** 3 errors in Compile ***
となっちゃうんですけど、原因がよくわかりません。教えてください。

514 :デフォルトの名無しさん:04/06/04 03:09
bcc32でつか・・・

単にAnsiStringが定義されていないだけでは・・・?
よくわからないけど
#include <vcl.h>
とかそれっぽいのをincludeすればいいんじゃない?

515 :451:04/06/04 04:08
>>465
どうも、レス遅くなってすみません!
言われましたとうりに、UpdateLayeredWindow()を使う事で
描画効率が格段に良くなりました!!

どうやら、自分で色々調べてみた結果
更新頻度の多いアプリでは、SetLayeredWindowAttributes()より
UpdateLayeredWindow()を使う方が推奨されているようですね。

本当にありがとうございました!!

516 :デフォルトの名無しさん:04/06/04 11:08
以下のように独自の構造化例外ハンドラをセットして、
その中から C++ 例外を創出するような以下のコードは危険でしょうか?

// カスタム例外ハンドラ
void _OnW32SEH( UINT code, _EXCEPTION_POINTERS * ep )
{
 _EXCEPTION_RECORD * er = ep->ExceptionRecord;
 throw MyCppException( code, er->ExceptionInformation );
}

// カスタム例外ハンドラを有効にする
void EnableSEtoCPPException()
{
 _set_se_translator( OnW32SEH );
}


517 :516:04/06/04 11:53
すいません。
MSDNみたら、OKって書いてありました。


518 :デフォルトの名無しさん:04/06/04 11:58
ユーザ名とドメイン名とパスワードを渡して正規のユーザかどうかをチェックするにはどうしたらいいのでしょう?

MSDNまで漁ったけど漠然とし過ぎてるのか見付けられない…orz

519 :デフォルトの名無しさん:04/06/04 11:59
適当なプログラムをrunasで呼ばせて成功すれば認証OKってのはだめ?

520 :518:04/06/04 12:49
>>519
いや、もっとスマートなやり方がきっとある筈なので…orz

521 :デフォルトの名無しさん:04/06/04 13:35
ActiveDirectory なら、LDAP使うとか。

522 :デフォルトの名無しさん:04/06/04 15:12
IHTMLDocument2のwriteを使ってIEコンポにHTMLを表示しました。
しかし、2度目writeすると現在の表示されているものに追加されて表示されてしまいます。
そこで一旦HTMLを全消去したいのですが方法が分かりません。
clear()とかやってみましたが駄目でした。

523 :デフォルトの名無しさん:04/06/04 16:34
about:blank開け!

524 :デフォルトの名無しさん:04/06/04 16:40
>>523
IHTMLDocumentは使ったこと無い者だが、それ面白いな。

まさか、それがMS推奨の手順ではないよな??

525 :デフォルトの名無しさん:04/06/04 17:02
>>522
とりあえず、MSDNのIHTMLDocument2::clearの項目を読め
全てはそこにある

526 :デフォルトの名無しさん:04/06/04 17:54
リストビューをカスタムドローして文字色を変更させているのですが、
特定の色:RGB(0,0,255)を指定した場合のみ変更されず困っています。
RGB(0,0,254)やRGB(0,1,255)の場合は問題ありません。
背景色の場合は問題ないようです。

どなたか原因または対処法をご存知ないでしょうか。
Win2000 VC6.0です。


527 :デフォルトの名無しさん:04/06/04 18:09
>>526
見た目気づかないから(0,1,255)でいいんじゃね?

528 :526:04/06/04 18:39
どうも環境依存のようです。
実行環境のみ他のPCへ移してテストしたところ
WinXP NT4では問題ありませんでしたが、
他のWin2000では再現しました。

>>527
最終的に解決しない場合はそうします。



529 :デフォルトの名無しさん:04/06/04 18:46
>>528
ウチじゃ問題ないよ。

530 :デフォルトの名無しさん:04/06/04 18:50
ディスプレイの色数とかじゃないのか?

531 :デフォルトの名無しさん:04/06/04 18:51
>>>527
>最終的に解決しない場合はそうします。

仕事でこの手の問題にぶつかったときに
あまり悩まずに >>527のような処置で
済ませてしまうオレはダメダメでしょうか・・・。

532 :デフォルトの名無しさん:04/06/04 18:52
>>530
R/G/Bの原色が出ないカラーディスプレイは
たぶん存在しないだろう。


533 :デフォルトの名無しさん:04/06/04 18:53
>>531=kuzu

534 :デフォルトの名無しさん:04/06/04 20:00
IEのツールメニューに独自のメニューを追加するにはどうすればいいですか?

535 :デフォルトの名無しさん:04/06/04 20:57
>>531
damedame

536 :531:04/06/04 21:24
辞表出してきます

537 :デフォルトの名無しさん:04/06/04 21:39
おうよ。後は俺が就職してやるから安心してくれ。

538 :デフォルトの名無しさん:04/06/04 22:32
>>534
ttp://www.codeproject.com/atl/popupblocker2.asp
このページをCToolsMenuで検索。
でももっと簡単な方法があるような気がしないでもないが。


539 :デフォルトの名無しさん:04/06/04 22:50
SDKで数値データを出力する方法を教えて下さい。
具体的にはreadfile関数などで読み込んだ文字列を
16進数で表示したいのです。


540 :デフォルトの名無しさん:04/06/04 22:58
出力ってどういう意味?

541 :デフォルトの名無しさん:04/06/04 23:08
wsprintf

542 :デフォルトの名無しさん:04/06/04 23:11
>>541
それはここに書き込む前に使ってみたんですが
デバック画面出て強制終了してしまいます。他に方法ないですか?

543 :デフォルトの名無しさん:04/06/04 23:14
ぬるぽしないようにちゃんとメモリ確保したか?

544 :デフォルトの名無しさん:04/06/04 23:14
>>542
お前のプログラムがへたれなだけ。

545 :デフォルトの名無しさん:04/06/04 23:15
>>543
どうやらそれっぽいのでもっかいやってみます

546 :デフォルトの名無しさん:04/06/04 23:21
>>545
ちゃんとガッしとけ

547 :デフォルトの名無しさん:04/06/04 23:22
>>543
とりあえず ガッ

548 :デフォルトの名無しさん:04/06/04 23:23
ヒントをやって叩かれるとは世知辛い世の中じゃ

549 :545:04/06/04 23:26
強制落ちしないで起動しますた。なんとかできそうです。どうもですた

550 :デフォルトの名無しさん:04/06/04 23:31
これ(>>539-548)で解決したのか orz

551 :デフォルトの名無しさん:04/06/05 01:19
>>518
Net系のAPI使え

552 :デフォルトの名無しさん:04/06/05 01:28
オフスクリーンのピクセルデータをDIBにコピーするにはどうしたらいいでしょうか
BitBltじゃ遅くて...

553 :デフォルトの名無しさん:04/06/05 01:49
GetDIBits

554 :デフォルトの名無しさん:04/06/05 02:17
>>504
WM_CLOSEなら終了するけど
WM_*ENDSESSIONは無視する奴も結構あるぞ

555 :デフォルトの名無しさん:04/06/05 02:31
>>553
ありがとうございます
やってみたところあまり変わりませんでした
逆に少し遅くなってしまいました

556 :デフォルトの名無しさん:04/06/05 02:38
DIBは遅いもの、それはしょうがない気が。
αブレンドとかしたいのなら標準関数でDDBのままやるのがいいと思う

557 :デフォルトの名無しさん:04/06/05 02:41
ttp://www.sun-inet.or.jp/~yaneurao/intensive/diw1.html

まー、一応参考になるか?

558 :デフォルトの名無しさん:04/06/05 03:52
>>556
その通りでαブレンドがしたいのですが
DDBだとどうやってピクセルデータを弄るのかが分かりません

>>557
ありがとうございます
参考にさせていただきます

559 :デフォルトの名無しさん:04/06/05 03:57
AlphaBlend

560 :デフォルトの名無しさん:04/06/05 04:16
>>559
ありがとうございます
こんなAPIがあったとは!
αブレンドはこれで解決出来たと思います

561 :デフォルトの名無しさん:04/06/05 07:09
サブクラス化をして欲しい機能を実現したいのだけど、
ウインドウプロシージャを取り替えた後、そのウインドウが
終了するときは元のプロシージャに戻す必要があるのでしょうか?
また、戻すタイミングはいつがいいのでしょうか?
WM_DESTROYに返事をするときかな

WM_CHARとかWM_KEYDOWNとかでちょっと横取りして
あとはオリジナルにまかせっぱなしをしてるくらいだから
別に元に戻さなくてもいいような…

562 :デフォルトの名無しさん:04/06/05 11:43
hProcess->pid変換ってどうやるの。

563 :デフォルトの名無しさん:04/06/05 11:52
逆だった。hProcess<-pidね。

564 :デフォルトの名無しさん:04/06/05 13:05
>>563
OpenProcess

565 :デフォルトの名無しさん:04/06/05 13:17
タスクマネージャに出てくるプロセスの優先度を変更したいのですが、
どうすればいいのかさっぱり分かりません。
プライマリスレッドの優先度を低くしても、タスクマネージャの表示は標準のままなのですが・・・

566 :デフォルトの名無しさん:04/06/05 13:39
プロセスの優先度とスレッドの優先度は違うぞ。
どういう計算になるのか知らんけど。

567 :デフォルトの名無しさん:04/06/05 13:41
SetPriorityClass

568 :562:04/06/05 14:55
>>564
それを使ってみたけどうまくいかないです。
タスクマネージャで表示されているプロセス(winhlp32.exe pid:3308)を指定して以下のコードを実行するとみると
for(;;){ printf("%d\n", OpenProcess(PROCESS_ALL_ACCESS, FALSE, 3308)); Sleep(1000); }
2024
2036
2012
2008
2004
2000
1996
...

こんな結果が返ってきてしまいます。使い方はこれしかないですよね。
でも、毎回結果が違うってありえないonz...


569 :デフォルトの名無しさん:04/06/05 15:03
>>568
藻前の脳味噌のほうがありえない
ハンドルってどういうものだか分かってるのか

570 :デフォルトの名無しさん:04/06/05 15:16
>>568
・・・とんでもないな。
OpenしたものはちゃんとCloseしろとかいう以前の問題。

571 :デフォルトの名無しさん:04/06/05 15:47
>>568
やりとりのふいんきが昨日の>>539と似てるんだが
OpenProcessの返値を出力するために>>539
質問をしたわけじゃないよな?

ちょっとお茶目すぎ

572 :デフォルトの名無しさん:04/06/05 16:47
下らないことかもしれませんが。
Sleep(INFINITE)を実行したスレッドを復帰させるにはどうすればいいですか?

573 :デフォルトの名無しさん:04/06/05 16:55
>>572
イベントなりセマフォと WaitForSingleObject を使え。

574 :デフォルトの名無しさん:04/06/05 17:09
>>572
はは、ほんとくだらないねーw
やったことないけど、ResumeThread じゃ起きないかな?


575 :デフォルトの名無しさん:04/06/05 17:12
無理

576 :デフォルトの名無しさん:04/06/05 17:36
DebugBreakProcess

577 :デフォルトの名無しさん:04/06/05 18:41
ジョイパッドはDirectXを使わないと使えませんか?

578 :デフォルトの名無しさん:04/06/05 19:12
joy

579 :デフォルトの名無しさん:04/06/05 19:27
>>578
ありがとう、出来ました

580 :デフォルトの名無しさん:04/06/05 19:48
リストボックスに何も文字入れていない状態なのに、一番上が点線で選択できるようになっているんですけど、
どうやった回避できますか?
一応プロパティあたりは見たつもりなんですが、無かったようですし、、、。

581 :デフォルトの名無しさん:04/06/05 20:15
>>580
何も無いときは真っ白なウィンドウを被せるとか

582 :デフォルトの名無しさん:04/06/05 20:23
hackyカコイイ

583 :デフォルトの名無しさん:04/06/06 03:21
CreateWindowに"MDICLIENT"を指定して作ったクライアントウィンドウ上で
右クリックメニューを出すにはどうしたらいいですか?

584 :デフォルトの名無しさん:04/06/06 03:29
>>583
あいにくと俺は超能力者ではないので喪前さんが言ってることが良く分からんのだが
ttp://black.sakura.ne.jp/~third/system/winapi/win78.html
ここに書いてあることで分かりそうかい?
ハズしてたらもうちょっと分かりやすく質問してくれ。

585 :デフォルトの名無しさん:04/06/06 04:04
>>584
すいません、分かりにくいですよね。

一応、通常の右クリックメニューの出し方は分かるんですが、
MDIアプリケーションにしようとして、
クライアントウィンドウを作ると右クリックメニューが出なくなってしまうので、
どうしたらいいでしょうか? という質問です。

口下手で申し訳ない…_| ̄|○

586 :デフォルトの名無しさん:04/06/06 12:11
口が下手なら、下の口で満足させてくれればOK


587 :デフォルトの名無しさん:04/06/06 12:14
やらにゃいか

588 :デフォルトの名無しさん:04/06/06 12:15
バラライカ

589 :デフォルトの名無しさん:04/06/06 12:30
>>585
MDICLIENTのウィンドウをサブクラス化したらできたような気がする。

590 :デフォルトの名無しさん:04/06/06 12:53
バナナ烏賊

591 :デフォルトの名無しさん:04/06/06 12:54
臭そうだ

KSASO

OSASK

592 :デフォルトの名無しさん:04/06/06 12:59
   ト、 , ---- 、
   H /::(/、^^, :゙i
(( (ヨb |::l,,・  ・,,{:K〉 ))
   \`l:ト、(フ_ノ:」/   < ぉまぇら 全員 学習ルーム来いヤ!☆
    ゙、 ヾ〃 /
     〉 ネヴァダ|

593 :585:04/06/06 20:08
>>589
ありがとうございます。出来ました。
ttp://black.sakura.ne.jp/~third/system/winapi/win64.html
で、ウィンドウプロシージャの切り替えが出来ることが分かったので、
"MDICLIENT"を指定したCreateWindowでhClientWindowを作った直後に、
SetWindowLong(hClientWindow, GWL_WNDPROC, (LONG)ClientWindowProc);
として、ウィンドウプロシージャを切り替えることでできました。

サンプルが必要な方は、アプロダ指定してくれれば、うpします。
それでは、本当にありがとうございました。

594 :デフォルトの名無しさん:04/06/07 00:15
>>592
不謹慎!(@u@ .:;)ノシ

595 :デフォルトの名無しさん:04/06/07 10:08
データの移行ツールを作ってます。
Win2K+SP4で使ってたOutlook2000のデータ(メールデータ,振り分け,アカウント,他)を
別PCのWinXPでOutlook2002に移行したいんですが、どーやれば良いんでしょう?

Outlookのメニューからエクスポート/インポートを実行すれば大体は移行できるんですが...
コレをプログラム上で行いたいんです。
市販の移行ツールではこの様なコトが可能になっているので
何らかの手段はあると思うのですが自分にはさっぱり判りません。

移行する方法を知っていたらご教授をお願いします。

追加。
 Outlook相談室とそこで紹介されたトコにも投げてしまったんで、
 マルチになってしまいました。<(_ _)>

596 :デフォルトの名無しさん:04/06/07 10:10
>>594
なによその顔文字は。ふざけてるの?

597 :デフォルトの名無しさん:04/06/07 11:23
>>595
調べてもわかんねえやつがそういうツール作るなよ。

598 :デフォルトの名無しさん:04/06/07 11:43
>>595
COMのインターフェース調べてそういった機能があれば使う。
なければOutlookのバイナリ解析して自力でやる。
あるいはMSと契約してコンバートツールを作らせてもらう。

599 :デフォルトの名無しさん:04/06/07 11:45
>>597
調べて判ったんなら、ココで聞かずに作ってますよ。
ヒントぐらい...くれ

600 :デフォルトの名無しさん:04/06/07 11:50
む。ヒントが...


601 :デフォルトの名無しさん:04/06/07 11:51
ここで具体的な情報が出てくるわけないだろ

602 :デフォルトの名無しさん:04/06/07 11:53
pstファイルをコピペすれば?
移行するだけなら、それで良くね?

603 :デフォルトの名無しさん:04/06/07 11:53
>>595
俺はOutlook使った事はないが Documents and Settings からファイル探して、
コピーすれば出来ると思うぞ。

604 :デフォルトの名無しさん:04/06/07 12:54
CreateProcessと同じようにして自プロセス内の新規スレッドとして他プロセスを起動する事の出来るAPIはありますか?
あれば教えてください

605 :デフォルトの名無しさん:04/06/07 13:12
ないだろ。情報やり取りしたいなら
普通にCreateProcessしてプロセス間通信するなりデバッグ系API使うなりするしかない。

606 :デフォルトの名無しさん:04/06/07 13:19
pstファイルだけ上書きするとメール本文(一覧?)は移行できても
そのあとの動作がなんかおかしくなるねん。
Outlook2000 → 2002だからかもしれんが

もちっと四苦八苦してみるか..._| ̄|○

607 :デフォルトの名無しさん:04/06/07 16:39
>>606
>Win2K+SP4で使ってたOutlook2000のデータ(メールデータ,振り分け,アカウント,他)を
>別PCのWinXPでOutlook2002に移行したいんですが、どーやれば良いんでしょう?
>Outlookのメニューからエクスポート/インポートを実行すれば大体は移行できるんですが...

「大体」ってのがどの程度なのか分からないのであれだが、

大体でいいのであれば、インポートとエクスポートのマクロ書けば
いいんじゃないの? これが一番楽な気がするけど。

移行ツールなんだから、どちらのPCにもOutlookが入ってる訳でしょ?


608 :デフォルトの名無しさん:04/06/07 19:13
>>605
ありがとうございます。他の方法でがんばってみます。

609 :デフォルトの名無しさん:04/06/08 02:10
>>595
プロファイルはMAPIで読み書きしてみるとか

610 :デフォルトの名無しさん:04/06/08 12:01
親Windowの上に子Windowが何個かついたものを作りました。
子Windowの配置をGetDialogBaseUnit()でおこなっています。

親Windowのフォントの大きさを変える事ってできるのでしょうか?

子WindowにはSendMessage(chWnd,WM_SETFONT,(WPARAM)hFont,MAKELPARAM(TRUE,0));
でできるのですが、親にSendMessage(hWnd,WM_SETFONT,(WPARAM)hFont,MAKELPARAM(TRUE,0));
しても変わりません。何かよい方法があるのでしょうか?
宜しくお願いします。


611 :デフォルトの名無しさん:04/06/08 12:11
>>610
何を期待してるのか知らないけど、親Windowのフォントの大きさを変えても
GetDialogBaseUnitの返す値は変わらないよ。「画面のプロパティー」で
設定されるシステムフォントのサイズを変えない限り


612 :610:04/06/08 12:16
>>611
うう・・有難うございます。
期待していたのは、Borlandのリソースエディタで、親Dialogのフォント
の大きさを変えると、子コントロールの大きさや位置がそれなりに変わって
くれるから、同じことをやりたかったんです。

ああ・・・

613 :デフォルトの名無しさん:04/06/08 13:18
>>610
親ウィンドウをダイアログで作るか、座標モードをキャラクタ単位にするとかどうよ。

614 :デフォルトの名無しさん:04/06/08 13:19
MapDialogRectは使えんのだっけ?

615 :デフォルトの名無しさん:04/06/08 13:24
CreateFileMappingで作ったマッピングファイルを複数のプロセスが共有していまして、
このマッピングファイルに変更があれば感知したいのです。
WaitForSingleObjectみたいな感じで、イベントを取るためには何を使えばいいのでしょうか?


616 :デフォルトの名無しさん:04/06/08 14:12
>>615
別途イベントかなんかで通知するのが良いと思う。

617 :610:04/06/08 14:19
>>613
なりがとうございます。
とりあえず、関数作りました。みてください。

void MoveChildWnd2(HWND handle,HFONT font,int x,int y,int w,int h)
{
 HDC hdc  =  GetDC(handle);
 
 ::SelectObject(hdc,font);

 int font_height;
 int font_width;

 TEXTMETRIC tm;
 GetTextMetrics(hdc,&tm);

 font_height = tm.tmHeight;
 font_width = tm.tmAveCharWidth;


618 :610:04/06/08 14:20

 DeleteDC(handle,hdc);

 ::SendMessage(handle,WM_SETFONT,(WPARAM)font,MAKELPARAM(TRUE,0));

 RECT r;
 r.left = MulDiv(x,font_width,4);
 r.top = MulDiv(y,font_height,8);
 r.right = MulDiv(w,font_width,4);
 r.bottom = MulDiv(h,font_height,8);

 window_x  = r.left; //ウィンドウのX位置
 window_y  = r.top; //ウィンドウのY位置
 window_width = r.right - r.left; //ウィンドウの幅
 window_height = r.bottom - r.top; //ウィンドウの高さ

 ::MoveWindow(handle,r.left,r.top,r.right,r.bottom,TRUE);

}


619 :デフォルトの名無しさん:04/06/08 15:44
>>610
えーと。フォントのサイズでモニョモニョするっていうんじゃないんだ。
ダイアログは普通のウィンドウと違って、そのサイズはフォント文字のサイズを元に決められてるんだ。
試したことないからうまくいくか知らんけど、SetMapModeとかでウィンドウのサイズ単位を買えてやればいいんじゃないかと思ったのよ。

620 :610:04/06/08 15:58

>>619
そうです。これだと解像度がかわっても子Windowの位置関係は保持されそうでしょ?

case WM_CREATE:
   HWND hEdit1  = CreateWindow("EDIT",・・略
   HWND hEdit2  = CreateWindow("EDIT",・・略
   HWND hButton = CreateWindow("BUTTON",・・略

   HFONT font = CreateFont(・・・略
  
   MoveChildWnd2(hEdit1,font,10,20,60,30);
   MoveChildWnd2(hEdit2,font,10,60,60,30);
   MoveChildWnd2(hButton,font,10,100,60,30);
   break;


621 :デフォルトの名無しさん:04/06/08 16:32
>>620
うまくいきそうだけど、もし親ウィンドウのサイズも変えるのなら、
単純にそれにあわせて拡大・縮小すれば良いような気もしないでもない。
あとドロップダウンコンボボックスで不都合が出るので、もしあるなら対応すべし。

622 :デフォルトの名無しさん:04/06/08 19:18
はやく615の質問も答えてやれよ
みんなわからないのかい?


623 :デフォルトの名無しさん:04/06/08 19:21
うん。わからない。
じゃあね。

624 :デフォルトの名無しさん:04/06/08 19:36
>>622
>>616 が答えてるだろ。
マップするファイルで Notify オブジェクトが作れるなら
WaitFor〜 で待てるかも知らんが、君やってみてくれる?

625 :デフォルトの名無しさん:04/06/08 19:42
そんなもんがあったらものすごいオーバーヘッドだろうな

626 :デフォルトの名無しさん:04/06/08 19:45
翼くん並のものすごいオーバーヘッドだな。

627 :デフォルトの名無しさん:04/06/09 13:49
Cでの非MFCウィンドウズアプリ製作で、
一つのウィンドウにWndProcを複数作る事は出来るのでしょうか。
ゲームを作っていて、今のやり方は

LRESULT CALLBACK WndProc(...)
{
static int gameRoutine = Title;
if(gameRoutine == Title) HandleTitle();
else if(gameRoutine == InputName) HandleInputName();
}

みたいにやっているのですが、

LRESULT CALLBACK HandleTitle(...)
LRESULT CALLBACK HandleInputName(...)

と複数作って、タイトルの処理をしている時は、
WinMainのGetMessage()でイベントを受けたときHandleTitle()に行くようにして、
名前入力のときはHandleInputName()に行くようにしたいのです。

628 :デフォルトの名無しさん:04/06/09 13:52
元のメッセージループの直前で分岐すればいいんじゃないの。
そのゲーム用のWndProcで取りこぼしたメッセージを元のWndProcで処理する必要もあるだろうし。

629 :デフォルトの名無しさん:04/06/09 13:55
>>627
無理。一つのWinProcとして登録できるのは一個だけ。
二種類扱いたいならWinProcを設定しなおすしかないが、
結局は今やってるのとあまり変わらんように思う。

if文を無くしたいだけなら関数テーブルを使ってみたら?


630 :627:04/06/09 14:05
コンソールプログラムでは、タイトルの処理の時は、他のゲームルーチンを
まったく触らずに処理できますが、そういう感じにしたいのです。

int HandleTitle()
{
while(1)
{if(oo) {afterRoutine = InputName;break;}}
}

HandleInputName()
{
while(1){}
}

>>628
PeekMessageInputという事ですか?
これはCPU率とかありますし、スレッドも難しくて分かりません。
取りこぼしについては、個々のゲームルーチンで全部書くようにします。

>>629
無理ですか。ChangeWndProc(hWnd, HandleInputName);
とかは考えてみたのですが。関数テーブルは調べて見ます。

631 :627:04/06/09 14:07
>>630
>HandleTitle()
afterRoutineを返します。

>PeekMessageInput
PeekMessageに修正します。

632 :627:04/06/09 14:14
>>629
あっ、関数ポインタですか。それでやってみます。

御二方、どうもありがとうございました。

633 :デフォルトの名無しさん:04/06/09 14:21
>>630
WndProc変えるならSetWindowLongで

634 :627:04/06/09 14:29
>>633
ありがとうございました。やってみます。

635 :デフォルトの名無しさん:04/06/09 14:52
マウスの移動に関する情報として
マウスポインタの位置ではなく(コントロールパネルの
マウスから設定できるポインタ速度に左右されず)
マウス自体の移動量を得る方法はないでしょうか?
APIでは無理なのでしょうか?

636 :デフォルトの名無しさん:04/06/09 14:53
設定速度をかけられてるから、レジストリからその値を取得して割る

637 :635:04/06/09 15:07
>>636
なるほど
レジストリの値は
同じ速度ならどのマウスデバイスも同じ値なのでしょうか?
またレジストリキーも名前はいっしょなのでしょうか?

638 :デフォルトの名無しさん:04/06/09 15:13
名前は同じはず。以前調べたけど忘れた
マウスの設定アプレットをRegmonで監視すれば簡単に分かるはず

速度とマウス移動量の関係っつーのは一概に言えないね
経験上だけど普通のボール式PS2マウス・光学式PS2マウス・タブレットに付属してる電磁誘導マウス
同じくらい動かしても全部全く違う操作感だから。つまり、移動量を得られたところで環境に依存するから
あまり意味が無いんじゃないかと

639 :デフォルトの名無しさん:04/06/09 15:19
HKCU\Control Panel\Mouse\MouseSensitivityかな

640 :635:04/06/09 15:22
>>638
ありがとうございマウス(´・ω・`)ショボ-ン

641 :デフォルトの名無しさん:04/06/09 15:58
>>635
GetMouseMovePointsEx で GMMP_USE_HIGH_RESOLUTION_POINTS 指定するのって、
マウスだと意味無いんだっけ?

642 :デフォルトの名無しさん:04/06/09 16:37
意味無い

643 :デフォルトの名無しさん:04/06/09 20:11
モーダルダイアログが別のメッセージループから再帰的に呼ばれて
2つ出現してしまうことがありますが、皆さんどうやって対策していますか?

644 :デフォルトの名無しさん:04/06/09 20:17
そんな状態にならないようにする。

645 :デフォルトの名無しさん:04/06/09 20:26
それは設計が悪いよ。

646 :643:04/06/09 20:35
>>644 >>645
他のアプリから呼ばれるDLLなんでつ。。。

647 :デフォルトの名無しさん:04/06/09 21:06
if (まだでてなかったら) {
ダイアログを表示する
}
とかやれば?

648 :デフォルトの名無しさん:04/06/09 21:14
システム全体に対してフックするようなものだったら恐らく>>647のやり方でもダイアログ表示している間に更に他のプロセスから
呼ばれて二重呼び出しされるんじゃないかねー。こういう時はどうするもんなんだろ。

649 :デフォルトの名無しさん:04/06/09 21:18
看湯兎手楠

650 :デフォルトの名無しさん:04/06/09 21:29
>>648
その場合は
まだ表示されてなかったら
の内容が単なるフラグチェックや何かではすまないだけ
で、別に同じでしょ
>>649
のようにmutex使うとかすればいいのであって


651 :デフォルトの名無しさん:04/06/09 21:59
フォルダの新規作成を検知することは可能ですか?
コピー/移動/削除/名前の変更はICopyHookで実装済みです。
FindFirstChangeNotificationで通知前と後の比較を考えたんですが、
これだとコピー/移動との区別ができません。
何か良い方法はないでしょうか。

652 :デフォルトの名無しさん:04/06/09 22:08
>>651
ものすごく基本的なことだが
ディレクトリは作成と削除しかできない、んじゃないか?
そういうはなしではない?

653 :651:04/06/09 22:33
>>652
言葉足らずですみません。
現在シェル拡張DLLを作成しているんですが、ある特定のフォルダをエクスプローラで
コピー/移動/削除/名前の変更の操作を行った後にそれぞれ異なる処理を行っています。
上記4つはICopyHookのコールバック関数内で区別することができます。
さらに、新規にフォルダを作成した後にまた異なる処理を行いたいのです。
そのため、新規作成を検知する必要があるのです。
(フォルダの操作はエクスプローラで行われることが前提です)


654 :デフォルトの名無しさん:04/06/09 22:33
いつの話だよMS-DOSじゃあるまいし
移動できるよ

655 :デフォルトの名無しさん:04/06/09 22:37
こんばんわ

OPENFILENAME ofn;
と宣言したのですが、
「OPENFILENAMEは定義されていません。」とエラーが出ます。

何かincludeするヘッダがあるのでしょうか?

656 :デフォルトの名無しさん:04/06/09 22:47
MSDN引いた?
思いっきり載ってますが何か?

657 :デフォルトの名無しさん:04/06/09 22:56
includeするだけで済む環境がうらやましい(´・ω・`)


658 :デフォルトの名無しさん:04/06/09 22:58
MSDNって何ですか?

659 :デフォルトの名無しさん:04/06/09 23:03
たのむ少しはググッってくれ

660 :デフォルトの名無しさん:04/06/09 23:15
ググッってって何ですか? 隠語を使わないでください。


661 :デフォルトの名無しさん:04/06/09 23:18
('A`)

662 :デフォルトの名無しさん:04/06/09 23:26
>>660
おお、新しい反撃パターンだ。
これでは、伝家の宝刀の「ググれ!!」が使えないでないか...。






まあ、君にはインターネットは向いてないから、早めに回線切って引きこもった方がいいよ。

663 :デフォルトの名無しさん:04/06/09 23:30
引き篭もりですがいつもGoogleで検索してますがなにか?


664 :デフォルトの名無しさん:04/06/09 23:49
おっさん、おばさんの間でも一部には通じるぞ、「ググる」

665 :デフォルトの名無しさん:04/06/09 23:50
ヲタに通じてもね┐(´д`)┌


666 :デフォルトの名無しさん:04/06/09 23:52
うちの母親はぐぐってGIMPをマスターしたぞ

667 :デフォルトの名無しさん:04/06/10 00:34
>>654
いや「OSレベルでは」というか「ファイルシステムレベルでは」
ディレクトリは作成と削除しかないでしょ
フォルダ単位の移動やコピーを「アプリケーションレベルで」(shellapiも
ふくむ)実装はできるけど、OSレベルではフォルダごとの移動は
ディレクトリの作成→そこにファイル群を移動→元ディレクトリの削除
という形になるでしょ

>>653
という理由によってディレクトリだけ見ても「区別できない」んじゃないかと
思ったのだけど、見当違い?


668 :デフォルトの名無しさん:04/06/10 00:38
コンボボックス内の項目がどれでもいいので選択されているか、選択されていないのかを
判定したい場合どうすればいいでしょうか。お願いします。

669 :デフォルトの名無しさん:04/06/10 00:39
MoveFileExにディレクトリを指定するときの制限を見る限り、667のいうような形では無いと思われ。
ただ単にディレクトリエントリの書き換えだけだろ。

670 :デフォルトの名無しさん:04/06/10 00:47
***_GETCURSEL 系のメッセージ使えば大丈夫

671 :デフォルトの名無しさん:04/06/10 00:57
>>669
ごめんわたしがばかでした
逝ってくるよママン

672 :デフォルトの名無しさん:04/06/10 05:21
Win32APIのオフィシャルな情報ってのは、一体どこに?

673 :デフォルトの名無しさん:04/06/10 05:27
MSDN

674 :デフォルトの名無しさん:04/06/10 10:02
>>655
知っているが「こんばんわ」が気に入らないので教えない

675 :デフォルトの名無しさん:04/06/10 11:12
現在のスレッドのHANDLEを取得するにはどうすればいいですか?

676 :デフォルトの名無しさん:04/06/10 11:13
getcurrentthread

677 :デフォルトの名無しさん:04/06/10 11:44
現在のスレッドのIDを取得するにはどうすればいいですか?

678 :デフォルトの名無しさん:04/06/10 11:47
getcurrentthreadid

679 :デフォルトの名無しさん:04/06/10 11:48
つーかMSDN引け ぐぐれ ヴォケ

680 :デフォルトの名無しさん:04/06/10 12:58
>>677
この板ではどのスレッドもIDは表示されない。

681 :デフォルトの名無しさん:04/06/10 13:29
>>667
>OSレベルではフォルダごとの移動は
>ディレクトリの作成→そこにファイル群を移動→元ディレクトリの削除
>という形になるでしょ

それはドライブが異なる場合だけだろ。普通は親ディレクトリのinodeの
書き換えだけ。

682 :デフォルトの名無しさん:04/06/10 17:12
>>680
上手いな。ネタで>>677書いたのは俺だが
まさかそう返されるとは思わなかったぞ。

683 :デフォルトの名無しさん:04/06/10 17:14
こうして、徐々に簡単な質問はスルーされていくようになるのだった

684 :デフォルトの名無しさん:04/06/10 20:04
>>681
inode(に対応するWindowsでの概念)を書き換える必要あるの? 名前だけでしょ?

685 :デフォルトの名無しさん:04/06/10 22:11
スクリーンセーバーが発動するまでの時間や
モニタの電源を切るまでの時間を、それぞれ
取得したり再設定したりするにはどうするのでしょうか?

686 :デフォルトの名無しさん:04/06/10 22:58
>>685
画面のプロパティを開いて読んだり書き換えたりすればOK

687 :685:04/06/10 23:14
>>686
Win32APIの質問でした。
言葉足らずでごめんなさい。
該当するAPIはなんでしょうか?

688 :デフォルトの名無しさん:04/06/10 23:25
>>687

>>686は、わかってて言ってるんだと思うぞ。
要は君に遠回しに 「 ぐ ぐ れ っ ! 」 と言いたいのではないかと。












もしググる気になったら、「スクリーンセーバー SystemParametersInfo」あたりで
ググってみると幸せになれるんじゃないかな。

689 :685:04/06/10 23:48
検索しました
少し幸せになりました
ありがとうございました

このAPIについてもっと調べてもっと幸せになります

690 :デフォルトの名無しさん:04/06/11 00:06
やさしいな

691 :デフォルトの名無しさん:04/06/11 00:13
>>687-688
Win32APIのスレだしなぁ。ここ。

692 :デフォルトの名無しさん:04/06/11 00:40
png画像を読み込んで1pixelの色を取り出したいんだけどGetPixelでおけ?

693 :デフォルトの名無しさん:04/06/11 00:42
画像を読み込んだだけでGetPixel出来る時代になったのか。有難や。

694 :デフォルトの名無しさん:04/06/11 05:20
waveOutGetPositionという命令がありますが、
これは現在位置を取得するものですが、
逆に現在位置を変更するようなものは無いのでしょうか?

簡単に言えばwaveOut系で途中から再生をしたいのですが
解説しているサイトやヒント等ありましたら、おしえてください。

695 :デフォルトの名無しさん:04/06/11 08:17
>>692
pngを読み込んで展開して、
デバイスコンテキストに描画したら、
GetPixelで色を取り出せるよ

696 :デフォルトの名無しさん:04/06/11 09:04
>デバイスコンテキストに描画したら

697 :デフォルトの名無しさん:04/06/11 12:46
つか、ググれしか言えない厨房はレスするな、ウザイし邪魔

698 :デフォルトの名無しさん:04/06/11 12:49
同意。あとマニュアル読め厨も。

699 :デフォルトの名無しさん:04/06/11 13:11
俺は最適な解を回答すべきだと思っている。
それが検索しろであったりマニュアル嫁であったりするのは、それが最適だと思っているからだ。

700 :デフォルトの名無しさん:04/06/11 13:21
697は来るな。ウザイし邪魔

701 :デフォルトの名無しさん:04/06/11 13:55
697=698=厨だろ

702 :デフォルトの名無しさん:04/06/11 15:52
>>694
ありません。自分で制御する必要があります。


703 :デフォルトの名無しさん:04/06/11 17:07
waveOut系はリングバッファ作ってwriteで垂れ流したことしかないから
偉そうなことは言えんが、ぱっとググってみた感じ、waveOutGetPositionも
結構色々と問題があるような感じなんで位置情報は自分でタイミング取って
見た方がよいのかも。

704 :デフォルトの名無しさん:04/06/11 17:45
waveOutGetPosition で常に0を返す論外なドライバとか…


705 :デフォルトの名無しさん:04/06/11 19:12
>>702-704
返答ありがとうございます。自前でやるしかないみたいですね。
そうなると、無圧縮なPCMであれば位置判定は簡単だと思いますが
圧縮されたデータ(MP3等)の場合、難しいですね。
一旦、無圧縮なPCMに展開する必要があるという事でしょうか?

706 :初心者です:04/06/11 19:25
InstallShieldにてインストーラを作っているのですが、ラジオボタンの表示/非表示
(visible? hide?)を切り替えることってできますか?

707 :デフォルトの名無しさん:04/06/11 19:52
ライセンスを下までスクロールしないとライセンス同意ボタンを押せないようにしたいのかな

708 :デフォルトの名無しさん:04/06/11 20:21
ちゅーかスレ違いだしなー

709 :デフォルトの名無しさん:04/06/11 20:40
>>705
圧縮データ?

そうか、waveOut は 圧縮形式の WAVEFORMATEX ヘッダも
処理できたか。使ったこと無いから PCM 以外でどうなるか分
からないけど、少なくとも mp3 の場合は自分でヘッダ作らない
と(WAVE MP3)処理できないだろう。

俺は WAVE ファイルの場合はあらかじめ ACM の API
で無圧縮 PCM に変換してから waveOut API に渡してたからな。

mp3 は独自にデコーダ用意する必要がある。(APIは無い)

なんか、あなたの場合は DirectShow を
使った方が良いんじゃないかな?
手っ取り早くやりたいなら、そっちの方が早いよ。


710 :692:04/06/11 20:45
>>695
ありがとう
描画しなきゃだめっすか…何百枚の画像を処理しなくちゃならんのだけど…
何かアドバイス頂けると嬉しいです。

711 :デフォルトの名無しさん:04/06/11 22:07
自前で解析した方が早いんじゃないか?

712 :デフォルトの名無しさん:04/06/11 22:35
>>692
libpngとかImageMagickでも使ってロードして、後は適当に解析汁。

713 :名無し@沢村:04/06/11 23:57
ちっ、ここはザコが立てたスレか?
Windowsプログラムとは可愛いやっちゃ♪
こっちはメインウィンドウ完成間近だというのによ…♪もうすぐメインウィンドウできるよ〜♪
といってもCとかアセンブラとかでメインウィンドウ組むんじゃないぞ。それじゃまるでザコだ。
こっちは、メインウィンドウがつくれるプログラムつくってるのよ〜♪つまりVisual E++だ。
そうです、みなさんもうすぐVisual E++はメインウィンドウがつくれる本格的なプログラミングソフトに進化します♪
いまやっとVisual E++に補助的にバイナリエディタつかってメインウィンドウつくるのに成功したところ。
補助的にバイナリエディタつかわないで、Visual E++のみでメインウィンドウつくれるよになるには、あと修正個所が1、2個所…
みなさんもうすぐでっせ〜♪

714 :名無し@沢村:04/06/11 23:58
ちっ、ここはザコが立てたスレか?
Windowsプログラムとは可愛いやっちゃ♪
こっちはメインウィンドウ完成間近だというのによ…♪もうすぐメインウィンドウできるよ〜♪
といってもCとかアセンブラとかでメインウィンドウ組むんじゃないぞ。それじゃまるでザコだ。
こっちは、メインウィンドウがつくれるプログラムつくってるのよ〜♪つまりVisual E++だ。
そうです、みなさんもうすぐVisual E++はメインウィンドウがつくれる本格的なプログラミングソフトに進化します♪
いまやっとVisual E++に補助的にバイナリエディタつかってメインウィンドウつくるのに成功したところ。
補助的にバイナリエディタつかわないで、Visual E++のみでメインウィンドウつくれるよになるには、あと修正個所が1、2個所…
みなさんもうすぐでっせ〜♪

715 :デフォルトの名無しさん:04/06/12 00:44
>>713-714
スレ違い。
http://pc5.2ch.net/test/read.cgi/tech/1085915001/
こっちでどうぞ。


716 :デフォルトの名無しさん:04/06/12 00:54
沢村こんなとこにもくるのか。

ところで、IEのお気に入りの中から一定期間アクセスがなかったら削除するツール作ろうと思ったんだけど、
最終アクセス日(ファイルアクセスにあらず)ってAPIがらみで取得できませんかねえ。
調べたところ「履歴」フォルダにしか残っていないので履歴削除したら無理ぽなんだよねえ。

717 :デフォルトの名無しさん:04/06/12 01:28
>>709
返答ありがとうございます。
圧縮データとは、MP3(not *.mp3ファイル)とか
ADPCM等です。(*.wavファイル)

何も考えずに、waveOutOpen -> waveOutPrepareHeader
-> waveOutWriteで再生できるので、今はそのままですが
求めている事は

・メモリにあるデータから再生
・ボリュームコントロール
・シーク可能
・Win98(無印)の何も入れてない状態で動く

…という事なのです。DirectShowでの機能は
Win98(無印)に標準で入っているのでしょうか?

>ACM の API
とりあえず、この方向で展開して自前でシークしたいと
思います。ありがとうございました。

718 :デフォルトの名無しさん:04/06/12 02:42
>>717
> ・メモリにあるデータから再生
あー DirectShow でメモリからだと自前でソースフィルター
かかないかんね。サンプルもあるけど、
この場合はフィルター書いてまでも DirectShow を
使う意味は無いね。

>>ACM の API
>とりあえず、この方向で展開して自前でシークしたいと
まあ、もっともオーソドックスな手法だけど、長年使われていた
手法でもあるし、頑張ってみるしか。

719 :デフォルトの名無しさん:04/06/12 03:00
初心者質問でスマソ

SetMapMode(hdc,MM_LOMETRIC);

rect.left=100;
rect.top=-300;
rect.right=500;
rect.bottom=-100;

DrawText(hdc,Text1,-1,&rect,DT_CALCRECT | DT_WORDBREAK);
DrawText(hdc,Text1,-1,&rect,DT_WORDBREAK);
DrawText(hdc,Text1,-1,&rect,DT_CALCRECT | DT_WORDBREAK);
DrawText(hdc,Text1,-1,&rect,DT_WORDBREAK);

としてプリンタで印刷したところ
一回目のText1と2回目のText1が続けて縦一列に印刷されたのですが
なぜなのでしょうか
ステップしてもrectの内容が変わる事はなかったので
同じ場所に二重に印刷される物だと思ってたのですが
DT_CALCRECTをちゃんと理解しないで使ってる気がするので
やはりこれのせいなのでしょうか
分かる方おねがいします

720 :デフォルトの名無しさん:04/06/12 03:37
>>692
GDI+のBitmapクラス使ってPNG画像を読み込んで、GetPixcelメソッドを呼ぶ。

721 :デフォルトの名無しさん:04/06/12 17:04
FindWindowを使ってクラスやタイトルが部分一致するウィンドウを探すのは無理
ですか?
クラスとタイトルはそれぞれ必ず完全に一致する必要があるのでしょうか.

722 :デフォルトの名無しさん:04/06/12 17:07
EnumWindows()使え

723 :デフォルトの名無しさん:04/06/12 17:19
>>722
了解

724 :デフォルトの名無しさん:04/06/13 22:25
こんばんわ
RebarのIE式メニューを作ろうとしてるんですが
うまくいきません

ソースコードをUPしますので
http://www.geocities.co.jp/SiliconValley-Oakland/3559/rebar.txt
どこが間違ってるのか見ていただけるとありがたいです
よろしくお願いいたします

InitCommonControlsExは処理してあります

呼び出し順番は

hRebar=_createRebar(hWnd,hInst);
_createIEMenu(hRebarIEMenu,hRebar,tbIEMenu);
_sendTextToIEMenu(hRebarIEMenu,"File_desu",tbIEMenu,0);
_sendTextToIEMenu(hRebarIEMenu,"Edit_desu",tbIEMenu,1);
_sendButtonToIEMenu(hRebarIEMenu,2,tbIEMenu);
_attachIEMenuToRebar(hRebarIEMenu,hRebar);

725 :デフォルトの名無しさん:04/06/14 00:37
自前のメニューバーに動的に項目を追加したいんですが
すでに、追加したい項目のIDが追加されているかどうか
ってどうやって調べられますか?
AppendMenuつかうと、無節操に追加されるし
EnableMenuItemだと、見えなくならないし、で微妙なので、
助けてください。

726 :デフォルトの名無しさん:04/06/14 01:00
GetMenuItemInfo

727 :デフォルトの名無しさん:04/06/14 01:39
>>724
10万くらいくれたらデバッグしてやらんでもない

728 :デフォルトの名無しさん:04/06/14 01:46
GetMenuItemCount
GetMenuItemID
GetMenuPosFromID

この辺使えば自在だ。


729 :デフォルトの名無しさん:04/06/14 10:47
メニューの中に「送る」のように外部のフォルダの中身によって表示される項目がコロコロ変わるサブメニューを作っています。
何を表示すればよいかは簡単に取得できたのですが、これをいつメニューに反映させればよいのかが分かりません。
最初は WM_INITMENU か WM_INITMENUPOPUP で更新すればよいと考えていたのですが
このサブメニューの名前や位置が変化するので、親メニューと位置だけでは、
どのサブメニューが表示されようとしているのかが分かりません。
こういったメニューのアイテムを最新の状態に維持するにはどうすればよいのでしょうか?
あるいは、メニューバーの特定のサブメニューが表示されようとしていることを知る方法はあるでしょうか。
どうかよろしくお願いします。


730 :725:04/06/14 10:52
>>726,728
サンクス

731 :デフォルトの名無しさん:04/06/14 11:05
>>729
メニューの位置が動的に変更しないようにする。

というのはアレなので、ちょうど>>728が書いてるAPIで位置から特定してやればいいんじゃないかと。

732 :デフォルトの名無しさん:04/06/14 11:06
それで、>>726のAPIを使用してメニューの情報を得ればいい。

733 :デフォルトの名無しさん:04/06/14 12:36
>>731-732
ありがとうございます。
ただ、相手がサブメニューなので ID が無いのですが
そのような場合はどうすればよいのでしょう?


734 :デフォルトの名無しさん:04/06/14 12:46
>>733
ポップアップにもIDはつけられる。

735 :デフォルトの名無しさん:04/06/14 12:53
>>734
ありがとうございます。
今まで知りませんでした。
これで解決できそうです。
どうもありがとうございました。


736 :デフォルトの名無しさん:04/06/14 13:09
つか、ググれしか言えない厨房はレスするな、ウザイし邪魔

737 :デフォルトの名無しさん:04/06/14 13:11
つか、もう終わった話題に亀レスする奴、ウザイし邪魔

738 :デフォルトの名無しさん:04/06/14 13:23
ククれ

739 :デフォルトの名無しさん:04/06/14 13:32
王子さま

740 :デフォルトの名無しさん:04/06/14 13:40
あの〜、質問よろしいでしょうか?

741 :デフォルトの名無しさん:04/06/14 13:42
>>740
バーモント

742 :デフォルトの名無しさん:04/06/14 13:49
高木ブー





はウクレレか

743 :デフォルトの名無しさん:04/06/14 13:55
ハヤシもあるでよ

744 :デフォルトの名無しさん:04/06/14 13:56
>740
質問していいかくらい、自分でググって調べろ。

745 :デフォルトの名無しさん:04/06/14 14:11
ttp://www.google.co.jp/search?q=%E8%B3%AA%E5%95%8F%E3%81%97%E3%81%A6%E3%81%84%E3%81%84%E3%81%8B&ie=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2

746 :デフォルトの名無しさん:04/06/14 14:19
>>734
>ポップアップにもIDはつけられる。
どうやればできるのでしょう。
方法を探したのですが見つかりませんでした。

747 :デフォルトの名無しさん:04/06/14 14:22
ホントにできるのか?

748 :デフォルトの名無しさん:04/06/14 14:26
>>746
嘘を嘘と見抜けないようだと・・・
メニューアイテム関連のAPIは、コマンドIDじゃなくてインデックスでも使えるから、
インデックスを覚えておくのが良いと思う。

749 :デフォルトの名無しさん:04/06/14 14:28
あるいはポップアップのHMENUをそのまま覚えておくか。

750 :デフォルトの名無しさん:04/06/14 14:38
ぐぐれはともかく、分かってないならレスしないでくれ
ってのは、たまにあるな。

751 :デフォルトの名無しさん:04/06/14 14:40
>>746
MENUEX

752 :デフォルトの名無しさん:04/06/14 14:49
> ID が無い
> サブメニューの名前や位置が変化する
無理だ...

753 :デフォルトの名無しさん:04/06/14 17:09
エクスプローラの左にあるフォルダツリーと同じものを作りたいんですが
あれって全部自前でアイコンとかを取得したりしてるのでしょうか?


754 :デフォルトの名無しさん:04/06/14 18:36

Windows上のC++(またはC言語)で、pdfファイルをいじる方法ってありますか?
帳票の代わりにpdfファイルを作るとかしてみたいのですが・・・。
宜しくお願いします。


755 :デフォルトの名無しさん:04/06/14 18:37
スマートにやりたきゃまずはpdfの仕様を調べて好きにしろ
面倒だったらWordをOLEで制御するなりunix系ツールで変換するなり

756 :デフォルトの名無しさん:04/06/14 19:30
>>754
PrimoPDFとか入れて、印刷しろよ。

757 :デフォルトの名無しさん:04/06/14 20:43
>>746
試してないがこれではムリか?
MENUITEMINFO mii = { sizeof(MENUITEMINFO), MIIM_SUBMENU | MIIM_TYPE | MIIM_ID,
MFT_STRING, 0, idCmd++, hSubMenu, 0, 0, 0, szMenuText };
InsertMenuItem(hMenu, indexMenu, TRUE, &mii);


758 :デフォルトの名無しさん:04/06/14 21:14
メニューの項目が長すぎる場合、
シェブロンにカーソルを持って行ったら
自動的にスクロールするようにするには
どういう設定をすればいい?


759 :デフォルトの名無しさん:04/06/15 00:41
>>754
PDFを操作するライブラリがいくつかあるぞ。
ClibPDFなんて使いやすい。
http://www.fastio.com/

760 :デフォルトの名無しさん:04/06/15 11:44
USBデバイスの電源が入っているかどうかを知るAPIってありますでしょうか。
探したのですが見つかりません。

761 :デフォルトの名無しさん:04/06/15 11:57
電源が入っていない=認識されて無いだから無理だと思うが…。
逆に探してみて、目的の物が無いかどうかで確認するしかないんじゃないか?

それとも、俺が知らないだけで「電源が入って無くても、認識されている」
デバイスがあったりするか?

762 :デフォルトの名無しさん:04/06/15 12:02
>>761
バスパワーで、回路だけ動いてれば
「電源が入って無くても、認識されている」
って状況は可能なんじゃないのか?
あるかどうかは、知らないけど。

763 :デフォルトの名無しさん:04/06/15 13:41
バスパワーってことは、「常に電源が入っている」ってことでしょう?
バスパワーでかつ電源スイッチがあるようなデバイスでも、電源スイッ
チを切ると認識されなくなるんじゃないかい。



764 :760:04/06/15 14:14
レスありがとうございます。
たとえば単純に、現在使用可能なデバイスのリストを返してくるようなAPIを探しているんですが。
=電源が切れて認識されなくなったらリストからデバイス名が消える
みたいなことをAPIに期待しています。

765 :デフォルトの名無しさん:04/06/15 14:51
>>764
多分DDK方面?

766 :デフォルトの名無しさん:04/06/15 14:59
>>764
DDKにusbviewというサンプルがあるから見れ

767 :デフォルトの名無しさん:04/06/15 15:45
>>764
昔レジストリで確認してたことある
一覧で探してあったらGetDeviceDiscriptor投げ
この辺の操作もDDKサンプルみれば乗ってたはず

768 :760:04/06/15 16:46
DDK持ってない(T_T)有料なんですね今は
レジストリの線で探ってみます。ありがとうございました。

769 :デフォルトの名無しさん:04/06/15 17:17
プロセスメモリエディタを作成したい(目標はExSTAND)のですが、
サブヒープの情報はどのように取得すればいいのでしょうか?


各ヒープエントリ情報は、

1.CreateToolhelp32Snapshotでプロセスのスナップショット取得
2.Process32First、Process32NextでPROCESSENTRY32取得
3.CreateToolhelp32Snapshotでヒープのスナップショット取得
4.Heap32ListFirst、Heap32ListNextでHEAPLIST32取得
5.HEAPLISTでHEAPENTRY32取得

という流れで取得できたのですが、サブヒープ情報は取得できません。
どのようにすればサブヒープの情報を取得できるのでしょうか?
よろしくお願いします


770 :769:04/06/15 18:31
>>769
5.Heap32Firstの間違いですm(__)m

771 :デフォルトの名無しさん:04/06/15 21:11
定期的にキーボード入力を生成するツールを作りたいのですが、
どうもうまくいきません。

PostMessage(WM_KEYDOWN,...), keybd_event, SendInput を使用したものは、
通常のアプリケーション(メモ帳とか)には正常に動作するのですが、
DirectInputを使ったゲームには作用しないようなのです。
(当然といえば当然かもしれませんが(><))

何かよい方法があったらご教授下さい。宜しくお願いします。


772 :デフォルトの名無しさん:04/06/15 21:26
>>769-771
ネトゲサロンへお帰りください( ゚,_ゝ゚)

773 :デフォルトの名無しさん:04/06/16 00:36
ある文字が指定したフォントで表示できるかどうか調べる、というAPIはありませんか?
TextOutで文字を書いたところ他のフォントに置き換わってしまい困っています。

774 :デフォルトの名無しさん:04/06/16 01:33
>>773
結構しらべたけどない...orz
JAVAにはcanDisplay()という関数があるみたいだから何らかの
方法で実現はできるみたいだけど。。。

775 :デフォルトの名無しさん:04/06/16 02:19
>>773
GetGlyphIndices かな

776 :名無し@沢村:04/06/16 04:07
おみゃ〜らよ、メニューについていいことを教えてやろう。
それはリソースエディタでメニューをつくるとき、「ファイル(&F)」のように書くだろ?
すると「F」という字にショートカットキーが割り当てられるわけだ。
おみゃ〜らよ、おみゃ〜らは、いままでショートカットキーを割り当てるときの書式は、「ファイル(&F)」というふうでなくてはならないと思っていたはずだ。
どうだ?
だがおみゃ〜らよ、実は「&」の後の文字なら何でもショートカットキーが割り当てられるのよ。
「(&F)」のように「()」で囲む必要もない。
つまり「&ファイル」とすれば「フ」の字にショートカットキーが割り当てられるし、「フ&ァイル」とすれば「ァ」の字にショートカットキーが割り当てられるのよ。
これはおみゃ〜らが、いままで知らなかったことだ。
覚えておくといいぞ。おみゃ〜らよ♪

777 :デフォルトの名無しさん:04/06/16 07:18
>>776
それぐらい知っとるわ。
「E&xit」とか良く見るし。

778 :デフォルトの名無しさん:04/06/16 08:55
>>776
元々、「&File」だったのが、日本語で「&ファイル」すると
ショートカットが「フ」になるから「ファイル(&F)」にしてんだろ。
そんくらい、誰でも知ってるぞ。

「自分が知らなかった=まわりも知らない」
この図式自体が間違ってる事に気付け>沢村

779 :デフォルトの名無しさん:04/06/16 09:13
>>777
>>778

マジレス ハゲカッッコワルイ

780 :デフォルトの名無しさん:04/06/16 09:51
沢村くんの文章ではなぜ全角カナと半角カナが混在しているのだろうか。
前前から疑問に思っていたんだよね。

781 :デフォルトの名無しさん:04/06/16 10:04
ファイル(\036F\037フ)

782 :773:04/06/16 10:26
>>775
うまく動作させることに成功しました。
ありがとうございましたm(_ _)m

783 :デフォルトの名無しさん:04/06/16 10:32
Win2KPro & VC++6.0でGINAの開発を行なっています。

WlxLoggedOutSAS()のログオン認証まではMsGina.Dllに処理をスルーして、
WlxActivateUserShell()の呼び出し時にさらにある条件で認証を行い
認証できれば、MsGina.DllのWlxActivateUserShell()に処理を渡し、
認証できなければ、FALSEを返してログオンを打ち切るプログラムを
作ろうと思っています。
そこで、WlxActivateUserShell()上でWlxLoggedOutSAS()で認証された
User名を取得したいのですが、方法が分かりませんご存知の方が居られ
ましたらご教授いただきたくお願いいたします。

恐らく引数lpWlxContextに、その辺の情報が入っている構造体のポインタが
渡されているのではないかと思っているのですが、MsGina.Dllでこの部分が
何に使われているのかが調べきれませんでした。

つたない質問で申し訳ありませんが、よろしくお願いいたします。

784 :771:04/06/16 20:16
>>772
解決しました、ありがと〜

785 :デフォルトの名無しさん:04/06/17 17:28

TrackPopupMenuで表示させたポップアップメニューを閉じたタイミングを
検出したい場合、どうすればよいのでしょうか?
ご教授よろしくおねがいします



786 :デフォルトの名無しさん:04/06/17 18:10
WM_EXITMENULOOPではダメかしら

787 :デフォルトの名無しさん:04/06/17 18:25
ところでご教授って人の名前?

788 :デフォルトの名無しさん:04/06/17 18:36
>>787
ところで藻前、とてつもないバカ?

789 :デフォルトの名無しさん:04/06/17 18:38
うん。教授と教示の違いが分からない奴よりはバカじゃないと思うけどね:-P

790 :デフォルトの名無しさん:04/06/17 18:44
質問に答えるやつはちゃんと教授法を学べよ。

791 :デフォルトの名無しさん:04/06/17 18:45
(:-P)_| ̄|_

792 :デフォルトの名無しさん:04/06/17 18:53
きょうじゅ けう― 【教授】
(名)スル
(1) (ア)児童・生徒に知識・技能を与え、そこからさらに知識への興味を呼び起こすこと。
  (イ)専門的な学問・技芸を教えること。
(2) 大学などの高等教育機関において、専門の学問・技能を教え、また自らは研究に従事する人の職名。助教授・講師の上位。

人の名前?て聞くのはヴァカじゃね?

793 :デフォルトの名無しさん:04/06/17 18:54
>>789
ああ、本当にバカだ。底なし。

794 :デフォルトの名無しさん:04/06/17 19:49
>>787
ところで難しい質問が来るとしばらくスレが止まって、上げ足レスが付くっていうのは厨の十八番なのか?
判らなければスルーすればよいだけだと思うのだが


795 :デフォルトの名無しさん:04/06/17 20:00
>>794
(゚Д゚)ハァ?、もしかして>>783の教えてクンのこと?
そんなの低レベル過ぎて答える気がしないだけだよ、あんなのがお前には難し過ぎる質問だったのかw
あんまり自分のレベルで判断するなよ、今回みたいに大恥かくよw

796 :デフォルトの名無しさん:04/06/17 21:32
誰か構ってやれよ

797 :デフォルトの名無しさん:04/06/17 21:35
エディットコントロールで文字フォントの大きさを変更したいのですが、
検索してSendMessageと、WM_SETFONTを使うべきと分かったのでやってみました。

SendMessage(hwndEdit, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));

上のコードを親ウィンドウのプロシージャに埋め込んだのですが、フォント自体は変化せず。
文字高さを以前より大きくすると、カーソルが大きくなるだけです。
以前より小さくすると、フォント下部が欠けた状態で表示されるようになりました。
代わりにスタティックコントロールで試すと、この問題は生じません。

どこが間違っているのでしょう?、教えていただけないでしょうか。
環境は VC++.NET です。


798 :デフォルトの名無しさん:04/06/17 21:42
一番間違ってるのはこんな状態のこのスレで聞くことだな

799 :デフォルトの名無しさん:04/06/17 22:59
>>787==>>789 必死だな (激藁

800 :デフォルトの名無しさん:04/06/17 22:59
>>796=783
まあ今回は許してやるから、勉強して今度はもうちょっとマシな質問しろやw
それと問題が解決したら情報をレスしろよ。それが礼儀だからな


801 :デフォルトの名無しさん:04/06/17 23:00
>>800
全然面白くない。このスレから消えろ

802 :デフォルトの名無しさん:04/06/17 23:08
>>801
そういうことは、住人が呆れるような低レベルな質問を、平気でする香具師に言うべきでは?

803 :デフォルトの名無しさん:04/06/18 00:54
プ

804 :デフォルトの名無しさん:04/06/18 01:03
>>795
…そう捨て台詞を吐いて、結局>>783の解決方法を言わないのか。
もし、>>794に対して文句言いたいなら>>783の答えを示して
「低レベルすぎて回答する気もならなかった」と言えば
>>794は何も言えないと思うのだが…。

805 :デフォルトの名無しさん:04/06/18 01:05
>>804
>>795にとって、>>783は低レベルだが
>>794は高レベルな書き込みだったのだろう。
何故なら、レスしてるから。(w

806 :デフォルトの名無しさん:04/06/18 02:15
つーかAPIの話しないなら出てけお前ら

807 :デフォルトの名無しさん:04/06/18 02:23
   ∩___∩      
   | ノ      ヽ/⌒) あばばばばばば
  /⌒) (゚)   (゚) | .|  
 / /   ( _●_)  ミ/   ∩―−、
.(  ヽ  |∪|  /    / (゚) 、_ `ヽ
 \    ヽノ /      /  ( ●  (゚) |つ
  /      /      | /(入__ノ   ミ   あばばっあびゃばびゃばば
 |       /       、 (_/    ノ  
 |  /\ \       \___ ノ゙ ─ー
 | /    )  )       \       _     
 ∪    (  \        \     \
       \_)

808 :デフォルトの名無しさん:04/06/18 04:54
>>797
エディットコントロールってフォント変えられるんだっけ?
MSDNで調べてみたら?
もしフォント変えられないっぽいならリッチエディットにする。

809 :デフォルトの名無しさん:04/06/18 08:51
>>808
WM_SETFONTで変えろ

810 :デフォルトの名無しさん:04/06/18 09:34
>>809 ( ゚д゚)ポカーン

811 :デフォルトの名無しさん:04/06/18 10:46
>>797
WM_SETFONTでフォントを適用したあと、HFONTをDeleteObjectしてないか?
WM_SETFONTで適用したフォントはそのフォントを使わなくなるまで
(コントロールを削除など)保持しとかないとダメだぞ。

もしそうならスタティックで成功してるってのも、再描画すると元に戻ってると思うんだが…。

812 :デフォルトの名無しさん:04/06/18 11:38
811 さん、、おっしゃる通りです。
直後にフォントを破棄していました。
エディットコントロールが既に存在しないフォントにアクセスしたんでしょうね。
スタティックは再描画後もOKでした、フォントをコピーして保持してるのでしょうか?
しくみが違うようです。

どうもありがとうございました。


813 :デフォルトの名無しさん:04/06/18 11:45
↑↑↑
失礼、ミスリードしました。
スタティックも再描画したら問題発生しました。

ではでは。w


814 :デフォルトの名無しさん:04/06/18 20:57
w

815 :デフォルトの名無しさん:04/06/18 22:58
以下のようにしてファイルロックの様な物を実装しようとしてるのですが
時々処理がWaitForSingleObjectで固まってしまい困ってます。
何が悪いのでしょうか。
func()はマルチスレッドで山ほど同時に呼ばれます。

void func()
{
HANDLE hMutex = ::CreateMutex(NULL, FALSE, strMutex);
if (::WaitForSingleObject(hMutex, 2000) == WAIT_TIMEOUT)
 TRACE("WAIT_TIMEOUT\n");
// ここで保護したい処理
::ReleaseMutex(hMutex);
::CloseHandle(hMutex);
}

816 :デフォルトの名無しさん:04/06/18 23:20
なんでそんなに作りまくるのか

817 :デフォルトの名無しさん:04/06/18 23:34
実際とは違うけどIriaとかの同時ダウンロードみたいな感じで使用されます。

818 :デフォルトの名無しさん:04/06/18 23:38
> 実際とは違う

どう違うのかかけ。
特に、毎回Createしてるのかどうか。

819 :デフォルトの名無しさん:04/06/18 23:45
実際はIriaのようにファイルのダウンロードではなく
サーバにパケット送信したり受信したりしてます。
>毎回Create
Createとは何をCreateしてると言うことですか?
スレッドなら同時に何十も起動できるようにしてますが。

820 :デフォルトの名無しさん:04/06/18 23:55
mutex

821 :デフォルトの名無しさん:04/06/18 23:56
>>815
なー、実際に何を保護すんの〜?

822 :デフォルトの名無しさん:04/06/19 00:01
func() のどこかで ::Sleep(5); を入れてみたらうまくいくかも。
違ってたらごめんなさい。

823 :デフォルトの名無しさん:04/06/19 00:08
>>820
ミューテックスなら上に書いたようにスレッドが作成されそのスレッドから
毎回関数が呼ばれた際に作成して関数が終わるときに破棄するようにしています。

>>821
ファイル相手じゃないですがデータを読み込みそれを変更してデータを格納してます。
要はカウンタと同じです。

>>822
駄目でした。

824 :デフォルトの名無しさん:04/06/19 00:11
>>823

main()
{
mutex を1つ作成
...
mutex を破棄
}

func()
{
mutex ウエイト

mutex リリース
}

じゃいかんのかえ?

825 :デフォルトの名無しさん:04/06/19 00:13
つーかプロセス内でしか使用しないMutexに名前付けるな

826 :デフォルトの名無しさん:04/06/19 00:15
>>825
そういやMutexってそのままグローバルに名前が見えちゃうんだっけ?

827 :デフォルトの名無しさん:04/06/19 00:24
>>824
なるほど、大元で作成してそれを使いまわすみたいな感じですか。
ただ、このプログラムの場合、効率を上げるため幾つかmutexを作成してて
その辺変更するの時間かかりそうなのまた明日にでもやってみようと思います。

>>825
上にも書きましたが効率を上げる為です。
もう少し詳しく書くと以下のようにしてます。
void func(LPCSTR lpName)
{
CString strMutex;
strMutex.Format("ACCESS_%s", lpName);
HANDLE hMutex = ::CreateMutex(NULL, FALSE, strMutex);
...


lpNameはデータ名でこれは幾つか有ります。
AAAと言う名前のファイルにデータを書きこむ際は
BBBと言う名前のファイルは保護する必要は無いので。

828 :デフォルトの名無しさん:04/06/19 00:26
>>827
これ以上アホな質問する前にマルチスレッドと同期について書いてある"まともな本"を読んで来い。

829 :デフォルトの名無しさん:04/06/19 00:28
>>828
どの辺がアホなのか指摘していただけると凄く助かります。

830 :デフォルトの名無しさん:04/06/19 00:29
>>827
ていうか情報を小出しにするな。前提条件は最初に書かなきゃ、
>>824>>825がレスした事が無駄になっちまう可能性もある訳で。



831 :デフォルトの名無しさん:04/06/19 00:32
>>827
それなら保護したいリソースにアクセスするクラスを構築するたびに
Mutexを生成する

struct FILEIO {
 FILEIO { むーってっくす生成 }
 ~FILEIO { むーってっくす棄て }

 HANDLE hmutex;
}

func(FILEIO& aaaaaaaa)
{
aaaaaaaa.hmutexをうえいと

aaaaaaaa.hmutexをりりーす
}


832 :デフォルトの名無しさん:04/06/19 00:33
>>830
最初に全ての情報を書くと膨大なので必要だと思われるところだけを書いたつもりですが
いかせんアホなのでその辺の取捨選択が間違えてたようで、スミマセン。

833 :デフォルトの名無しさん:04/06/19 00:33
>>828
答えを書いておきながら、ちょと同意してしまった。

834 :デフォルトの名無しさん:04/06/19 00:37
>>828
まーその意見には同意するがこのスレでそんな身も蓋も無い事言うもんじゃない。

835 :デフォルトの名無しさん:04/06/19 00:43
>>831
その方法を使わせていただきます。
有難うございました。

836 :デフォルトの名無しさん:04/06/19 00:46
>>835
まー、頑張って。
Win32以前に同期のお勉強をしてね。もっといい方法が分かると思うよ。

837 :デフォルトの名無しさん:04/06/19 01:09
近所のおねえさんとWin32APIでむっくすしたいので方法を教えてください

838 :デフォルトの名無しさん:04/06/19 01:10
>>837
だまってメーラースレにお戻りください。

839 :837:04/06/19 01:33
は?

840 :デフォルトの名無しさん:04/06/19 01:53
>>837 のような書き込みするおまいの頭の方が「は?」だ。

841 :デフォルトの名無しさん:04/06/19 01:55
それで、近所のおねえさんとむっくすする方法は…

842 :デフォルトの名無しさん:04/06/19 02:26
>>841
speed&power

843 :デフォルトの名無しさん:04/06/19 02:45
>>841
looks&money

844 :デフォルトの名無しさん:04/06/19 02:55
pokotin&korman

845 :デフォルトの名無しさん:04/06/19 04:50
同一プロセス内でしか使わないなら、クリティカルセクションでいいんじゃないの?
処理の重さは、Mutex>クリティカルセクションだよね?

846 :デフォルトの名無しさん:04/06/19 05:15
>>845
非NTだとクリティカルセクションはタイムアウトできない

847 :783:04/06/19 08:18
自己解決しました
なんか荒れる原因つくってしまったみたいで申し訳ありませんでした

848 :デフォルトの名無しさん:04/06/19 09:25
コンボボックスについて質問です。
テキストが右揃えなスタイルのコンボボックスを作成すると、ドロップダウンのボタンが左側に配置されてしてしまうのですが
普通のコンボボックスのようにボタンを右側に残したままテキストを右揃えにするにはどうすればよいのでしょうか?
ご存じの方どうか宜しくお願いします。

849 :デフォルトの名無しさん:04/06/19 09:31
自己解決しました

850 :デフォルトの名無しさん:04/06/19 09:51
849 != 848 です。
この流れだと勘違いされそうなので...

851 :デフォルトの名無しさん:04/06/19 10:13
>>848
そのスタイルは、右から左へ文章を表示する言語のためのもの。
自分で描画汁。

852 :デフォルトの名無しさん:04/06/19 10:33
>>847
>>849
ヲイヲイ、「解決しまつた」だけじゃ何の意味もないだろうが
きちんとどうやって解決したのか報告しろ
そうじゃないと質問に答えてくれた人に失礼だろうが、お子様
じゃないんだから、それくらいの事は言われなくても分かって
くれよ…

853 :デフォルトの名無しさん:04/06/19 10:47
自己解決しました

854 :デフォルトの名無しさん:04/06/19 10:51
>>852
ねたにまj

855 :デフォルトの名無しさん:04/06/19 11:21
2ちゃんでマナー語る香具師も珍しいな

856 :デフォルトの名無しさん:04/06/19 12:54
852じゃないが2ch云々の問題じゃない。
スレの流れも悪くなるし、簡単でいいから内容を
書くべきだ。というか何も書かない椰子よりは
いいが。。。

857 :デフォルトの名無しさん:04/06/19 12:57
2chとひと括りにするの自体が間違ってる。厨板・技術板・雑談板それぞれに特色があって
それぞれに異なった住人層(と表現しとく)があるんだから。なんかその辺を分かってない奴が最近あちこちの
板に激増してる気がする。空気が読めてないというか何と言うか。

858 :デフォルトの名無しさん:04/06/19 14:08
自己完結しました。

859 :デフォルトの名無しさん:04/06/19 14:08
セルフセックスですか

860 :デフォルトの名無しさん:04/06/19 15:17
気になりますな。
遅そうとはいえ、>>815 で機能上は問題はないように見えるし。


861 :デフォルトの名無しさん:04/06/19 15:28
>>851
そのようにさせていただきます。
既製の方法はありませんでしたか。
旧版が番号スタイルのエディットボックス(自動的に右揃え)を使っていたので
見た目を揃えたかっただけなのですが。

862 :デフォルトの名無しさん:04/06/19 16:05
>>856
まあ、283=247は厨に絡まれまくっただけで技術的な支援はまったく
なかったしねえ、とてもレポート書く気にはならないと思われ

863 :デフォルトの名無しさん:04/06/19 16:07
↑847=783ね


864 :デフォルトの名無しさん:04/06/19 16:25
CHOOSEFONTでフォントダイアログを出した後、フォントサイズのところに任意の数字
を入れるにはどうすればいいのですか?
例えば、初めにフォントサイズ40を設定しておいて次回開いたときに40が入っている
って事がしたいのです。


865 :デフォルトの名無しさん:04/06/19 20:20
こんばんは!一つ質問させてください。
320×240のウインドウを表示したいのですが、タイトルバーが含まれてしまうので
うまく作れないのですが、どうすれば良いのでしょうか?
(320×240の画像を表示したいのです)
よろしくお願いします!

866 :デフォルトの名無しさん:04/06/19 20:28
>>865
WM_NCCALCSIZE を拾うでつ

867 :デフォルトの名無しさん:04/06/19 21:57
>>865
1 適当なサイズでウインドウを作る
2 320-クライアントの幅 を現在のウインドウ幅に足してリサイズ
3 240-クライアントの高 を現在のウインドウ高に足してリサイズ

の2ステップが必要。
ウインドウメニューが無い場合は、AdjustWindowRect(Ex)を使っても良い。

868 :デフォルトの名無しさん:04/06/20 00:26
質問です。
MacのDockをマネたのがWinにもあるけど、
あんな感じでアルファチャンネルを持った
画像を表示したいんです。

画像のアルファチャンネルでウィンドウを
透明にする方法を教えて下さい。

レイヤードウィンドウみたいに全体が
同じアルファ値じゃなくて、ピクセル
単位でアルファ値を変える方法が
しりたいです。

よろしくお願いします。


869 :デフォルトの名無しさん:04/06/20 00:35
UpdateLayeredWindow()

870 :デフォルトの名無しさん:04/06/20 00:40
>>869
MSDN読み直したら、「ピクセル単位のアルファ情報を含むこともできます」
と書いてありました。恐縮です。
ありがとうございました。m( _ _ )m

871 :デフォルトの名無しさん:04/06/20 01:05
>>846
NTだとできるの?

872 :デフォルトの名無しさん:04/06/20 11:11
エクスプローラで指定のフォルダが既に開いていないか取得する方法って無いですかね?
とりあえずエクスプローラのウィンドウはFindWindowでクラス名をCabinetWClassにすれば
取れるんですけどキャプションは設定によって変わりますからそこで判断は出来ませんし。
どこかからかそのフォルダのCLSIDでも取得出来るなら良いんですが。

873 :デフォルトの名無しさん:04/06/20 11:18
堅実で確実な方法としては、シェル拡張で潜り込むしかないかな。

874 :デフォルトの名無しさん:04/06/20 11:26
>>872
http://lamoo.s53.xrea.com/diary/diary2004a.html#t20040521a

875 :872:04/06/20 11:36
>>874
おお、コリャ良い。
サンクスコ。

ってか、CLSIDじゃ無くてITEMIDLISTだったな。オオボケでした。

876 :デフォルトの名無しさん:04/06/20 11:44
……この情報がどこから出てきたかは秘密です。

流出ソースだろ、ヤバくないか?

877 :365:04/06/20 12:30
>>366
>>367
できました、有難うございました〜


878 :デフォルトの名無しさん:04/06/20 12:49
>>876
これAvesta作者だよね・・・。なんかやばそう。

879 :デフォルトの名無しさん:04/06/20 17:53
自作のダイアログを半透明にしようとして、WM_INITDIALOGに以下の様に
処理を書いてみたのですが、ダイアログが完全に透明になってしまいます。

いったいどこがおかしいのでしょうか?

BLENDFUNCTION bl;
BOOL bb;

SetWindowLong(hDlgWnd, GWL_EXSTYLE, GetWindowLong(hDlgWnd, GWL_EXSTYLE) | WS_EX_LAYERED);

bl.BlendOp = AC_SRC_OVER;
bl.BlendFlags = 0;
bl.AlphaFormat = 0;
bl.SourceConstantAlpha = 200;

bb = UpdateLayeredWindow(hDlgWnd, NULL, NULL, NULL, NULL, NULL, NULL, &bl, ULW_ALPHA);


880 :デフォルトの名無しさん:04/06/20 21:18
SetLayeredWindowAttributes使え

881 :デフォルトの名無しさん:04/06/20 22:11
カーソルをリソースからではなく
(メモリダイアログテンプレートのように)
コードで組み立てる(orコードに埋め込む)
にはどうすればよいのでしょう。
よろしくお願いします。

882 :デフォルトの名無しさん:04/06/20 22:17
>881 CreateCursor

883 :デフォルトの名無しさん:04/06/21 18:50
40バイトあるファイルをReadFileで10バイトずつ違う変数に代入したい
場合はどうすればいいのでしょうか。お願い申しage

884 :デフォルトの名無しさん:04/06/21 19:03
10バイトずつ読む

885 :デフォルトの名無しさん:04/06/21 19:11
リードしたバッファのアドレスをポインタで保持するだけでいいじゃん



886 :デフォルトの名無しさん:04/06/21 19:53
>>885
こんな感じですか?
static char String[40];
char *p;

ReadFile(hFile,String, 40, &Read, NULL);
p = String;
w = atoi(p+0);
x= atoi(p+10);
y= atoi(p+20)
z atoi(p+30)

887 :デフォルトの名無しさん:04/06/21 19:54
(・∀・)・・・?

888 :デフォルトの名無しさん:04/06/21 20:00
変数に代入、という時点で気付くべきだったな。

889 :デフォルトの名無しさん:04/06/21 21:47
構造体に読み込みなさい


890 :デフォルトの名無しさん:04/06/21 22:50
ここはAPIスレだからそれでもいいけど
一般にはストリームから直接構造体に読み込むのは
移植性無さ過ぎるぞ

891 :デフォルトの名無しさん:04/06/21 23:27
構造体に読む込むってのは、どうやって
かるく例を書いてもらえるとありがたいんですが


892 :デフォルトの名無しさん:04/06/21 23:29
BITMAPFILEHEADER f;
fread(&f, sizeof f, 1, fp);

みたいなことだろ

893 :デフォルトの名無しさん:04/06/21 23:31
pretty hackey wayですね(hackyだっけ)

894 :デフォルトの名無しさん:04/06/21 23:51
Google先生にお伺いを立ててみたところ
hackyジャネーノ? と言われますた
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=hackey

895 :デフォルトの名無しさん:04/06/22 10:19
別スレで質問したのですが、そのスレが終わってしまったのでこちらで質問します。

マイコンピューターの、ドライブ名の一覧を取得するにはどうすればよいのでしょう。
デジカメなどのマスストレージなども含めて取得したいです。
OSで開いた場合の「マイコンピュータ」フォルダと同じ内容が得られれば目的を果たせるのですが。
OSはXP、言語はDelphiです。

896 :デフォルトの名無しさん:04/06/22 10:30
>>895
IShellFolder::EnumObjects

897 :デフォルトの名無しさん:04/06/22 10:32
フォントダイアログの「文字飾り-色」だけを非表示にするAPIってありますか?
文字飾りグループを全部消せるのは知っています。

898 :デフォルトの名無しさん:04/06/22 10:43
CFHookProcでフォントダイアログにフックを引っ掛けて
その中で目的のコントロールを非表示でよいんじゃないのか?

899 :デフォルトの名無しさん:04/06/22 11:49
>>897
ShowWindow

900 :デフォルトの名無しさん:04/06/22 13:04
>>896
できますたありがとうございます

901 :デフォルトの名無しさん:04/06/22 15:54
CreateProcessを使って立ち上げたexeの標準出力&エラーを
元で取得するにはどうしたらよいでしょうか。
よろしくお願いします。

902 :デフォルトの名無しさん:04/06/22 16:16
>>901
パイプ

903 :デフォルトの名無しさん:04/06/22 16:34
windows pipeの覚書
ttp://nhiro4.ld.infoseek.co.jp/program/windows/pipe.html

904 :デフォルトの名無しさん:04/06/22 16:47
パイプ(名無し)は WaitFor ができないのが難点。

905 :デフォルトの名無しさん:04/06/22 16:51
>>904
CreateProcessするんだからプロセスハンドルじゃだめか?

906 :904:04/06/22 16:58
>>905
プロセス終了後にまとめて読むんだったらそれでよいけど、
子プロの吐く内容をリアルタイムで取得したい場合もあるから。
たとえば対話式コマンドとか。

907 :デフォルトの名無しさん:04/06/22 17:01
それはスレッド使うのが定石。

908 :904:04/06/22 17:09
スレッド使ったところで、ReadとWaitのループで待つわけだから、
パフォーマンスとレスポンスのトレードオフになる。
てか、名前憑きは使えないんだっけ?

909 :デフォルトの名無しさん:04/06/22 17:41
>>908
>ReadとWaitのループで待つわけだから、
ReadFile自体がブロックするからWaitは不要。
レスポンスも悪くないよ。

>>901
>190351 - HOWTO: Spawn Console Processes with Redirected Standard Handles
http://support.microsoft.com/?id=190351

910 :デフォルトの名無しさん:04/06/22 22:18
ユーザー名から、そのユーザーのユーザーグループ(アドミニとかパワーユーザー)を
知りたいんですがそんなAPIありませんでしょうか?


911 :デフォルトの名無しさん:04/06/23 00:01
WM_INITDIALOGの中でSetTimer(hDlg, NULL, 1000, NULL)すると
何かダイアログを操作するまでWM_TIMERがこないんですが、何故でしょうか?
設定したダイアログに対して何か操作をすると
それからは設定した時間ごとにWM_TIMERが飛んでくるんですが・・・

912 :デフォルトの名無しさん:04/06/23 00:06
タイマIDって0よかったっけ?

913 :デフォルトの名無しさん:04/06/23 00:09
>>910
NetUserGetLocalGroups

914 :911:04/06/23 00:13
>>912
MSDNにはダメとは書いてないですし、SetTimer()の戻り値も正常なので大丈夫かと。
一応適当な数値でやってみましたが、症状変わらずです・・・

915 :デフォルトの名無しさん:04/06/23 00:21
>>911
モーダルとモードレスがわかっていない阿寒

916 :911:04/06/23 00:28
あー単純なモーダルダイアログでやってみたらきちんと来ました。
何かミスってるぽいですね。

>>915
解決法をご存知でしたら教えていただきたいんですが、
モードレスダイアログの場合CreateWindow()で作ったWindowのように
PeekMessage()した後にIsDialogMessage()を呼ぶのではダメなんでしょうか?

917 :デフォルトの名無しさん:04/06/23 00:57
>>916
どんなメッセージループを書いたのか、書いてみ?

918 :911:04/06/23 01:09
>>917
/* ダイアログ作ったり */

while( hDlg || hMainWnd )
{
  while ( ::PeekMessage( &msg, NULL, 0, 0, PM_REMOVE) )
  {
    if ( hDlg && ::IsDialogMessage( hDlg, &msg ) )
      continue;
    ::TranslateMessage(&msg);
    ::DispatchMessage(&msg);
  }
  /* 毎回呼びたい関数とか */
}

こんな感じです。よろしくお願いします

919 :911:04/06/23 03:09
よく分かりませんが、主要部分は全部クラス化してたので
GUIの部分だけ書き直したら正常に動作しました。
正直意味不明です。コード内容ほとんど変わってないのに・・・orz
お騒がせしました。

920 :デフォルトの名無しさん:04/06/23 10:50
RGBで色を指定するときボタンの色とかのWindowsのシステムカラーを指定するのってどうすればいいんですか?

921 :デフォルトの名無しさん:04/06/23 10:51
GetSysColor

922 :デフォルトの名無しさん:04/06/23 10:53
>>921
R:00 G:00 B:01ならボタンの色とかRGB値で直接指定できたりはしないの?

923 :デフォルトの名無しさん:04/06/23 10:59
>>922
できません。それだと RGB=(0,0,1) の色が使えなくなっちゃうじゃん。
ブラシ (HBRUSH) を取る関数なら、 (HBRUSH) (COLOR_BACKGROUND+1) とかで
いけるんだけどね。

924 :デフォルトの名無しさん:04/06/23 10:59
何いってんの?256カラーモードで使えば?

925 :デフォルトの名無しさん:04/06/23 11:00
>>923
それは本来GetSysColorBrush(COLOR_BACKGROUND)とするべきではないのか。

926 :デフォルトの名無しさん:04/06/23 11:03
>>923
補足で蛇足。先方が OCX コントロールだったりして、OLE_COLOR 型で色指定する場合には、
OleTranslateColor の説明に出てくるいろんな方法 (0x80000000 | COLOR_BACKGROUND とか)が使えます。


927 :デフォルトの名無しさん:04/06/23 13:44
>>901
パイプで解決しました。
ありがとうございます。

928 :デフォルトの名無しさん:04/06/23 15:53
自分以外のウインドウのサイズ変更を制限することは可能でしょうか?
自分のウインドウのサイズを制限する場合はウインドウプロシージャで
WM_GETMINMAXINFOメッセージを処理すれば出来るらしいので、
DLL作ってフックプロシージャで制限したいウインドウのメッセージを
処理しようとしているのですがうまくいきません。

LRESULT CALLBACK MsgProc( int nCode, WPARAM wParam, LPARAM lParam )
{
 CWPSTRUCT *pCWP;
 MINMAXINFO *lpmmi;
 if( nCode == HC_ACTION ) {
  pCWP = (CWPSTRUCT *)lParam;
  if( pCWP->hwnd == hWnd ) { //hWndはサイズ変更を制限したいウインドウのハンドル
   switch( pCWP->message ) {
   case WM_GETMINMAXINFO:
    lpmmi = (MINMAXINFO *) pCWP->lParam;
    lpmmi->ptMinTrackSize.x = 600;
    lpmmi->ptMinTrackSize.y = 480;
    lpmmi->ptMaxTrackSize.x = 1024;
    lpmmi->ptMaxTrackSize.y = 768;
    return 0;
   }
  }
 }
 return CallNextHookEx( Msg, nCode, wParam, lParam );
}

lpmmi = (MINMAXINFO *) pCWP->lParam;
のところを
lpmmi = (MINMAXINFO *) lParam;
に変えてみても出来ませんでした。
ご存知の方いらっしゃいましたらご教授下さい。

929 :デフォルトの名無しさん:04/06/23 16:44
>>928
>return 0;
これじゃあ、ターゲットのウインドウまでWM_GETMINMAXINFOが届かない。
メッセージをいじった場合でも、メッセージをブロックする場合以外は
Call〜()を呼ぶ。

930 :デフォルトの名無しさん:04/06/23 17:00
あ、ごめん。
この場合これでいいのか。929は忘れてくれ。

931 :デフォルトの名無しさん:04/06/23 17:15
単純にグローバルフックになってないとか。

932 :デフォルトの名無しさん:04/06/23 17:31
>>931
WM_GETMINMAXINFO以外にもメッセージをフックしていますが、
そちらは正常に動いていますのでグローバルフックにはなっていると思います。
念のためreturn 0;の前にメッセージボックスを入れて確認しましたが、
サイズを変更しようとするときちんと表示されています。
それなのに600*480よりも小さくなってしまうんです…。

933 :デフォルトの名無しさん:04/06/23 17:59
MSDNより
> CallWndProc フックプロシージャはメッセージを調べることはできますが、
> 変更することはできません。

934 :デフォルトの名無しさん:04/06/23 18:12
>>933
そういうことでしたか…
勉強不足でした。ありがとうございました。

935 :デフォルトの名無しさん:04/06/23 18:14
>>934
フックで先方のプロセスに入り込んだ後でサブクラス化(Window Proc の付け替え)すればOKだと思うよ。

936 :デフォルトの名無しさん:04/06/23 20:07
>>935
結構雑事が多いから整合取るの大変だけどね

937 :デフォルトの名無しさん:04/06/23 20:07
複数のファイルのドロップソースになりたいのですが、
フルパスのITEMIDLISTから、デスクトップのIShellFolderを使い
GetUIObjectOfをすればいいんですか?
それとも、やっぱりIDataObjectを実装しないとならないのでしょうか?


938 :デフォルトの名無しさん:04/06/23 21:55
>>928
サブクラス化により無事制限出来ました。
どうもありがとうございました。

939 :デフォルトの名無しさん:04/06/23 21:57
>>919
???

940 :デフォルトの名無しさん:04/06/24 13:35
>>937
GetUIObjectOfでIID_IDataObjectを指定すればIDataObjectを得られるので、
自分で実装しなくてもいいです


941 :デフォルトの名無しさん:04/06/24 13:51
>>940
c:\foo\text
d:\bar\text
...
のように、別々なフォルダにあるファイルを複数まとめたIDataObjectが欲しいんです。
IEnumIDListで得られるITEMIDLISTからIDataObjectを取得する場合、
複数フォルダにまたがったファイルからの取得は無理ですよね?

942 :デフォルトの名無しさん:04/06/24 17:04
程度の低い質問かもしれません&長文ですが御容赦下さい。DefWindowProcの振舞についてです。

ShowBitmap()なる自作関数があります。これはビットマップをメモリデバイスコンテキストにロードして
BitBltでウィンドウ送るだけのものです。これをWM_PAINTな時に実行させると、正しく表示されます。

次に、ボタンやメニューによるメッセージを使ってビットマップを表示させようと考えました。
プロシージャ内でメッセージはswitchで仕分けていますが、
case WM_PAINT:
break;
なる何もせぬコードの有無で振舞が違うのです(ある時にのみ表示されました。) この理由がわかりません。

原因として考えたのが、以下に示すswitch文最後の入門書通りの処理です。
return (DefWindowProc(hWnd, msg, wParam, lParam));
上記「何もしないコード」が無い時は、WM_PAINT時コレが呼び出されるのですが、その際に
何かビットマップが表示されない様な処理が施されるのでしょうか?
そうだとすると「何もしないコード」の挿入で、ビットマップが表示される様になる事は合点がゆきます。
しかし一方で、ShowBitmap()の代わりにメモリデバイスコンテキストでない、文字や線を描くコードを
入れると、「何もしないコード」がなくても描画できるのです。

この事は、一体どの様に理解したらよろしいのでしょうか?先生方、お知恵を拝借できませんでしょうか?

943 :デフォルトの名無しさん:04/06/24 17:15
自己解決しました。

944 :942:04/06/24 17:57
>>943
騙り氏ね。

>>942お願いします。もう時間が無いんです。

945 :デフォルトの名無しさん:04/06/24 18:05
そんな書き込みで誰かが面倒見てくれると思ってんのカ

946 :デフォルトの名無しさん:04/06/24 18:09
まさかとは思うがWM_PAINT以外でもBeginPaintしてるとかいうトンチキなオチはないよな?

947 :デフォルトの名無しさん:04/06/24 18:10
ShowBitmapもださねーで長文をダラダラと。

948 :デフォルトの名無しさん:04/06/24 18:19
事後承諾しました。

949 :デフォルトの名無しさん:04/06/24 19:06
今までDLLからウインドウを作ろうなんて考えもしなかったんだけど、
DLLからCreateWindowをするとき、HINSTANCEにはDLLのインスタンスハンドルを指定するのですか?
それともWinMainのHINSTANCEを指定すればいいのですか?
NT系だと無視されるようなので、どちらが正しいかってのがちょっと分からないのですが。

950 :940:04/06/24 19:25
>>941
ちょっと試してみたのですが、別ディレクトリのファイルでGetUIObjectOfして
エクスプローラにドロップしてみましたが、なぜかショートカットの作成しかできなくて
コピーなどができないのが謎です。
自前でIDataObjectを処理しないと無理なのか???


951 :デフォルトの名無しさん:04/06/24 21:34
だれか942の質問答えてやれよ?
ここまで低姿勢なんだからさ!


952 :デフォルトの名無しさん:04/06/24 21:37
> BitBltでウィンドウ送るだけのものです。これをWM_PAINTな時に実行させると、正しく表示されます。

> case WM_PAINT: break; なる何もせぬコードの有無で振舞が違うのです

WM_PAINTな時に実行してないじゃん。

953 :942:04/06/24 21:57
すみません、つまらない勘違いでした。
どうもお騒がせしました。二度と来ないので勘弁してください。

954 :デフォルトの名無しさん:04/06/24 21:57
まぁ、case WM_PAINT: break;って何もしないコードとは言い切れないよな。

955 :デフォルトの名無しさん:04/06/24 21:57
>>942
漏れはDefWindowProcよりも、switch後の振舞の方が気になる。

956 :デフォルトの名無しさん:04/06/24 22:04
だったらお前が答えてやれよ?
そこまで高圧的なんだからさ!


957 :デフォルトの名無しさん:04/06/24 22:24
case WM_PAINT: break;
これだと無効領域が有効にならないから
延々とWM_PAINTが飛び続けるんじゃないかな

958 :942 ◆ltc18hDOM. :04/06/24 23:04
皆様、お騒がせして申し訳ない&お返事感謝です。>>943, >>944, >>953 は騙りです。お恥ずかしいのですが
やはり該当コードを晒すことにします。hW、hIはグローバルなウィンドウ及びインスタンスハンドルです。
「何もしないコード」の有無でビットマップの振舞が変化します。文字表示に変化はありません。
以下プロシージャです。
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0); break;
//case WM_PAINT: // 「何もしないコード」
//break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case ID_SHOWBITMAP:
ShowBitmap(); ShowText(); break;
default:
break;
}
default:
return(DefWindowProc(hWnd, msg, wParam, lParam));
}
return (0L);
}


959 :942 ◆ltc18hDOM. :04/06/24 23:05
描画コードです

void ShowText(){
HDC hdc;char* str = "hello";
hdc = GetDC(hW);
TextOut(hdc, 10, 10, str, lstrlen(str));
ReleaseDC(hW, hdc);
return;
}

void ShowBitmap(){
HDC hmdc, hdc; HBITMAP hBitmap; PAINTSTRUCT ps;

hdc = BeginPaint(hW, &ps);
hBitmap = LoadBitmap(hI, MAKEINTRESOURCE(IDB_BITMAP1));
hmdc = CreateCompatibleDC(hdc);
SelectObject(hmdc, hBitmap);
BitBlt(hdc, 0, 0, 200, 200, hmdc, 0, 0, SRCCOPY);
DeleteDC(hmdc);
DeleteObject(hBitmap);
EndPaint(hW, &ps);
return;
}

960 :946:04/06/24 23:06
いぇい、ビンゴ

961 :デフォルトの名無しさん:04/06/24 23:07
>>946 が勝者でした。
ここで質問する前に、猫でも読んでおけ。
読み終わるまでは戻ってくるな。

962 :デフォルトの名無しさん:04/06/24 23:08
もう解決してるんですが…荒らしはやめてください>>958,959。

963 :942:04/06/24 23:08
ソースを良く見直したら、自分がどれほどバカだったか痛いほど思い知りました。
みなさんどうもありがとうございました。涅槃で待ちます。

964 :デフォルトの名無しさん:04/06/24 23:09
スレを使い切る直前には何故か一揉めするな。

965 :942:04/06/24 23:12
テヘッ

966 :デフォルトの名無しさん:04/06/24 23:17
CreateCompatibleDCで作ったDCで最初に選択されてるビットマップって
DeleteObjectしなくていいの?

967 :デフォルトの名無しさん:04/06/24 23:18
>>959
デバイスコンテキストを扱うときはWM_PAINT時とそれ以外で分けたほうがいいです。
具体的には

void DrawSomething(HDC hdc=NULL)
{
  bool flag=false;
  if(hdc==NULL){
    hdc = ::GetDC(hWnd);
    flag = true;
  }

  //いろいろ描画

  if(flag){
    ::ReleaseDC(hdc);
  }
  return;
}

ってな感じ。DrawSomethingをWM_PAINT時に呼ぶなら
BeginPaintでデバイスコンテキストを取得してから引数に指定します。
それ以外はNULLを指定して内部でGetDC/ReleaseDCを呼び出すようにする。

理由はうまく説明できそうにないのでエロイ人にでも聞いてください。


968 :デフォルトの名無しさん:04/06/24 23:32
>>967
そんなことするぐらいならDCは常に呼び出し側が用意、でいいだろ

969 :942:04/06/25 00:14
うるせー馬鹿
さっさと寝ろ

970 :デフォルトの名無しさん:04/06/25 00:23
>>966を教えてよ。
本当の幸せ教えてよ。

971 :デフォルトの名無しさん:04/06/25 00:24
貴様にレインボーだごるぁ

972 :デフォルトの名無しさん:04/06/25 00:45
>>966
どうしても気になるなら削除すればいいよ。
ただ、DCに選択されてるオブジェクトはDeleteObjectできないから、
別のビットマップを身代りとして選択しとかなくちゃいけない。
そいつは削除できずに残るけど、まあ目的のためには些細なことだ。

973 :デフォルトの名無しさん:04/06/25 00:52
>>972
削除しなければいけないのかどうかを知りたいのですが。
ストックオブジェクトとはわけが違いますよね?違わないの?

974 :デフォルトの名無しさん:04/06/25 00:59
今簡単な送受信ソフトを作っているのですが、送受信の進行状況をプログレスバーで表すことができません。
送受信したファイルサイズなど表す方法があったら教えてください。
自分なりに調べてみたのですが、適当な物が見つかりません。
宜しくお願いします。

975 :942 ◆ltc18hDOM. :04/06/25 01:22
>>942 に関わった皆様
荒らしてしまって申し訳ないです。BeginPaintをMSDNで見ると、確かに
WM_PAINT時以外使うなとありますね。すみませんでした。今後 >>967-968 さんの様にします。
>>963 は騙りですが、現在この通りの事を思っております。出直してきます。

ありがとうございました


976 :デフォルトの名無しさん:04/06/25 01:35
>>975
まあ、がんがれ。変なのが多かったのは来たタイミングが悪かっただけさ。


977 :デフォルトの名無しさん:04/06/25 01:38
(´・ω・`)ノシ変なのの一人でーす

978 :デフォルトの名無しさん:04/06/25 02:45
自分が答えられない質問されると何故かキレる奴が居るからな。
どのスレでも言える事だが。

979 :デフォルトの名無しさん:04/06/25 03:04
プ

980 :デフォルトの名無しさん:04/06/25 09:34
ttp://www5.wisnet.ne.jp/~mercury/supertag/index.html
のSuper Tag Editorのように、リストビューにツリーを表示するには
どうしたらいいんでしょうか?
フックとオーナードローをするしかないのかな。

981 :デフォルトの名無しさん:04/06/25 09:51
そこまでキーワードが分かってりゃ検索すれば一発でサンプルが見つかると思うんだが。

982 :デフォルトの名無しさん:04/06/25 11:31
>>981
>フックとオーナードローをするしかないのかな。
から>>980をプロファイリングすると、恐らく内心では

「フックとオーナードロー('A`)マンドクセ もっとバカチョンな方法教えろゴルァ」

と思っている。間違いない。


983 :デフォルトの名無しさん:04/06/25 12:06
で?って言う。

984 :デフォルトの名無しさん:04/06/25 12:07
サンプルどころか、ソース公開なわけだが。
まあGPLだから取扱注意だけど。

985 :デフォルトの名無しさん:04/06/25 12:18
GPLなコードを見て内容を理解し、そっくりな内容のソースを焼き直ししてもGPL感染は無いので安心したもれ。

986 :デフォルトの名無しさん:04/06/25 12:28
あ、だからソースそのまんま使っちゃう場合の話ね。
厨な質問するヤシは厨な解決手段をとりがちだから

987 :デフォルトの名無しさん:04/06/25 12:35
>>982
いや、まあ図星なわけですけど。
フックていうか、サブクラス化ですね。

>>985
マジ・・・なのかな。

988 :デフォルトの名無しさん:04/06/25 12:45
>>987
コードはGPLに縛られてもアルゴリズムは縛られないからね

989 :デフォルトの名無しさん:04/06/25 12:45
ダメに決まってるじゃん

990 :デフォルトの名無しさん:04/06/25 13:02
素人のGPL談義ほど不正確なものはない

991 :デフォルトの名無しさん:04/06/25 13:06
↓次スレ

992 : ◆Manna2uCLg :04/06/25 13:21
ちょっくら立ててくるぜ。

993 : ◆Manna2uCLg :04/06/25 13:35
…すまん。立てられなかった…
plalaだめぽ…

994 :デフォルトの名無しさん:04/06/25 13:45
コードなんて盗んでなんぼのもん

995 :デフォルトの名無しさん:04/06/25 14:11
Win32API質問箱 Build20
http://pc5.2ch.net/test/read.cgi/tech/1088140233/

996 :デフォルトの名無しさん:04/06/25 14:12
996

997 :デフォルトの名無しさん:04/06/25 14:12
997

998 :デフォルトの名無しさん:04/06/25 14:13
998

999 :デフォルトの名無しさん:04/06/25 14:13
Win32API質問箱 Build20
http://pc5.2ch.net/test/read.cgi/tech/1088140233/

1000 :⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡:04/06/25 14:14
Win32API質問箱 Build20
http://pc5.2ch.net/test/read.cgi/tech/1088140233/

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

222 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)