Win32API質問箱 Build ..
[2ch|▼Menu]
685:デフォルトの名無しさん
07/06/04 18:42:17
もちろんそこでスプラッシュを出すにしても、
やるべきことは、それ以前に終わらせておけよ

686:682
07/06/04 19:13:32
事故レス。
LogonUI.exeが存在しているかを判定することで一応解決。
正確にはスプラッシュではなく、飾りとかじゃなくて表示が必須というものだった次第。

>>684
基本的にそういうものの起動が裏で行われている状態なのでそっちの監視だと不可。


687:デフォルトの名無しさん
07/06/04 19:35:01
あほだなあ
ウィンドウが可視状態かみてればいいのに

688:デフォルトの名無しさん
07/06/04 19:49:30
>>687
686じゃないが、あの状態ってウィンドウステーションかデスクトップも別物になってないか?
列挙かけてみたことあるけどどうも検索不可属性が付いてるのが出てこなかったが・・・

ということでWindowFromPointとかIsWindowVisibleからの切り込みはダメっぽいよ


689:688
07/06/04 19:51:00
×付いてるのが
○付いてるのか

ちなみにOpenInputDesktopでも普通にwinsta0\defaultになってた。

690:668
07/06/04 20:52:02
わふ。とりあえずソース貼ってなかったのがダメすぎたっぽいので貼ります。すみません。
URLリンク(s-io.net)
pass: API

Warningは読んでいますし、提示してくださったリンクは(ありがとうございます)既に全て目を通していましたし、
目も尻にはついていません。
#節穴かもしれませんし、脳みそはスポンジかもしれませんが……

トラブルの内容としては>>678と一緒だとは思うのですが、最新のDirectXのstrsafeで発生する(PlatformSDKでは発生しない)ことから、
PlatformSDKのバージョンを上げる、というのも解決策にはならないみたいです。

#Warningの詳細やらソースコードやら貼らずに分かりにくい説明していて本当に申し訳ないです。でも、DirectXのstrsafeでコンパイルせずに、warningなんて出ないじゃないかボケ、というのは勘弁してください。


691:デフォルトの名無しさん
07/06/04 23:27:41
WebサーバからSSL証明書をダウンロードして検証したいと思います。

(1)WebサーバからSSL証明書をダウンロードする
(2)それを検証する

といったようなAPIは無いでしょうか?

692:デフォルトの名無しさん
07/06/04 23:28:40
ありません

693:デフォルトの名無しさん
07/06/04 23:39:16
CryptoAPIがとっても面倒だった記憶があるけど。

694:デフォルトの名無しさん
07/06/04 23:42:09
>>690
だから、673,675が書いてくれた事が正解なんだって。
strsafeってのが何の役割を果たすかを理解しる。

どーせ/GS入れてるんだろw。


695:デフォルトの名無しさん
07/06/05 00:11:04
Visual C++ 2005は、CRT関数のセキュリティ強化版を“<strsafe.h>とは無関係に”用意している。
(これは次期Cへの提案されている事項でもあるが今はどうでもいい)
このセキュリティ強化版の関数は、基の関数名に_sを付けた名前になっている。
例: scanf→scanf_s

_CRT_SECURE_NO_WARNINGSを定義していない状態で、従来の関数を使うとC4996になる。
(ただし、C4996自体は、<strsafe.h>などこれ以外でも使われている汎用的な警告)

<strsafe.h>とCRTセキュリティ強化、はたまたそれ以外の手段の中からどれを使うかはお前が決めること。
利点欠点を好きに考えて選べ。

696:デフォルトの名無しさん
07/06/05 01:36:39
じゃstd::stringという事で

697:デフォルトの名無しさん
07/06/05 01:55:52
速度でないじゃん

698:デフォルトの名無しさん
07/06/05 01:57:23
文字列操作はコストが高いんだから、速度が欲しけりゃ自前でやるんだな。

699:668
07/06/05 02:06:53
うー。了解です。この構成でWarning消すとか、無駄なところに労力注ぐの止めて、別の構成にすることにします。
アドバイスをくれた皆様、どうもありがとうございました。
#学習が第一義なので、とりあえずこれでこの問題はオシマイですけれど……

>>696-697
……一応std::string版のコードも書いちゃったのですけれどね。


700:デフォルトの名無しさん
07/06/05 07:53:33
jpegのファイルサイズを先頭500バイトあたりで知ることは
できますか?

701:デフォルトの名無しさん
07/06/05 07:58:13
ファイルサイズなら GetFileSize なりなんなりで。

702:デフォルトの名無しさん
07/06/05 08:00:29
失礼しました。ファイルサイズじゃなくて、ストリームで呼んでいるときの
jpegのサイズです。

703:デフォルトの名無しさん
07/06/05 08:03:45
JPEG フォーマット
URLリンク(siisise.net)

704:デフォルトの名無しさん
07/06/05 08:07:38
JPEGフォーマットの詳細を聞いているのではなく、先頭500バイト
あたりまでよんで、サイズを確定可能かが知りたいです。

705:デフォルトの名無しさん
07/06/05 08:13:56
フォーマットの詳細を見て自分のやりたいことが出来るか判断しろよ。

706:デフォルトの名無しさん
07/06/05 08:42:42
わからない人、答えたくない人は黙ってくれてればいいです。

707:デフォルトの名無しさん
07/06/05 09:36:14
無理だよ

708:デフォルトの名無しさん
07/06/05 09:46:48
そもそもWinAPIと無関係。

709:デフォルトの名無しさん
07/06/05 09:53:54
>>704
正直に言えよ、そのリンク先では難しすぎて自分ではわかりませんでした、と

710:デフォルトの名無しさん
07/06/05 10:40:45
>>704
結論:不可能
理由:可変長レコード(500バイト以上もおk)があるため

711:デフォルトの名無しさん
07/06/05 10:42:58
>>704 釣り乙

712:デフォルトの名無しさん
07/06/05 10:48:28
>>704
結論:不可能
理由:あなたは、まだ、その域に達していない

713:デフォルトの名無しさん
07/06/05 10:57:49
だな、たとえ可能でもお前には無理

