Win32API質問箱 Build ..
175:デフォルトの名無しさん
07/02/22 01:24:11
>>172
vsprintfにするだけでよかったのか
アリガトン
switch文で
%fの場合、
%sの場合、
とかめんどいことして対処してたorz
176:デフォルトの名無しさん
07/02/22 11:45:38
ウィンドウをTOPMOSTに変更し、サイズをデスクトップと同じにするとフルスクリーンの表示ができます
ですがフルスクリーンに切り替わった時、タスクバーの表示が消えるのが一拍遅れます
実際メディアプレイヤーなんかだとフルスクリーンは瞬時に切り替わりますし、ちょっと気になります
APIの呼び出し順とかに問題があるんでしょうか
切替は同一関数内で以下のような呼び出しで行っています
CRect rect;
GetDesktopWindow()->GetWindowRect(rect);
SetWindowLong(m_hWnd, GWL_STYLE, WS_POPUP|WS_VISIBLE);
SetWindowPos(&CWnd::wndTop, 0, 0, rect.Width(), rect.Height(), SWP_SHOWWINDOW);
ちなみにソースはMFCです
177:デフォルトの名無しさん
07/02/22 12:45:27
メディアプレイヤーのフルスクリーンは DirectX のフルスクリーンモードではないかと…
178:デフォルトの名無しさん
07/02/22 12:52:38
DirectXの切替だと結構もっさりするんですよね
デスクトップの解像度と同じで切り替えたとしてももっさり
調べてるわけじゃないけどメディアは瞬時に切り替えてるからDirectXじゃないんじゃないかな
179:デフォルトの名無しさん
07/02/22 13:13:25
いや、Media Playerは少なくともDirectShowを使っている。
180:デフォルトの名無しさん
07/02/22 13:30:01
論点が滅茶苦茶だな。
ハードウエアの解像度変更と、ソフトウエアでのスケーリングを混同するな。
181:デフォルトの名無しさん
07/02/22 13:55:18
>>178は「モニターの解像度切り替えと似てもっさりしてる」と言ってるだけで
同列に扱ってるわけじゃないと思うんだけど、違うのかな
182:デフォルトの名無しさん
07/02/22 14:14:35
>>181
デスクトップの解像度でD3Dフルスクリ-ン と
コンテンツの解像度でD3Dフルスクリ-ン とでは微妙に違う。
183:デフォルトの名無しさん
07/02/22 14:30:13
>>179
あぁすまん、DirectShowは使ってると思う。
>>178はDirectGraphicsのCreateDevice()のフルスクリーン切替は使ってないんじゃない?
と言いたかった
>>180
誰あてのレス?
>>181
そう、その通り
>>182
IDirect3DDevice9::CreateDevice()を使った切替ではデスクトップ/コンテンツの解像度に
よる違いって殆ど感じられなかったけど。(両方もっさり)
184:182
07/02/22 14:36:50
>>183
そっか。
profile 取って、どこが遅いか見たほうが良いかもしれないし、
>>176 コードをベースに悪あがきするのも良い
185:178
07/02/22 14:42:01
ちょっと勘違い、再確認したら
IDirect3DDevice9::CreateDevice()でのフルスクリーン切り替えはもっさりしてない
というか一瞬ブラックアウトして、描画が復帰するまで一呼吸いるだけ
>>176 で単にTOPMOSTにするだけならブラックアウトしないってだけだった
メディアプレイヤーもフルスクリーン切替時に背景ブラックだしDirectGraphicsでフルにしてんのかな
186:デフォルトの名無しさん
07/02/22 16:09:02
画面いっぱいに窓広げているだけだろ。アフォか?
187:デフォルトの名無しさん
07/02/22 16:52:55
なら >>176 に回答してみろ、できなきゃオマエが真性アフォ
188:デフォルトの名無しさん
07/02/22 17:20:05
馬鹿バッカー
189:デフォルトの名無しさん
07/02/22 18:18:32
SetWindowPosの使い方が間違っている。HWND_TOPMOSTを指定しろ。というか全画面はこれが常識。
APIリファレンスも見ない馬鹿しかいないのか?
190:デフォルトの名無しさん
07/02/22 18:34:32
>>177が無知なくせに頓珍漢なことを言うから変な流れになるんだよ。
191:デフォルトの名無しさん
07/02/22 18:36:19
僕ハッカー
192:176
07/02/22 18:37:49
>>189
うぉぅっ、CWnd::wndTopMostを指定してるもんだとばかり思ってた
これは恥かしい、ありがとう解決した
挙動も意図したものになったよ
193:デフォルトの名無しさん
07/02/22 18:40:51
ウィンドウが全画面になった後、タスクバーがあった場所に
自分の描画をするのがもっさりしてるんじゃね?
194:デフォルトの名無しさん
07/02/22 19:20:10
インターネット回線や電話回線が
使える状態かどうかわかるAPIを教えてください
195:67
07/02/22 19:40:43
#シカトされたので再送
サービスの ServiceMain コールバック関数に、
ユーザー定義データを渡せないのは痛いね。
オブジェクト指向化しにくいね。みんなどうやってる?
196:デフォルトの名無しさん
07/02/22 19:43:55
質問です。
なぜ、構造体に、それ自身のサイズを代入しないといけないのですか?
xxxinst.dwSize = sizeof(xxx);
みたいにするなら、必要ないと思うのですが…
197:デフォルトの名無しさん
07/02/22 19:46:23
>>196
過去との互換性のため。
例えば、Rev1のときはサイズが100バイトだったのが、Rev2では120バイトになったりしたら、サイズがあれば便利。
198:デフォルトの名無しさん
07/02/22 19:46:56
>>196
>>197さんが言うように、
それで、構造体のバージョンを判別することもある。
DEVMODE,OSVERSIONINFOとかね
199:デフォルトの名無しさん
07/02/22 19:48:57
>>194
InternetAttemptConnect関数かな?
200:デフォルトの名無しさん
07/02/22 19:59:35
>>197
>>198
なるほど。んじゃあ、これってプログラマのためにある変数なんですか。
OSがメモリ確保するときに必要なわけじゃないんですね。
201:デフォルトの名無しさん
07/02/22 20:02:24
>>195
ドキュメント嫁
202:デフォルトの名無しさん
07/02/22 20:02:41
>>200
OS側で、どこまでのメンバをコピーすべきかの有効判別の意味が大きいかもにゃん。
203:デフォルトの名無しさん
07/02/22 20:22:12
>>196
例えば、OS側にお菓子レコードがあって、以下のデータがある場合・・・
|せ き は ら さ ゆ き 00|00 9E|00 50|00 3C|00 52|
SDK側のヘッダファイルは以下のように定義すれば楽珍なわけで。
typedef struct t_prf{
WORD cSize;
char Name[];
#if(WINVER >= 0x0400)
WORD Height;
#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
WORD Bust;
WORD Waist;
WORD Hip;
#endif
#endif
}PRF;
204:デフォルトの名無しさん
07/02/22 20:24:11
>>203
ちょwwww
志村!
志村!
char Name[8];
205:67
07/02/22 20:30:26
>>201
どこらへんを読んだらいいでしょうか。
206:デフォルトの名無しさん
07/02/22 21:07:13
>>205
まず、どこがどう分からないかを具体的に記しなさい。
207:デフォルトの名無しさん
07/02/22 21:12:21
サービスのインスタンスは1プログラム中に10も20もあったりしないと思うのだが。
208:デフォルトの名無しさん
07/02/22 21:35:07
サービス関係のAPIを一通り目を通せば、目的の物が見つかるはず。
読んでないから、わからないんだろ。
あと今でも使われている古きテクニックとしてはマシン語生成ってのもある。
209:デフォルトの名無しさん
07/02/22 21:35:55
svchost.exeみたいに、同一プロセスに複数のサービスがあるのならまだしも。
210:67
07/02/22 21:54:48
> サービスのインスタンスは1プログラム中に10も20もあったりしないと思うのだが。
いや、あるんですけど。
211:デフォルトの名無しさん
07/02/22 22:08:29
意味がわからんのだけど
ServiceMain内でインスタンス生成すればいいんじゃないの?
212:デフォルトの名無しさん
07/02/22 22:42:10
知識がないわけじゃないのに工夫ができない子はいらない子
213:デフォルトの名無しさん
07/02/22 22:48:27
何ができなくて困ってるのかよく解らん。
ユーザ定義データを渡せると仮定して、渡せないときに比べて何ができるようになる?
214:デフォルトの名無しさん
07/02/22 23:49:03
マウスの動作を拡張するソフトって、どうやってるんですか?
自分で登録したクラスなら、メッセージ取れるけど、
ほかのウィンドウクラスに送信されたメッセージって
メッセージキュー以前の段階でとらないといけいないですよね。
ヒントだけでもください。
215:デフォルトの名無しさん
07/02/23 00:14:34
Hook
216:デフォルトの名無しさん
07/02/23 00:18:28
>>214
SetWindowsHookEx
使うとか
217:デフォルトの名無しさん
07/02/23 01:10:03
どうも。
218:デフォルトの名無しさん
07/02/23 02:00:53
「オーナー描画ボタン」を少し改造しています。
URLリンク(wisdom.sakura.ne.jp)
大雑把にですが>>219のようなにしています。
処理 1の部分は実行されず、処理 2の部分だけが実行されます。
SubBtnProcのWM_DRAWITEM:の部分を消しても結果は同じです。
処理 1も処理 2も実行されると思っていたのですが、何故でしょう?
自分の理解はSetWindowLongでSubBtnProcに飛んで、引数をそのままDefBtnProcに
代入されている WndProcに飛ぶのだと思っていました。
どこを勘違いしているのかわかりませんので、どなたかご指摘をお願いします。
219:デフォルトの名無しさん
07/02/23 02:04:18
LRESULT CALLBACK SubBtnProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
switch (msg) {
case WM_DRAWITEM:
〜何かの処理 1〜
return TRUE;
}
return CallWindowProc(DefBtnProc , hwnd , msg , wp , lp);
}
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
switch (msg) {
case WM_CREATE:
hBT = CreateWindow(
TEXT("BUTTON") , TEXT("") ,
WS_CHILD | WS_VISIBLE | BS_OWNERDRAW ,
0 , 0 , 400 , 100 , hwnd , (HMENU)1 ,
((LPCREATESTRUCT)(lp))->hInstance , NULL);
DefBtnProc = (WNDPROC)GetWindowLong(hBT, GWL_WNDPROC);
SetWindowLong(hBT, GWL_WNDPROC , (LONG)SubBtnProc);
return TRUE;
case WM_DRAWITEM:
〜何かの処理 2〜
return TRUE;
}
return DefWindowProc(hwnd , msg , wp , lp);
220:デフォルトの名無しさん
07/02/23 07:13:45
>>218
WM_DRAWITEMは親ウィンドウに送られてくるものなので、それでOK。
221:194
07/02/23 10:34:57
>>199
そういう感じのAPIで
繋がってる回線の数等わかるものはないですか?
222:デフォルトの名無しさん
07/02/23 11:36:46
>>221
WNetEnumResource関数も見たほうがいいかもね
223:デフォルトの名無しさん
07/02/23 11:42:44
>>222
それは違う関数だと思う。
>>221
WMIにあるかもね
224:デフォルトの名無しさん
07/02/23 11:54:36
繋がってる回線というのを具体的に定義すればわかるかもよ
225:デフォルトの名無しさん
07/02/23 11:59:37
繋がってるTCPコネクションの事なのか
LAN回線の接続数の事なのか
226:デフォルトの名無しさん
07/02/23 12:06:25
LANではなくて電話回線の数を数えたいのですが
WindowsのAPIで可能でしょうか?
227:194
07/02/23 12:37:30
>>225
両方とも教えてください
228:デフォルトの名無しさん
07/02/23 12:40:16
コンボボックスで今何番目の項目が選択されているか調べたいのですけど
どのようにすればいいでしょうか?
229:デフォルトの名無しさん
07/02/23 12:40:31
>>226
WMIでWin32_POTSModemクラスかな?
230:デフォルトの名無しさん
07/02/23 12:43:48
>>228
CB_GETCURSEL
メッセージ
231:228
07/02/23 12:52:48
ShowMessage( SendMessage(In,CB_GETCURSEL,0,0) );
試しでこんな風に書いてみたのですが、
0しか返ってきません。
書き方は間違ってませんよね?
232:デフォルトの名無しさん
07/02/23 14:30:36
In、て、なんだ、ハゲ。
233:デフォルトの名無しさん
07/02/23 14:50:25
ShowMessageって何かと思ったらbc++か
234:228
07/02/23 15:59:17
環境はC++Builder6
Inはただ適当につけたハンドルです。
235:デフォルトの名無しさん
07/02/23 16:04:30
で、Inはそのコンボボックスのハンドルなの?
いちおー、0は有効値(見つからないと-1)だから
ハンドルが違ってる可能性高い
236:デフォルトの名無しさん
07/02/23 16:29:13
EnterCriticalSection した後、
その中で CreateThread しても問題ない?
237:デフォルトの名無しさん
07/02/23 16:48:10
>>236
問題ない
238:デフォルトの名無しさん
07/02/23 17:29:06
根拠は?経験上?仕様上?
239:デフォルトの名無しさん
07/02/23 17:38:41
そもそもクリティカルセクション中にCreateThreadしちゃいけないって
何で思ったの?
240:デフォルトの名無しさん
07/02/23 17:40:50
なんとなく
241:デフォルトの名無しさん
07/02/23 17:58:30
クリティカルセクションは他のスレッドへの切り替えを抑止するような役目を果たしてるから、
EnterCriticalSectionの後にスレッド作ってそこでもクリティカルセクションを使った場合に大丈夫かって思ったんじゃないの?
242:デフォルトの名無しさん
07/02/23 17:58:51
>>234
実際に選択項目を変えてみたの?
243:228
07/02/23 18:34:51
項目を変えたりしても、変わらないです。
244:デフォルトの名無しさん
07/02/23 18:37:21
CB_GETCURSEL以外はうまくいくのか?
CB_GETCOUNT とか CB_RESETCONTENT とか
245:228
07/02/23 18:46:25
void __fastcall 〜〜〜(SealInに項目を追加)
void __fastcall TForm2::Button1Click(TObject *Sender)
{
ShowMessage( SendMessage(SealIn , CB_GETCURSEL , 0 , 0) );
}
てか、ほんとこれくらいのプログラムしか出来てない;;
>>244
試しでその二つや0以外が返ってきそうなものをやってみましたけど、
結果変わらずです
246:デフォルトの名無しさん
07/02/23 18:52:38
>>245
>SealIn
上の(SealInに項目を追加)が気になる
これってコンボボックスの名前か?
まさかだけど
ShowMessage( SendMessage(SealIn->Handle , CB_GETCURSEL , 0 , 0) );
ってことないよね?
247:デフォルトの名無しさん
07/02/23 18:55:04
あと、SendMessage()直後にGetLastError()を
248:228
07/02/23 19:07:48
SealInがコンボボックスの名前です
SealIn->Items->Add(text);
で、項目を追加してます。
それ以外の処理はまだないです。
GetLastErrorを追加しましたが、エラーコード返ってきませんでした
249:デフォルトの名無しさん
07/02/23 19:09:02
>>248
ならSealInはハンドルじゃない
ShowMessage( SendMessage(SealIn , CB_GETCURSEL , 0 , 0) );
SealInの部分を SealIn->Handle にする
ShowMessage( SendMessage(SealIn->Handle , CB_GETCURSEL , 0 , 0) );
250:228
07/02/23 19:11:20
>>249
うまくいきました。
ありがとうございます
251:デフォルトの名無しさん
07/02/23 19:27:18
TFormってことはVCLも使ってるだろうになんでわざわざそんなめんどくさいことを
SealIn->ItemIndexじゃいかんのか
252:デフォルトの名無しさん
07/02/23 19:30:21
>>251
Win 32 SDK板ですからね
253:デフォルトの名無しさん
07/02/23 19:33:33
>>251
私も思ったけど、たぶん練習じゃないかなと思った
メッセージってどんな感じ?みたいな
私も昔やったことある
254:デフォルトの名無しさん
07/02/23 23:24:49
必要な場合だけ AllocConsole を使って動的にコンソールを割り当てた。
そんで GetStdHandle で標準入力のハンドルをもらった。
このとき、標準入力に入力があったことを WaitForMultipleObjects で
通知してもらうことってできる?
標準入力とともに他のハンドルのシグナル状態も検出したいのです。
255:デフォルトの名無しさん
07/02/24 00:41:46
シミュレーション作ってるんですが
スクロールバーを動かしてる時に
処理が止まらないようにする方法はありますか?
256:デフォルトの名無しさん
07/02/24 00:55:05
マルチスレッドで描画と計算を分けるのは前提だよな。
257:デフォルトの名無しさん
07/02/24 08:19:25
>>255
>>256氏が言っている様に、
シミュレーション側とGUI周り側を切り分けて、
プログラムをマルチスレッド化するべきかもね。
CreateThread関数、
WaitForSingleObject関数、WaitForMultipleObjects関数あたりを見てみ。
258:デフォルトの名無しさん
07/02/24 09:16:35
>>254
コンソール入力を待てると書いてあるし、
URLリンク(msdn.microsoft.com)
読み取られていない入力があったときにシグナル状態になると書いてあるし、
URLリンク(msdn2.microsoft.com)
平気だろう。
259:デフォルトの名無しさん
07/02/24 17:58:00
扶桑社から12月号
URLリンク(www.microsoft.com)
260:デフォルトの名無しさん
07/02/24 20:36:30
どなたか助けてください。
Windows アプリケーションを作成していて、
URLリンク(home.earthlink.net)
ここの方法でコンソールを割り当てて、その上で、
while (1) {
char buf[256];
fgets(buf, 200, stdin);
fputs(buf, stdout);
}
のようなコードを書いたんですが、
コンソールで高速にキーボード入力して Enter を押すと、
入力していない 'T' という文字が、コンソールの行の先頭に表示されるんです。
なぜこんなことになるのでしょうか?
261:デフォルトの名無しさん
07/02/24 20:52:49
char buf[0x100];
while(1){
fgets(buf,200,stdin);
fputs(buf,stdout);
}
262:デフォルトの名無しさん
07/02/24 20:57:14
やってみたけど、変わらないですよ。
263:デフォルトの名無しさん
07/02/24 21:07:19
>>260
ふしぎだね。
四角形になるRFGTでRFGを同時押しすると
Tも押したことになってしまうタイプのキーボードとか。
んなこたーねーか
264:デフォルトの名無しさん
07/02/24 21:09:51
呪われておる
265:デフォルトの名無しさん
07/02/24 21:42:40
>>260
必ず’T’なのか?
>コンソールで高速に
知らず押しちゃってるってことない?
266:デフォルトの名無しさん
07/02/24 21:48:10
uhihigd(ここでEnter)
Tuhihigd
こんな感じになるってこと?
267:デフォルトの名無しさん
07/02/24 21:48:55
押してないよ。T がよく出るんだけど、さっきやったら ] も出てきた。
z x c v をがちゃがちゃとランダムに押しながら、
ときどき Enter を押すと、20回に1回ぐらいの割合で出てくる。
268:デフォルトの名無しさん
07/02/24 21:50:01
>>266
そう!そんな感じ!
269:デフォルトの名無しさん
07/02/24 21:51:14
それはそのプログラムだけで発生するわけ?
270:デフォルトの名無しさん
07/02/24 21:52:21
キーボードってさ、
キーの数だけ配線が二本ずつあるのではなくて
一本は横一行で共有
もう一本は縦一列で共有
同時押しがあると見分けつかないから
昔のキーボードでは良く起きた。
271:デフォルトの名無しさん
07/02/24 21:53:04
>>270
とおもう。
272:260
07/02/24 21:53:48
VC 2005 + SP1 を使っています。
ウィザードから普通のコンソール アプリケーションを作成して
同じようなプログラムを作成しても、このようなことは起きないんです。
Windows アプリケーションを作成して、動的にコンソールを作成すると
このような現象が出てくるんです。
別の人のマシンでも再現したので、私のマシンの問題ではないと思う。
(両方のマシンとも Dell 製だが、機種は違う。)
273:デフォルトの名無しさん
07/02/24 21:57:35
ソース見てみたい
274:260
07/02/24 22:19:59
>>273
いや >>260 に書いたとおりなんですけど。。。
あのサイトのコードを使ってコンソールをセットアップして、
その後で fgets . fputs を繰り返すループを書くだけです。
275:デフォルトの名無しさん
07/02/24 22:24:38
じゃあWindowsかVCの不具合なのかもな
276:デフォルトの名無しさん
07/02/24 22:36:09
260を見て思ったんだが、FILE構造体同士の代入ってやっていいのか?
freopen("con", "w", stdout);とか
(またはconの代わりにCONOUT$など)では駄目か?
277:デフォルトの名無しさん
07/02/24 22:45:56
>>276
もし俺がやるとしたら俺も>>276のほうだな
278:260
07/02/24 22:50:59
直った!下記のコードでうまくいった!ありがとう!
freopen("con", "r", stdin);
freopen("con", "w", stdout);
freopen("con", "w", stderr);
279:デフォルトの名無しさん
07/02/24 23:19:32
質問です
gethostnameとgethostbynameを利用してローカルIPは取得できたのですが、
グローバルIPはAPIで取得できるのでしょうか?
280:デフォルトの名無しさん
07/02/24 23:21:38
[グローバルIP]がブロードバンドルータに付いているものを指すなら、
UPNPでとるとか、実際の通信相手からpeernameを戻してもらうしかない。
281:デフォルトの名無しさん
07/02/24 23:33:46
>>280
やっぱりAPIで楽はできないですかorz
ご助言ありがとうございました。
282:デフォルトの名無しさん
07/02/24 23:49:20
XPに限定してもいいならUPnPを操作するAPIがあったはず
283:デフォルトの名無しさん
07/02/24 23:54:40
>>270
ダイオードあげる
つ ─━─
284:デフォルトの名無しさん
07/02/24 23:58:24
⊥
▲
│
285:デフォルトの名無しさん
07/02/25 00:17:51
Win32_PingStatusじゃ無理か?
286:デフォルトの名無しさん
07/02/25 00:20:36
>>270
実際には横一列、縦一列じゃなくてばらばらに設定されてる
1本回路が死んだら横1列、もしくは縦1列全滅だからな
それ防ぐため
らしい
287:デフォルトの名無しさん
07/02/25 00:27:04
>>283 >>284
そうだね!
288:デフォルトの名無しさん
07/02/25 08:15:54
プロテインだね!!
289:デフォルトの名無しさん
07/02/25 10:18:14
VC では open_osfhandle を呼び出すことで OS のファイルハンドルから
ファイル記述子に変換することはできますが、
逆に、ファイル記述子から OS のファイルハンドルを取得するには
どうしたらよいでしょうか。
290:デフォルトの名無しさん
07/02/25 10:20:39
_get_osfhandle
291:デフォルトの名無しさん
07/02/25 11:47:14
フォルダやファイルを、どのアプリケーションが開いているか確認する方法はないですか。
292:デフォルトの名無しさん
07/02/25 12:02:20
Process Explorerにそんな機能があったな。
293:デフォルトの名無しさん
07/02/25 12:07:50
ProcessExplorerそんな機能ないだろ
単にモジュール列挙じゃない?
294:デフォルトの名無しさん
07/02/25 12:18:26
Unlockerにはそういう機能がある。
295:デフォルトの名無しさん
07/02/25 12:19:54
FindメニューのFindHanlde or Dll
ってそういうものだと思ていたが。
296:デフォルトの名無しさん
07/02/25 13:02:30
FileMon じゃねーの?
297:デフォルトの名無しさん
07/02/25 13:50:48
Handleは?
298:デフォルトの名無しさん
07/02/25 14:00:11
c:\windows\system32\openfiles.exeは?
299:デフォルトの名無しさん
07/02/25 14:01:36
OH.EXEは?
300:デフォルトの名無しさん
07/02/25 14:23:48
URLリンク(www.atmarkit.co.jp)
これか
301:デフォルトの名無しさん
07/02/25 15:58:29
あれ、WindowsXPなのに、openfiles.exeがない!
302:デフォルトの名無しさん
07/02/25 15:59:12
なんだプロだけかよ…
303:デフォルトの名無しさん
07/02/25 18:28:59
うんにゃ、サーバにもありんす
304:デフォルトの名無しさん
07/02/25 19:26:06
regmon.exe どっかにないの?
305:デフォルトの名無しさん
07/02/25 20:51:13
Process Monitorでレジストリの監視もできるだろ
と言いたいところだがLog Bootの機能がなくなってる。
Vistaで起動時のレジストリアクセスを調べるにはどうしたらいいんだ
306:デフォルトの名無しさん
07/02/25 21:27:17
バイナリデータ(AA00CCDD0Aとか)を文字に変換かけるAPIとかってありますか?
307:デフォルトの名無しさん
07/02/25 21:41:56
wsprintf
308:306
07/02/25 21:46:41
wsprintfでできるんだっけ?
補足するとバイナリファイルを16進表記で表示させるプログラムを作りたいんだが。
バイナリで読み込んだものをwsprintfA(..."%X"...);でやるとおかしくなった気がします。
何かの間違いかもしれないからもう一度試してきます。
309:306
07/02/25 21:49:34
やはりAA00CCDD0Aというバイナリがあったとして
wsprintfでやるとAAまでしか取得できません。
0x00に反応してると思われ
310:デフォルトの名無しさん
07/02/25 21:51:29
>>309
ソースを晒すべし
0x00 は多分関係無い 言語にもよるだろうけど
311:デフォルトの名無しさん
07/02/25 21:52:54
いや、1byte毎ぐるぐる回しながら、%Xで変換、という話だと思うが
312:306
07/02/25 21:54:16
>>311
あー、なるほどそういうことか。
試してみます。
313:デフォルトの名無しさん
07/02/25 21:57:15
>>305
regmon.exe あったぁ〜
MSに買収されてたとは知らんかった
サンクスです
314:306
07/02/25 23:14:59
できましたが
AA0001とかだとA01としかならないです
315:デフォルトの名無しさん
07/02/25 23:17:27
>>314
%02X
316:デフォルトの名無しさん
07/02/25 23:18:02
%02X
317:306
07/02/25 23:24:15
>>315
それは既に試していて
もう一度やりましたがやっぱりダメでした。
A0000とかなっちゃいます
318:デフォルトの名無しさん
07/02/25 23:24:58
>>306
ソースうp
319:306
07/02/25 23:30:25
URLリンク(zetubou.mine.nu)
320:デフォルトの名無しさん
07/02/25 23:35:12
>wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);
これが原因。buff[i]はいいけど、lpPack[i]は1ループで2進むことがあるから。
321:デフォルトの名無しさん
07/02/25 23:36:22
buffへコピーする必要は無いだろ。
せいぜいBYTE* packet = lpPacket;で十分。
322:デフォルトの名無しさん
07/02/25 23:36:26
>>319
for(i = 0; i < Size; i++)
{
wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);
}
↓
{
int j=0;
for(i = 0; i < Size; i++)
{
j+=wsprintf(&PackData.lpPack[j], TEXT("%X"), buff[i]);
}
}
323:デフォルトの名無しさん
07/02/25 23:37:03
for(i = 0; i < Size; i++)
{
wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);
}
↓
{
int j=0;
for(i = 0; i < Size; i++)
{
j+=wsprintf(&PackData.lpPack[j], TEXT("%02X"), buff[i]);
}
}
324:306
07/02/25 23:37:06
for(i = 0; i < Size; i++)
{
wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);
}
Sizeはパケットのサイズ
buffにはパケットのデータをmemcpyしてます(デバッグ用)
上記の状態でやるとAA00020B00がA02B0になっちまいます
325:306
07/02/25 23:38:32
>>320
あー、UNICODEベースで組んでるのが原因かなぁ
326:デフォルトの名無しさん
07/02/25 23:40:59
>>325
>>323 が正解
327:デフォルトの名無しさん
07/02/25 23:44:20
wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);
↓
wsprintf(&PackData.lpPack[i*2], TEXT("%02X"), buff[i]);
328:306
07/02/25 23:45:04
>>327
それはむしろi * sizeof(TCHAR)でやるべきかと。
後やはりA02B0になっちまいやすorz
329:306
07/02/25 23:46:08
多分BYTEが1バイトだからなのかなーと思うんですが
330:デフォルトの名無しさん
07/02/25 23:46:23
>324
VC++のウォッチ式ならコピーせずともどうにでもできる。
>325
PackData.lpPackの型がTCHARの配列やそれに類するものでなく、
charやunsigned charなどだったらwsprintfAかs(n)printfでも使いなさい。
>327
そこは2文字書き込むから2をかけてあるのであって、
sizeof (TCHAR)では全くお門違い。
331:306
07/02/25 23:48:45
>>330
あー、そういうことなのか
>>325についてはリストビューをUNICODE形式にしちまってるから
なんとかならないですかのう。Aに全てやり直すの酷だ・・
332:デフォルトの名無しさん
07/02/25 23:56:02
320の件は323なり327なりの方法で解決できる。
Unicodeは関係ない。
333:306
07/02/25 23:58:40
全然違うソースを改変してビルドしてたんでまったく結果が同じという
オナニーショーを演じていましたどうもすみません。
334:306
07/02/25 23:59:17
(´・ω・`)
335:デフォルトの名無しさん
07/02/26 00:02:31
よく頑張ったお前は神だよ
336:デフォルトの名無しさん
07/02/26 02:31:42
もっとわかりやすいデータを食わせて何がおきてるのかさぐる、とか
そもそも%02Xはどういう意味なのか、くらい調べようぜ
337:デフォルトの名無しさん
07/02/26 12:57:25
特定のアプリに対して
キーボードのBackword/Forwardキーとかの特殊キーで
WM_COMMANDが送られるのをブロックしたいのですが、
どうすればいいですか?
338:デフォルトの名無しさん
07/02/26 15:21:58
キーボードフック
339:337
07/02/26 21:36:43
>WM_COMMAND
すみませんWM_APPCOMMANDでした・・・orz
SetWindowsHookExでフックをいろいろやってみましたができません・・・orz
最初、WH_KEYBOARDをやったらWM_KEYDOWNより前に送られてるのでダメ・・・
で、PostでなくSendされてるのでWH_GETMESSAGEではキャッチできず・・・
WH_CALLWNDPROCでは
>The hook procedure can examine the message; it cannot modify it.
となっていてブロックできず・・・
340:デフォルトの名無しさん
07/02/26 22:00:19
>>339
フックだけじゃダメだって。
ジャブやアッパーも織り交ぜないと。
341:デフォルトの名無しさん
07/02/26 22:19:40
LVM_DELETEITEMとかでアイテムを削除した後
アイテムを追加するとInsertItemは追加できるのにSetItemのほうは
追加できなくなりました。原因に心当たりのある方がいたら教えていただきたいのですが。
342:デフォルトの名無しさん
07/02/26 22:22:49
>>340
フックって意味分かってる?
あんなの出すんだったらジャブとかアッパーだしたら隙が出ちゃうよ?
343:デフォルトの名無しさん
07/02/26 22:26:34
>>341
SetItemは追加じゃないんだけど、、、まあそれは置いておいて、
SetItemに指定してるアイテム番号が違うのでは?
例えばInsertItemの戻り値がアイテム番号なので、それをSetItemに指定するとか。
344:デフォルトの名無しさん
07/02/26 22:27:31
CreateWindowで"BUTTON"をBS_OWNERDRAW指定して作った子ウインドウに
WM_PAINTでビットマップをコピーして表示することはできました。
このWM_PAINTをWM_LBUTTONDOWNに変えるとビットマップが表示されません。
すみませんが、どうしてなのか教えてください。
345:デフォルトの名無しさん
07/02/26 22:29:19
>>343
それはないと思うんですが。
まず、LVM_DELTEITEMを送る前まではちゃんとSetItemできてて
LVM_DELTEITEMをSendした後から追加しようとするとできなくなってしまいます
346:デフォルトの名無しさん
07/02/26 22:30:09
BeginPaint/EndPaintはWM_PAINTの中でしか使えない。
またそれを解決しても、後のWM_PAINTで上書きされるということが起きそう。
347:デフォルトの名無しさん
07/02/26 22:31:02
>>344
BeginPaint の PAINTSTRUCT を見てみて
348:デフォルトの名無しさん
07/02/26 22:35:33
>>344
よくわかんないけど、WM_DRAWITEMを使うのは?
349:341
07/02/26 22:37:51
解決しました。
350:デフォルトの名無しさん
07/02/26 22:42:04
後々の為に方法を書いておくんだ
351:デフォルトの名無しさん
07/02/26 22:42:35
>>347-348
ご回答ありがとうございます。
手がかりにして調べてみます。
352:341
07/02/26 23:16:12
>>350
単純に消去した時のカウントがそのままでというか
項目数取得使っとけば良かったのに何で俺staticな変数で
インクリメントしてたんだろう・・・。
という話です
353:341
07/02/26 23:41:12
ふとした疑問。
ListView_GetItemCountで取得した項目数をそのまま
ListView_InsertItemを使って追加していった場合、
果たしてそれは正しいやり方なんだろうか・・・・。
354:デフォルトの名無しさん
07/02/27 00:03:48
>>339
フックでメッセージを消したいときは、メッセージをWM_NULLに
書き換えればいいんだよ。
355:デフォルトの名無しさん
07/02/27 00:04:44
>>353
意味が分からんが、ちょっと興味ある。
詳しく
356:デフォルトの名無しさん
07/02/27 00:32:50
テンプレのWIn32API入門の第11章の終了処理のプログラムを実行すると
Proglam still running ? というエラーがでてビルドできません
これはどういうエラーなんでしょう?
環境はWin98でBorlandの5.5です
357:339
07/02/27 00:43:42
>>354
メッセージの変更は
WH_GETMESSAGEではできるみたいですが
WH_CALLWNDPROCではできないようです。
WH_GETMESSAGEではキャッチできませんでした・・・orz
358:デフォルトの名無しさん
07/02/27 00:46:27
>>356
コンパイル結果のと同じ名前のEXEが現在実行中。
359:デフォルトの名無しさん
07/02/27 00:46:29
>>356
ビルドの対象のプログラムがまだ実行中
360:デフォルトの名無しさん
07/02/27 02:23:23
win32apiの関数で画像の加算合成をするにはどうしたらいいですか?
361:デフォルトの名無しさん
07/02/27 02:42:03
gl何とか
362:デフォルトの名無しさん
07/02/27 02:53:04
>>360
DIBにすればピクセル単位で普通にCPUで読み書きできる。
363:デフォルトの名無しさん
07/02/27 10:06:16
>>360
結局、演算部は自作ですよ。
364:デフォルトの名無しさん
07/02/27 10:22:42
自作ルーチンで演算
これがほんとの自作自演ナンチャッテ
365:デフォルトの名無しさん
07/02/27 11:06:58
【審議中】
∧,,∧ ∧,,∧
∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U ( ´・) (・` ) と ノ
u-u (l ) ( ノu-u
`u-u'. `u-u'
366:デフォルトの名無しさん
07/02/27 11:09:53
( ´д)……(´д`)……(д` )
367:デフォルトの名無しさん
07/02/27 12:09:26
そのまましばらくお待ちください
368:デフォルトの名無しさん
07/02/27 12:11:43
__ __ __
|よし| ΛΛ |よし| ΛΛ |よし| ΛΛ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〃 ̄∩ ゚Д゚) 〃 ̄∩ ゚Д゚) 〃 ̄∩ ゚Д゚) < >>364 全員一致で逝ってよし!
ヾ. ) ヾ. ) ヾ. ) \_____________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
\ \
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |
| 逝ってよし認定委員会 |
| |
\| |
369:デフォルトの名無しさん
07/02/27 12:47:16
>>358 >>359
解決しました、ありがとう〜
370:デフォルトの名無しさん
07/02/27 13:40:46
ウィンドウクラスとウィンドウスタイル定数が全部載ってるサイト教えれ
371:デフォルトの名無しさん
07/02/27 13:55:38
マイクロソフトのサイト
372:デフォルトの名無しさん
07/02/27 13:56:15 BE:139752498-2BP(222)
>>370
winuser.h
373:デフォルトの名無しさん
07/02/27 14:12:01
BCCなんですが、GDI+のライブラリがないとjpgって表示できないんですか?
374:デフォルトの名無しさん
07/02/27 14:30:57
>>373
jpg解凍ルーチンを自分で書けばいいと思うよ
375:デフォルトの名無しさん
07/02/27 14:41:15
他の板ならともかく、ここで「解凍」って見るとすごくバカっぽいな。
376:デフォルトの名無しさん
07/02/27 14:42:23
>>374
だめなのか。。。('A`)メンドクセ
dクス
377:デフォルトの名無しさん
07/02/27 14:58:40
ライブラリ無いとどんな画像形式でも表示なんか無理だと思うんだが…
378:デフォルトの名無しさん
07/02/27 15:00:54
GDI+じゃなくても、OleLoadPictureあたり使えばイインジャネ?
379:デフォルトの名無しさん
07/02/27 15:10:46 BE:11646623-2BP(222)
IEコンポにやらせるとか。
380:デフォルトの名無しさん
07/02/27 17:17:10
>>373
自分でこっそり使うツール程度で単に表示させたいだけなら、
Susieプラグインでも使えばいいんじゃない。
BMP(DIB)さえ扱えるなら、.spiは結局DLLなので
静的ロードしてやれば自分で書くコードはほとんど無くて済むだろうし。
# 昔読んだプラグイン仕様の記憶から書いてるのでどっか間違ってるかも。
一例としてSusieプラグインを挙げたけど、
JPEGならフリーのライブラリがいくらでもあると思う。
# 思いついた確実に存在するJPEG読み込みのDLLがSusieプラグインだったので。
もし商用利用する場合はライブラリのライセンスを要確認のうえで。
381:デフォルトの名無しさん
07/02/27 17:21:09
むしろlibjpeg
382:デフォルトの名無しさん
07/02/27 17:26:30
UpdateLayerdWindowでblend.SourceConstantAlphaに255をセットした場合は成功して表示されるんですが、それ以下の数字を入れた場合Functionがエラーとなりエラーコードが87=パラメータが違います。となってしまいます。
Functionを呼ぶ前のスタイルとか何かに問題があるんでしょうか?
383:デフォルトの名無しさん
07/02/27 18:09:00
>>382
スレ違い...と言いたいが、
GDI+スレはないんかいw
384:デフォルトの名無しさん
07/02/27 18:12:11
Platform/Windows SDKにヘッダとライブラリがあるんだし、扱うとしたらここだろ。
その違いが把握できるなら.NET系のスレもありだとは思うが。
385:デフォルトの名無しさん
07/02/27 18:34:05
何ですれ違いなん?普通にUser32.dll のAPIじゃなかと?
386:デフォルトの名無しさん
07/02/27 18:35:29
gdiplus.dllだろ
387:デフォルトの名無しさん
07/02/27 18:56:35
GDI+スレとか無いからここでいいんじゃね?
APIじゃないけど
388:デフォルトの名無しさん
07/02/27 19:00:56
URLリンク(msdn.microsoft.com)
ヘッダー:winuser.h 内で宣言
インポートライブラリ:user32.lib を使用
というわけで、gdiplus.dll の関数ではなく、単なる Win32API です。
389:デフォルトの名無しさん
07/02/27 20:26:46
>>373
jpg表示したいだけなら、OleLoadPictureでいいんじゃね?
前処理が面倒だが、jpgだけじゃなくBMP/GIF他も一緒に扱えるし。
390:デフォルトの名無しさん
07/02/27 21:39:34
やべー jpg なんて libjpeg 一択と思ってた
png に libpng 使ってるんですが、これもひょっとしてメジャーじゃなかったり?
391:デフォルトの名無しさん
07/02/27 22:06:55
>>382
255 = 0xFF = 0b11111111で 、
実際はblend.SourceConstantAlphaをリングシフトして、
OS(ドライバ?)は最下位ビットをAND判定してるとか?
nパーセントの透過率 = ((0xFF * n) / 100)
392:デフォルトの名無しさん
07/02/27 22:34:01
>>382
::GetDeviceCaps(hDC, SHADEBLENDCAPS)の結果は?
393:389
07/02/28 00:13:00
>>390
表示だけでなく、生成や変換もやる場合は、libXXXでいいんじゃね?
Susieプラグインとかよりライセンス条件緩そうだし。
WindowsのAPI/DLLだけで済むならそのほうがいいと思うんでOleLoadPicture
を勧めた訳だが。
394:デフォルトの名無しさん
07/02/28 07:57:46
子プロセスの出力をパイプで受け取り、それをistreamで読み出すには
どうしたら良いのでしょうか?
スレ違いなら誘導お願いします。
395:デフォルトの名無しさん
07/02/28 08:01:00
パイプで受け取る方法はググればサンプルが見つかる。
istreamがC++のやつのことなら、Boost.Iostreamsを使うのが楽。
396:394
07/02/28 08:18:45
>>395
ありがとうございます。おっしゃる通りistreamはC++のやつのことです。
これからググって調べてみる事にします。
397:デフォルトの名無しさん
07/02/28 14:18:14
他のアプリが呼び出した DeviceIoControl()
の内容を横取り(もしくは覗き見)する方法はあるでしょうか?
398:デフォルトの名無しさん
07/02/28 14:20:09
アル
399:デフォルトの名無しさん
07/02/28 14:27:15
ラッパDLLは無理くさいからIAT書き換えればいいんじゃないのかな。
Advanced Windowsに物凄い詳しく書いてあるよ。
400:デフォルトの名無しさん
07/03/01 07:37:23
新規質問お願いします。
デバイスコンテキストに文字を書くAPIを探しています。
「A」と書いたときには「∀」と文字を上下反転させる事ができるAPIはないでしょうか?
TextOut、DrawTextにはしてい方法が見つかりませんでした。
APIの組み合わせでもフォント設定でもいいので知っていたらお願いします。
後、文字の背景は透過しているので、「TextOut」→「StretchBlt」で張り付けた絵を反転するのは無しでお願いします
401:デフォルトの名無しさん
07/03/01 08:14:20
>>400
単純に回転ならCreateFont関数でnEscapementで角度指定だっけな?
垂直、水平はしらん
402:デフォルトの名無しさん
07/03/01 08:15:36
CreateFont
403:402
07/03/01 08:16:36
かぶったすまん
404:デフォルトの名無しさん
07/03/01 11:56:14
>>400
g.TranslateTransformで反転表示させることも出来るよ(・∀・)イイ!!
そのほうが多分効率いいと思う。
405:デフォルトの名無しさん
07/03/01 18:25:26
画像のビューワみたいなものが作りたいのですが、サムネイルを表示する部分は
そのようなコントロールがあるのでしょうか。それともウィンドウに直接(?)書いて
マウスの座標などでクリックされた画像を判定したりしているのでしょうか。
開発環境は Visual C++ 2005 Express Edition です。
406:デフォルトの名無しさん
07/03/01 20:09:35
>>405
IExtractImageインターフェイスだっけな?
407:デフォルトの名無しさん
07/03/01 21:07:05
リストビューでよくね?
408:405
07/03/02 08:41:49
>>406
ありがとうございます。
調べてみたのですが、サムネイルを生成するのに非常に便利そうで助かります。
この取得した画像を表示するコントロールなどがあるものかと悩んでいました。
>>407
リストビューの大きいアイコン表示を使うということでしょうか。
それとも(あまり詳しくはないですが)オーナードローというもので、描画する
のでしょうか。とりあえず試してみたいと思います。
ありがとうございました。
409:デフォルトの名無しさん
07/03/02 08:47:10
>>408
正しいかどうかは分からないが、俺はリストビューの大きいアイコンで画像サムネイルビューアを作ったことがある。
後は つ[イメージリスト]
410:デフォルトの名無しさん
07/03/02 21:29:09
お気に入りとか、履歴とかのシステム標準(?)のアイコンを取得する汎用的な
やり方はありますか?
今はExtractIconEx()でshell32.dllからインデックス直値で取ってますが...
OSが変わるたびに変えないといけないし('A`)
411:デフォルトの名無しさん
07/03/02 21:53:29
あ、SHGetSpecialFolderLocation()→SHGetFileInfo() でいけそうですが
他に簡単な方法があれば。
412:デフォルトの名無しさん
07/03/02 23:19:36
画像編集ソフトなどのアンチエイリアスをかけたペンをつくるため
Ellipseの範囲内を(線も)1ピクセルずつ操作したいのですが、
何か良い方法はありませんか?
413:デフォルトの名無しさん
07/03/02 23:41:34
具体的にどのレベルの話をしてるんだい?
「DIBでやるのが普通」って答えを求めてるのか、
それとも「普通にやったんじゃ遅いから高速化する
方策はないか」てな話なのか。
414:デフォルトの名無しさん
07/03/02 23:55:06
>>413
一応読み込んだピクセルビットにXY軸指定すれば
ピクセルを修正できる関数は作ったんですよ。
それをSetDIBitsToDeviceで表示するという感じで。
だからリージョンかラスタオペレーションか何かで
いじればできないかな・・・って
415:デフォルトの名無しさん
07/03/03 00:21:49
>>414
1.グラデーション分のペン作成(単色のペンで)
2.ペンのストロークをサンプリング
3.2のストロークに対し、1のペン描画を反映。グラデーション分のビットマップを作成。
4.グラデーション別に平均化処理し、ORる
だめか?
416:デフォルトの名無しさん
07/03/03 11:04:04
サウンド音量固定の件で質問した者ですが、
おかげ様でできました!
でAPIの質問ではないのですが、
いきがかり上聞かせて頂きます。
まずければ他へ行きます。
ボリューム再設定アプリを実行するタイミングとして
1. Windows起動音が鳴るより前
2. Windows終了音が鳴る前
としたいのですが、うまくできません。
(ボリュームが上がっててビックリする事が多いので(^^;)
スタートアップに登録したら1の場合、
いつも鳴ってる途中で実行されます。
2の場合やりかたがわかりません。
Windows XP HOMEなのですが・・・
417:デフォルトの名無しさん
07/03/03 12:44:50
エクスプローラやIEのアドレスバーの様にReBarにコンボボックス、ボタンを順に配置したいです。
ツールバーにコンボボックス(セパレータの上に配置)を入れてをバンドに入れる方法を見つけたのですが、
このコンボボックスはリサイズできないのでしょうか?
厳密には、セパレータの幅変更になりますけど。
また、目的のアドレスバーをスパイしてみると、ひとつのバンドにコンボボックスとツールバーを入れているようでした。
それを行うメッセージなりAPIがあるんでしょうか。
418:デフォルトの名無しさん
07/03/03 13:01:43
URLリンク(msdn.microsoft.com)
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4994日前に更新/228 KB
担当:undef