Win32API質問箱 Build ..
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)
419:デフォルトの名無しさん
07/03/03 13:05:33
1つのバンドは1つのウィンドウしか占有できないから、
適当な子ウィンドウをバンドに置いて、その子としてコンボボックスなりツールバーなり置けばいい。
420:デフォルトの名無しさん
07/03/03 14:25:52
>>416
うちのPC音でないから起動音のタイミングはわからないけど
サービスにすればスタートアップよりはやい
2は一番安直なのが常駐させてWindows終了時のメッセージ(忘れた
を捕捉する方法かな
サービスにしても常駐になるし
vectorとかに行けば終了時の処理を登録できるものぐらいあると思うからそれ使うのも楽かもね
421:デフォルトの名無しさん
07/03/03 14:57:22
>>416
1・HKLM\Software\Microsoft\Windows\CurrentVersion\Runはどうだい
2・Windowsはシャットダウンする手前に全トップレベルウィンドウに対して
WM_QUERYENDSESSIONを投げるからそれを受け取って処理してみたらどうだい。
ちなみにWM_QUERYENDSESSIONに対してTRUEを返せばシャットダウンを許容、
FALSEを返せばシャットダウンを禁止(シャットダウン自体が中止される)する。
一つでもウィンドウがFALSEを返せばシャットダウンは中断される。
422:デフォルトの名無しさん
07/03/03 17:39:02
終了時に保存等の処理をしたいならWM_QUERYENDSESSIONよりも、
WM_ENDSESSIONだと思うけど。
423:デフォルトの名無しさん
07/03/03 18:26:48
WNDCLASSとWNDCLASSEX
CreateWindowとCreateWidnowEx
どこがどう違うのか教えてください。
424:デフォルトの名無しさん
07/03/03 18:29:02
指定できるのが増えてる
425:デフォルトの名無しさん
07/03/03 19:19:06
なるほど、だからExですか。なんつってww
426:デフォルトの名無しさん
07/03/03 19:50:01
>>423
WNDCLASSEXの方はcbSize,hIconSmメンバが追加されている。
cbSizeが追加されたことにより、
構造体の拡張も視野に入っているかもね。
>>196-198,200-204を参照
あと、hIconSmはスモールアイコンを指す。
メンバはWNDCLASS構造体に重複部分があるから、
RegisterClass関数は内部で、RegisterClassEx関数を呼んでいるかも。
427:デフォルトの名無しさん
07/03/03 20:05:30
GetWriteWatch って、SDK に
Windows NT/2000:対応していません
って書いてありますが、本当は使えるんですか?
428:デフォルトの名無しさん
07/03/03 20:25:23
>>427
1にああ書いてあるとおり、英語版を見てみろ。
URLリンク(msdn2.microsoft.com)
Requirements
Client Requires Windows Vista, Windows XP, Windows Me, or Windows 98.
Server Requires Windows Server "Longhorn" or Windows Server 2003.
429:デフォルトの名無しさん
07/03/03 20:44:21
情報ありがとう。そうか、対応していないんだね。残念だなー。
430:デフォルトの名無しさん
07/03/03 21:30:11
∧∧
ヽ(・ω・)/ ズコー
\(.\ ノ
、ハ,,、  ̄
 ̄
431:デフォルトの名無しさん
07/03/03 22:15:42
>>422
WM_ENDSESSIONだとタイムアウトで強制的に打ち切られるから
保存しようとしているデータの性質によっては怖くて使えない
432:デフォルトの名無しさん
07/03/03 22:16:12
質問です。XP、VS2005 で Win32 アプリを作成しています。
ピクチャコントロールにスクロールバーをつけたのですが、うまく動作しません。
LONG_PTR style;
style = GetWindowLongPtr(hWnd, GWL_STYLE);
SetWindowLongPtr(hWnd, GWL_STYLE, style | WS_VSCROLL | WS_HSCROLL);
SCROLLINFO info;
info.cbSize = sizeof(LPSCROLLINFO);
info.fMask = SIF_RANGE | SIF_PAGE;
info.nMin = 0;
info.nMax = 9;
info.nPage = 3;
SetScrollInfo(hWnd, SB_HORZ, &info, TRUE);
hWnd はピクチャコントロールのハンドルです。
SetScrollInfo は正常に動作し、期待通りのスクロールバーが表示されるのですが、それだけで、
まるで無効になっているかのようにマウスでつかむこともできず、WM_VSCROLL も WM_HSCROLL も来ません。
(Spy++ でも確認しました。)
原因が全くつかめません、何か手がかりはないでしょうか…。
433:デフォルトの名無しさん
07/03/03 22:51:28
>>432
ピクチャコントロールの親でメッセージ受けようとしてないか?
434:デフォルトの名無しさん
07/03/03 22:54:12
>>432
誤:info.cbSize = sizeof(LPSCROLLINFO);
正:info.cbSize = sizeof(SCROLLINFO);
>SetScrollInfo は正常に動作
エラー返してないかい?
435:デフォルトの名無しさん
07/03/03 23:02:12
XPって C:\Documents and Settings\"ユーザ名"
のフォルダ選択して、
右クリック → 共有とセキュリティ → 共有(タブ)
で表示させたウインドウで、
□このフォルダをプライベートにする
のON/OFFができますよね?
このON/OFF操作で行われる処理をコマンドラインで
自動的にやる方法知りませんか?(例えばWIM32APIとか)
cacls.exe だとできないみたいだし、
いろいろ他の方法当たったけど、見つからんです。。
436:デフォルトの名無しさん
07/03/03 23:10:31
>>434
>LPSCROLLINFO
うわぁぁぁぁ
エラー返してましたorz ありがとうございます!
437:デフォルトの名無しさん
07/03/03 23:16:08
>>435
SetNamedSecurityInfo()
438:デフォルトの名無しさん
07/03/04 00:07:51
WindowsMobile向けの関数一覧って無いですかね。使えるのと使えないのとあってよくわからんです。
439:デフォルトの名無しさん
07/03/04 09:15:54
Windowsサービスを登録するAPIってないですか
440:デフォルトの名無しさん
07/03/04 09:20:17
CreateService
441:デフォルトの名無しさん
07/03/04 11:46:18
Win64って特に意識しなくてもアドレス幅が64bitになるの?
intとかvoidとか64bitで、mallocで4GB以上の連続した
領域が確保されるの?
単なる興味本位な質問ですが、良かったら教えて。
442:デフォルトの名無しさん
07/03/04 11:52:46
Win64はLLP64
443:デフォルトの名無しさん
07/03/04 11:56:29
互換性を考えて int は 32bit だったはず
444:デフォルトの名無しさん
07/03/04 12:25:44
Win32 longlong→64bit、long→32bit、int→32bit
だったのが
Win64 long→64bit、int→32bit
になったんじゃなかったっけ?
longlongはどうなったか覚えてないけど
445:デフォルトの名無しさん
07/03/04 12:28:57
>442-444 ありがとう
LLP64でググったらよく分かった
64bit環境でも色々有るんだねUNIX系とクロス開発は大変そう
俺は関係ないけど。
446:デフォルトの名無しさん
07/03/04 12:31:58
>>445
ほんとC言語って移植性ねーな
447:デフォルトの名無しさん
07/03/04 12:32:48
どうして適当なこと言う奴が後を絶たないのか
448:デフォルトの名無しさん
07/03/04 12:39:03
.NETとかjavaみたいに分厚いフレームワークじゃないからなぁ
うっとうしいっちゃ鬱陶しいな
449:デフォルトの名無しさん
07/03/04 21:46:02
>>446
MISRA-C,SECとか見てるけど、
移植性ねーっていうけど、C言語自体はそれほど閉鎖的じゃない。
視野が狭いPGが多いだけであって・・・
450:デフォルトの名無しさん
07/03/04 21:47:19
446のようなバカが多くて困る。
451:446
07/03/04 21:50:43
そろそろカチンときそうです。
452:デフォルトの名無しさん
07/03/04 22:07:37
まったくだ。
色んな環境を熟知していて
頭のいいやつが細かいことにも様々な工夫を凝らせば
C言語は移植性が高いんだよ。
453:デフォルトの名無しさん
07/03/04 22:12:30
ifdefとtypedefの嵐で万事解決です
454:デフォルトの名無しさん
07/03/04 22:16:25
ifndefってなんて読むの?
イフンデフ?
455:デフォルトの名無しさん
07/03/04 22:31:59
タスクマネージャに表示されるような個々のプロセスのCPU使用率や
メモリ使用量を取得したいが、そんな関数あります?
456:デフォルトの名無しさん
07/03/04 22:34:07
はい
457:デフォルトの名無しさん
07/03/04 22:56:05
>449
C言語はそれほど閉鎖的じゃないけど
プログラマーはかなり閉鎖的だね
458:デフォルトの名無しさん
07/03/04 23:25:38
ありがと。Pdh系API使ってやります。
459:デフォルトの名無しさん
07/03/04 23:33:54
というかあらゆる処理系依存に精通していて
常に気を使うなんてやってられないだろ。
ガンガンに処理系やWin32APIに依存しちゃえよ。
460:デフォルトの名無しさん
07/03/05 00:23:19
HANDLEにクラスとかのポインタを結び付けれるAPIはありますか?
HWNDに対してのSetPropみたいなAPIを探してます
461:デフォルトの名無しさん
07/03/05 00:37:59
>>460
ハッシュテーブルにもっとけばいいだろ。
そんなのAPIに頼ることか?
462:デフォルトの名無しさん
07/03/05 00:42:59
>>461
HWNDに対してのSetPropの存在意義を256文字以内で説明せよ
463:デフォルトの名無しさん
07/03/05 00:45:24
>>461
SetProp の存在意義を否定してないか?w
464:デフォルトの名無しさん
07/03/05 00:51:22
いずれにしても残念ながらHANDLEに対するSetPropのようなものは存在しない。
自前で連想配列でも持っておくしかない。
第一HANDLEと言ってもカーネルハンドルからそうでないものまでいろいろあるし。
465:デフォルトの名無しさん
07/03/05 00:52:06
多分無い
どうせハンドルの類の整数値は一意なんだから適当に
mapみたいなデータ構造作っちゃえばいい
466:デフォルトの名無しさん
07/03/05 01:26:41
>>460
ちょっと調べただけなのだがSetTokenInformationがそれっぽい引数の取り方をしてなくもないとおもわれ
467:デフォルトの名無しさん
07/03/05 01:39:41
SetThreadTokenも要チェックや!!
468:デフォルトの名無しさん
07/03/05 02:59:43
ウィンドウのサイズが変更されたとき、決まった縦横比で固定されるようにするには
どうすればよいでしょうか?
469:デフォルトの名無しさん
07/03/05 03:23:18
計算する
470:468
07/03/05 03:28:21
>>469
もちろんそうなんですが、WM_SIZEで変更後のサイズを受け取り、それを基に
SetWindowPosで設定すると、その設定によって再びWM_SIZEが呼び出され続けて
どんどん小さくなる、といった現象が起こります・・・。
471:デフォルトの名無しさん
07/03/05 03:28:31
WM_POSCHANGING
472:デフォルトの名無しさん
07/03/05 03:30:55
>>470
想像して笑ってしまった。面白いことをやってるな
473:デフォルトの名無しさん
07/03/05 03:41:42
そもそも同じ比率になったのにルーチン呼び続けてる仕様が間違ってるんじゃ枚か
474:デフォルトの名無しさん
07/03/05 05:39:32
>>470
朝からちょっとワロタ
475:デフォルトの名無しさん
07/03/05 07:01:18
萌えるウィンドウだな
476:デフォルトの名無しさん
07/03/05 07:02:31
恥ずかしくて段々小さくなるウィンドウ
477:デフォルトの名無しさん
07/03/05 07:08:05
>>470
そっからは自分で頑張れ。
これを自力で解決できんようなら、プログラミングなんて他人にやらせとけ。
478:デフォルトの名無しさん
07/03/05 07:19:26
>>470
クライアント領域のサイズとウィンドウサイズ混同してないか?
あと計算はWM_GETMINMAXINFOとかWM_SIZINGでやれ
479:468
07/03/05 11:23:46
できました!
ありがとうございました!
480:デフォルトの名無しさん
07/03/05 11:44:48
そういう微笑ましいバグってなんだか面白い。
481:デフォルトの名無しさん
07/03/05 17:05:40
タスクバー上で動く時計を作っていたのですが、
case WM_TIMER :
GetLocalTime(&st);
wsprintf(str,TEXT("%d時%d分%d秒"),st.wHour,st.wMinute,st.wSecond);
SetWindowText(hWnd,str);
これだとちゃんと動くのですが、
case WM_TIMER :
GetLocalTime(&st);
wsprintf(str,TEXT("%d時%d分%d秒"),st.wHour,st.wMinute,st.wSecond);
InvalidateRect(hWnd,NULL,TRUE);
return 0;
WM_PAINT :
・・・
SetWindowText(hWnd,str);
こうWM_PAINTの方で他の文字表示処理と一緒に出力しようと思ったら、
最小化した時、あるいはCreateWindowでウィンドウを画面外に作成した時
などにちゃんとタスクバー上で動作しないのですがなぜでしょうか?
482:デフォルトの名無しさん
07/03/05 17:07:30
最小化したり画面の外へ追いやったりしたら、
ウィンドウの中を描画する必要が無いからWM_PAINTは呼ばれない。
483:デフォルトの名無しさん
07/03/05 17:11:36
>>482
即レスありがとうございます!><
てっきり描画の必要が無くても自分でInvalidateRectで送れば呼ばれるのかと思ってましたorz
484:デフォルトの名無しさん
07/03/05 17:15:10
拡張スタイルの WS_EX_LEFTSCROLLBAR についての質問です
同スタイルが動作する環境かを知りたいのです。MSDNで同スタイルは
「ヘブライ語やアラビア語などの読みの方向をサポートしている言語をシェル言語としているシステムで有効です。他の言語では、このスタイルは無視されます。」
と書かれていました
私の環境では同スタイルを定義すると動作するので
GetSystemMetrics関数でSM_MIDEASTENABLEDの引数を指定し戻り値がTRUEになると思っていたのですがFALSEでした
このことからヘブライ語やアラビア語をサポートしているシステムかどうかが取得出来ないので動作する環境かが判断出来ません
又、「他の言語では、このスタイルは無視されます」と書かれているので
動作不可環境では拡張スタイルに定義されていても動作しないようになっているのでしょうか
それとも拡張スタイルから同スタイルが削除されるのでしょうか
後者ならば拡張スタイルの同スタイルの有無を確認したらいいだけなのでサポート云々の話ではなくて簡単なのですが
私の環境では同スタイルが動作しているので確認も取れません
誰か詳しい方宜しくお願いします
485:デフォルトの名無しさん
07/03/05 17:32:58
メモ帳で、
ユダヤに対する冒涜かアラーに対する冒涜を記述して、
OSが再起動したら対応している。
486:デフォルトの名無しさん
07/03/05 19:01:25
ExtractIconExとDestroyIconについて教えてください。
以下のコードを実行し、大体4800回程アイコンハンドルの取得と解放を
繰り返すと、ExtractIconExが失敗するようになってしまいます。
解放の仕方を間違えているのでしょうか。
Dim lngCount As Long
Dim lngIconHandle(0) As Long
Dim lngRet As Long
Do While True
lngRet = ExtractIconEx(App.Path & "\test.ico", 0, 0, lngIconHandle(0), 1)
If lngRet <> 1 Then
Stop
End If
lngRet = DestroyIcon(lngIconHandle(0))
If lngRet = 0 Then
Stop
End If
lngCount = lngCount + 1
Loop
487:デフォルトの名無しさん
07/03/05 19:35:01
>>486
ngRet = ExtractIconEx(App.Path & "\test.ico", 0, 0, lngIconHandle(0), 1)
を
ngRet = ExtractIconEx(App.Path & "\test.ico", 0, 0, lngIconHandle(0), 0)
にしたら
488:486
07/03/05 19:53:36
>>487
4800くらいで失敗してしまいます。
ちなみに、アイコンを一個取り出すから
最後の引数に1と書いていたのですが、
0にしてみても普通にアイコンハンドルが取得できました。
ここを0とするとどうなるのでしょうか?
489:デフォルトの名無しさん
07/03/05 20:07:19
0でなく1で正しい。第三引数を0にしてるのが悪いんでないか
Dim lngCount As Long
Dim lngIconHandle(1) As Long
Dim lngRet As Long
Do While True
lngRet = ExtractIconEx(App.Path & "\test.ico", 0, lngIconHandle(1), lngIconHandle(0), 1)
If lngRet <> 1 Then
Stop
End If
lngRet = DestroyIcon(lngIconHandle(0))
If lngRet = 0 Then
Stop
End If
lngRet = DestroyIcon(lngIconHandle(1))
If lngRet = 0 Then
Stop
End If
lngCount = lngCount + 1
Loop
490:デフォルトの名無しさん
07/03/05 20:09:39
ExtractIconEx の宣言と DestroyIcon の宣言はどーなってるん?
# DestroyIconの引数が byRef になってて、iconハンドルへのポインタ渡してるんじゃねーの?
491:デフォルトの名無しさん
07/03/05 20:14:23
それなら最初のDestoyIconでエラーになるんじゃね?
492:デフォルトの名無しさん
07/03/05 20:16:48
シングルスレッドのGUIアプリでGetOpenFileName()を呼び出したところ、
ダイアログの処理用と思われるスレッドが幾つか生成されました。
OpenFileのダイアログを閉じてメインウィンドウに戻ったあと、
メインウィンドウの×を押してWM_DESTROYを発生させ、
WindowProcのWM_DESTROYでPostQuitMessage(0)を呼びました。
メッセージループは正常に終了し、
自動的にExitThreadが呼ばれてスレッドが終了したところまではデバッガで確認できました。
しかし、ダイアログの処理用と思われるスレッドが残っています。
残ってしまう原因にお心当たりある方はいらっしゃいませんか。
493:486
07/03/05 20:17:03
>>489
失敗します。
ExtractIconExの戻り値が0になってしまいます。
GetLastErrorの結果も0でした。
>>490
↓の様になっております。
アイコンハンドルの部分は、ExtractIconExの方はByRef、
DestroyIconの方はByValです。
' アイコンハンドルを取得
Private Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" _
(ByVal lpszFile As String, _
ByVal nIconIndex As Long, _
ByRef phiconLarge As Long, _
ByRef phiconSmall As Long, _
ByVal nIcons As Long) As Long
' アイコンハンドルを破棄
Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long
ちなみにCで書いてみたら問題なく動いているのでマシンのせいではなさそうです。
494:デフォルトの名無しさん
07/03/05 21:24:59
>>492
複数回GetOpenFileNameを呼ぶと、
同じスレッドで処理されているのかな?
流用利用って事で
(前回開いたパス情報等の保持として・・)
・・・内部でCOMを呼んでたりして。
495:デフォルトの名無しさん
07/03/05 21:45:56
>>492
たぶん正常な動作 ms謹製のnotepadでもスレッドが残る
496:デフォルトの名無しさん
07/03/05 21:51:31
>>495
初めて知った。すごい仕様だな…
497:デフォルトの名無しさん
07/03/05 21:58:40
>>494-496
ありがとうございました。
素敵すぎる仕様のようで、諦めて従います・・・・・・
498:494
07/03/05 22:10:03
今、メモ帳アタッチしてみたけど、
スレッドは流用してないみたいだなぁ。
499:デフォルトの名無しさん
07/03/05 22:29:32
>>493
>ByRef phiconLarge As Long, _
なのに
>lngRet = ExtractIconEx(App.Path & "\test.ico", 0, 0, lngIconHandle(0), 1)
と呼び出してるが、
(BASIC? の仕様次第だけど)リテラルに対する参照渡しはどうなんだろ?
→参照されてる
→一時オブジェクトを作り値代入し、その一時オブジェクトへのポインタを渡す
という動作なら、ラージicon のハンドルが漏れてる
500:デフォルトの名無しさん
07/03/05 22:46:27
>>486
失敗したとき、GetLastError()の値は?
501:500
07/03/05 22:49:14
>>499
ByRef phiconLarge As Long
↓
phiconLarge As Any
んで、ExtractIconEx(App.Path & "\test.ico", 0, byval 0, lngIconHandle(0), 1)
だっけ?VBは?
502:499
07/03/05 22:54:42
>>501
VBにはヌルポ用に vbNull っつーのが存在してる記憶があるが、
そいつの呼び出し側が ByRef 用なのかどうか記憶あいまい。
As Any で 呼び出し時に byval 0 のような明示記法は初見
# っつーても俺は VB 素人に近いのでわからにゃいw
503:デフォルトの名無しさん
07/03/05 23:00:39
>>495
APIの質問ではなくスレ違いで申し訳ないんですが、お教えください。
残っているスレッドをどのようにして知ることができるのでしょうか?
現在、以下のようなトラブルで悩んでおります。
発生条件がまだ絞り込めてないのですが、Vistaでexplorerからディレクトリを削除するときに
「他のプロセスで使用中のため削除できません」(みたいな意味の)エラーで削除できない場合が
あります。そのディレクトリは自分のプログラムでOpenFileDialogでファイルを開いたディレクトリ
なのですが、タスクマネージャのプロセスタブで見る限りプログラムは終了しています。
スレッドだけが(問題のディレクトリをカレントにして)いつまでも残っているなんてことがあるのか
疑問なんですが、残っているスレッドが確認できればこれが確認できるかと。
よろしくお願いいたします。
504:デフォルトの名無しさん
07/03/05 23:04:26
>>499 の心配は>>489 で払拭されてると思われ
>>501
As AnyだとRefかValかを関数引渡し時にByValを指定すればポインタか値かを決められる。ByVal 0& でヌルポインタとなるはず
505:デフォルトの名無しさん
07/03/05 23:10:31
>>503
API的な回答じゃなくていいのならProcessExplorerでさっくり見れる
>スレッド
vistaは判らないけど、それ以前のOSのことを考えれば
スレッドは所詮プロセスの枠の中の存在だから独立することはない
506:500
07/03/05 23:14:34
>>502
vbNullはVT_NULLで、tagVARIANT型メンバのVARTYPE値ですな。
(vbNullをキャストすると1になる)
SQL等で対応するキャラみたい。
んで、VB側でByRef書いてると、VARTYPE値のVT_BYTEREFが
ORでたっちゃうんかと。
>>As Any で 呼び出し時に byval 0 のような明示記法は初見
CopyMemoryでそれしてるサンプル見たことがあったので・・・
CでDLL作って、Declare評価しねーかなー
507:503
07/03/05 23:14:36
>>505
ありがとうございます。
>スレッドは所詮プロセスの枠の中の存在だから独立することはない
のはずですよね・・・・・・・
508:デフォルトの名無しさん
07/03/05 23:20:13
>>507
UnLockerで、捕まえてるプロセス名を調べてみ?
URLリンク(ccollomb.free.fr)
509:デフォルトの名無しさん
07/03/05 23:23:07
>>503
OpenFileDialogでファイル名を取ってきたあと、
何もしない場合でもその症状?
それとも、特定の処理(ファイル読み込みなど)後で、
その症状?
切り離して考えてみ?
510:486
07/03/05 23:30:37
>>499-501
解決しました。
どうもありがとうございました。
ラージアイコンの方は、MSDNに「必要ない場合、NULL を指定します。 」と
あったので単純に0としていましたが、仰るとおりだったようです。
VarPtr(0)は0ではないため、どこかに漏れてたようです。
>>501の方法でうまく動きました。また、
ByRef phiconLarge As Long
↓
ByVal phiconLarge As Long
として
ExtractIconEx(App.Path & "\test.ico", 0, 0, lngIconHandle(0), 1)
でもうまく動きました。
どうもありがとうございました。
511:デフォルトの名無しさん
07/03/05 23:33:55
>>510
おめ
512:503
07/03/05 23:37:33
>>508 >>509
コメントありがとうございます。
現在自宅のため、確認は明日以降になります。
513:デフォルトの名無しさん
07/03/06 00:54:29
CNNのアンケートでチョンの反撃が始まって、日本謝罪すべしの票が増えてきてます。
投票まだの方はよろしくお願いします。
それと、このレスをそこらへんのスレにコピペして下さると助かります。
あわせてお願い申し上げます。
URLリンク(edition.cnn.com)
QUICK VOTE
Should Japan apologize again for its World War II military brothels?
(日本は、第二次世界大戦時に軍が運営した売春宿の件で再び謝罪するべきですか。)
もちろん No
514:デフォルトの名無しさん
07/03/06 01:36:24
すみません、HANDLEと64bit OSの関係で質問させてください。
HANDLEでCreateEvent()の返戻値を格納しているソースを見ていたのですが、関数の受け渡しの途中でHANDLE32に型が変わっていることに気付きました。
これ、Vista 64bit環境でも無事に動くんでしょうか?
・Vista 64bitでHANDLE32とHANDLEのサイズは同じかどうか
・64bit環境ではHANDLE→HANDLE32への受け渡しは32bitぶん消えてしまう?
という点、どなたかご存じないでしょうか?実際には動いているっぽいのですが、いまいち確証がないのです。
(XPとVistaの64bit環境で同じかどうかも不明です・・・)
515:デフォルトの名無しさん
07/03/06 01:42:17
32bitアプリとして動かすならたぶん問題ない
WoWとかいうのが全部面倒みてくれる
516:デフォルトの名無しさん
07/03/06 01:58:53
>>515
ありがとうございます。WoWでうまくエミュレートしてくれるんですね。
逆に言うと、64bitアプリ(見ていたのはdllでした)として動いているのであれば、問題が発生しそうだといえますね。
517:デフォルトの名無しさん
07/03/06 03:58:06
上のほうにMFCを利用したフルスクリーン描画方法がありますが、MFCは使わず、
Win32apiだけでフルスクリーン(クライアント領域をディスプレイ全体にする?)には
どうすればよいでしょうか?
518:デフォルトの名無しさん
07/03/06 04:58:49
>>517
>>176、>>189を参考に見たまんまだけど
void ChangeFullscreen(HWND hWnd) {
RECT rect;
GetWindowRect(GetDesktopWindow(), &rect);
SetWindowLong(hWnd, GWL_STYLE, WS_POPUP|WS_VISIBLE);
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, rect.right-rect.left, rect.bottom-rect.top, SWP_SHOWWINDOW);
}
519:517
07/03/06 05:20:38
>>518
うおー!
ありがとうございます!
GetDesktopWindow() が肝ですね!
520:デフォルトの名無しさん
07/03/06 07:42:09
個人的には、MonitorFromWindow->GetMonitorInfoを推奨したい。
521:デフォルトの名無しさん
07/03/06 10:24:54
>>520
だね。メインディスプレイでしかフルスクリーンにできないアプリって嫌い。
522:デフォルトの名無しさん
07/03/06 10:52:26
2台もモニター買う金も置くスペースもねーんだよバーカバーカ
523:デフォルトの名無しさん
07/03/06 11:05:28
モニタ4台でマルモニしてますが何か?
524:デフォルトの名無しさん
07/03/06 11:09:44
>>522
高望みしなけりゃどうにかなるもんだぞ。
525:デフォルトの名無しさん
07/03/06 11:14:48
マルチモニターとか利点がわからない
526:デフォルトの名無しさん
07/03/06 11:33:32
>>525
フルスクリーンアプリケーションのデバグには良いと思うけど、私には使い道がない。
527:デフォルトの名無しさん
07/03/06 11:39:49
片側にアップスキャンコンバーターとビデオ繋いでテレビ見ながらいろいろ出来る
528:デフォルトの名無しさん
07/03/06 12:05:34
>>525-526
作業机の面積が広いに越したことはないだろ?
マルチディスプレイもそんな感じ。
マルチディスプレイは便利になるっていうよりは快適になるって感じ。
529:デフォルトの名無しさん
07/03/06 12:16:17
>>492
初期化時にCoInitialize()、終了時にCoUninitialize() 呼んでみたらどうかな?
どうもGetOpenFileName()がCOMを使っているらしいぞ。
530:デフォルトの名無しさん
07/03/06 13:08:26
529
場所誤ると、ハングらないか?
531:517
07/03/06 13:57:10
フルスクリーンにする前のウィンドウの位置と大きさを控えておき、フルスクリーンからその
サイズにSetWindowPosで直すと、クライアント領域だけのウィンドウになってしまい
にっちもさっちもいかなくなってしまいます・・・。
どうすれば通常のウィンドウに復帰できるでしょうか?
>>520
参考にします。
532:デフォルトの名無しさん
07/03/06 14:00:33
>>531
>>518のコードが何やってるか考えればわかるだろ
533:517
07/03/06 14:13:46
>>532
失礼しましたm(_ _)m
534:デフォルトの名無しさん
07/03/06 15:24:50
Windows Media Player 10
を使っているのですが、
10用のSDKってもう無くなってるみたいなんですが、
9用のSDKでも大丈夫でしょうか?
11用は落とせるようにはなっていないみたいですが・・・
535:デフォルトの名無しさん
07/03/06 15:31:00
COMはSTAのときCoInitializeで初期化したスレッドでメッセージをディスパッチしてやらないとハングするんだっけ
536:デフォルトの名無しさん
07/03/06 15:51:11
とあるスレッドでGetMessageしたメッセージを、他のスレッドで Dispatch するのはCOMに限らずダメ。
537:デフォルトの名無しさん
07/03/06 17:06:17
>>415
亀レスすみません。ありがとうございます。
贅沢言ってすみません。
538:503
07/03/06 17:24:28
>>505 >>508 >>509
おかげさまで原因が特定できました。>>509の書かれたとおりOpenFileDialog
が原因ではなく、その後の処理に起因するものでした。
結論だけ書くと・・・
消せないディレクトリをカレントにしてconime.exeが動きっぱなしになっているようです。
詳細に書くと・・・・
今回問題となっているプログラム(Prog1.exeとする)は、OpenFileDialogでユ
ーザーが指定したファイルを処理するために、指定したファイルのあるディレ
クトリをカレントにしてProg2.exeをCreateProcessします。Prog2.exeはコン
ソールプログラム(SW_HIDEでDOS窓は表示されず、STARTF_USESTDHANDLESで出
力をパイプ経由でProg1が受け取るのでユーザーに目には触れない)のため、こ
れが起動されたとき、conime.exeが(まだ起動してなければ)起動されます。そ
して、Prog2.exe/Prog1.exe終了後もconime.exeは終了せずに残り、以降に起
動されたコンソールプログラムで使いまわされるようです。
つまり、
(1) ログイン後初めて実行されるコンソールプログラムを親としてconime.exeが起動する。
(2) (1)の親プログラム終了後もconime.exeは終了しない。
(3) 2つめ以降のコンソールプログラムはこのcomime.exeを使用する。
という動作をし、これはXPでもVistaでも同じようです。
Vistaだけで問題が起きたのは、
XP:conime.exeは親に関係なくC:\Windows\System32をカレントにして起動される
Vista:comime.exeは(1)の親のカレントをカレントとして起動され、その後移動しない
の違いがあるためです。
Vista環境でProg1->Prog2が最初のコンソールプログラムの場合、ユーザーの
指定したファイルのディレクトリにconimeが居座るためこのディレクトリが削
除できなくなっているわけです。
「Vistaの問題だ!」と言いたいところだが、さてどう対策したものか・・・・・・
Prog1起動時に、C:\でもカレントにしてダミーのコンソールプログラムを動かしとくかなあ(涙)
539:デフォルトの名無しさん
07/03/06 17:42:11
>>538
私見だけど;
GUIアプリではカレントディレクトリを常に当たり障りのないトコに設定しとくべき。
OpenFileDialog 等、カレントディレクトリが移動されそうな処理の後には再設定も行う。
これを怠ると「なぜこのフォルダが消せない!」ということが頻発するから。
540:503
07/03/06 18:01:19
>>539
コメントありがとうございます。
Prog2がコンソール(CUI)アプリといところが味噌でして・・・・
(これを書くと関係者が見てたら身元がバレそうだが)
実は上記のProg2は(組み込みマイコン用のクロス)コンパイラであり、処理するファイルは
ソースファイルなんです。
#include 等を適切に処理するために、カレントをそれなりの場所にして起動する必要があります。
541:デフォルトの名無しさん
07/03/06 18:24:15
なるほど。
ダミーで cmd /c exitとか動かしておくしか手が無さそうですね。
KBの↓なんかもひどい解決方法・・・
URLリンク(support.microsoft.com)
542:503
07/03/06 18:33:45
>>541
>URLリンク(support.microsoft.com)
思わず爆笑。
543:デフォルトの名無しさん
07/03/06 18:59:41
なんだかよくわからないけど
Prog2のカレントディレクトリをC:\とかにして起動して
起動後にカレントディレクトリ変えるんじゃだめなのか?
全然見当違いなこと言ってたらすまん
544:デフォルトの名無しさん
07/03/06 19:03:00
なるほど。
バッチファイルを挟むという手はあるな。
・・・俺は馬鹿か
545:デフォルトの名無しさん
07/03/06 19:20:27
試してないけど、conime.exeを先に起動しとくとかは?
546:デフォルトの名無しさん
07/03/06 19:46:01
それが541の解決法
547:デフォルトの名無しさん
07/03/06 19:51:42
>>540
CreateProcessって子プロセスのカレントディレクトリをパラメータで指定できたから
親のカレントディレクトリを移動する必要はないんじゃない?
>>545
それが>>541
548:デフォルトの名無しさん
07/03/06 20:01:24 BE:124224588-2BP(222)
>>545
それが
>URLリンク(support.microsoft.com)
だろ。
日本語版見たらもっとひでーw
URLリンク(support.microsoft.com)
549:デフォルトの名無しさん
07/03/06 20:10:34
>>503
CreateProcessでProg2を起動しているんだったら
CREATE_NO_WINDOWフラグを入れるのは?
あとは、終了時にWM_CLOSEをconime.exeに投げたり
conime.exeをkillする手もある。
550:503
07/03/06 20:45:07
>>543-549
コメントありがとうございます。
(直接APIの事でないのに、こんなに盛り上がっていいのか・・・・)
Prog2は他社製のため手を入れられませんが、>>544の書かれているように
間にバッチなりコンソールアプリなりを挟んでそこでC:\→目的のディレクトリ
を行うのはいい方法ですね。
>>538の最後に書いたのも、>>541も>>544もconime.exeを予め問題の無いディレクトリで
起動しとくという点では同じ考えで、あとはどれが一番美しいかですね。検討してみます。
>>547
CreateProcessでの子プロセスのカレント指定は既に使用しています。
(conime.exeが影響されるのは子プロセスのカレント)
親のカレントもファイルを選択した時点で同じディレクトリに移動させていますが、
逆に親が動いている間はそのディレクトリを消されたくないので、(消極的な方法ではあり
ますが)そのようにしています。
>>548
>URLリンク(support.microsoft.com)
もっと大爆笑!
>>549
>CREATE_NO_WINDOWフラグを入れるのは?
で、conime.exeが起動されなければ一番よさそうですね。試してみます。
>あとは、終了時にWM_CLOSEをconime.exeに投げたり
>conime.exeをkillする手もある。
実際にProcessExplorerからconime.exeをKillしてみると(当然のことながら)ディレクトリ
を削除できるようになりました。ただ前にも書いたように一つのconime.exeが全ての
コンソールアプリで使いまわされているようなので、この時に他のコンソールアプリが
動いている可能性を考えると、この手は使えません。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4987日前に更新/228 KB
担当:undef