714:デフォルトの名無しさん
07/06/05 11:03:34
起動中のIEのスクロールバーの情報(最大値や最小値、現在の位置)をWin32APIで取得する方法ってありませんか。
GetScrollPosやGetScrollRangeで取得できないようなので、それ以外の方法で取得する方法はあるのでしょうか。

715:デフォルトの名無しさん
07/06/05 11:14:19
>>714
取得出来ないようなのでってお前・・・。出来るよ普通に。

716:デフォルトの名無しさん
07/06/05 11:17:33
>>702
ストリームで何を呼んでるの?
jpegをハンドリングする関数か何か?
だとしたら、そいつがサイズを知っているんじゃないの?

717:デフォルトの名無しさん
07/06/05 11:18:42
>>710>>711
不可能じゃないっしょ。jpegデータが500バイト以下なら。


718:714
07/06/05 11:19:46
>>715
マジデスカ。
IEのHWNDとSB_VERTをGetScrollPosに渡せば取得できるということですよね?

719:デフォルトの名無しさん
07/06/05 11:22:19
>>718
お前の脳味噌には親ウインドウとか子ウインドウとかの概念はないのか?

720:デフォルトの名無しさん
07/06/05 11:26:47
次は子ウィンドウのハンドルの取得方法でも聞いてくるかな

721:714
07/06/05 11:26:54
>>719
InternetExplorer_ServerクラスのHWNDを指定してGetScrollPosを呼び出しても取得できないのですが、指定先が間違っていますかね?

722:デフォルトの名無しさん
07/06/05 11:31:27
>>721
お前は人の話を聞いているふりだけして、実際は何も聞かないタイプだろ。

723:714
07/06/05 11:34:16
>>722
えぇ。確かにそういう人間かもしれません。

724:デフォルトの名無しさん
07/06/05 11:57:22
>>722
そういう人間、俺の周りにもわんさか要るわww

725:デフォルトの名無しさん
07/06/05 11:59:06
自分のことかな?と最近気づいた

726:デフォルトの名無しさん
07/06/05 12:01:34
居るわ

727:デフォルトの名無しさん
07/06/05 12:22:39
>>717
マーカーを読みつつパースしながら、運良く APP0 が捕まれば確定&読み込み終了
読み込みバイト数が 500 を超えたら未確定終了
こうするしかないよねぇ

728:デフォルトの名無しさん
07/06/05 12:30:08
一応書いてやってみるが
IEブラウザコントロールのスクロールバーはウィンドウ本体の付属オブジェクトじゃなくて子ウィンドウなんだな?

729:デフォルトの名無しさん
07/06/05 12:37:32
IEのバージョンは?

730:714
07/06/05 12:50:13
>>728
ありがとうございます。
私は子ウインドウだと認識しています。

>>729
IE6です。

COMを使えば比較的簡単に実現可能なのですが、事情により今回はCOMなしで実現したいと思っています。

731:デフォルトの名無しさん
07/06/05 12:55:10
DeviceCapabilitiesで特定のプリンタ名を渡したときだけ動作をしないような。。。

ネットワークプリンタで「マシン名\プリンタ共有名」の場合は動くのだが、
「自動 プリンタ名(マシン名 上)」というプリンタ名を渡したときは動作をしない。

名前がおかしいのかなぁ。。。

732:デフォルトの名無しさん
07/06/05 15:09:48
>>731
kwsk

733:デフォルトの名無しさん
07/06/05 16:06:23
DVD-RAMからタスクトレイに常駐するアプリを起動。
DVD-RAMを取り出す。
XPを終了。

DVD-RAM入れろって出るんですけど、起動元のEXEファイルが無くても、
何も出さずにXPを終了させる方法ってありますか?

734:デフォルトの名無しさん
07/06/05 16:08:08
>>733
ファイルコピー

735:デフォルトの名無しさん
07/06/05 16:35:50
リンカオプションで「メディア抜いても起動を続けられるようにする」ってのはあるけど、
どっちみちWindows再起動されたらだめぽ

736:733
07/06/05 16:54:21
>>734
ファイルコピーしないでやりたいのですけど。

>>735
そんなのあるんですか。 再起動時はEXEは起動してなくて構わないので。
それで出来そうです。 ありがとうございました。
ちょっと733は判りにくくて申し訳なかったです。
「XPを終了させようとすると、DVD-RAMを入れろって出ますです。」

737:デフォルトの名無しさん
07/06/05 17:01:28
/SWAPRUN:CD か。

738:デフォルトの名無しさん
07/06/05 21:07:00
なんか1文字入力するたびに、SendMessageBox(hEdit, EM_LINEINDEX, 2, 0);で、3行目の
インデックスを表示させているのですが、2回に1回"-1"が返ってきます。
20→-1→22→-1→23→・・・
3行目以降に文字を入力した場合は
23→-1→23→-1→23→・・・
のように動作します。-1は3行目がない場合に返す値だと思うのですが、
それ以外の場合でも-1を返すような事はありえるのでしょうか?

739:デフォルトの名無しさん
07/06/05 21:23:41
2回に1回は確実にそういう順番ではなく、大体の割合です。-1が2回続けて返ることもあれば、
通常の値が2回続けて、返ることもあります。ただ、ゆっくりと入力すれば必ず-1と正常な値が交互に返ってきます。
一体何が起きているのかさっぱり分かりません。助けてくだしあ・・・

740:デフォルトの名無しさん
07/06/05 21:32:48
ちなみに今調べてみたところ、どうやらhEditというコントロールにおいてだけこのような現象が起きています。
hEditは、あるエディットコントロールに文字が入力された場合、そのエディットコントロールの文字を表示するといった動作をします。
表示はGetWindowTextとSetWindowTextで行われます。もしかしたらSetWindowTextで再描画する瞬間に
EM_LINEINDEXで行数を調べてるから-1が返って来てるのかな?とか思って排他制御したのですが、やはり-1が返ってきます。
というか、デッドロックも起きたり起きなかったり。

741:デフォルトの名無しさん
07/06/05 21:34:02
ひとつのファイルを、二つのプロセスからMoveFile()で、名前を変更しようとします。

