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
複数ウィンドウを作成したい場合は
どうすればいいのでしょうか
232:デフォルトの名無しさん
07/04/24 18:10:10
単数ウィンドウを作るのと同じ手法を複数回繰り返してください。
233:デフォルトの名無しさん
07/04/24 19:36:59
>>232
なるほど
ありがとうございました!
(^O^)
あと複数の親ウィンドウをIDの用に管理する方法はあるでしょうか
234:デフォルトの名無しさん
07/04/24 20:23:13
もどってくるHWNDで判るだろ?
235:デフォルトの名無しさん
07/04/24 20:55:13
なんか涙でてきた
236:デフォルトの名無しさん
07/04/25 02:20:33
ところで、Win32APIってなんですか?
237:デフォルトの名無しさん
07/04/25 02:51:51
なんかいろんなものでてきた
238:デフォルトの名無しさん
07/04/25 04:55:21
そういうことして楽しいと思ってるの?
239:デフォルトの名無しさん
07/04/25 05:04:35
CreateWindow(TEXT("EDIT") , TEXT("文字") , WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT,
248 , 40 , 45 , 22 , hwnd , (HMENU)0 , ((LPCREATESTRUCT)(lp))->hInstance , NULL);
このエディットコントロールに表示される“文字”のフォントのサイズを小さくすることは出来るのでしょうか?
あと、SendMessage(hEdit, ES_READONLY, 0, 0);みたいな感じで、
目的のエディットコントロールを読み専用に変えたいのですが、↑のだと上手くいきません。
どうすればいいのでしょうか?
240:デフォルトの名無しさん
07/04/25 05:24:29
フォント設定はWM_SETFONTかEM_SETFONTSIZE使う
読み専用のES_READONLYのES はEDITSTYLEのことであってメッセージではない
EM_SETREADONLYをSendMessageに渡す
241:デフォルトの名無しさん
07/04/25 07:35:47
>>240
WM_SETFONTの方は少してこずりましたが、無事出来ました。
ありがとうございました。
242:デフォルトの名無しさん
07/04/25 08:15:08
ウインドウハンドルをhashtableみたいな構造に突っ込みたいのですが、
一意のキーとすべき値は何を使えばいいでしょうか。
hashtableは文字列をキーとして、値はポインタを渡すようにしています。
put(char* key, void* value)みたいにです。
ウインドウハンドルで一意となる値を文字列としてキーとして使いたいのです。
あとからウインドウハンドルからhashtable経由で値をとりたいからです。
ウインドウハンドルにはunsetという内容が入っているみたいですが、
つかうなと書いてあるWebサイトもあってどうしていいかわかりません。
243:デフォルトの名無しさん
07/04/25 08:22:01
文字列じゃなくてHWNDをキーに使えばいいだろ。
どうしても文字列にしたければHWNDの値自体を文字列に変換するとか、
なんでその程度の知恵が無いんだ?
244:242
07/04/25 09:19:29
>>243
回答、ありがとう。
HWNDの値自体とはアドレスのことをいっていますか?unsetの値自体をいっていますか?
245:デフォルトの名無しさん
07/04/25 09:57:34
HWNDの値と言ったらHWNDの値だろ、アホかw
246:デフォルトの名無しさん
07/04/25 10:03:35
class Hashtable {
put(char* key, void* value);
};
HWND hWnd = GetWindow(hogehog);
Hashtable h;
h.put((char*)hWnd, (void*)GetTitle(hWnd));
247:デフォルトの名無しさん
07/04/25 10:21:47
いやいやいや
248:デフォルトの名無しさん
07/04/25 10:23:16
キーに文字列しか使えない環境なら、sprintf とかでHWNDの数値を文字列にするとか
249:デフォルトの名無しさん
07/04/25 11:12:27
GetOpenFileNameでフラグにOFN_ALLOWMULTISELECT|OFN_EXPLORERを指定したとき、
選択したファイルの順序を逆に並べる方法は無いでしょうか?
現状、最後に選択したファイルが先頭に挿入されるようで、
これを最後に付加するようにしたいのです。
(アプリ側で逆にたどることは可能ですが、GetOpenFileName操作時の
ファイル名テキストボックスの見た目を前後逆にしたい)
環境はXPSP2です。よろしくお願いします。
250:デフォルトの名無しさん
07/04/25 13:03:38
>>249
OFN_ENABLEHOOKでどうにかするしかないんじゃないかなぁ
251:242
07/04/25 14:22:33
>>245-246
>>248
HWNDって、winnt.hで以下のように定義されているんですが、
int unusedをもつ構造体へのポインタではないんでしょうか?
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
HWNDを文字列にしたらアドレスが文字列としてとれるんだと思っているんですが、
間違えていますか?
252:デフォルトの名無しさん
07/04/25 14:45:22
壮絶に違う
HWND ポインタの中身(大きさも含む)は謎
つか >>248 でいいじゃん
書かないとわからん? sprintf(buf, "%p", hwnd); とすれば? ってことだ
253:デフォルトの名無しさん
07/04/25 15:08:02
デスクトップやコントロールパネルなどの
主要なシェルフォルダを指すGUIDのリストってどこかにないでしょうか?
254:デフォルトの名無しさん
07/04/25 15:52:11
>>253
レジストリ
255:デフォルトの名無しさん
07/04/25 16:12:40
>>253に便乗だけど
マイコンピュータとかコントロールパネルとかかもしれないpIDLがあるとき
CLSIDみたいな::{...}に変換する術ってないすか?
256:デフォルトの名無しさん
07/04/25 16:38:02
SHGDN_FORPARSING
257:デフォルトの名無しさん
07/04/25 16:45:20
>>250
ありがとうございます。調べてみます。
258:デフォルトの名無しさん
07/04/25 17:08:15
サブクラスを使って、エディットコントロール内でEnterキーを押したら
メッセージボックスを出すようにしているのですが、その後、
エディットコントロール内で改行されてしまいます。
Enterを押したときにメッセージボックスだけを出して、
その後改行しないようにするにはどうすればいいのでしょうか?
259:242
07/04/25 17:17:16
>>252
つきあってくれてありがとう。
sprintf(buf, "%p", hwnd);
ってやるとbufにはhwndのアドレスが入るとおもってるんですが間違いですか?
アドレスって再利用されて一意ではない気がするんです。
260:デフォルトの名無しさん
07/04/25 17:33:12 BE:69876566-2BP(222)
>>259
>ってやるとbufにはhwndのアドレスが入るとおもってるんですが間違いですか?
間違いです。何のためのハンドルかと。
261:デフォルトの名無しさん
07/04/25 17:34:45
エクスプローラもどきを作っています。
現在、アイコンをGetIconOfで取得しているのですが
こいつは該当フォルダの中のアイテムのアイコンしか取得できず、
デスクトップ自身のアイコンを取得することができません。
何か良い方法があれば教えてください。
262:228
07/04/25 17:35:02
>229さん、230さん
レスありがとうございました。
頂いた情報で実装出来そうです、ありがとうございます。
263:デフォルトの名無しさん
07/04/25 17:35:24
そもそもハンドルはポインタじゃないから、中身を気にしてはならんと思うんだが。
264:242
07/04/25 18:23:07
>>260
>>263
考えてみました。
ハンドル=構造体へのポインタと勘違いしていました。
付き合ってくれた方、ありがとう。というか、すんませんでした。
265:デフォルトの名無しさん
07/04/25 18:28:23 BE:67935757-2BP(222)
ハンドルが構造体へのポインタとして実装されていたとしても、わざわざ「ハンドル」
と読んでいるのは何のためなのかと。
266:デフォルトの名無しさん
07/04/25 18:31:33
>>258をお願いします・・・m(_ _)m
267:デフォルトの名無しさん
07/04/25 18:47:48
>>258
Enterキーを処理した後、EDIT本来のプロシージャに処理回してない?
268:デフォルトの名無しさん
07/04/25 18:53:30
>>267
エディットコントロールのプロシージャの最後は
return CallWindowProc(DefInProc, hwnd, msg, wp, lp);
にしてます。これをどうすればいいのでしょうか・・・
return 0;とかにしてもエディットコントロール自体が消えてしまいます;;
269:デフォルトの名無しさん
07/04/25 19:02:14
>>267
Enterキーの時だけ、プロシージャに処理を渡さないようにすればいい
270:デフォルトの名無しさん
07/04/25 19:02:28
>>268
>Enterキーを処理した後
271:デフォルトの名無しさん
07/04/25 19:07:28
SubclassProc(hwnd, msg, wparam, lparam)
{
switch(msg)
{
case WM_KEYDOWN:
if(wparam == VK_RETURN)
{
(処理)
return; // DefWindowProc()いらない
}
}
}
こういうことか?リターンキーの時だけ弾ければいいってこと?
272:258
07/04/25 19:07:29
プロシージャはこんな感じになってます。処理の後はreturn 0;にしてますが
やはり改行されてしまいます・・・
LRESULT CALLBACK InProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
switch(msg) {
case WM_KEYDOWN:
if(wp==VK_SHIFT){
shift_flag = 1;
}else if (wp == VK_RETURN && shift_flag==0) {
MessageBox(hwnd, "ENTER", "ENTER", MB_OK);
}else if (wp == VK_RETURN && shift_flag==0) {
MessageBox(hwnd, "Shift+ENTER", "Shift+ENTER", MB_OK);
}
return 0;
case WM_KEYUP:
if(wp==VK_SHIFT){
shift_flag = 0;
}
return 0;
}
return CallWindowProc(DefInProc , hwnd , msg , wp , lp);
}
273:デフォルトの名無しさん
07/04/25 19:15:58
WM_CHAR
274:258
07/04/25 19:29:27
WM_CHARにしてみたら文字の入力すら出来なくなったのですが・・・;;
きっと基本的なことなのでしょうけど、何時間も止まってると泣きたくなってくる・・・
275:デフォルトの名無しさん
07/04/25 19:31:19
そりゃそうだよなぁ。
276:デフォルトの名無しさん
07/04/25 19:37:31
>>258
if文をよ~く見直してみろEnterキー以外もトラップしてるぞ
277:258
07/04/25 19:45:58
>>276
Shiftの事でしょうか?Shift全部はずして、単純にif(wp==VK_RETRUN){}にしても
やはり同じ結果になりました。これは一体何がどうあghwrへあぃtjr
278:デフォルトの名無しさん
07/04/25 19:47:44
>>277
トラップしないキーはreturn 0;しないでデフォルトプロシージャに渡すのだ。
279:258
07/04/25 19:54:15
>>278
こういう事でしょうか?
LRESULT CALLBACK InProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
switch(msg) {
case WM_KEYDOWN:
if (wp == VK_RETURN) {
MessageBox(hwnd, "ENTER", "ENTER", MB_OK);
return 0;
}
return CallWindowProc(DefInProc , hwnd , msg , wp , lp);
}
280:デフォルトの名無しさん
07/04/25 19:55:15
>>279
それをWM_CHARでやる
281:デフォルトの名無しさん
07/04/25 20:00:15
できました
みなさま本当にありがとうございました
282:258
07/04/25 20:02:42
いえ、出来てません。文字の入力すら出来ないのですが・・・
LRESULT CALLBACK InProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
switch(msg) {
case WM_CHAR:
if (wp == VK_RETURN) {
MessageBox(hwnd, "ENTER", "ENTER", MB_OK);
return 0;
}
return CallWindowProc(DefInProc , hwnd , msg , wp , lp);
}
283:デフォルトの名無しさん
07/04/25 20:10:21
>>258
メッセージループのところにTranslateMessage(&msg);はあるか?
// メッセージループ
MSG msg;
while(GetMessage(&msg, NULL, NULL, NULL)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
284:258
07/04/25 20:15:53
出来ましたあああああああああ;;
caseの終わるところをreturn 0からbreak;に直したら出来ました;;
WM_CHARで捕まえて、全部return0にしてたせいで入力されないようになってたみたいです。。。
ありがとうございました
285:デフォルトの名無しさん
07/04/25 20:25:41
>>279,282のプロシージャ
{ }の対応がおかしい気がするんだが・・・?
286:デフォルトの名無しさん
07/04/25 21:28:59
このような関数で、ドライブごとまるまるコピーしたいのですが、
BOOL CopyDirectory(LPCTSTR From, LPCTSTR To)
{
SHFILEOPSTRUCT TSHFileOpStruct;
ZeroMemory(&TSHFileOpStruct,sizeof(SHFILEOPSTRUCT));
MessageBox(NULL, From, To, MB_OK);
//構造体の初期設定
TSHFileOpStruct.hwnd = NULL; // 親ウインドウのハンドル
TSHFileOpStruct.wFunc = FO_COPY; // フラグ
TSHFileOpStruct.pFrom = From + NULL+ NULL; // 対象元パス
TSHFileOpStruct.pTo = To + NULL+ NULL; // 対象先パス
TSHFileOpStruct.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR; //フラグ
//実行する
if(SHFileOperation(&TSHFileOpStruct) != 0){
return FALSE;
}
if(TSHFileOpStruct.fAnyOperationsAborted == TRUE){
return FALSE;
}
return TRUE;
}
CopyDirectory("H:\\test", "C:\\test")
だと成功するのですが
CopyDirectory("H:\\", "C:\\test")
だと失敗します。
ドライブの中身をまるまるコピーすることはできないのでしょうか?
初歩的な質問かもしれませんが、よろしくお願い致します。
287:デフォルトの名無しさん
07/04/25 21:44:32
pFromはあくまでもファイル名を指定するためのバッファらしいので
"H:\\*"みたいにワイルドカードを使うってのはダメ?
288:デフォルトの名無しさん
07/04/25 21:50:56
>>287
教えていただいた方法で解決できました!
結構長い間ひっかかっていたので、助かりました。
ありがとうございました。
289:デフォルトの名無しさん
07/04/25 22:40:16
GUIアプリからコンソール用のアプリを影で動かし(て、その結果をエディタに送り)たいんですけど
そういうAPIってありますか?
290:デフォルトの名無しさん
07/04/25 22:44:12
はぁ?
291:デフォルトの名無しさん
07/04/25 22:44:51
無い
はい次
292:デフォルトの名無しさん
07/04/25 22:44:55
あります
293:デフォルトの名無しさん
07/04/25 22:51:38
ありますが、
はい次
294:デフォルトの名無しさん
07/04/25 22:52:22
APIに関係することか、わかりませんがお願いします。
自己解凍書式によくあるような
> copy /b hoge.exe + datafile
でつくった hoge.exe から datafile の中身を取る
プログラムを作りたいのですがやり方を教えて頂けないでしょうか?
295:デフォルトの名無しさん
07/04/25 22:53:39
*** main(char**arg,int argl) ...................................................
296:デフォルトの名無しさん
07/04/25 22:59:30
>>294
「リソース」をキーワードに基本から勉強しなおしなさい
297:デフォルトの名無しさん
07/04/25 23:10:47
copyで連結したものをリソースとして扱えるか?
俺にはイメージヘッダからイメージサイズを見て、
それを元にdataの先頭領域を求める方法になる気がする。
違ったらすまん
298:デフォルトの名無しさん
07/04/25 23:13:51
copy /b hoge.exe + datafile + datafilesize
299:デフォルトの名無しさん
07/04/25 23:15:52
ぐぐってみたらこういう方法だそうです
プログラムに4バイトのリソースを埋め込む。
そのリソースを読み込んでその値だけ、読み飛ばして自分自身を解凍するプログラムを作る。
何らかの手段で4バイトのリソースに自己解凍プログラムのサイズを書き込む。
自己解凍プログラムの後ろに実際のデータを書き込む。
300:デフォルトの名無しさん
07/04/25 23:18:20
かなりコンパイラ依存な質問ですが・・・
FindNextFileがVisual C++ 6.0でちゃんと動くのにGCC(gcc version 3.4.5 (mingw special))でちゃんと動きませんorz
URLリンク(www.uploda.net)
test_findfile.c ソース
test_findfile_gcc.exe GCCでコンパイルしたもの
test_findfile_vc6.exe VC++6.0でコンパイルしたもの
VC++6.0でコンパイルしたものは、ちゃんと2つ目以降に見つかったファイルを表示します。
しかしGCCでコンパイルしたものは最初の1つ目しか表示しません。
MSDN見ても解決方法わからないし・・・
301:デフォルトの名無しさん
07/04/25 23:24:41
>>289
名前なしパイプを使ってリダイレクト。
CreatePipe, DuplicateHandle,
CreateProcess(STARTF_USESTDHANDLESがヒント),
PeekNamedPipe, ReadFileなどの関数を使う。
待機関数を使ったプロセスの終了判定と、
PeekNamedPipeとReadFileの順序を巧く管理しないと止まるので注意。
じゃぁ、約束のおっぱいをうpしてね
302:デフォルトの名無しさん
07/04/25 23:26:03
(・) (・)
303:デフォルトの名無しさん
07/04/25 23:29:15
D / ∩___∩ \_WW/
・ ≪ | ノ ヽ ≫ D ≪
V ≪ / ● ● | ≫ ・ ≪
・ ≪ | ///( _●_)//ミ ≫V ≪
D ≪ 彡、 |∪| 、`\ ≫ ・ ≪
! ≪ / \ ヽノ /_> / ≫ D ≪
≪ \| ・ ・ / / ≫ ! ≪
MMM\ | / ̄ /MMM\
| /\ \
| / ) )
∪ ( \
\_)
304:デフォルトの名無しさん
07/04/25 23:30:10
>>300
ワイルドカード絡みなのかな?
下のコードをそれぞれのコンパイラでコンパイルして
「ちゃんと動かない」ときの引数を与えて比較してみればおk
#include <stdio.h>
int main(int argc, char *argv[]) {
int i;
for(i=1;i<argc;i++) printf("argv[%d]=%s\n", i, argv[i]);
return 0;
}
305:デフォルトの名無しさん
07/04/25 23:31:01
ところでDVDってドメスティックバイオレンスオブダイナミカルなの?
306:デフォルトの名無しさん
07/04/25 23:32:05
>>300
どのディレクトリに対して実行しても結果は同じですか?
307:デフォルトの名無しさん
07/04/25 23:35:58
>>300
OSは?
308:デフォルトの名無しさん
07/04/25 23:36:35
>>300
c:\directory\*
c:\\directory\\*
じゃねーの?
309:デフォルトの名無しさん
07/04/25 23:38:01
>>300
ワイルドカードが展開されてるんだろ
310:デフォルトの名無しさん
07/04/25 23:41:24
見た感じFindNextFileが必ずゼロを返してるような動き。
一個だけ正しく見つけてあとはサヨウナラだな。
311:デフォルトの名無しさん
07/04/25 23:43:54
FindFirstFile に渡される引数の内容(argv[1]) が違うから
表示させてみれば疑問は解決するはず
312:デフォルトの名無しさん
07/04/25 23:46:35
そこで、ダブルクォーテーションですよ
313:デフォルトの名無しさん
07/04/26 00:24:23
>>300
GCCに付属してるCRT_noglob.oをリンクすると解決するお
海外での似た質問と解凍:
URLリンク(www.cygwin.com)
URLリンク(www.cygwin.com)
314:デフォルトの名無しさん
07/04/26 00:48:10
ぼ・・・僕ハッカー
315:デフォルトの名無しさん
07/04/26 09:54:11
WTLでCToolBarCtrlを使ってツールバーを作っています。
manifestを指定してXPスタイルにしているのですが、
そうするとアイコンサイズと比べ、ボタンサイズが大きくなりすぎてしまいます。
どうしても小さくしたいのですが、SetButtonSizeを指定しても無視されてしまい
自動でサイズが決定されてしまいます。
ボタンのサイズを小さくしたいのですが、どうすればできますか。
316:デフォルトの名無しさん
07/04/26 10:07:41
ビットマップを印刷する処理でカラープリンタに出力するとおk、なんですが、
白黒プリンタに印刷すると真っ黒画面(プリンタドライバのメモリ不足でよくおきるヤシ)となります。
Win32APIで、印刷時にビットマップを描くとき、白黒プリンタを意識する指定ってありましたっけ?
317:デフォルトの名無しさん
07/04/26 10:09:59
ShellExecuteで起動したソフトが起動しきったかどうかを確認する方法を教えてください
318:デフォルトの名無しさん
07/04/26 10:14:26
起動しきった、の定義は?
メッセージループが回りだしたでいいのかな
319:デフォルトの名無しさん
07/04/26 10:28:17
CreateProcessのほうがいいかもね
320:デフォルトの名無しさん
07/04/26 10:34:52
>>318
起動してから表示されるまでに時間がかかるソフトがあるので
画面が表示されたらと思っていました。
>>319
ShellExecuteよりShellExecuteExのインスタンスハンドルで何とかなりそうでしょうか?
321:デフォルトの名無しさん
07/04/26 10:39:08
316もヨロ
322:デフォルトの名無しさん
07/04/26 10:43:13
>>317
FindWindow
323:デフォルトの名無しさん
07/04/26 10:44:44
>>320
ShellExecuteはシェルに命令投げるだけなので実際の起動処理は全部シェルがやる。
だからShellExecuteで起動したプロセスの処理を監視するならフックとかの回り道が必要になるし、
CreateProcessに比べて面倒極まりないから>>319の言うとおり
起動したプロセスの監視をしたいならCreateProcessがよろし。
324:デフォルトの名無しさん
07/04/26 10:48:44
>>316
正解なのかどうなのかわからんが…
printerなDCに直接 StretchBlt したときに真っ黒出力されたことがあった。
printer と同じ解像度のメモリDCに一旦StretchBlt して、
そのメモリDCをprinterなDCに BitBlt で回避できた
325:デフォルトの名無しさん
07/04/26 10:52:13
>>317
ShellExecuteExでfMaskにSEE_MASK_NOCLOSEPROCESSを指定すると
起動したプロセスのハンドルがhProcessに返されるので
WaitForInputIdleを呼べばいいかと。
326:デフォルトの名無しさん
07/04/26 10:55:40
>>316
GetDeviceCapsで出力APIがサポートされているか調べるとか・・・かな
327:デフォルトの名無しさん
07/04/26 10:57:36
>>322
予めタイトルとクラス名がわかってればいいんですけどね
>>323
CreateProcessですとPROCESS_INFORMATION構造体のhProcessハンドルで
状態をみるとおもうのですが、どのAPIで状態を確認することができるのでしょうか?
328:316
07/04/26 10:59:45
サンクス>>324 >>326
そう、その辺りの話ですよね。
自分も、StrechBlt → BitBlt → StretchDrawDIB と変えてきて、
あーこれで解決したーと思ってたんですが、
カラービデオプリンターはおk、白黒ビデオプリンターで真っ黒、見たいな現象。
>GetDeviceCapsで出力APIがサポートされているか調べるとか・・・かな
kwsk
StrechDrawDIBが動作しないとか???
329:デフォルトの名無しさん
07/04/26 11:02:13
白がちゃんとした白じゃないから黒くなるのでは
StrechBltMode変えたら
330:デフォルトの名無しさん
07/04/26 11:05:53
>>328
GetDeviceCapsでRASTERCAPS調べて
RC_STRETCHBLTビットが立ってれば、
StreathBltを使って良いとか、そういう話し
あと、StretchDrawDIBってMSDNにはないけど・・・?
ググっても、自作っぽい関数にしか引っかからないぞw
331:デフォルトの名無しさん
07/04/26 11:24:47
>>327
>>325
332:316
07/04/26 11:26:43
ラジャー>>329
やってみます。あ、でもプリンタ使えるの昼から。
ゴメンナサイ>>330
実体はこれです。
↓
procedure TBitmapPrinter.StretchDrawDIB(Canvas: TCanvas; r: TRect);
var
OldMode: Integer; // StretchMode のセーブ
begin
OldMode := SetStretchBltMode(Canvas.Handle, COLORONCOLOR);
StretchDIBits(Canvas.Handle,
r.Left, r.Top,
r.Right - r.Left, r.Bottom - r.Top,
0, 0, BitmapInfo^.bmiHeader.biWidth,
BitmapInfo^.bmiHeader.biHeight,
ImagePtr, BitmapInfo^, DIB_RGB_COLORS, SRCCOPY);
SetStretchBltMode(Canvas.Handle, OldMode);
end;
333:デフォルトの名無しさん
07/04/26 11:29:35
>>331
すみません、見落としてました・・・
>>325
ありがとうございます。
それでちゃんとできました。
334:デフォルトの名無しさん
07/04/26 12:16:27
>>333
WaitForInputIdleはコンソール不可なので注意ね。
335:316
07/04/26 12:21:16
つまり、
>OldMode := SetStretchBltMode(Canvas.Handle, COLORONCOLOR);
を、
COLONCOLORから変えればよいんだ。
BLACKONWHITEとWHITEONBLACKって何で2つもあるよ。。。
336:デフォルトの名無しさん
07/04/26 12:25:35
>>335
>BLACKONWHITEとWHITEONBLACKって何で2つもあるよ。。。
ANDとORの違い。
337:デフォルトの名無しさん
07/04/26 12:26:51
>ANDとORの違い。
普通の印刷ではどちらを使うんですか?
338:デフォルトの名無しさん
07/04/26 12:32:03
>>337
普通の印刷はどうかしりませんが、
BLACKONWHITEは 0 & 1 = 0で黒が残る
WHITEONBLACKは 0 | 1 = 1で白が残る
ただそれだけ。
339:デフォルトの名無しさん
07/04/26 12:37:49
まあ両方やってみればわかる
モノクロビットマップにStrechBltして画面表示してみるのもいいかもな
340:デフォルトの名無しさん
07/04/26 13:21:11
>>334
了解しました!
ありがとうございます!!
341:デフォルトの名無しさん
07/04/26 15:39:58
あるウィンドウを親として、新たに作った子ウィンドウを貼り付けたい(親側をドラッグすると、子ウィンドウもそれに追随するような)のですが、どのように実装したらよいかアドバイスいただけませんでしょうか。
よろしくお願いいたします。
342:デフォルトの名無しさん
07/04/26 15:41:52
CreateWindowでWS_CHILD
343:316
07/04/26 16:22:55
SetStretchBltModeは関係無いみたいです。
真っ黒に出たり、ちゃんと出たり、不安定。
344:316
07/04/26 16:53:35
連続印刷した場合に、真っ黒になります。
345:316
07/04/26 16:57:43
連続投稿すみません。
自アプリが印刷した結果がWinのスプールにまだ残っているかどうか、判断する方法はありますか?
346:デフォルトの名無しさん
07/04/26 17:18:50
具体的にそうなるコードを出してみては
そもそも真っ黒になるのはプログラムが悪いんだから
347:316
07/04/26 17:30:29
自己解決しました、お騒がせしてすみません。
348:316
07/04/26 18:30:21
347は偽者です。
コードは332です。
349:デフォルトの名無しさん
07/04/26 18:46:54
>>348
>>332には、印刷時のページ更新とかないだろ
350:デフォルトの名無しさん
07/04/26 19:51:02
StartPageしたあとに毎回SetStretchBltModeしてない
とかいう落ちか?
351:デフォルトの名無しさん
07/04/26 22:30:22
いままでの流れ。
>>あーや
・質問
ビットマップを印刷する処理で
カラープリンタ→出力おk
白黒プリンタ→真っ黒画面
なんで?
>>324 → あーや
プリンタのDCに直接StretchBltした時、真っ黒出力経験あり。
キャッシュDCを作成してStretchBlt→BitBltの提案。
>>326 → あーや
GetDeviceCapsでプリンタ能力も調べろと提案。
>>あーや
>>324の方法でカラーはおk。白黒プリンターはやっぱりダメ。
>>326のいうGetDeviceCapsに初耳。
>>329 → あーや
白≒黒より、StrechBltModeの設定を推測。
>>330 → あーや
GetDeviceCapsのRC_STRETCHBLTフラグの意味を教える。
352:デフォルトの名無しさん
07/04/26 22:30:53
(つづき)
>>あーや → 329
昼飯はトンカツ定食にしようか悩みつつ返信。
>>あーや → 330
GetDeviceCapsを理解。
お昼だけにソースをさらしてみる。
>>あーや
SetStretchBltModeのBLACKONWHITEとWHITEONBLACK気付く。
なお、ここで返信した336,338,339は、実は奇遇にも同じ町内。
>>あーや
とりあえず、カラープリンタ、白黒プリンタ出力おkっぽいが、
連続印刷した場合、白黒プリンタがやっぱりダメ。
なぜか、StrechBltModeは関係ないと断定。
そして、あーやの興味はスプールへ・・・
>>あーや → 347
少しカチンと来る。
>>349-350
解答発表?
353:デフォルトの名無しさん
07/04/27 01:55:35
ダイアログボックスを作って、初期のフォーカスをダイアログボックス内のエディットコントロールに
SetForcusで配置したいのですが、ダイアログボックス内のエディットコントロールのハンドルが
分からないので出来ません。というよりも、ダイアログボックス内のウィンドウにはどのように
ハンドルをつければいいのでしょうか?
354:デフォルトの名無しさん
07/04/27 02:14:25
GetDlgItem
355:デフォルトの名無しさん
07/04/27 02:21:49
ダイアログベースでBS_DEFPUSHBUTTONを指定すると
「Enter」を押した時、ボタンを押下できるけど普通にリソースを
使わず(CreateWindow等)で作成したボタンに対して「Enter」は反応を
示さないんだけど。これはどうやって解決すればいいんでしょうか?
因みに「Enter」に反応するのはIDOKでそれ使ってもいいんですが、
できれば自分が指定したコントロールIDに変更できればいいなと思って
探してDM_SETDEFIDなるものを発見してSendMessage使って試したんだけど
やっぱりうまくいかなかった。これはダイアログにしか通用しないのかな。
因みにSendMessageはこんな感じ(WM_CREATE内で使ってる)
SendMessage(hWnd, DM_SETDEFID, (WPARAM)ID_CONTROL, 0L);
356:デフォルトの名無しさん
07/04/27 03:20:26
>>354
ありがとうございました。無事フォーカス設定することができました。
しかし、エディットコントロールにフォーカスを持っていったら何故か
ボタンをクリックしても動作しないようになりました(Enterキーでは動作する)。
フォーカス外すと普通にボタンの機能は復活します。これは何が原因なのでしょうか?
357:デフォルトの名無しさん
07/04/27 08:01:56
付箋紙ソフトのように、たくさんのウィンドウを表示してもタスクバーに何も表示されないようにするには
どうしたらいいのでしょうか?
358:デフォルトの名無しさん
07/04/27 08:03:22
>>356
Enterキー以外の処理(else側)はスルーしてるんじゃないの?
359:デフォルトの名無しさん
07/04/27 08:05:06
>>357
いろいろ手法はあるけど?
統括管理ソフトを、時計横のタスクバーに駐在させるとか・・・
想定するターゲットを詳しく
360:デフォルトの名無しさん
07/04/27 08:07:38
>>357
っ不可視の親Window
っWS_POPUP
361:デフォルトの名無しさん
07/04/27 08:12:02
>>359ー360
試してみます!
362:デフォルトの名無しさん
07/04/27 08:29:07
>>355
IsDialogMessageは?
363:355
07/04/27 12:23:56
>>362
ダイアログでの作成じゃない場合(メインウィンドウ)の
時どうやってダイアログと同じように実現すればいいのかを知りたい。
364:デフォルトの名無しさん
07/04/27 12:41:48
ウィンドウプロシージャでEnterキーをトラップすりゃいいんじゃねぇの?
365:355
07/04/27 12:43:36
やっぱそれしかないのかな。
IDOKはデフォルトでEnter拾ってくるから
そのIDOKの設定を別IDに変更できるんじゃないかと思ってたんだが
366:355
07/04/27 12:44:47
因みにDM_GETDEFIDやDM_GETDEFIDはダイアログプロシージャにしか
意味無いんだよね?普通にメインウィンドウでやっても何の効果もなかったから
367:デフォルトの名無しさん
07/04/27 14:03:22
342さんレスありがとうございます。
>342 CreateWindowでWS_CHILD
試してみたんですが、うまくいかず色々調べていたら、
親のウィンドウの拡張アトリビュートに「WS_EX_LAYERED」が立ってました、
このフラグを消すと正しく動くことからこのフラグが問題かと思うのですが、
「WS_EX_LAYERED」が立ってるウィンドウに対し「WS_CHILD」のような子ウィンドウを作ることは出来ませんでしょうか
重ね重ね申し訳ございませんが、よろしくお願いいたします。
368:デフォルトの名無しさん
07/04/27 16:49:28
仕様書嫁
369:デフォルトの名無しさん
07/04/27 16:58:05
そもそも正しく動く、動かないとはどういうことか
370:316
07/04/27 17:13:14
PCのメモリを1ギガにしたら解決しました。
フォトプリンタってのは、普通のプリンタよりメモリを食うものなんでしょうか。
それからStrechBltModeは無意味というか無関係ですね。
プリンタドライバも流石にStrechBltModeが間違っててもエラーを起こさないようにしてんじゃないですか?
>>>あーや → 347
> 少しカチンと来る。
↑
だから347はニセモノです。
371:デフォルトの名無しさん
07/04/27 17:15:51
ニセモノが出るって事は、キミのやりとりに問題があるってことだよ
372:デフォルトの名無しさん
07/04/27 18:12:50
質問があります。
UNICODE版のプログラムを作成していますが、
部分的にANSI版のAPIを使用したい箇所があります。
それで関数名の後に直接”CreateWindowA”みたいにAとかWを付けると
ANSI UNICODEの呼び出しの切り替えができるようなことが本に書かれて
いるのですが、直接Aをつけても関数がみつからないとコンパイラから
エラーがでます。
教えてください。よろしくお願いします。
373:372
07/04/27 18:17:30
includeファイルの位置変更したら解決しました.
アホな質問してすみませんでした
374:デフォルトの名無しさん
07/04/27 18:27:18
>>363
IsDialogMessageは、ダイアログでない普通のウィンドウも対象にできる。
375:デフォルトの名無しさん
07/04/27 20:10:24
>>370
>PCのメモリを1ギガにしたら解決しました。
その場しのぎとしてはセーフだが、
調査したほうが良いよ。
ドライバのver upで能力差とか、
ソースのメモリDC解放してないとか、
どっかで使いまわしているとか、
BitBltを使った初期化(WHITENESS、BLACKNESS)とか
ビットマップをダンプしてみるとか・・・
376:371
07/04/27 21:54:30
377:デフォルトの名無しさん
07/04/27 23:30:08
WH_KEYBOARD_LLはコマンドプロンプトに通用するですか?
378:デフォルトの名無しさん
07/04/28 00:40:51
>>377
cmd.exeでDOS窓を開いたときの動作の話なら、通用した(今試した)
379:デフォルトの名無しさん
07/04/28 08:10:27
とん
380:デフォルトの名無しさん
07/04/28 08:26:04
こつ
381:デフォルトの名無しさん
07/04/28 11:09:22
フォルダのデフォルトのアイコンって取得できますか?
382:デフォルトの名無しさん
07/04/28 11:10:15
はい
383:デフォルトの名無しさん
07/04/28 11:23:52
>>382
教えてくれよん
384:デフォルトの名無しさん
07/04/28 11:30:47
>>381みたいな聞き方をするからBOOLで返されちゃうんだよ
385:デフォルトの名無しさん
07/04/28 11:44:05
>>381に対する一番正確な答えになっているしな。
386:デフォルトの名無しさん
07/04/28 12:14:18
自己解決したような気がします
SHGetFileInfo と SHGFI_SYSICONINDEXあたりすか
387:デフォルトの名無しさん
07/04/28 12:43:05
>>372
CreateWindowはCreateWindowExのマクロに過ぎないので
CreateWindowExAにする必要がある
388:デフォルトの名無しさん
07/04/28 13:06:45
>>381に便乗質問だけど
SHGetFileInfo に空文字渡すとフォルダのアイコンが返ってくるけど、
これでいいんですか?
389:デフォルトの名無しさん
07/04/28 16:07:46
おまえらほんと捻くれてるよな
390:デフォルトの名無しさん
07/04/28 16:16:36
必要な戻り値の型推論ができないだけ
391:デフォルトの名無しさん
07/04/28 16:25:28
GetMessageの戻り値みたいに融通効かせてください><
392:デフォルトの名無しさん
07/04/28 18:08:30
キャストしろ
393:デフォルトの名無しさん
07/04/28 18:34:01
僕を神にしてください
394:デフォルトの名無しさん
07/04/28 19:57:54
キャストしろ
395:デフォルトの名無しさん
07/04/28 20:02:55
delete[]すればいんじゃね?
396:デフォルトの名無しさん
07/04/28 20:06:27
洞窟の出口で秘宝を奪うべく待ってればいいと思うよ
397:デフォルトの名無しさん
07/04/28 20:18:21
APIもせめて同じような定数は列挙型に纏めるとかしたらすっきりするんじゃないの?
398:デフォルトの名無しさん
07/04/28 20:25:50
SDKとAPIを混同するな
399:デフォルトの名無しさん
07/04/28 20:41:09
397の文脈ではAPIでもいいと俺は思う。
関数なんかだけではなく、それを呼び出すために必要な定数や型もひっくるめてAPIと言うのだと思う。
400:デフォルトの名無しさん
07/04/28 20:47:12
勝手な定義を脳内で作って知ったかするのはやめておけ。
401:デフォルトの名無しさん
07/04/28 20:51:55
ApplicationPrigramInterfaceと
SoftwareDevelopmentKit
の違いがわかりません先生
402:デフォルトの名無しさん
07/04/28 20:54:31
ヘッダファイル自体やライブラリや関連ツールなどがSDK
ヘッダファイルやタイプライブラリなどで定義されている内容がAPI
だと思っていたが実際のところ正しい定義なんて考えたこともなかったな
403:デフォルトの名無しさん
07/04/28 21:04:06
そもそもどこまでがAPIなんて誰もそんなことを定義していない。
C/C++以外からAPIを利用する場合は列挙型も何も存在しないし、
変なところで勝手に決めてしまうと他の言語から使うときに、
API以外の何か謎な物を使っていることになってしまう。
404:デフォルトの名無しさん
07/04/28 21:06:31
他の言語であらかじめされている定義が無いということね。
405:デフォルトの名無しさん
07/04/28 21:24:56
あれだ、web系のアホが紛れ込んでるのかもしれん。
「APIと言えばwebサービスのインタフェースを指すようになった」
らしいぞ。
406:デフォルトの名無しさん
07/04/28 21:42:36
整数も渡せるだろ
407:デフォルトの名無しさん
07/04/28 21:52:13
JAVAのinterfaceには定数(もどき)を定義できるし、定数を含めて問題あるまい。
というか既に定数無いか?
408:デフォルトの名無しさん
07/04/28 21:57:42
>>401
Prigram
409:デフォルトの名無しさん
07/04/28 22:14:08
何か美味そう
410:デフォルトの名無しさん
07/04/28 23:19:52
画面に表示しないプログラムを作りたいのですが
時計の横にアイコンを登録することは出来ますか?
411:デフォルトの名無しさん
07/04/28 23:26:49
>>410
できる。
412:デフォルトの名無しさん
07/04/28 23:27:08
タスクバー?
可能です。
413:デフォルトの名無しさん
07/04/28 23:33:31
GT-Rは5台持ってますよ
R32がVspecIIのガンメタとNISMOの白
R33がVspecのシルバー
R34がMspecのホワイトとVspecII Nurのベイサイドブルー
414:デフォルトの名無しさん
07/04/28 23:39:56
ま、俺のGTOには敵わないだろうけどな。
415:デフォルトの名無しさん
07/04/29 01:51:20
NAだけどな。
416:デフォルトの名無しさん
07/04/29 13:28:15
>>411
だからなんでみんな戻り値がboolなんだよw
417:デフォルトの名無しさん
07/04/29 13:31:21
出来るって分かれば自分で調べるだろ
418:デフォルトの名無しさん
07/04/29 13:55:07
S_OKだけなら猿でも返せる
419:デフォルトの名無しさん
07/04/29 14:00:51
>>410
メインウィンドウを非表示で作ればいい。
あとはタスクトレイ アイコンとかでググれ。
420:デフォルトの名無しさん
07/04/29 14:02:41
なんかこの質問・回答にデジャヴを感じる
421:デフォルトの名無しさん
07/04/29 14:06:05
間欠泉のようなもんだから
422:デフォルトの名無しさん
07/04/29 16:00:03
Shell_NotifyIconだったっけか
423:422
07/04/29 16:02:09
かすかな記憶を頼りに書いてみて調べてみたらビンゴだった
俺の記憶力もまだ捨てたもんじゃないな
424:デフォルトの名無しさん
07/04/29 19:47:52
ワレのドタマカチ割って脳みそストローでチューチュー吸うたろか!
425:デフォルトの名無しさん
07/04/29 19:53:13
自分の頭を割るというのもなかなか豪儀だな
426:デフォルトの名無しさん
07/04/29 19:55:41
なめとんかいわれ
427:デフォルトの名無しさん
07/04/29 19:58:29
貝割れ大根を嘗めているのか。あれは舌にピリッと来るよな。
しかし倒置法とはなかなか巧みじゃないか。
428:デフォルトの名無しさん
07/04/29 20:15:36
じょんだらりん
429:デフォルトの名無しさん
07/04/29 20:18:33
これをUNICODEビルドしたときにメッセージボックスに化けないで表示するには
どうしたらいいでしょうか?
XP, VC6です。
HANDLE hFile;
TCHAR buf[10];
DWORD dwSize;
hFile = CreateFile(
_T("C:\\aaa.txt"),
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
ReadFile(hFile, buf, 3, &dwSize, NULL);
CloseHandle(hFile);
buf[3] = _T('\0');
MessageBox(NULL, buf, _T(""), MB_OK);
430:デフォルトの名無しさん
07/04/29 20:21:13
MultiByteToWideChar
431:429
07/04/29 20:21:39
テキストファイルはSJISで中身は abc と入っているだけです。
432:デフォルトの名無しさん
07/04/29 20:31:04
"abc"のバイナリ表現はShift_JISやUS-ASCIIと、UTF-16とでは異なる。
433:429
07/04/29 20:42:04
読み込むファイルはSJIS固定
MultiByteToWideChar
変換元がPCSTR
変換後がPWSTR
これはひょっとしてUNICODE版でビルドしてる場合だけ
MultiByteToWideCharを使って変換をかけるって事ですか?
434:デフォルトの名無しさん
07/04/29 20:44:56
いいえ
435:デフォルトの名無しさん
07/04/29 20:45:04
ファイルをダウンロードしたときなど、完了すると「チロン!」という音が鳴りますが、
この音を鳴らすapiがあれば教えてください。
436:デフォルトの名無しさん
07/04/29 20:45:40
MCI
437:435
07/04/29 20:48:57
>>436
ありがとうございました!
438:デフォルトの名無しさん
07/04/29 20:51:59
URLリンク(www.int21.co.jp)
URLリンク(www.ne.jp)
URLリンク(wisdom.sakura.ne.jp)
URLリンク(www13.plala.or.jp)
439:デフォルトの名無しさん
07/04/29 20:52:42
>>433
はい
440:439
07/04/29 21:15:28
ありがとうございました。
441:429
07/04/29 21:16:01
ちがう。429でした。
442:デフォルトの名無しさん
07/04/29 23:13:32
>>426
はい
443:デフォルトの名無しさん
07/04/30 00:13:19
ウモンドウ作らずにWM_~受取れますか?
444:デフォルトの名無しさん
07/04/30 00:14:58
はい。ウィンドウをお作りいただけば可能です。
445:デフォルトの名無しさん
07/04/30 00:19:52
ウィンドウ要らないなら非表示にしとけばいい。
446:デフォルトの名無しさん
07/04/30 00:34:00
WM_~ = window message
447:デフォルトの名無しさん
07/04/30 00:40:02
一瞬普通に読んでしまったが、ウモンドウってwww
448:デフォルトの名無しさん
07/04/30 01:05:23
umondou?
umondow?
449:デフォルトの名無しさん
07/04/30 04:46:30
タスクトレイのアイコンの画像を取得する方法ってありませんか?
もしくは特定のアプリのトレイにあるアイコン描画をフックしたいのですが。
450:デフォルトの名無しさん
07/04/30 08:22:59
SetWindowsHookExのWH_KEYBOARD_LLはAltとかミ田キーも弄れますか?
451:デフォルトの名無しさん
07/04/30 08:25:50
>>450
可能。つか、自分でやってみれ。
想像以上に簡単だから
452:デフォルトの名無しさん
07/04/30 08:57:32
ミ田キーワロタ
453:デフォルトの名無しさん
07/04/30 09:54:19
Runasで起動したIEのウェブページのハンドルの入手の仕方おしえてください。
454:デフォルトの名無しさん
07/04/30 10:17:54
少しでも画面を有効に使うためにメニューバーの高さを極限まで細く
したいのですが、win32apiで可能でしょうか?
高さの取得はGetSystemMetricsで出来るのはわかったのですが、
設定がどうやっったらよいものか分かりません。どなたかやり方を教えて頂けませんでしょうか。
455:デフォルトの名無しさん
07/04/30 10:29:34
0じゃいかんの?
456:デフォルトの名無しさん
07/04/30 10:31:29
>>452
「ウェブページのハンドル」とは何ぞや?
>>454
レジストリに書いてWM_SETTINGCHANGEをブロードキャスト?
457:452
07/04/30 10:34:23
>>456
IEで表示したサイトのページをFindWindowAでゲットした値のことです。
458:デフォルトの名無しさん
07/04/30 10:37:24
>>454
SystemParametersInfo で SPI_SETNONCLIENTMETRICS
他のアプリケーションにも影響を与える操作なんだが、自アプリケーションで制御するような代物なんかな?
# デスクトップ - プロパティ で設定するのを自動化したいのか?
# それはそれで、迷惑な造りかもしれんが…
459:デフォルトの名無しさん
07/04/30 11:08:25
>>454
オーナードロー
460:デフォルトの名無しさん
07/04/30 12:06:48
bccでDLLを作成してそのDLLを
LoadLibrary(TEXT("HOOKTEST.dll"));で読み出したら
DLLエントリーポイントが実行されたみたいなのだが
暗黙的に読み出したらDLLエントリーポイントが実行されないんだが
これは普通なのか?それとも何か設定が間違っているのか?
461:デフォルトの名無しさん
07/04/30 12:11:24
あと
HINSTANCE hInstDLL;
#pragma data_seg(".sharedata")
HWND hWndtgt=NULL;
HHOOK hhook;
#pragma data_seg()
BOOL WINAPI DllEntryPoint(HINSTANCE hInstance,DWORD dwNotification,LPVOID lpReserved){
MessageBox(NULL,"DLL START","START",NULL);
hInstDLL=hInstance;
return TRUE;
}
int makehook(void){
hhook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)mousehookproc,hInstDLL,0);
if(hhook==NULL){
MessageBox(NULL,"MAKE HOOK ERROR","ERORR",MB_OK);
return 0;
}
return 1;
}
makehookを実行側で読み出すとhhookが絶対にNULLになるらしくフックがうまくいかない
LoadLibraryで明示的に呼び出してもうまくいかない
デバッカで見てみるとhInstDLLがnullになってるみたいなのだが何故?
462:デフォルトの名無しさん
07/04/30 12:12:13
その、「実行されない」ってのはどこから解ったんだ?
463:デフォルトの名無しさん
07/04/30 12:12:46
>>462
MessageBoxを入れてみました
464:デフォルトの名無しさん
07/04/30 12:15:28
どうしてボーランドの言語仕様ってあそこまで見苦しいの?
クラスや関数名なんて汚らしいしIDEも不細工極まりない
C++にしろパスカルにしろ目障りで読む気すらしないね。
465:デフォルトの名無しさん
07/04/30 12:17:41
ボーランド見苦しい
スレリンク(tech板)
466:デフォルトの名無しさん
07/04/30 12:21:43
bccの#pragmaにdata_segなんてないぞ。
467:デフォルトの名無しさん
07/04/30 12:25:11
>>466
WINDOWSプログラミングスパイスって本にのってたからそのまま使ってみたんだが、だめだったか・・・
468:デフォルトの名無しさん
07/04/30 12:33:59
URLリンク(msdn.microsoft.com)
をみて、DllMain内で複雑な処理はできいないと理解しよう。
469:デフォルトの名無しさん
07/04/30 12:37:36
_tDllMainな
470:デフォルトの名無しさん
07/04/30 12:38:38
>>443
PeekMessageをスレッドの最初に呼んでおけば
そのスレッドにメッセージキューが作られるから
あとはスレッドメッセージで処理すればいい。
送信はPostThreadMessageで
受信はGetMessageのMSG構造体のHWNDが0のやつが
スレッド宛のメッセージ。
471:デフォルトの名無しさん
07/04/30 12:43:44
BOOL WINAPI _tDllMain(HINSTANCE hInstance,DWORD dwNotification,LPVOID lpReserved){
hInstDLL=hInstance;
return TRUE;
}
修正
472:デフォルトの名無しさん
07/04/30 12:49:24
ドラえもーん、これガソリンはレギュラーでも走るの?
いやガソリンでは無理だよ。もっとパワーのあるやつじゃないと。
プルトニウムだよのび太君。
473:デフォルトの名無しさん
07/04/30 13:27:45
BOOL WINAPI _DllMain(HINSTANCE hInstance,DWORD dwNotification,LPVOID lpReserved){
hInstDLL=hInstance;
makehook(hInstance);
return TRUE;
}
intmakehook(HINSTANCE hInst){
hhook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)mousehookproc,hInst,0);
if(hhook==NULL){
MessageBox(NULL,"MAKE HOOK ERROR","ERORR",MB_OK);
return 0;
}
return 1;
}
にすると問題ないみたいなんだけど・・・
グローバル変数にコピーできない
なぜだ?
474:デフォルトの名無しさん
07/04/30 13:45:13
WinAPIの質問じゃないような気がしてきた
475:デフォルトの名無しさん
07/04/30 13:47:07
とりあえずフック抜いてインスタンスハンドルだけコピーするDLLでも作ってろ
476:デフォルトの名無しさん
07/04/30 13:51:36
窓は作らずに(非表示ではなく)
DLLの関数からShell_NotifyIconで登録してGetMessageでメッセージを受取れますか?
477:デフォルトの名無しさん
07/04/30 13:53:06
不可能
478:デフォルトの名無しさん
07/04/30 13:54:27
Shell_NotifyIcon から タスクトレイアクションを invoke できるようにするために窓が必要
479:デフォルトの名無しさん
07/04/30 14:00:08
なんか最近この質問多いな
480:デフォルトの名無しさん
07/04/30 14:05:29
間欠泉のようなもんだから(2回目)
481:デフォルトの名無しさん
07/04/30 14:09:08
タスクトレイ と フック は源泉なのでしょう
482:デフォルトの名無しさん
07/04/30 14:24:49
フックは多少ややこしいから分からんでもないけど…
トレイアイコンの方は潔癖症に近くねぇ?
いいじゃねーかウィンドウ一つくらい
483:デフォルトの名無しさん
07/04/30 14:30:09
メッセージ通知用ウィンドウなんてたくさん使われているよ。DDEとかシステム周りでもね。
484:デフォルトの名無しさん
07/04/30 14:30:28
そもそも「窓作らずメッセージ受け取れますか?」ってやってみればすぐわかるじゃねーか
485:デフォルトの名無しさん
07/04/30 14:40:48
それよりもまずテンプレに沿ってMSDN読んで来い
URLリンク(msdn.microsoft.com)
486:デフォルトの名無しさん
07/04/30 14:52:16
EnumWindowとかで窓一覧を取得するとあきれるほど非表示ウィンドウだらけだからな。
いまさら一つ増えたところで・・
487:デフォルトの名無しさん
07/04/30 14:55:10
Winsock の Async の面倒見るのも見えない Window でやりくりしてるな
488:デフォルトの名無しさん
07/04/30 14:57:17
まあ落ち着けよ
489:デフォルトの名無しさん
07/04/30 15:06:42
WindowがなくてもHWNDもらう方法はないの?
490:デフォルトの名無しさん
07/04/30 15:08:13
>>475
やってみた
MainDllないではグローバルインスタンスハンドルにコピーできてるみたいだけど
makehookを呼び出すとNULLになってるみたい
491:デフォルトの名無しさん
07/04/30 15:09:38
逆に考えるんだ
makehook内で参照してるのがグローバル変数ではないのではないかと考えるんだ
492:デフォルトの名無しさん
07/04/30 15:13:20
>>476
HWND_DESKTOP名義で登録してHOOK
493:477
07/04/30 15:13:39
>>489
メッセージ送信先のウィンドウをデスクトップにでもしておいて
グローバルフックで定義したメッセージを引っ掛ければできなくはない
ウィンドウ作らない分フックにリソース消費するけどねw
494:デフォルトの名無しさん
07/04/30 15:15:07
久々に綺麗なケコ-ン
495:デフォルトの名無しさん
07/04/30 15:28:18
ウィンドウズ自体の欠陥ですか
496:デフォルトの名無しさん
07/04/30 15:35:31
いいえ
497:デフォルトの名無しさん
07/04/30 16:50:13
/ / . : ヘ/! \
// / . /: : ∠、ム| . ヽ
/ ィ . / :/|: |: :/ ノ: 人: ハ
i/ . : . | .|{‐ |=ヘ{‐'! ` =ナ左、 V:|: .ハ
/ | :|: : |: :八 | o ヽ| ´ o ∨/: i |
|:i: : . 、 |{ ヘ! .彡 , ミ、 /メ| . ハ|
ヽ|ヽ: : .`| .三´ _____ ̄彡'/ . ://リ
> .\ |ニ. 二、,二.ヽ| /: //
/ : : ハ`` V: : : : :ン∠イ : : ヽ ァハハ八八ノヽノヽノヽノ \ノ \ / \ / \
/ . : :/ : \ \―/ /: :|: : : . :ヽ
/ . : : : :ィ: > ` ̄ イ: : 、 、、: : : : .ハ
/ . :/i/ "´ |  ̄ | `^``゙^\:、 : . ハ
i/ . :/ へ ノ __ Vニ、 ヽi、:、: i
ハ i:/ ∠.... iく__ 彡⌒ソ > ‐ 、 ヽi、!
V / ̄、 ̄\\ ∠ニ -‐_厂 ヽ. `
/ |: レ  ̄ ̄` 厂| ̄,r ̄- 、: |. i
/ .|/ 厂 | '´ V: 丶
「 ̄ ̄`ヽ/. : : : . . / ハ . : : : : : . V/ ̄`ヽ
,ノ二二.ヽ {. : : : : : :∧ヽ/∧: : : : : : : : :} . ニニヽ
< ̄ィ―- 、ヽV: : : : : :\//: : : : : : : : ノ//. --t、ヽ
`7 ヽ.ハ: : : : : : : :`´|: : : : : : : : : {彡''´ |/
498:デフォルトの名無しさん
07/04/30 17:14:45
>>473
そもそもDllMainでuser32.dllの関数を呼び出してはいけない(もちろんMessageBoxも)
499:デフォルトの名無しさん
07/04/30 17:15:45
>>492-493
そっちのほうがよっぽど気持ち悪いんだが潔癖症の方々はウィンドウを作らないこと自体
が目的化してるんですかね。健康のためなら死んでもいいみたいな。
>>489とか見てると釣りのようにも思えるけど
500:デフォルトの名無しさん
07/04/30 18:02:07
やってみることに意味があるんだろう
無いけど
501:デフォルトの名無しさん
07/04/30 18:07:31
ShellExecuteでファイルを開くと新しいウィンドウで開かれますが、
既存のウィンドウ内に表示させることは可能でしょうか?
具体的にはswfなどのファイルを、BMPをペタペタ貼るような感じで使いたいのですが・・・
502:デフォルトの名無しさん
07/04/30 18:29:52
ActiveXでFlashコントロールをホストすればー
503:デフォルトの名無しさん
07/04/30 19:22:13
っていうかWindow作るのダサいし
504:デフォルトの名無しさん
07/04/30 20:09:44
MSXML6.0でXMLをロードするときに関数にIXMLDOMDocumentをポインタで引き渡すと値が返ってきません。
関数の内部での値はとれているのですが。
こういう仕様なのでしょうか?
OKの場合
CComPtr<IXMLDOMDocument> xmldom;
if(CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**)&xmldom) != S_OK){
return;
}
xmldom->put_async(VARIANT_FALSE);
xmldom->load(_variant_t(FileName), &result);
if(result != VARIANT_TRUE){
return;
}
505:デフォルトの名無しさん
07/04/30 20:11:04
NGの場合
if(LoadXML(FileName,xmldom) == false){
return;
}
bool LoadXML(const char* FileName,IXMLDOMDocument *xmldom)
{
VARIANT_BOOL result;
if(CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**)&xmldom) != S_OK){
return false;
}
xmldom->put_async(VARIANT_FALSE);
xmldom->load(_variant_t(FileName), &result);
if(result != VARIANT_TRUE){
return false;
}
return true;
}
506:デフォルトの名無しさん
07/04/30 20:18:34
引数でポインタを返したければ、その引数はポインタのポインタである必要がある、って
いうCの基本のお話なのかな?
507:デフォルトの名無しさん
07/04/30 21:09:37
×bool LoadXML(const char* FileName,IXMLDOMDocument *xmldom)
○bool LoadXML(const char* FileName,IXMLDOMDocument **xmldom)
508:デフォルトの名無しさん
07/04/30 21:16:44
まあ、ポインタ参照にしてもいいけどネ
509:デフォルトの名無しさん
07/04/30 22:21:03
>>491
その可能性もあるけど
そうするともうどうしようもなくないか?
>>498
へー
510:デフォルトの名無しさん
07/04/30 22:46:27
#define STRICT
#include <windows.h>
#include <windowsx.h>
#include "ResHOOKTEST.h"
#include "HOOKTEST.H"
static HWND hWndmain;
static HINSTANCE hInst;
LRESULT CALLBACK mainDlgProc(HWND hDlg,UINT message,WPARAM wparam,LPARAM lparam){
switch(message){
case WM_COMMAND:
if(wparam==HOOKON){
makehook();
return TRUE;
}
if(wparam==HOOKOFF){
unhook();
EndDialog(hDlg,TRUE);
}
default: return FALSE;
}
return TRUE;
}
int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
UNREFERENCED_PARAMETER(nCmdShow);
hInst=hInstance;
LoadLibrary(TEXT("HOOKTEST.dll"));
DialogBox(hInstance,"MYDLG",NULL,(DLGPROC)mainDlgProc);
return 0;
}
511:デフォルトの名無しさん
07/04/30 22:48:04
あああああああもうだれかたすけてえええええええええええええ
512:デフォルトの名無しさん
07/04/30 22:48:21
URLリンク(page11.auctions.yahoo.co.jp)
513:504
07/04/30 23:08:00
>>506
ポインタで引き渡しているのに、ポインタのポインタで渡さなければならないのですか?
すみません。この辺理解がよくできてないです。
>>507
変更してみたのですが、
xmldom->put_async(VARIANT_FALSE);
の箇所のメンバ指定の方法がよくわかりません。
こういう感じで変更してみたのですが、コンパイルエラーが無くなりませんでした。
*(xmldom)->put_async(VARIANT_FALSE);
APIよりC言語の基本のほうを勉強したほうがよさそうですね・・・
514:デフォルトの名無しさん
07/05/01 00:38:58
>>513
(*xmldom)->put_async(VARIANT_FALSE);
'->'の方が優先順位が高い。
もちろん、CoCreateInstanceの方も (void**)xmldom に直してあるよな。
後CLSID_DOMDocumentだと、MSXML3以前のインスタンスが返されていると思う。
MSXML4以降の機能を使いたければ、個別のCLSIDを指定する必要がある。
MSXML6なら、CLSID_DOMDocument60って感じで。詳細は英語版MSDN。
515:491
07/05/01 02:07:50
>>510-511
今思ったんだけどさー
別にhInstanceをグローバル変数にコピーしなくても
GetModuleHandle(”dll名”)に置き換えれば良いんじゃないの
516:デフォルトの名無しさん
07/05/01 02:16:32
さすがジョースター卿w
発想の転換だなw
517:デフォルトの名無しさん
07/05/01 04:02:47
>>515
だめです
518:デフォルトの名無しさん
07/05/01 08:58:43
>>473 DLL側本体は int makehook(HINSTANCE)
>>510 利用側は makehook();
根本から間違ってねーか?
519:デフォルトの名無しさん
07/05/01 09:36:11
UrlDownloadToCacheFileでWeb上の頻繁に更新されるファイルを取得した場合、
キャッシュ済みのデータが戻ってきたりで必ずしも最新のファイルでない場合がよくあるのですが、
強制的に更新させる方法はないのでしょうか?
自分でソケット使って書くのマンドクセ('A`)
520:デフォルトの名無しさん
07/05/01 09:42:18
ファイルを一度削除してから再度実行すれば?
521:デフォルトの名無しさん
07/05/01 10:05:39
#include <windows.h>
#define EXPORT extern "C" __declspec(dllexport)
HINSTANCE hinst;
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD dwDllMainEvent,LPVOID lpvReserved){
if(dwDllMainEvent==DLL_PROCESS_ATTACH)
hinst = hinstDLL;
return TRUE;
}
EXPORT int func(void){
char buf[15];
wsprintf(buf,"%d",hinst);
MessageBox(NULL,NULL,buf,MB_OK);
}
dllにして外部から呼び出すとインスタンスハンドルはコピーされている
460=461がコード内で妙なことしてるとしか思えない
522:デフォルトの名無しさん
07/05/01 10:07:34
VC買え
523:デフォルトの名無しさん
07/05/01 10:14:31
Windowsの窓ありきな設計思想に問題があるんじゃないかな。
524:デフォルトの名無しさん
07/05/01 10:19:36
static HMODULE g_hModule = NULL;
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_hModule = hModule;
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
525:デフォルトの名無しさん
07/05/01 10:20:46
>>523
非表示の窓を作れないorやたら面倒なら確かに問題があるかもな
526:デフォルトの名無しさん
07/05/01 10:21:02
>>510
どこでGetProcAddressしてるの?
527:デフォルトの名無しさん
07/05/01 11:21:16
GUIを必要としないのに非表示の窓を作るのは倫理的に間違っている。
528:デフォルトの名無しさん
07/05/01 11:22:50
知らないならレスするな
529:デフォルトの名無しさん
07/05/01 11:26:22
GUIが必要だからタスクトレイに表示するのでは( ̄ー ̄)
530:デフォルトの名無しさん
07/05/01 11:39:23
>>527
ネットワークサービスだけ立ち上がればいいのに、GUIでしか起動できないWindowsは間違っている。
だからCUIのみでも使えるLinuxでも使えば?
531:デフォルトの名無しさん
07/05/01 11:53:53
クッキー焼いてみたの、ちょっと味見してくれない?
勘違いしないでね、別にあんたの為に作ったんじゃないんだからね。
532:デフォルトの名無しさん
07/05/01 12:15:12
Longhorn ServerはついにGUIレスモードが
533:デフォルトの名無しさん
07/05/01 12:22:11
そもそもサービスは・・・
534:デフォルトの名無しさん
07/05/01 12:39:43
>>531
わっふるわっふる
535:デフォルトの名無しさん
07/05/01 13:33:10
>>532
当然タスクトレイも使えないわけだが
ウィンドウはいらないけどタスクトレイは必要なんて頭のおかしい要求する奴以外は
問題ないわな
536:デフォルトの名無しさん
07/05/01 14:28:36
タスクトレイのアイコンでクリック連打するとクリックした回数に応じて
他アプリを立ち上げるランチャーなんてどうだろう
537:デフォルトの名無しさん
07/05/01 14:33:31
つクイック起動
538:デフォルトの名無しさん
07/05/01 15:17:38
ppmフォーマットの画像を読み込ませてウィンドウに表示したいのですが
どうしたらいいですか?
LoadImageだとppmは読めないので困ってます
539:デフォルトの名無しさん
07/05/01 15:20:20
ppmをDIBに変換すればいいんじゃね
540:デフォルトの名無しさん
07/05/01 15:23:14
ppmはグレイスケールの画像で、fscanfで独自に読み込んで
るんですけど、そのDIBには頑張れば変換出来そうですか?
541:デフォルトの名無しさん
07/05/01 15:27:33
できるけど、そもそもLoadImage使おうとしたのは何なんだ
542:デフォルトの名無しさん
07/05/01 15:28:31
CreateDIBSection → BitBlt のコース
WM_PAINT で SetPixel ぐるぐる回すコース
543:デフォルトの名無しさん
07/05/01 15:40:40
LoadImageで読み込めたら表示も楽に出来ると
思ってました・・・
CreateDIBSectionってやつで頑張ってみようと思います
544:デフォルトの名無しさん
07/05/01 15:46:10
Susie Plugin とか使うとか
// 懐かしい響きだな
545:デフォルトの名無しさん
07/05/01 18:30:14
SQLConfigDataSourceでMySQLをODBCに登録する方法を教えてください
546:デフォルトの名無しさん
07/05/01 18:36:53
OOの話でよく、
「OOはデータと操作とカプセル化しちゃって、その部品を使うこと」
みたいなこと書いてあるの見ることあるけど、
これって構造化の話だよな?
547:デフォルトの名無しさん
07/05/01 18:49:47
>>546
構造化と言うと、普通はDijkstraの「gotoやめれ」でしょ。OOよりだいぶ前。
548:デフォルトの名無しさん
07/05/01 19:00:35
OO はカプセル化が基本ではあるが、
ポリモーフィズムが一番の肝だと思うんだぜ。
549:デフォルトの名無しさん
07/05/01 19:22:09
>>518
>>473はためしに書き直してみただけ
550:デフォルトの名無しさん
07/05/01 19:32:46
>>527
不合理ではあるが、HWND_MESSAGE なんてのもあるな。
551:デフォルトの名無しさん
07/05/01 19:53:39
ネ申
552:デフォルトの名無しさん
07/05/01 21:24:43
>547
構造化は、TopDownとBottomUpと複合設計って事だよ。
553:デフォルトの名無しさん
07/05/01 21:32:30
>>545
SQLConfigDataSourceでODBCにMySQLを登録する方法を教えてください
の間違いじゃね?
これ、C:\Program Files\Common Files\ODBC\Data Sourcesフォルダ下に
ファイル置くだけじゃなかった?
554:デフォルトの名無しさん
07/05/01 21:42:39
>>519
亀レス気味だが、
IBindStatusCallback::GetBindInfoが呼び出された時に、
BINDF_GETNEWESTVERSIONフラグ返せばいいんじゃね?
使ったことないから保証はしないが。
555:553
07/05/01 21:46:58
>補足
それでも、素でDSNファイルを作るんなら、
以下のサイトで接続文字列をチェックし、
(URLリンク(msdn2.microsoft.com))
lpszAttributesを作成する。
各パラメータはNULLでつなぎ、最後だけNULLを2つ繋ぐ。
(参考:URLリンク(msdn.microsoft.com))
lpszDriver は、"MySQL ODBC 3.51 Driver"かな?
んで、
SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN, lpszDriver, lpszAttributes);
ではだめか?
556:デフォルトの名無しさん
07/05/01 22:09:45
>>521
#include <windows.h>
#include "ResHOOKTEST.h"
#include "HOOKTEST.h"
LRESULT CALLBACK mainDlgProc(HWND hDlg,UINT message,WPARAM wparam,LPARAM lparam){
switch(message){
case WM_COMMAND:
if(wparam==HOOKON){
func();
return TRUE;
}
if(wparam==HOOKOFF){
EndDialog(hDlg,TRUE);
}
default: return FALSE;
}
return TRUE;
}
int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
UNREFERENCED_PARAMETER(nCmdShow);
/*LoadLibrary(TEXT("HOOKTEST.dll"));*/
DialogBox(hInstance,"MYDLG",NULL,(DLGPROC)mainDlgProc);
return 0;
}
でよみだしたけどやっぱり無理だお
557:デフォルトの名無しさん
07/05/01 22:55:40
VK_KANAが立っているのに
558:デフォルトの名無しさん
07/05/01 23:01:15
しかし飽きもせず、おまえらフック大好きだよなー
559:デフォルトの名無しさん
07/05/01 23:09:41
しかしフック以前の段階で詰まってる罠
560:デフォルトの名無しさん
07/05/01 23:26:28
僕ハッカー!
561:デフォルトの名無しさん
07/05/01 23:27:36
僕バッカー
562:デフォルトの名無しさん
07/05/01 23:28:14
俺チンコ
563:デフォルトの名無しさん
07/05/01 23:47:57
フックはひとつのDLLで二つとかセット出来ますか?
564:デフォルトの名無しさん
07/05/02 00:26:04
『日本初・民営刑務所 囚人が「ソフト開発」』だってよw
ある意味俺らは囚人だww
565:デフォルトの名無しさん
07/05/02 00:31:03
>>563
聞く前にまずやってみろ
SetWindowsHookExのパラメータ見ればわかりそうなもんだが
>>556
もうめんどくせーから
URLリンク(www.uploda.net)
でDLL作れ
566:デフォルトの名無しさん
07/05/02 08:02:53
初心者ですみません。
gdi+のライブラリの中身を解析したいのですが、可能でしょうか?
それともうひとつ、図々しいですが
jpgファイルの構造を教えてくれるところはないですか?
DIBのピクセルビットを操作するようにjpgのピクセルを操作したいのです。
お願いします。
567:デフォルトの名無しさん
07/05/02 08:13:28
>>566
スレ違いだと思うが・・・
jpeg header formatでググる
Code Projectを漁る
URLリンク(www.codeproject.com)
などなど
OleLoadPictureFileでDCに乗せるとかいろいろ
568:デフォルトの名無しさん
07/05/02 08:29:10
アタッマきた
569:567
07/05/02 08:49:01
俺が先に云うね
567にカチンときたので教えません。 バーカ!
>>568
これでいい?
570:566
07/05/02 10:07:04
>>567
ありがとうございます。
試してみます。
571:デフォルトの名無しさん
07/05/02 10:39:54
>>566
GDI+は、ソース公開されていないよ。
逆アセンブルするんだとか言うなら誰も止めはしないが、せいぜいライセンスは気にかけておけ。
JPEGは、画像を圧縮して記録していて、解凍しないと画像は取り出せない。
仮に編集するとしたら、編集終了後にJPEGとして保存するために再び圧縮することになる。