Win32API質問箱 Build ..
21:デフォルトの名無しさん
07/04/18 16:38:28
どうしてSetWindowsHookExを使うとけ#pragma data_seg〜って書かないといけないの?
22:デフォルトの名無しさん
07/04/18 16:40:20
>>21
フックするプロセスごとにDLLがロードされるので、変数をプロセスを跨いで共有する必要がある。
23:デフォルトの名無しさん
07/04/18 16:44:07
へぇ
24:デフォルトの名無しさん
07/04/18 16:45:15
書きたくなければFMOでも使うといいさ
25:デフォルトの名無しさん
07/04/18 20:01:23
>>4のSDKは古いんだって・・・
26:デフォルトの名無しさん
07/04/18 20:14:42
何度言っても分からない
それがム板クオリティ
27:デフォルトの名無しさん
07/04/18 21:12:32
MSDNライブラリも2006/06と2006/12の両方を載せるのは無駄。
>>4-5は整理しろよ。
28:デフォルトの名無しさん
07/04/18 22:13:09
>>22
複数のプロセスがロードしないなら書かなくておk?
29:デフォルトの名無しさん
07/04/18 22:16:32
>>28
良いと思うよ。DLLにする意味も薄くなるが。
30:デフォルトの名無しさん
07/04/18 22:19:01
いや、グローバルフックはDLL化必須じゃん?
31:デフォルトの名無しさん
07/04/18 22:19:04
>>28
ローカルフックならそう。そもそもDLL関係ないし。
グローバルフックなら CallNextHookEx に渡す HHOOK を共有しなければいけない。
32:デフォルトの名無しさん
07/04/18 22:25:50
>>30
複数のプロセスからロードしないならグローバルフックじゃない気がするが
33:デフォルトの名無しさん
07/04/18 22:28:43
え?別にDLLのフックを呼び出すのが単一でもグローバルフックはグローバルフックだろ?
それとも>>30と同じく俺も勘違いなのか?
34:デフォルトの名無しさん
07/04/18 22:30:24
>>前998&999
ありがとうございました、何とかなりそうです
35:デフォルトの名無しさん
07/04/18 22:33:52
>>21はグローバルフックとは一言も言ってないんだよね。
この時点ですでに勘違いなのかもシレン。
要>>21のレス。
36:32
07/04/18 22:39:10
俺も語弊があるなw
>複数のプロセスからロードされないなら
だな
37:デフォルトの名無しさん
07/04/18 22:50:14
URLリンク(msdn2.microsoft.com)
実のところNT系は、CallNextHookExのHHOOK型の引数を無視するので
フックハンドルを共有する必要がない罠。
38:デフォルトの名無しさん
07/04/18 23:00:36
>>36
それが良くわからんのだが
フックには特定のスレッドを対象にしたもの(これがローカルフック)と
特定の対象スレッドを指定しないグローバルのものの2種類のスコープがあって
後者はフックプロシージャがDLLにないと出来ない
で、たとえばWH_GETMESSAGEなんかは
ローカルだと対象のスレッドのメッセージだけ取ってくるし
グローバルだととにかくどこのメッセージでも取ってくる
ローカルとグローバルの違いってこれだろ?
SetWindowsHookEx呼ぶDLLの関数を複数のプロセスが呼ぶかとか関係無いと思うんだが
39:デフォルトの名無しさん
07/04/18 23:03:45
>フックには特定のスレッドを対象にしたもの(これがローカルフック)と
違う。
ローカルフックは自分自身のスレッドのみを対象としたもの。
他のスレッドを指定してのフックはグローバル。
もちろんスレッドを指定せずシステム全体が対象の場合もグローバル。
40:デフォルトの名無しさん
07/04/18 23:12:24
DestroyIconとDestroyCursorの違いってなに?
CreateIconIndirect で作ったらDestroyIconで処分するってMSDNに
かいてあるんですが
41:デフォルトの名無しさん
07/04/18 23:23:50
DestroyIcon はアイコンを破棄する。
DestroyCursor はカーソルを破棄する。
42:デフォルトの名無しさん
07/04/18 23:46:23
っていうレス以外でお願いします
43:デフォルトの名無しさん
07/04/18 23:49:00
CreateWindowExのheightやWidthを弄って実行しても
何故か画面に反映されません・・・
エスパー回答でもいいので助けてください・・・
44:デフォルトの名無しさん
07/04/18 23:53:01
>>40
言われた通りにしとけばいいだろ
哲学的な答えが欲しいならモニターにキーボード投げつけろ
>>43
CreateWindowExを呼んでる部分晒してよ
45:デフォルトの名無しさん
07/04/18 23:53:11
ShowWindow
46:デフォルトの名無しさん
07/04/19 00:02:10
>>44
2画面分割のスプリットウィンドウで、親ウィンドウの上に
子1&2ウィンドウを作っており、その子2のCreateWindowです。
CreateWindowは、親のProcのWM_CREATEで呼んでいます。
+--+-------+
|子1|子2 |
| | |
+----------+
+----------+
(a)の行をg_c2w.height-20にしても変化しません・・・
20はステータスバーの高さです。
// 子2ウィンドウ作成
g_hChild2 = CreateWindow(
clsChild2,
(LPCWSTR)"",
WS_CHILD | WS_VISIBLE | WS_BORDER,
g_c1w.width - g_frame,
0,
g_c2w.width,
g_c2w.height, ←(a)
hWnd,
NULL,
hInstance,
NULL
);
47:デフォルトの名無しさん
07/04/19 00:05:25
>>40
CreateIconFromResourceExとCreateIconIndirectは
与えたパラメータによってはカーソルを返すこともあるが、
そのハンドルがカーソルであったとしても、DestroyIconで破棄しなくてはならない。
48:デフォルトの名無しさん
07/04/19 00:23:19
>>46
g_c2w.heightの中の値は確認した?
49:デフォルトの名無しさん
07/04/19 00:28:31
>>48
すみません、今解決しました。
親のProcのWM_SIZEの中に子2ウィンドウのサイズを変更する個所が
ありまして、それがWM_CREATEで設定したg_c2w.heightを上書きして
いたようです。WM_SIZEでも-20してやると希望通りに動作しました。
ウィンドウ作成時にもWM_SIZEが走るとは知りませんでした・・・
50:デフォルトの名無しさん
07/04/19 00:35:31
∧∧
ヽ(・ω・)/ ズコー
\(.\ ノ
、ハ,,、  ̄
 ̄
51:デフォルトの名無しさん
07/04/19 01:15:14
自己解決しました。
50にカチンときたので教えません。
バーカ!
52:デフォルトの名無しさん
07/04/19 01:26:30
自己解決メソッドは↓のスレのみで有効です
【厨房満開】HSP初質51【ビラビラ満開】
スレリンク(tech板)
53:40
07/04/19 01:54:44
>>47
ありがとう
54:デフォルトの名無しさん
07/04/19 06:08:02
エクスプローラで、コンテキストメニュー項目を追加したいのですが、
ファイルやフォルダを無選択時の場合(新規作成(W)とかが出るやつ)に
使用されるレジストリはどこなのでしょうか?
55:デフォルトの名無しさん
07/04/19 06:22:08
*に書いておけばいいんじゃね?
56:デフォルトの名無しさん
07/04/19 07:14:33
>>54
HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers
だけど、これだけを聞いてちゃんとContextMenuHandlerを作れるのか?
57:デフォルトの名無しさん
07/04/19 10:31:39
任意のアプリのウィンドウを
SetParentで子ウィンドウにするプログラムを作りたいんですが
普通にSetParentしただけでは描画に問題がでました。
それでCreateRemoteThreadで同じプロセスに作ったスレッドの
ウィンドウを親にしてみても同様に描画の問題がでますた。
なのでSetParentは同じスレッドじゃないとまともに動かないと結論付けて
今度は別のAPC未対応のスレッドにウィンドウを作らせるか、
もしくはウィンドウを別スレッドで作ってからウィンドウのハンドルを
別のスレッドに関連づけるような方法を試してみたいのですが
そんな方法はありませんか?
58:デフォルトの名無しさん
07/04/19 14:48:06
URLリンク(www.kumei.ne.jp)
猫でも・・のソースで実行してみると、メニューとダイアログボックスは
表示されるんですが、ビットマップが表示されないです。
何かが足りないと思うのですが、原因わかるかたおりますか?
Webページの実行結果と同じようにしたいので。。
59:デフォルトの名無しさん
07/04/19 14:58:16
>>58
念のために聞くけど、
猫の画像ファイル(bitmap1.bmp)は自分で用意しないといけないけど用意した?
60:デフォルトの名無しさん
07/04/19 15:05:27
アイコンとビットマップ両方用意してあります。
ちなみに、フォルダでexeをみると、アイコンは変わって
表示されてました。
61:デフォルトの名無しさん
07/04/19 15:17:16
>>60
.rcのファイルにちゃんと
MYBMP BITMAP DISCARDABLE "bitmap1.bmp"
の行がある?
62:デフォルトの名無しさん
07/04/19 15:20:26
>>61
あります。
もしかしてビットマップが大きすぎたりすると
表示できないとかありますかね。。
でもDlgの左上にアイコンも表示してくれないし・・・
63:54
07/04/19 15:21:57
>>55 >>56
どうもありがとうございます。
>>56
やっぱりそれしかないんですか・・・
そこだとActiveXオブジェクトである必要がある訳ですよね・・・?
HKEY_CLASSES_ROOT\*\shell\foo\command
みたいに適当なEXEとかでできる所はないんでしょうか・・・
ないですか・・・そうですか・・・
でも何でDirectoryなんでしょうか・・・?
64:デフォルトの名無しさん
07/04/19 15:29:09
>>62
当たり前だけど .rcのファイルのダイアログの定義のところに
CONTROL "MYBMP",IDC_STATIC,"Static",SS_BITMAP | SS_REALSIZEIMAGE,
19,18,13,14
の行はあるよね?
"MYBMP"の綴り間違ってたりしてないよね?
こっちの環境では2000x2000ピクセルのサイズでも、
モノクロビットマップでもちゃんと表示されるんだけどなぁ・・
65:デフォルトの名無しさん
07/04/19 15:42:40
普通のBitmapじゃ表示されないよ
アイコン用Bitmapを作るツールで作らないと
66:デフォルトの名無しさん
07/04/19 15:45:48
>>64
あります。ビットマップが表示されないだけで
ほかのはきちんと機能します。
67:デフォルトの名無しさん
07/04/19 15:55:31
>>65
ビットマップの新規作成から
こぴぺしてつくりました。
アイコンは **.icoでBMPは **.bmpです。
68:デフォルトの名無しさん
07/04/19 16:01:59
>>67
エクスプローラとかデスクトップを右クリックの「新規作成」のことだろうか?
作っただけのそのままのファイルだと何も表示されない。
一度、ペイントブラシで適当に色塗っただけのBMP作って試してみたら?
69:デフォルトの名無しさん
07/04/19 16:04:56
>>68
VCのリソースエディタに貼り付けました。
なんか色数が多いらしく、減色&小さめにリサイズして
貼り付けました。
リソースタブからプロパティをみると表示されています。
実行すると表示されません。
70:デフォルトの名無しさん
07/04/19 16:55:06
とりあえずビットマップ・描画関連APIの戻り値見て、どこまで成功してるのか調べた方がいいかもね。
71:58
07/04/19 17:04:34
いろいろすみません
もうちょっとがんばってみます。
72:デフォルトの名無しさん
07/04/19 20:43:41
スタティックコントロールが"MYBMP"で参照しているのに、
ビットマップはMYBMPで定義されている件について。
73:デフォルトの名無しさん
07/04/19 21:58:35
IDB_MYBMP
74:デフォルトの名無しさん
07/04/19 22:01:04
皆様、質問があります。
コンソール画面で
ipconfig > "c:\ipinfo.txt"
とすると、リダイレクタより、
ipconfigの標準出力がc:ドライブ下のipinfo.txtに出力される。
これをCreateProcess関数のlpszCommandLineに、
「ipconfig > \"c:\\ipinfo.txt\"」と指定しても、
c:ドライブ下のipinfo.txtに出力されるものなんでしょうか?
(自分はうまくいかない)
それとも、 > はcmdの機能?
パイプで組まなきゃダメなんかなぁ・・・
75:デフォルトの名無しさん
07/04/19 22:02:35
>>74
シェルの機能なのでcmd.exeごと起動する。cmd /? をチェキ。
76:74
07/04/19 22:06:48
>>75
納得!!
cmd.exeに委託しているんですかー。
ありがとうございます。
77:デフォルトの名無しさん
07/04/19 22:38:43
CreateWindowのEDITで、書き込みとか書き換えを不可能にするために
EnableWindow(h1, FALSE)をしたところ、背景が灰色になって文字も薄くなりました。
書き換え書き込みは不可能なまま、背景白、文字黒に直したいのですが
どうすればいいのでしょうか?
78:デフォルトの名無しさん
07/04/19 22:47:20
>>77
ES_READONLY
WM_CTLCOLORSTATIC
でどう?
79:デフォルトの名無しさん
07/04/19 22:55:03
>>78
できました!ありがとうございます!
しかし、目的のEDITのウィンドウの背景を変えるにはどのように指定すればいいのでしょうか?
80:デフォルトの名無しさん
07/04/19 23:59:54
>>79
親ウィンドウでWM_CTLCOLOREDITを捉える
81:デフォルトの名無しさん
07/04/20 00:20:58
リストビューの行にチェックボックスはどうやって付けるのでしょうか
↓こんな感じです
_______
|__|_____
|□ |
|□ |
|□ |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
82:デフォルトの名無しさん
07/04/20 00:25:49
>>81
URLリンク(www.kumei.ne.jp)
ここらへんで幸せになれると思う
83:デフォルトの名無しさん
07/04/20 00:27:54
>>82
即レスありがとう
幸せになってきます
84:デフォルトの名無しさん
07/04/20 09:52:05
>>72
それでした。
""を追加したら表示されました。
ありがとうございました。
85:デフォルトの名無しさん
07/04/20 10:35:32
ReadFileで読み取ったファイルを1行づつ二次元の配列に格納して
構文解析したいです
ReadFileの第二パラメータのバッファから、二次元の配列に移すAPI
はありますか?
86:デフォルトの名無しさん
07/04/20 10:45:42
CopyMemory
87:デフォルトの名無しさん
07/04/20 10:57:17
物臭もここまでくると素晴らしいな
MSが何の為にそんなAPI用意するんだろうか
88:デフォルトの名無しさん
07/04/20 11:50:11
質問です。
ツールバーを作ろうとしているのですが、色々なサイトを調べても、ツールバー上にはボタンしか置いていないようです。
コンボボックスをツールバー上にのせたいのですが、可能でしょうか?
ツールバーと似た、レバーコントロールというものの上におけるのは調べて発見できたのですが…
89:デフォルトの名無しさん
07/04/20 11:58:39
>レバーコントロール
思わずふきだしてしもた。
90:デフォルトの名無しさん
07/04/20 12:57:22
エクセルでオープンしているファイルを、
CreateFileでオープンしたいのですが、どうすれば出来るでしょうか。
エクセルでオープンしていなければ、CreateFileでオープンできるのですが、
エクセルでオープンしていると、CreateFileでオープンできないようです。
ただ、他のファイルビュアーでは読めたりするので、どうやればそれができるのかわかりません。
91:デフォルトの名無しさん
07/04/20 13:01:21
CreateFileのリファレンス読めば明らかだと思うが・・
92:デフォルトの名無しさん
07/04/20 13:01:24
>>90
排他モードで開いてるんだろ
93:85
07/04/20 13:06:25
ReadFileの第二パラメータのバッファの中は
111\r\n222\r\n333\r\nEOF
と連続した文字列なのはわかったのですが、これをCopyMemoryを使って、
1行づつ二次元の配列に移す場合、バッファを先頭から1文字づつ読んで\r\n
毎に切り分けて格納するしかないのでしょうか・・・
定番の読み方(例えば仕事(?)でやられる方)が知りたいです
↓こうしたい
char hairetsu[5000][1024] (5000はファイルの行数、1024は1行の最大の長さ)
hairetsu[0][1024]に111\r\n
hairetsu[1][1024]に222\r\n
hairetsu[2][1024]に333\r\n
hairetsu[3][1024]にEOF
94:85
07/04/20 13:07:03
>>86
ありがとうございます
95:デフォルトの名無しさん
07/04/20 13:12:28
てかCの標準関数にそのものズバリなのあるじゃねぇか
96:デフォルトの名無しさん
07/04/20 13:19:12
バッファはそのまま使いつづけて
各行開始位置のポインタ値を保持する変数配列を用意し
バッファを一旦頭から末尾まで全部捜査し
行開始位置のポインタをとりつつ\r\nを\0\0に書き換えていく
これで文字列系関数にもポインタを渡すだけで行ごとに処理が可能に!
つーか>>93みたいな多元配列はメモリの無駄だし
97:デフォルトの名無しさん
07/04/20 14:00:55
Win2000+VC.net2003の環境で
QueueUserAPCをコンパイルすると
error C3861: 'QueueUserAPC'識別子は、引数依存の照合を使用しても見つかりません。
と出るんですがどうすれば解決できますか?
winbase.hをインクルードしてもkarnel32.dllとリンクしても駄目みたいなんですが。。
98:デフォルトの名無しさん
07/04/20 14:06:49
_WIN32_WINNT を 0x0400 以上の値で define した後にヘッダーをインクルード
(コンパイラ設定でマクロ設定する でも可)
99:デフォルトの名無しさん
07/04/20 14:22:34
子ウィンドウが開かれていて、親ウィンドウの上を移動させる時、
9x系と再描画されて、XPだと再描画されないのですが、
9x系とXPでは、再描画の挙動が違ったりしているのでしょうか。
100:デフォルトの名無しさん
07/04/20 14:46:22
そりゃあ、OSの設定の問題だろ
移動を終えてドラッグ止めたら再描画されるだろ?
101:99
07/04/20 15:35:25
>>100
ありがとうございます。
されないです。
最小化して標準に戻すのでもダメです。
WM_PAINTが来てない可能性すらあるので、
そこらへんから実験してみます。
102:デフォルトの名無しさん
07/04/20 16:22:57
それはあれか、全く同じEXEを9xとXPで動かしてるのか?
>WM_PAINTが来てない可能性すらあるので、
ネェヨwwwww
103:デフォルトの名無しさん
07/04/20 16:29:05
子ウインドウは動かしただけでは再描画されなくても正常だが
WS_EX_LAYERED付なら親でも
104:デフォルトの名無しさん
07/04/20 16:34:47
そういえばレイヤードウィンドウなんてありましたねぇ
全然必要性を感じないから使ったこと無いですが
105:デフォルトの名無しさん
07/04/20 16:39:05
レイヤードウィンドウは雑誌やスクリーンショットで見る分にはかっこいいが
実際に使ってみると使いにくくてしょうがない
106:デフォルトの名無しさん
07/04/20 16:42:11
>>95
ありがとうございますstrtok確認しました
>>96
>\r\nを\0\0に書き換えていく
このやり方で行きます目から鱗です
こういうテクニックって本に書いてあるんでしょうか?
ウェブでも本でも見たことない・・
107:デフォルトの名無しさん
07/04/20 16:51:04
>>105
完全不透明のレイヤードウィンドウもつくれるよ。
見た目は普通のウィンドウと変わらないけど、WM_PAINTは激減する。
108:デフォルトの名無しさん
07/04/20 17:05:24
外部プロセスのCPU使用率を強制的に制限する方法を探しています。
最初に、CreteProcessのPROCESS_INFORMATIONから得られるhThreadに対して
SuspendThread/ResumeThreadを試しましたが、
複数スレッドがある場合に対応できない様です。
次にCreateToolhelp32Snapshotによるプロセス内のThreadの列挙で
SuspendThread/ResumeThreadをやろうとしましたが、
Thread32First/Thread32Nextで得られるThreadIDに対し、
OpenThreadでHandleへ変換しようとすると失敗してしまいました。
また、JobObjectの関連付けでJOB_OBJECT_LIMIT_JOB_TIMEや
IDLE_PRIORITY_CLASSで時間制限を掛けてみましたが、このオプションは
設定時間にプロセスが終わってしまうだけみたいなので目的と違う様です。
使用率制限を行うツールとして既にBESという物がありますが、
あれはどうやっているのでしょうか?
109:デフォルトの名無しさん
07/04/20 17:07:32
すいません、BESはソースが公開されていますね。
調べてみます…。
110:99
07/04/20 17:12:42
>>102
はい。基本は9xで作っているんですけど、
動作確認のためxpで動かそうと思いました。
>>103
再描画されて欲しいのは、下にある親ウィンドウの方です。
ただ、最小化→標準化とすると、子ウィンドウの方も再描画されません。
WS_EX_LAYEREDについても調べてみます。
111:108
07/04/20 17:27:28
できました。Thread32First/Thread32Nextの方法でよかった様です。
112:デフォルトの名無しさん
07/04/20 17:37:56
画像を扱うのにBMP用のAPIは見つかったのですが、
PNG用のAPIは、外部ライブラリを探すしかないのでしょうか?
OSはXPです。
113:デフォルトの名無しさん
07/04/20 17:40:00
GDI+でも検索汁
114:デフォルトの名無しさん
07/04/20 17:41:03
つ gdiplus
115:デフォルトの名無しさん
07/04/20 17:45:29
StretchDIBitsって出力先がメモリDCや拡張メタファイルでもPNGを出力できるんだろうか
116:112
07/04/20 17:50:23
ありがとうございます。勉強してきます。
117:デフォルトの名無しさん
07/04/20 18:07:55
WM_CREATEメッセージ中に、子ウインドウのレイアウトに従い
自身のサイズを変更したいのですが、CREATESTRUCTを修正しても
MoveWindow/SetWindowPosでも変更できないようです
何かいい方法はないでしょうか?
118:デフォルトの名無しさん
07/04/20 18:10:34
サイズの変更をポスト
119:デフォルトの名無しさん
07/04/20 18:15:05
>MoveWindow/SetWindowPosでも変更できないようです
可能性
・自分の WM_SIZE ハンドラで、引数と無関係の値にサイズ変更している
・自分の親が 親のWM_SIZEのタイミングで 自分をMoveWindowしやがってる
120:デフォルトの名無しさん
07/04/20 18:15:36
あれ?ウィンドウ生成時にもWM_SIZEが発行されるんじゃなかったっけ?
121:デフォルトの名無しさん
07/04/20 18:26:35 BE:124224588-2BP(222)
>WM_CREATEメッセージ中に、
リソースインダイレクトを使っているというオチではなかろうな。
122:デフォルトの名無しさん
07/04/20 19:23:11
ウィンドウを作らずに通知エリアの追加は出来ないの
123:デフォルトの名無しさん
07/04/20 19:25:15
通知エリアって?
124:デフォルトの名無しさん
07/04/20 19:34:20 BE:62112184-2BP(222)
>>122
できたとして、どうやってメッセージを受け取るつもりだ?
125:97
07/04/20 19:43:23
>>98
ありがとうございます。
その通りにやったら、できました。
126:デフォルトの名無しさん
07/04/20 19:45:04
>>124
Hook
127:デフォルトの名無しさん
07/04/20 19:46:33 BE:58230656-2BP(222)
>>126
「通知エリアのメッセージ」と分かっているのにフックしなければならない理由があるの?
128:デフォルトの名無しさん
07/04/20 19:59:01
北がキチガイなのは世界中公認の周知の事実だが
南は中身は同じなのに私達先進国ですという皮をかぶってるのがウザス
129:デフォルトの名無しさん
07/04/20 20:02:32
同意するがスレ違いだ
130:デフォルトの名無しさん
07/04/20 21:09:53
>>106
さぁねぇ
プログラムの本なんて数多あるから、似たようなのが載ってる本ももしかしたらあるかもしれないな
俺はとりあえず見たこと無いが
ランゲージリファレンス系の本しか持ってないしな
ていうか今回のくらいのは、自分で思いつくくらいにはならんといかんのじゃないかと思うよ
131:デフォルトの名無しさん
07/04/20 21:12:23
>>96
>行開始位置のポインタをとりつつ\r\nを\0\0に書き換えていく
これポインタ取るのはわかるけど、書き換えは出来ないんじゃね?
バッファってchar*だから一旦配列なり、mallocで取った領域なりに
バッファ丸ごとコピーして、そこを書き換えないと
132:デフォルトの名無しさん
07/04/20 21:18:26
ファイルマpp(ry
133:デフォルトの名無しさん
07/04/20 21:21:50
>>131
constでもリテラルでも無い、普通にメモリ上に動的確保したバッファ内の値が書き換えできないと申すか?w
134:デフォルトの名無しさん
07/04/20 21:25:15
>>131
おまえの言ってるバッファはいったい何のバッファだ?
ReadFileに渡すようなバッファがWriteAccess不能なメモリ領域だと言うのか?w
135:デフォルトの名無しさん
07/04/20 21:27:54
バッファの語源はやっぱ水牛?
136:デフォルトの名無しさん
07/04/20 21:28:26
シリアル通信について質問させて下さい。
通信がうまくできません。
以下は流れです。
CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );
GetCommState();
DCBパラメータを書き換え
SetCommState();
GetCommTimeouts();
タイムアウトパラメータを変更
SetCommTimeouts();
WriteFile(); // 1byteのコマンド送信準備
FlushFileBuffers(); // 送信
ReadFile(); // 1byte受信(受信できるまで10回繰り返し)
0x0Fを送れば、0xF0が返ってくるはずなのですが
何も返ってこなくて。手順的な見落としなどがあれば
ご指摘頂けると幸いです。
秋月のTDS01Vというセンサーキットを自前のプログラムで
読んでみようと始めたのですが、最初から躓きました。
センサーの動作は添付のプログラムで正常動作を確認しています。
全てのAPIからはエラーは返ってきていません。
137:デフォルトの名無しさん
07/04/20 21:34:21
どんな引数を指定しているかも
DCBの設定内容も隠してどこがいけない?と聞かれてもな・・・
138:デフォルトの名無しさん
07/04/20 21:43:23
>>137
申し訳ない、行数制限に引っかかったので
どこを削ろうかなと。
DCBはGetした後は、キットのドキュメントにある
パラメータをセットしてるつもりです。
(他はGet時のまま)
m_CommDCB.BaudRate = CBR_9600; // 9600bps
m_CommDCB.fBinary = TRUE; // bynary mode:always TRUE
m_CommDCB.fParity = FALSE; // parity no check
m_CommDCB.ByteSize = 8; // byte size
m_CommDCB.Parity = NOPARITY; // no parity
m_CommDCB.StopBits = ONESTOPBIT;// 1 stop bit
タイムアウトはWeb上でみつかったサンプルの値を引っ張って
来ています。
m_CommTimeouts.ReadIntervalTimeout = 100;
m_CommTimeouts.ReadTotalTimeoutMultiplier = 10;
m_CommTimeouts.ReadTotalTimeoutConstant = 500;
m_CommTimeouts.WriteTotalTimeoutMultiplier = 10;
m_CommTimeouts.WriteTotalTimeoutConstant = 500;
bRtn = WriteFile( m_hCommHandle, m_pTxBuff, 1, &dwCount, NULL );
FlushFileBuffers( m_hCommHandle );
dwCount = 0;
for ( int i = 0; i < 10 && dwCount == 0; i++ ) {
bRtn = ReadFile( m_hCommHandle, m_pRxBuff, 1, &dwCount, NULL );
// 戻り値チェックしながらリトライループ
}
ここで、for文が10回回って出てきてしまいます。dwCountは0のまま
139:デフォルトの名無しさん
07/04/20 21:52:46
bRtnは確認したの?
140:デフォルトの名無しさん
07/04/20 21:56:33
>>139
レスありがとうです。
上のソースは抽出でして、全てのAPIの戻り値は
チェックしていて、エラーが返ってきていないことは
確認しています。
141:デフォルトの名無しさん
07/04/21 00:51:40
>>140はCOMポートを増設してクロスケーブルを買ってくるべきだな。
で、ケーブルで首ry
142:デフォルトの名無しさん
07/04/21 15:04:40
タブコントロールをEnableWindow()で無効にしても、
タブの文字が淡色表示にならないのだがそういう仕様?
143:デフォルトの名無しさん
07/04/21 15:09:15
そう
144:デフォルトの名無しさん
07/04/21 18:45:17
GRAYEDにしなさい?
145:デフォルトの名無しさん
07/04/21 19:34:52
>>141
ワロタw
まさに泣いて馬超を斬るを地でいった訳かw
146:デフォルトの名無しさん
07/04/21 20:07:28
CreateWindowのEDITで、文字を入力してENTERを押したときに動作を設定したいのですが、
どうすればいいのでしょうか?EDITにフォーカスがないときには出来るのですが、
EDITにフォーカスがあるときは改行されてしまいます。
147:デフォルトの名無しさん
07/04/21 20:16:09
サブクラス化
148:デフォルトの名無しさん
07/04/21 20:26:13
>>146
エディットコントロールをマルチラインに設定するのをやめる。
149:デフォルトの名無しさん
07/04/21 20:32:12
>>148
メッセンジャーみたいな感じで、Shift(Ctrlだったかも)+Enterで改行、
通常のEnterで別の動作みたいな感じにしたいのですが、
マルチライン設定だと無理なのでしょうか?
150:デフォルトの名無しさん
07/04/21 20:32:44
>>149
>>147
それが理解できないならまだ早いということ
151:デフォルトの名無しさん
07/04/22 00:31:32
XP Homeでファイルのアクセスをプログラム側で検出することは出来ますか?
Proならファイルの監査が利用できるですが。
152:デフォルトの名無しさん
07/04/22 02:03:44
>>151
おまえのエクスプローラーはどうなってる?それが答えだ。
153:デフォルトの名無しさん
07/04/22 02:21:35
フォルダの変更は監視できたと思うけど。
154:デフォルトの名無しさん
07/04/22 02:22:31
>>151
理屈から考えて出来るはず。
155:デフォルトの名無しさん
07/04/22 06:10:46
逆にpro側の監査機能が良くわからないがfilemonのようなことしたいのかな?
156:デフォルトの名無しさん
07/04/22 10:12:32
ReadDirectoryChangesW
FILE_NOTIFY_CHANGE_LAST_ACCESS
監視中のディレクトリ、またはサブツリーで前回のファイルアクセス日時が変更されると、
変更通知の待機操作から制御が返ります。
157:151
07/04/22 11:11:30
>>152-156
レスありがとうです。
ReadDirectoryChangesWなどでは、なんらかの更新が発生しないとダメな気がします。
(今から確認します)
簡単に試してみると、メモ帳でテキストファイルを開いても"アクセス日時"が変わらないような。。。
158:151
07/04/22 11:14:24
連投申し訳ないです。
>>155
そうですね。filemonの簡易版(最低限アクセスがあったことをトリガーにしたい)のです。
159:デフォルトの名無しさん
07/04/22 11:17:44
監査かけてイベントビューアからゲット
160:デフォルトの名無しさん
07/04/22 11:20:19
仮想リストビューでカラム幅を調整する方法を教えてください。
リストビューは詳細表示。ダイアログは使わずにCreateWindowで作ってます。
普通のリストビューを使っていたときはヘッダとデータを全部作り終わった後に
カラム数分 ListView_SetColumnWidth(ハンドル, インデックス, LVSCW_AUTOSIZE) をしていました。
仮想リストビューに変更してLVN_GETDISPINFOのときに
ListView_SetColumnWidth(ハンドル, pDispInfo->item.iSubItem, LVSCW_AUTOSIZE);
をやったら固まりました。
環境:VC6, SDK
161:デフォルトの名無しさん
07/04/22 11:20:59
>>159
最初はそうしようと思ったんだけど、XP homeって監査がないんです。
162:デフォルトの名無しさん
07/04/22 11:39:44
>>160
LVSCW_AUTOSIZEするためにはその列の一番長い文字列の幅が必要だから
そのときにLVN_GETDISPINFOが呼ばれて無限ループになってるんじゃね?
163:デフォルトの名無しさん
07/04/22 11:55:51
ファイルアクセスをHOOK
164:160
07/04/22 12:02:08
LVSCW_AUTOSIZEは使えなさそうですね。
他のタイミングで幅調整するしかないか。
165:151
07/04/22 12:09:48
>>163
えっと、それはSetWindowsHookExを利用したHOOK機能のお話しでしょうか。
調べ切れていないかもしれませんが、ファイルアクセスに関するものは見つかりませんでした。
それとも URLリンク(ruffnex.oc.to)
のような、概念的なフックの話で、代替DLLを用意して
起動しているプロセス全てのエントリポイントを塗り替えるお話でしょうか。
166:デフォルトの名無しさん
07/04/22 12:23:31
explorer.exeだけならCreateProcess系のフックで何とかなると思うけど
Windows全体ってことになるとカーネルモードのお仕事になる気がする
CreateProcessにしても思いつきで言ってるうえ、あまりにもスマートじゃないが
167:デフォルトの名無しさん
07/04/22 12:31:53
って
ファイルに触る=>CreateProcess=>ファイルパスの取得
が100%成り立つって前提じゃないとだからたぶん無理か
スマソ
168:デフォルトの名無しさん
07/04/22 12:39:27
何らかの変更が加えられたときだけでいいならFindFirstChangeNotificationなどが使えるような気がする
169:デフォルトの名無しさん
07/04/22 12:42:40
>>168
>>157-158を見てそういう話が出てくるか普通w
で、その上で、ファイルの監視なんて変更が加えられた時でいいと思うんだがな
開かれたからって、なんかあるか?
170:デフォルトの名無しさん
07/04/22 12:47:20
>>142 だけど、どなたか淡色表示する方法教えてください。
なるべく簡単な方法で具体的だと助かります。
171:デフォルトの名無しさん
07/04/22 13:37:59
オーナードロー
172:151
07/04/22 13:47:32
>>169
特定ファイルへのアクセスのロギングがしたいのです。。。
やっぱり難しそうですね。
173:デフォルトの名無しさん
07/04/22 14:09:59
>>151
Home EditionでもUIがないだけで監査の機能自体は存在する。
したがってこのスレ的な回答は「Audit Policy関数を駆使して何とかしろ」
URLリンク(msdn2.microsoft.com)
174:151
07/04/22 14:30:52
>>173
>UIがないだけで監査の機能自体は存在する
そうだったんだ! 無知でした。
解決できそうです。ありがとうございます!
175:デフォルトの名無しさん
07/04/22 14:31:06
ロードランナー
176:デフォルトの名無しさん
07/04/22 14:59:39
初期のNTからある物をわざわざ外すわけないじゃん
177:デフォルトの名無しさん
07/04/22 15:02:18
ですよねー^^
178:151
07/04/22 15:46:42
うーん、LoadLibraryでadvapi32.dllを取り込んで
GetProcAddressしてAuditFreeとかAuditSetSystemPolicyを見つけようとしても
null返してくる。
GetLastErrorは"指定したプロシージャが見つからない(127)"でした。
>>173のページの説明でもclientは"Requires Windows Vista."ってなっていて
やっぱりXP homeでは駄目なんでしょうか。。。
179:デフォルトの名無しさん
07/04/22 17:14:55
>>178
すまん、Vistaでしか確認してなかった。XP以前だとこのあたり使うのかな
AddAuditAccessAce (WinNT 3.1)
AddAuditAccessAceEx (Win2k)
AddAuditAccessObjectAce (Win2k)
180:デフォルトの名無しさん
07/04/22 17:40:38
>>179
ご丁寧にありがとうございます!
GetProcAddressで確認できました。今からヘルプ読みます。
181:デフォルトの名無しさん
07/04/22 19:19:45
>>180
> GetProcAddressで確認できました。
DependencyWalkerで確認したほうが手っ取り早くね?
182:デフォルトの名無しさん
07/04/22 19:43:28
>>181
VCならな
183:デフォルトの名無しさん
07/04/22 19:47:55
[Ctrl]+[A]とかをシミュレートしたいのですがどうやるんでしょうか?
SendMessage(hWnd, WM_KEYDOWN, VK_CONTROL, 0);
SendMessage(hWnd, WM_KEYDOWN, 'V', 0);
184:デフォルトの名無しさん
07/04/22 19:56:43
>>183
SendInputかkeybd_event
185:デフォルトの名無しさん
07/04/22 19:57:57
>>182
VCである必要はないと思うが
186:デフォルトの名無しさん
07/04/22 20:00:42
VC買わないと手に入らないと思ってるんじゃね? Platform SDKに付いてる。
187:デフォルトの名無しさん
07/04/22 20:05:15
PSDKについてくるし
URLリンク(www.dependencywalker.com)
で単独で配布しとるぞ。
188:デフォルトの名無しさん
07/04/22 20:07:35
知らんヤツの方が多いんじゃね?
189:デフォルトの名無しさん
07/04/22 20:16:56
ウィンドーを作らないプログラムの場合
タスクバーの右端にアイコンを追加することは出来ますか?
190:デフォルトの名無しさん
07/04/22 20:25:10
>>183
WM_KEYDOWNはSendMessageで送っては駄目。
PostMessageを使う必要がある。
詳しいことは、PostMessageとSendMessageの違いと
TranslateMessageの働きを勉強してくれ。
191:デフォルトの名無しさん
07/04/22 20:41:47
>>189
出来る。ただしメッセージは受け取れない。
192:デフォルトの名無しさん
07/04/22 20:42:55
>>189
確かできると思うけど、非表示のウィンドウでいいから用意しとかないとイベントを受け取れんぞ。
193:デフォルトの名無しさん
07/04/22 20:44:05
>>189
非表示でウインドウを作ればいいだろ。
知恵が足りない。
194:デフォルトの名無しさん
07/04/22 22:52:21
かぶりすぎ
195:デフォルトの名無しさん
07/04/22 23:11:09
98、Me、XPで動いて欲しいソフトを作っているんですけど、
始めにGetVersionExのdwMajorVersionが
10、90、1かであるかチェックすれば大丈夫でしょうか。
dwMajorVersionが同じでもdwPlatformIdが違うとかはないでしょうか。
196:デフォルトの名無しさん
07/04/22 23:18:50
OSVERSIONINFO
URLリンク(msdn2.microsoft.com)
197:デフォルトの名無しさん
07/04/22 23:19:33
> dwMajorVersionが
> 10、90、1かであるかチェックすれば大丈夫でしょうか
Windows の Version 90 か…
>>195は未来を進んでるなぁー
それはそうと↓を良く見れ。
URLリンク(msdn2.microsoft.com)
198:デフォルトの名無しさん
07/04/22 23:20:50
リロードしたらほんとうにかぶりすぎてて吹いた
199:デフォルトの名無しさん
07/04/22 23:21:29
>>195
user32.dll,kernel32.dllあたりのリンクの仕方次第では、
そんなんチェックする前にDLLのバージョン不整合で落ちるぞ。
200:デフォルトの名無しさん
07/04/22 23:29:03
別次元の話だけど、俺ならまずWINVERと_WIN32_WINDOWSを0x0410にする。
それはともかく、2003/Vista及びそれ以降で動かせるようにするつもりはないのか?
まあ、そのつもりがなくても互換性モードをオンにすれば動かされるだろうが。
201:195
07/04/22 23:39:48
ありがとうございます。
>>196
日本語のは見ていたんですけど、さっぱりだったもので。
>>197
90の使い方間違っていますか?下位をチェックするとかですかね。
飛びぬけて数字が大きいので違和感はあったんですけど。
>>199
VC2005で作られたソフトを実行すると、始めに**dllが
見つからないとか出て、実行できないのがありますがそれですかね。
それなら危険がない?と思うので逆にいいんですけど。
>>200
PCを持っているなら、もちろん動かせるようにしたいんですけど、
98、Me、XPしかないので、チェックのしようがないです。
202:デフォルトの名無しさん
07/04/22 23:48:37
>>201
> 始めに**dllが
そりゃSxSだろ。manifestをちゃんと書いてやれば見つけてくれる。
203:デフォルトの名無しさん
07/04/22 23:51:01
>>201
いや、動作確認しなくても「保障はしないよ」くらいは言えるでしょ。
GetVersionInfoExの結果が想定していないバージョンだったら一律に実行を拒否する、なんて
コードを書いているのでもない限り。
204:195
07/04/23 00:08:27
>>202
それとは違いましたか。
そちらについても勉強したいと思います。
>>203
さすがに、「98、Me、XP以外なので実行できません」
と出て終了は良くないですかね・・。
よくMSDNに9x系では○○、NT系では○○と、
分かれても2パターンである事が多いので、
それがMajor4、5であると考えると、
他のOSでもそれなりに動いてくれる気もします。
有名どころで、LoadImageはNT系でファイルから開けないとか、
タイマーの精度で9x系は55ミリ秒とかありますが、
そういうのは性能が落ちる方に合わせては作っています。
205:デフォルトの名無しさん
07/04/23 00:23:14
ステータスバーの右下についてる
SIZEGRIPのみ表示させるってできますか?
206:デフォルトの名無しさん
07/04/23 00:31:13
>>205
SCROLLBAR
SBS_SIZEGRIP
あたりでググってみ
207:デフォルトの名無しさん
07/04/23 00:34:27
>>204
想定より新しいバージョンのOSは、基本的に受け入れるチェックコードでないと駄目、
って昔のMSDNで見た記憶がある。
特殊なアプリで無ければ、マニュアルに動作保障OS列挙しとけば
チェックコード自体要らないけどな。
208:デフォルトの名無しさん
07/04/23 00:34:45
わかりました!
ありがとう
209:デフォルトの名無しさん
07/04/23 00:39:18
> LoadImageはNT系でファイルから開けない
本当?MSDNには何も書いていないけど
URLリンク(msdn2.microsoft.com)
210:デフォルトの名無しさん
07/04/23 01:03:56
ググってみたけどよく分からん。
NT4.0初期の頃に問題があってSPで修正された、ってことかなあ。
少なくとも2000以降なら問題無いはず。
211:デフォルトの名無しさん
07/04/23 01:52:19
DialogBoxで呼び出すCALLBACK関数に引数としてポインタを渡したいのですが
出来ますでしょうか?
212:デフォルトの名無しさん
07/04/23 01:57:03
>>211
DialogBoxParamを使え
213:211
07/04/23 02:02:13
>>212
こんな時間にサンクス
ちょっとやってみる
214:195
07/04/23 05:00:50
>>207
なるほど、分かりました。
>>209>>210
何年か前はLR_LOADFROMFILEはNT系では使えない
となってたと思うんですけど、仰るとおり修正されたんだと思います。
215:デフォルトの名無しさん
07/04/23 07:06:13
>>214
その記述があったのははNT 3.51しか想定してなかったころのすごく古いMSDNライブラリ
英語版はすぐに直ったけど日本語版では長いこと説明が残ったままだった
実際にはちゃんと開ける
216:デフォルトの名無しさん
07/04/23 08:04:58
Win2000な俺のPCでもLR_LOADFROMFILEできてるからな
217:デフォルトの名無しさん
07/04/23 08:08:39
UNICODEで書かれている文字列を、strstrで操作した場合、不具合は起きますか?
(strcatならlstrcatのようにUNICODEに対応する関数があるのですが、strstrには
lstrstrが無いようなのです)
218:デフォルトの名無しさん
07/04/23 08:45:50
strsafe.h で追加された文字列操作関数について
URLリンク(ir9.jp)
219:デフォルトの名無しさん
07/04/23 09:15:34
わかりました!
ありがとう
220:デフォルトの名無しさん
07/04/23 09:24:43
>>218
UNICODE対応のstrstrが載っていないようなんですけども、strsafe.hの中の関数を使って
自分で作成するのでしょうか??
221:デフォルトの名無しさん
07/04/23 10:02:21
API関係ないな
222:217
07/04/23 10:33:37
自己解決(?)
ぐぐったらUNICODE←→ANSI変換APIが出て来た・・・
なんか面倒な事に・・・
223:デフォルトの名無しさん
07/04/23 10:36:52
win32apiじゃなくていいなら、wcsstr とかなかったっけ?
224:デフォルトの名無しさん
07/04/23 11:35:15
RECT wndrc; wndrc.top = 0; wndrc.bottom = 100; wndrc.left = 0; wndrc.right = 100;
int x = wndrc.left; int y = wndrc.top; int w = wndrc.right - wndrc.left; int h = wndrc.bottom - wndrc.top;
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
x, y, w, h, NULL, NULL, hInstance, NULL);
if (!hWnd) return FALSE;
RECT rc;
if( ::GetWindowRect( hWnd, &rc ) )
{
if( rc.top == wndrc.top && rc.left == wndrc.left && rc.bottom == wndrc.bottom && rc.right == wndrc.right )
{}
else
{
::MessageBox( 0, "ウィンドウサイズが違います", "?", 0 );
}
}
VC.net2003のwin32のデフォルトで作られるプログラムで
CreateWindowの所を上記の様に変更しました。
そしたら自分の想定していた rc.riight == 100 と反して
rc.right == 112 になっていました。
何故ウィンドウの幅がcreatewindowで指定した値と12も違うんでしょうか?
ちなみにウィンドウプロシージャ等は一切変更していません。
225:デフォルトの名無しさん
07/04/23 13:56:40
>>183
なるほど。
Postの方で正しく送れました。
ありがとうございました。
>>>>184
SendInputでちょっと下の様に
「A」を入力しるプログラムを書いて実行してみました。
全角入力がONになるみたいなんですが、最後の「変換」の決定(Enterですよね?)の所まで
自動化したい場合はどうすればいいのでしょう?
下のプログラムだと、決定という意味でのEnterは認識されないみたいです…
INPUT inputKey[3];
inputKey[0].type = INPUT_KEYBOARD;
inputKey[0].ki.wVk = 0;
inputKey[0].ki.wScan = 'A';
inputKey[0].ki.dwFlags = KEYEVENTF_UNICODE;
inputKey[0].ki.dwExtraInfo = 0;
inputKey[0].ki.time = 0;
inputKey[1].type = INPUT_KEYBOARD;
inputKey[1].ki.wVk = VK_RETURN;
inputKey[1].ki.wScan = MapVirtualKey(VK_RETURN, 0);
inputKey[1].ki.dwFlags = 0;
inputKey[1].ki.dwExtraInfo = 0;
inputKey[1].ki.time = 0;
inputKey[2] = inputKey[1];
inputKey[2].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(3, inputKey, sizeof(INPUT));
226:デフォルトの名無しさん
07/04/23 18:01:42
スクロールバーのサイズを、画面のプロパティで設定した値ではなくアプリ側で
任意に設定する方法はありませんか?
後、Vistaのスクロールバーのデフォルト値を教えてください。
227:224
07/04/23 19:15:41
タイトルバーが100に収まりきらなかったのが原因ですた。スマソ。
228:デフォルトの名無しさん
07/04/24 15:48:40
Vistaのように右端に表示領域を確保して、その分デスクトップの作業領域を小さくしたいんですけど、どのように実装したらイイでしょうか。
(他のソフトのウィンドウ表示を最大化にしても、右端に確保した領域にかぶらないようにしたい)
以上です、よろしくお願いいたします。
229:デフォルトの名無しさん
07/04/24 16:37:32
AppBarのことか?
SHAppBarMessageでググってみ
230:デフォルトの名無しさん
07/04/24 16:38:05
>>228
OSが分からないと何とも言えないけど、Application Desktop Toolbarsじゃ駄目?
231:デフォルトの名無しさん
07/04/24 18:01:09
複数ウィンドウを作成したい場合は
どうすればいいのでしょうか
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4977日前に更新/228 KB
担当:undef