プロセスA -> MoveFile("hoge", "XXX")
プロセスB -> MoveFile("hoge", "YYY")

当然片方のプロセスは失敗すると思ったのだけど、両方リターン値が成功で帰ってくるときがあります。
(リターン値が成功で帰ってくるけど、実際は片方は失敗してる)

二つのプロセスで、ひとつのファイルを取り合うのにこういう方法って、使えないんですかね?
それとも、コードの書き方がどこかおかしいとか。



742:デフォルトの名無しさん
07/06/05 21:45:30
質問です。あるエディットコントロール内で例えば、"aaaaaaaaaaaあああああああああ"と入力します。
すると、ある程度の長さになると"a"と"あ"の間で改行されます(実際は\nは入っていなくて、表示上改行されてるだけ)。
これは仕様なのでしょうか?このように勝手に改行されないようにするにはどうすればいいのでしょうか?

743:デフォルトの名無しさん
07/06/05 21:48:36
WM_なんとか

744:デフォルトの名無しさん
07/06/05 21:52:16
>>742
英単語の途中で改行されないようになっている。
EM_SETWORDBREAKPROCでコールバック関数を登録すれば
自分で好きなように変更可能。

745:デフォルトの名無しさん
07/06/05 22:16:10
>>741
プロセスAのMoveFileが完了する前に、
プロセスBのMoveFileが走るんでしょ?

Mutexを使って管理すればいいんじゃない?

746:デフォルトの名無しさん
07/06/05 22:17:37
>>738-740
ソースあげ

747:デフォルトの名無しさん
07/06/05 22:18:11
>>744
ありがとうございます。とりあえずエディットコントロールは複数あるのですが、
そのうちの一つは自動で改行されないようになりました。全てのエディットコントロールで
自動改行をされないようにするには、全てのエディットコントロールをサブクラス化して
WM_CHARを捕まえないといけないのでしょうか?

748:デフォルトの名無しさん
07/06/05 22:19:17
>>746
1500行くらいあるので要点を簡略化してUPします。
その作業をするのでもう少し待ってください。

749:デフォルトの名無しさん
07/06/05 22:30:19
簡略化したら治っちゃたりするんだなーこれが

750:デフォルトの名無しさん
07/06/05 22:41:43
>>742
スクロールバーつければいいだけかも

751:デフォルトの名無しさん
07/06/05 23:04:20
>>749
簡略化してる途中に治りました。原因は、等幅フォントを使用してないことにありました。
3行目までの文字をカウントし、2行+1バイトを他のエディットコントロールに送っていたのですが、
時々2行しか送られない事があるせいで-1が返ってきてたようです。2行+5バイトくらいにしたら正常に動作しました。

>>750
インターフェイスの仕様上、スクロールバーはつけないようにしています。
そのせいでエラーの原因に気付きにくい状態が生まれてしまったのですが・・・。

752:749
07/06/05 23:11:45
>>751
だろw

753:デフォルトの名無しさん
07/06/05 23:14:18
>>751
バカスw

754:749
07/06/06 00:03:36
ま、早とちりは誰にでもある。
元気だせw

755:747
07/06/06 00:15:21
どうやらWM_CHARの時にいちいちSendMessageしなくても、
WM_CREATEの時に一回SendMessageするだけでいいみたいですね。
随分時間を取られてしまった・・・orz

756:デフォルトの名無しさん
07/06/06 05:37:31
IWebBrowser2::Navigate2で存在しないURLに移動しようとしたときに
'xxx'が見つかりません。パスまたはインターネット アドレスが正しいかどうかを確認してください。
というエラーのメッセージボックスが出ます。これを抑制する方法はないでしょうか。
このメッセージボックスはDWebBrowserEvents2::OnBeforeNavigate2が呼びだされる前に出て来ます。


757:デフォルトの名無しさん
07/06/06 05:59:31
なぜ存在しないURLに行きたいの

758:デフォルトの名無しさん
07/06/06 06:11:12
ウインドウズマシンって、
目覚まし時計みたいに、あらかじめ決められた時間に起動するように設定するとかってできるのですか?
それと、usbバスに今、抜き差しが行われたって情報を確認することってできるのでしょうか?
それは原理的に無理なのでしょうか?

759:デフォルトの名無しさん
07/06/06 06:28:49
URLリンク(detail.chiebukuro.yahoo.co.jp)
一つ目の質問は調べたら分かってのでいいです。
スンマソン。

760:デフォルトの名無しさん
07/06/06 06:39:49
>>757
移動できない時に代替処理をしたいのですが、
イベント通知や関数から戻るより先に強制的にメッセージボックスが出ているのが困るのです。


761:デフォルトの名無しさん
07/06/06 08:11:46
移動する前に存在するか調べればいい

762:デフォルトの名無しさん
07/06/06 08:25:41
>>756
IWebBrowser2::SilentにVARIANT_TRUEは?

763:デフォルトの名無しさん
07/06/06 09:42:44
>>758
RegisterDeviceNotification

764:デフォルトの名無しさん
07/06/06 09:44:27
>目覚まし時計みたいに、あらかじめ決められた時間に起動するように設定するとかってできるのですか?
コンパネ-タスク or at

765:デフォルトの名無しさん
07/06/06 10:45:08
>>763
>>764
ありがトン。

766:デフォルトの名無しさん
07/06/06 10:59:54
OSの起動じゃないのか

767:デフォルトの名無しさん
07/06/06 11:09:38
いや、そうなんですけど、
それは、基本的にできないとわかったので良いです。
とりあえず、情報を教えてくれたと言う気持ち自体に感謝しとるわけです。

768:デフォルトの名無しさん
07/06/06 11:24:07
BIOSが対応していれば出来るけど?

769:デフォルトの名無しさん
07/06/06 12:14:56
マジっすか?
バイオスにプログムから指示を出すんですか?

770:デフォルトの名無しさん
07/06/06 12:20:36
>>768をどう読めばそうなるんだよ

771:デフォルトの名無しさん
07/06/06 12:25:46
ああ、なるほど、意味分かったです。

そう言うマシンがあるってことですね。
確かに聞いたことはあります。

772:デフォルトの名無しさん
07/06/06 12:33:52
APIでアクティブタイマを設定するだけ。
あとはBIOSが対応していれば指定した時間に起動する。

773:デフォルトの名無しさん
07/06/06 12:55:53
BIOS側でしか起動時間を変更出来ないハードウェアのために
スケジュールを変更するGUIを作りたいのですが
WindowsOS上のプログラムからBIOSの設定変更は可能ですか?



774:デフォルトの名無しさん
07/06/06 13:06:07
可能ですがやり方や設定位置はマザーボードによって異なります。
詳細は各メーカに問い合わせてください。

775:デフォルトの名無しさん
07/06/06 13:27:14
メーカーによってAPIが異なることはありますか?

776:デフォルトの名無しさん
07/06/06 13:33:47
詳細は各メーカに問い合わせてください。

777:デフォルトの名無しさん
07/06/06 13:33:55
>>775
APIはウインドウズなんだから、
ウインドウズosであれば変わらないと考えても良いんじゃないですか?

なるほど。
基本的にはバイオスがアクティブタイマーを監視するようであれば、
プログラムからタイマーを設定すればよくて、
そうでない、場合は各種のバイオス次第と言うわけなんですね。


778:デフォルトの名無しさん
07/06/06 13:38:38
APIはウィンドウズなんでしたか・・・
本当にありがとうございました

779:デフォルトの名無しさん
07/06/06 15:29:05
>>778
winのバージョンで使えなかったり動作が違う事はあるけどなー


780:デフォルトの名無しさん
07/06/06 15:56:46
スルーしろよ

781:691
07/06/06 17:03:25
>>692
ないですか・・・
>>693
情報ありがとうございます。

(1)はWindowsAPIではどうも難しそうですね。(2)はCryptoAPIでできるかもしれませんが。
(1)はOpenSSLでなんとかならないか調査してみます。

782:デフォルトの名無しさん
07/06/06 20:22:51
editcontrolにautocompleteを付けたんですが
そのsuggestのドロップダウンが出たタイミングはどうやったら知ることができますか?
WM_NOTIFYとか親に来るのかと思ったけどどうも来ないみたいです

783:デフォルトの名無しさん
07/06/06 20:46:18
>>745
昔、PerlでCGIを書いたときは、ファイルのリネームで排他処理ができたから、
windowsでも、同じようにできるかなって思ったんだけど、Linuxなんかとは、動作が違うってことなんかなぁ。

VBからAPIを読んでるから、もしかしたらそのせいかもしれないかなと思ったけど、検証がめんどうだから
MoveFileのあとに、ファイルをオープンして、成功したら、リネーム成功ってことにしました。

784:デフォルトの名無しさん
07/06/06 20:48:37
それってMoveFile()はアトミックじゃないってこと?
なんかそれすごく嫌だな

785:デフォルトの名無しさん
07/06/06 21:07:55
WIN32APIとは違うかもしれませんが質問させてください。
CAxWindowの作成時にパワーポイントのファイルを読み込ませ表示させているのですが、何度もCAxWindowを作成、削除を繰り返していると、削除時(DestroyWindow時)にパワーポイント側のエラー(マイクロソフトにエラーデータを送信してくださいウィンドウ)が発生します。
何かエラーになる原因、もしくは、エラーウィンドウを表示させない方法を教えていただけないでしょうか。
お願いします。

786:デフォルトの名無しさん
07/06/06 21:17:22
CAxWindow付随メンバの解放する順序なんじゃね?

787:785
07/06/06 21:41:01
申し訳ありません。
付随メンバの解放とはどうすればよいのでしょうか?

788:デフォルトの名無しさん
07/06/06 22:10:55
>>787
多分、ヒープやらなんやらの確保順と解放順がちぐはぐなんじゃね?
パワーポイント関連のオブジェクトの操作順をあらってみ?

789:デフォルトの名無しさん
07/06/06 22:16:51
PowerPoint関連オブジェクトのメソッド操作を部分的にコメント(#if 0〜#endif)してみて、
エラーがでるか調べてみたら?

790:785
07/06/06 22:54:14
レスありがとうございます。

再現しやすいように、CAxWindowの増加、処理の簡略化を
行いました。
(CAxWindowが一つですと、作成→削除を10時間近く繰り返さないと発生しないので)
処理の流れとしては、

CAxWindowを9個ほどCreateし、表示。
      ↓
3秒間CAxWindowの親ウィンドウにPeekMessageを繰り返す。
(CAxWindowを表示させる為だけであり、
 プログラムで明示的にメッセージは投げていないです。)
      ↓
CAxWindowをすべてDestroyWindowする。

以上の流れをループで10分〜30分繰り返すと発生します。
そして、CAxWindowに対して行う処理ですが、
CreateとShowWindowとDestroyWindow以外の処理はさせていないです。
パワーポイント関連のオブジェクトはCAxWindowだけです。
IWebBrowser2も取得しておりませんし。

また、HTMLファイルを読み込ませた場合は、エラーメッセージは表示されないんですよね。
ほんとお手上げです・・・。

791:デフォルトの名無しさん
07/06/07 00:11:10
SBS_SIZEBOXとかSBS_SIZEGRIPとかって何なんですか!
ググっても日本語の解説が無くて

792:デフォルトの名無しさん
07/06/07 00:15:31
ウソ付くな。

793:デフォルトの名無しさん
07/06/07 00:18:30
思いっきりみつかるけどな

794:デフォルトの名無しさん
07/06/07 00:36:13
いや詳しい解説が無くて
どこ行っても「サイズボックスを指定する」だの「縁のあるサイズボックス」だの
その「サイズボックス」って何なの!って

795:デフォルトの名無しさん
07/06/07 00:44:10
>>794
URLリンク(www.google.co.jp)

796:デフォルトの名無しさん
07/06/07 00:45:38
「サイズボックスとは」でググレ

797:デフォルトの名無しさん
07/06/07 00:49:31
もちろんググりましたが
「ウィンドウのサイズボックス」ではなく「スクロールバーのサイズボックス」についての解説が見たいのです!

798:デフォルトの名無しさん
07/06/07 01:05:18
実際「スクロールバーのサイズボックスだ」としか答えようがないんだが・・。
SBS_SIZEBOX指定でスクロールバー作ってみ。

799:デフォルトの名無しさん
07/06/07 01:09:17
>>798
わかりました。一応作っては見ました。が、使い方が今一わかりません
というか解説(又は画像)が無いことをちょっと不思議に思ってます
これ使われてるソフトもあまり見かけないかなー、と

800:デフォルトの名無しさん
07/06/07 01:12:53
URLリンク(msdn2.microsoft.com)
この辺に書いてなきゃ諦めな

801:デフォルトの名無しさん
07/06/07 01:20:56
そこは一番最初に見ました
が、だめ!
解説ページは諦めます

802:デフォルトの名無しさん
07/06/07 01:24:58
へ〜。こんなの初めて知った。
スクロールバーというより「サイズボックスコントロール」っていうひとつの独立したコントロールみたいな感じだな。

803:デフォルトの名無しさん
07/06/07 06:38:05
何が知りたいのかさっぱりわからん
自分の思い通りの解説が無かったら自分で書け

804:デフォルトの名無しさん
07/06/07 07:21:27
自分の読解力の無さを人の文章力のせいにするな

805:デフォルトの名無しさん
07/06/07 08:37:15
季節の変わり目だからな。最近、香ばしいのが多くて困る。

806:デフォルトの名無しさん
07/06/07 08:56:16
お前モナー

807:デフォルトの名無しさん
07/06/07 09:22:40
僕バッカー!

808:691
07/06/07 14:40:34
HttpOpenRequest()のフラグをいろいろ変えて試してみましたが、
InternetOpen()にINTERNET_FLAG_ASYNCを付けると、
HttpSendRequest()はfalseかつERROR_IO_PENDINGになってしまうようですね。

InternetOpen()にINTERNET_FLAG_ASYNCを付けなかった場合、
HttpSendRequest()がfalseになりERROR_INTERNET_INVALID_CAを無事取得できました。

非同期にてERROR_INTERNET_INVALID_CAを取得できる方法はないでしょうか?
試行錯誤してみましたがまったく手段が見当たりません。
アドバイスお願い致しますm(_ _)m

809:デフォルトの名無しさん
07/06/07 14:45:51
非同期でERROR_IO_PENDINGは正常なんだけど

810:デフォルトの名無しさん
07/06/07 14:56:43
InternetDestroy()ってなんか恐ろしくて使ったこと無いんですけど、
使って大丈夫ですかね?

811:デフォルトの名無しさん
07/06/07 15:10:37
>>808
InternetStatusCallbackの値みてる?

URLリンク(msdn2.microsoft.com)

812:691
07/06/07 16:45:23
>>811
レスありがとうございます。
正にこれでした!
コールバックの第四パラメータlpvStatusからERROR_INTERNET_INVALID_CAを取得できました。

本当にありがとうございましたm(_ _)m

813:デフォルトの名無しさん
07/06/07 18:32:03
ウインドウを常に手前に表示するには
SetWindowPosでHWND_TOPMOSTをあたえればできますが
そのウインドウがHWND_TOPMOSTなのかを取得するにはどうすればいいのでしょうか?

814:デフォルトの名無しさん
07/06/07 18:35:14
GetWindowLong

815:813
07/06/08 00:05:48
どなたか分かる方はいませんでしょうか?

816:デフォルトの名無しさん
07/06/08 00:10:33
>>815

>>814

817:デフォルトの名無しさん
07/06/08 00:12:27
>>815
馬鹿じゃねぇの
分からない方が珍しい

818:デフォルトの名無しさん
07/06/08 00:12:42
>>815
間違ってたらゴメン

拡張ウィンドウスタイル(GWL_EXSTYLE)を取得して、
WS_EX_TOPMOSTを含んでるか調べるんじゃないかな?

819:813
07/06/08 00:19:25
難しすぎて分かりません

820:デフォルトの名無しさん
07/06/08 00:22:33
LONG exStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
if ((exStyle & WS_EX_TOPMOST) != 0)
{
//TOPMOST
}

821:デフォルトの名無しさん
07/06/08 00:30:40
WS_EX_TOPMOSTフラグではなく、お触り禁止フラグが立ちました


822:デフォルトの名無しさん
07/06/08 01:00:24
>813
TOP MOSTの指定をしたのが知りたいのか?
今、ウィンドウがTOP MOSTで画面に表示されているのが知りたいのか?

後者なら、FindWindowして Z-Orderを確認するしか手がないよ。


823:813
07/06/08 02:53:05
自己解決しました^^

824:デフォルトの名無しさん
07/06/08 02:55:49
時間掛かり過ぎ(禿藁)

825:デフォルトの名無しさん
07/06/08 08:13:39
どうみても他己解決

826:デフォルトの名無しさん
07/06/08 08:15:12
たこちゅうちゅ

827:デフォルトの名無しさん
07/06/08 08:25:13
>>823
恩知らずとはお前のことだ。

828:デフォルトの名無しさん
07/06/08 08:35:34
現在VC6.0でsubst相当のことをやろうとしているのですがDefineDosDeviceを
使えばできそうだというとこまではわかったのですがドライブの解除時に
そのドライブを使用していたら(エクスプローラで開いている等)
エラーメッセージを出すということをしたいのですが
探し方が悪いのかよい方法が見つかりません。

申し訳ありませんがどなたか教えていただけないでしょうか?お願いします。


829:デフォルトの名無しさん
07/06/08 09:02:36
>>828
もちつけ
要約すると、メッセージが出したいのか?

830:828
07/06/08 09:07:00
>>829
そうです。
DefineDosDeviceで割り当てたドライブを使用していたら
メッセージを出したいです。

831:デフォルトの名無しさん
07/06/08 09:19:28
必要に応じてSetErrorMode関数
<TODO>
GetLastError関数でエラーNo
FormatMessage関数でエラーNoから日本語(地域言語)

<TODO>の箇所にDefineDosDevice関数とか、使用ユーザーほにゃほにゃ

832:828
07/06/08 09:35:23
831>>
DefineDosDeviceはドライブを使用していてもエラーなしでドライブを解除してしまうみたい
なのでGetLastError関数でのやり方がわかりません。
あとSetErrorMode関数も調べてみたのですがいまいち使い方がわかりません。

どうやったらいいか詳しく教えてください。
お願いします。

833:ららら
07/06/08 09:40:31
COM インターフェイスのメソッドって、何で const メソッドがないのら?

834:デフォルトの名無しさん
07/06/08 09:45:37
const の判断はコンパイラの仕事だから

835:ららら
07/06/08 09:58:04
どういうことなのら?

836:デフォルトの名無しさん
07/06/08 10:01:55
あほすぎなのらw

837:デフォルトの名無しさん
07/06/08 10:05:49
>>833
COM は C でも使えないといけないから。

838:ららら
07/06/08 10:07:33
> COM は C でも使えないといけないから
たとえば、
interface ISome {
 STDMETHOD_(size_t, GetSize)(void) PURE;
};
なら、Cでは
size_t ISome_GetSize(const ISome* some);
と書けるだろ?

839:ららら
07/06/08 10:08:55
× STDMETHOD_(size_t, GetSize)(void) PURE;
○ STDMETHOD_(size_t, GetSize)(void) const PURE;

840:デフォルトの名無しさん
07/06/08 12:01:28
>>832
もうひとつの命題は
「そのドライブが、現在使用中かどうか判断」でおk?

841:デフォルトの名無しさん
07/06/08 12:21:30
>>828
質問の仕方が悪いよ。

あなたが知りたいのは、
メッセージの出し方ではなく、
DefineDosDeviceした後に、当該のドライブが使用中だったのか否か判別する方法
もしくは、
DefineDosDeviceする前に、当該のドライブが使用中なのか否か判別する方法
なんでしょ?

ならば、そう書いたほうがいい。

>>829が言いたいのは、そういうことなんだと思うよ。


842:828
07/06/08 13:15:24
質問の仕方が悪く申し訳ありません。
>>840さん、>>841さんの言うとおり知りたいのは
>DefineDosDeviceする前に、当該のドライブが使用中なのか否か判別する方法
です。

書き込み自体不慣れなもので迷惑をかけているとは思いますが
ご教授よろしくお願いします。

843:828
07/06/08 13:27:20
知りたいことがまだわかりにくい気がするので
もう一度書かせてもらいます。

知りたいことは
DefineDosDeviceを用いて割り当てたドライブを
再びDefineDosDeviceを用いて解除する時に、
当該のドライブが使用中なのか否か判別する方法
です。

よろしくお願いします。


844:デフォルトの名無しさん
07/06/08 14:21:27
>>838
C++ だと

STDMETHOD_(size_t, GetSize)(void) PURE;
STDMETHOD_(size_t, GetSize)(void) const PURE;

の2つを宣言できるけど、
C だとオーバーロードがないからこういう事ができない。

というあたりを意識してるんじゃないかな、と思ってるんだけど、
まあ、正直なところこれが理由かどうかは分からん。

845:デフォルトの名無しさん
07/06/08 14:30:34
VBにconstなメソッドの概念がないからだと思う
まあCOMにconstがないからVBにconstなメソッドを入れなかったという順なのかもしれないけど

846:デフォルトの名無しさん
07/06/08 14:31:58
まぁ、COM に限らず、C++ の virtual 関数は const にすべきではないように思う。
メンバ関数が const かどうかは実装に依存して決定されるべきことだが、
virtual メンバ関数がどのような実装になるかは派生クラスに依存するわけだから、
virtual メンバ関数の宣言時には const かどうかを決定できないことになる。
したがって、const メンバ関数と virtual メンバ関数は共存できないように思う。

847:デフォルトの名無しさん
07/06/08 14:32:17
っつかCOM自体はOS・言語と独立。

848:デフォルトの名無しさん
07/06/08 14:36:15
メンバ関数がconstにすべきかどうかは機能仕様によるだろ

実装に依存するならmutableの存在意義がない

849:デフォルトの名無しさん
07/06/08 14:37:03
>>843
DeviceIoControlあたりなんかなー

誰か、ドライブ系のコントロールコマンドしりませんか?

850:デフォルトの名無しさん
07/06/08 14:42:43
>>848
mutable は本来使ってはいけないもの。存在しないほうがいい。friend と同じく。

851:ららら
07/06/08 14:47:20
あのー、もう1つ質問なのら。
CComPtr を使うとインターフェイスの解放し忘れがない
というのは本当なのか? なのら。

たとえば、
ISome* GetSome(void);
という関数があって、これを CComPtr で受け取ろうとする場合、
CComPtr<ISome> spSome = GetSome(); や
CComPtr<ISome> spSome( GetSome() );
とすると、オブジェクトは解放されなくなるらろ?

でもこういうコードは自然に書いてしまいそうだから、コワイのらー。

GetSome 関数からも CComPtr を返せって?
でもライブラリとして与えられている関数だから、
自分ではどうにもならないのらー。

852:デフォルトの名無しさん
07/06/08 14:48:48
まず日本語勉強してこい

853:デフォルトの名無しさん
07/06/08 14:50:58
まことちゃん?

854:デフォルトの名無しさん
07/06/08 14:58:30
静岡の東部人じゃないのか
>>851 そうら?

855:デフォルトの名無しさん
07/06/08 15:00:32
山梨出身の友達もそんなしゃべり方するな。

856:デフォルトの名無しさん
07/06/08 15:05:27
山梨でも、あんなしゃべり方しねーよw
853の言う通り、まことちゃんだろ。

しかし、まことちゃんを知っている奴は、確実にオッサン

857:デフォルトの名無しさん
07/06/08 15:24:31
>>838
ISomeを使う側なら、constがあってもなくても同じじゃん。

858:デフォルトの名無しさん
07/06/08 15:33:06
>>843
安全確実な方法はないと思う。

DefineDosDeviceのフラグに、
使用中ならばREMOVEしない
というのがないということは、
OS自体が実現方法を持っていないのだと思う。

副作用や誤判定が生じても構わないなら、
substしたディレクトリ以下にある、すべてのファイルとディレクトリに対して、
共有しないモードでCreateFileを試みて、失敗すれば誰かが使っている、と。

副作用は、CreateFileを試みて成功してしまった場合、
すぐにCloseHandleしなければならないが、その瞬間を狙って、
他のプロセスがCreateFileすると失敗してしまうこと。

誤判定は、仮想ドライブだけでなく、元のパスを使っていても、
引っかかってしまうこと。



859:ららら
07/06/08 15:33:08
>>857
何ゆーとんのら。使う側が C++ なら const であるかどうかは重要ら。
たとえば、ISome を包含するクラス CHoge を実装する場合、
ISome が const 型システムをもたないが故に、
CHoge も const 型システムを無視しなければならず、
この破壊の連鎖はどこまでも続いて行くらー。

860:デフォルトの名無しさん
07/06/08 15:33:48
>>850
本来使ってはいけないものだが、
使わざるを得ない場合ってのもあるんだぜ?

861:デフォルトの名無しさん
07/06/08 15:36:24
>>851
そういうコードを自然に書くくせを直すべき。Attach もあるし。

ISome* tmp = GetSome();
CComPtr<ISome> spSome = tmp;
// 以降でも tmp->Release() はしない

これでリークしないと思える筈がないわけで、1行に書いても同じこと。
でもまぁ MFC みたいに ctor で AddRef しないオプションも、あれば便利だったかもね。

862:デフォルトの名無しさん
07/06/08 15:36:25
>>846
おいおい。本気で言ってるのか?

863:デフォルトの名無しさん
07/06/08 15:36:42
>>860
それは分かるが、const_cast で代用できる。

864:846
07/06/08 15:38:15
>>862
本気だが?


865:デフォルトの名無しさん
07/06/08 15:39:56
「本気」と書いて「マジ」と読む

866:デフォルトの名無しさん
07/06/08 15:41:02
>>859
単にCOMのシンタックス上非 const になってるだけで
セマンティックス的には const な動作ならば、
適宜 const_cast 使えばいいと思うけど。
そのための const_cast でそ。

盲目的に「変更するから非 const」とか考えてると、
AddRef ひとつ呼べやしない。

867:デフォルトの名無しさん
07/06/08 15:42:16
>>863
mutable だと宣言する事と、
const_cast を使う事は、
表している意味合いとか読みやすさとかが変わってくるな。

どちらにしろ、使わざるを得ない状況自体が稀だが・・・。

868:ららら
07/06/08 15:47:11
>>866
結論!
COM は C++ と相性が悪い!
のらー。

>> 845
> VBにconstなメソッドの概念がないからだと思う
COM と IDispatch を混同してはいかんのらー。
COM は VB のためのものではないのらー。

869:828
07/06/08 16:13:14
>>849,>>858
ありがとうございました。
実現が難しそうだということがわかりましたので
もう少し自分で考えた後、突破口が見つからなければあきらめたいと思います。



870:デフォルトの名無しさん
07/06/08 16:38:43
>>869
Windowsって、ファイルを開いたときに渡したパスを、覚えてないんだよね。

部屋の中に人がいるかどうかしか管理してなくて、
どの入り口から入ってきたのかは、ノーケアなんだ。

ファイルのハンドルから、ファイル名を知りたくて色々調べたけど、解決方法はなかった。
裏APIを使えば、オブジェクトの名前はわかるようなんだけど、ファイル名とは違うんだよね。

いっそのこと全プロセスに対してCreateProcessをフックしてしまい、
ハンドルに対するCreateFile時のファイル名を管理してしまおうかとも思ったけど、
そんな行儀の悪いことをするのはダメだよねぇ、ってことで諦めた。

871:デフォルトの名無しさん
07/06/08 16:56:05
870のいう通りなら、
当該のドライブが使用中に、その解除作業やっても問題ないんじゃないか?
だから「ドライブを使用していてもエラーなしでドライブを解除してしまう」のでは?

これは想像だけど、ファイルを開くときにSubstされたドライブの場合、
正しいディスクのパスに変換してからファイルを開く、ぐらいの処理やっててもおかしくないと思うんだがな。

872:デフォルトの名無しさん
07/06/08 17:21:17
>>871
たぶんフィルタドライバを使って実現されていると思われ。



873:869
07/06/08 18:32:09
>>870
>>871
>>872
ありがとうございます。参考になりました

874:デフォルトの名無しさん
07/06/08 23:39:23
すいません、質問です。

WinXPにてsend,recvを使ってバイナリデータを送受信したいのですが、
バッファの大きさの上限(要するに、一回のsendや一回のrecvで送受信できるデータ量の上限)って、
何バイトでしょうか??


また、もし上限が無いのでしたら、
例えば1GByte程のデータを送受信する場合、
バッファサイズはどのぐらいが効率的なのでしょうか??

ご教授御願いいたしますm(。−_−。)m

875:デフォルトの名無しさん
07/06/08 23:47:22
>>874
WinScokのヘルプにバッファの設定について書いてあるんだから、
最低限確認してからにしろよ。

876:デフォルトの名無しさん
07/06/09 00:38:16
>>874
なんつーか、そもそもTCP/IPはバッファを大きくしてもそれだけの大きさをそのまま扱えるわけじゃないことも
ご存知ないような。入門サイトでじっくりお勉強することをお勧めするですよ。

877:デフォルトの名無しさん
07/06/09 01:04:06
>>874
マジレスしたらここに聞きにくる以前の問題すぎて笑った

878:デフォルトの名無しさん
07/06/09 01:55:50
質問です。
CreateCaretでシステムキャレット(長方形型)を使わせていただいていますが
ウィンドウのステータスバーの上に被さって表示されてしまいます。
また、DrawEdgeで描いたウィンドウ内枠も上書きしてしまいます。
システムにお借りしたキャレットは描画のクリッピングなどはできないのでしょうか
お聞かせください。

879:878
07/06/09 01:58:46
要するにエディタ等のウィンドウをスクロールした際の
キャレットが隠れるように見える挙動を実現したいのです。

880:デフォルトの名無しさん
07/06/09 11:19:01
ウィンドウをスクロールして、
キャレットが隠れなければならないタイミングで、
HideCaret を呼べばいいのでは。

881:デフォルトの名無しさん
07/06/09 12:17:40
【政治】民主党、無年金障害者問題で法案提出 在日外国人らも救済

民主党は9日、国民年金の対象外か、任意加入の時期に未加入だったため、
障害基礎年金をもらえない無年金障害者すべてに
「障害福祉年金」を支給する法案を衆院に提出した。
今国会に与党が提出を予定している案では、
救済対象を元学生と専業主婦に限っているが、
民主党案は在日外国人や在外邦人も救済する手厚い内容だ。

給付額は、与党案では障害基礎年金の約6割にあたる月4万〜5万円だが、
民主党案は障害基礎年金と同額としている。

(06/09)朝日新聞
URLリンク(www.asahi.com)

882:878
07/06/09 16:11:21
>>880
手持ちの例で言えば↓このバイナリエディタStirlingのように
URLリンク(www.vector.co.jp)
ウィンドウサイズを変更してキャレット上をステータスバーが覆うと
欠けたキャレットが点滅し続ける、このような挙動はどのように実現されているのか?ということです。

883:デフォルトの名無しさん
07/06/09 16:16:37
テキストエディタ(バイナリもそうだけど)系の奴って、
キャレットは自前描画するもんなんじゃなかったっけ?
WM_TIMERつかまえて点滅、とか

884:デフォルトの名無しさん
07/06/09 16:20:01
君のハートを捕まえて

885:878
07/06/09 16:27:03
>>883
そうなんですか。
同じくバイナリエディタの例で申し訳ないのですが↓のBZなんかは
URLリンク(www.vector.co.jp)
>>882のようなステータスバーがキャレット上を覆う時は
シンプルにも完全にキャレットを非表示にする隠す挙動になっています。

886:デフォルトの名無しさん
07/06/09 16:41:26
?どっちも同じじゃない?

887:デフォルトの名無しさん
07/06/09 16:43:33
>>885
ああごめんごめん、全部がそうってわけじゃないよ

でも、あれ。俺はスターリンもBZも持ってんだけど、
試してみたらどっちも、キャレット一部が隠れてもちゃんと残りの一部が点滅してるな・・
バージョンが違うのかな?

888:デフォルトの名無しさん
07/06/09 16:46:58
バージョンが違いますね

889:デフォルトの名無しさん
07/06/09 16:50:51
そうですか、すんませんです

890:デフォルトの名無しさん
07/06/09 18:57:44
>>878
キャレットを所持するウィンドウとステータスバーの領域が重なってるんじゃないか?
StirlingとBZもCreateCaretを使っている

891:デフォルトの名無しさん
07/06/09 20:05:43
フォルダの上で中央クリックしたら
フォルダを新しいウインドウで開く
ってのをできるソフトないかな?

892:デフォルトの名無しさん
07/06/09 20:07:43
ソフトウェア板に行ってね

893:デフォルトの名無しさん
07/06/09 20:16:25
>>891
それぐらい自分で作れカス

894:デフォルトの名無しさん
07/06/09 20:48:42
実行ファイルのアイコンについてですが、WindowsXPのアイコンの表示方法には色々あると思います。
縮小版、並べて表示、一覧・・・
これらに対応して、違ったサイズのアイコンを表示したいのですが、どのようにすればいいのでしょうか?

895:デフォルトの名無しさん
07/06/09 20:52:26
アイコンは各種サイズを格納してる?

896:デフォルトの名無しさん
07/06/09 21:00:03
一応48*48と32*32のアイコンをリソースに取り込んでます。
一番数字が若いやつが実行ファイルのアイコンになるっぽいので、48*48が標準で表示されています。
まぁ、どういう表示にしても48*48が表示されるのですが、これをなんとか・・・

897:デフォルトの名無しさん
07/06/09 21:01:20
指定しろよ

898:デフォルトの名無しさん
07/06/09 21:03:52
>>896
その2つが別のアイコンとして扱われているのでは?
Windowsでは1つのアイコンファイルやリソースが複数の大きさ・色数のアイコンを保持できる

899:デフォルトの名無しさん
07/06/09 21:07:23
どうやって指定するのでしょうか・・・(汗
VS2005を使用しているのですが、リソースビューでは特にいじる場所も見当たらなさそうな・・・

900:デフォルトの名無しさん
07/06/09 21:09:38
>>898
そうなんですか。ということは、今は2つのicoファイルが独立したリソースになってるって事ですね。
ちょっと色々試してみます。

901:デフォルトの名無しさん
07/06/09 21:11:04
>>899
なんだ、VSかい。EEじゃないよね?
アイコンエディットしてるときに、いろいろメニューさがしてみそ

902:デフォルトの名無しさん
07/06/09 21:16:08
アイコンは、専用のソフトで一つの.icoにまとめてから、それを
リソースとしてそのまま取り込むのが楽。

アイコンをまとめるソフトはフリーのやつでもわんさかあるから適当に選んで使うがよろし
ちなみに俺は@iconってのを使ってる

903:デフォルトの名無しさん
07/06/09 21:17:14
@icon変換 とかで(ものはなんでもいいけど)ひとつのicoファイルが複数の
サイズの違う画像を持つようするといいんじゃないかな

904:デフォルトの名無しさん
07/06/09 21:19:13
>>901
Visual Studio 2005です。リソースの追加>インポートを2回繰り返して2つのicoファイルを読み込んだのですが、
それではいけないんですよね・・・。色々メニュー見てみたり、右クリックしてみたりしたのですが
いまいちどこでそういう変更が出来るのかまだわからないです・・・orz

905:デフォルトの名無しさん
07/06/09 21:19:56
>>902-903
ちょっと@iconを落としてきます!

906:デフォルトの名無しさん
07/06/09 21:25:27
@iconでマルチ画像保存したら出来ましたああああ;;
ありがとうございます!

というか、icoファイルって意外と高機能なんですね・・・
jpgとかgifの感覚で一つのファイルは一つの画像だと思ってました


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4982日前に更新/234 KB
担当:undef